79 lines
2.2 KiB
JavaScript
79 lines
2.2 KiB
JavaScript
const WebSocket = require('ws');
|
|
const { encode } = require('@msgpack/msgpack');
|
|
|
|
const SERVER_URL = process.env.SERVER_URL || 'http://localhost:3000';
|
|
const WS_URL = process.env.WS_URL || 'ws://localhost:3000';
|
|
const SENSOR_NAME = process.env.SENSOR_NAME || 'sensor-01';
|
|
const SENSOR_CODE = process.env.SENSOR_CODE || 'password123';
|
|
|
|
async function authenticate() {
|
|
const res = await fetch(`${SERVER_URL}/connect/`, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ name: SENSOR_NAME, code: SENSOR_CODE }),
|
|
});
|
|
|
|
if (!res.ok) {
|
|
const err = await res.json();
|
|
throw new Error(`Auth failed: ${err.error}`);
|
|
}
|
|
|
|
const data = await res.json();
|
|
console.log('Authenticated, token received');
|
|
return data.t;
|
|
}
|
|
|
|
function connectWebSocket(token) {
|
|
const ws = new WebSocket(`${WS_URL}?token=${token}`);
|
|
|
|
ws.on('open', () => {
|
|
console.log('WebSocket connected');
|
|
startSendingData(ws);
|
|
});
|
|
|
|
ws.on('pong', () => {
|
|
// Keepalive pong received
|
|
});
|
|
|
|
ws.on('close', (code, reason) => {
|
|
console.log(`WebSocket closed: ${code} ${reason}`);
|
|
process.exit(1);
|
|
});
|
|
|
|
ws.on('error', (err) => {
|
|
console.error('WebSocket error:', err.message);
|
|
});
|
|
}
|
|
|
|
function startSendingData(ws) {
|
|
setInterval(() => {
|
|
if (ws.readyState !== WebSocket.OPEN) return;
|
|
|
|
const packet = {
|
|
ts: Date.now(),
|
|
t: 20 + Math.random() * 10, // temperature °C
|
|
h: 50 + Math.random() * 30, // humidity %
|
|
spd: Math.random() * 30, // speed
|
|
cog: Math.random() * 360, // course over ground
|
|
sog: 5 + Math.random() * 10, // speed over ground kn
|
|
hdg: Math.random() * 360, // heading true
|
|
lat: 43.7230 + Math.random() * 0.01, // latitude
|
|
lon: 10.3966 + Math.random() * 0.01, // longitude
|
|
};
|
|
|
|
ws.send(Buffer.from(encode(packet)));
|
|
}, 1000);
|
|
}
|
|
|
|
async function main() {
|
|
try {
|
|
const token = await authenticate();
|
|
connectWebSocket(token);
|
|
} catch (err) {
|
|
console.error(err.message);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
main();
|