feat: implement WebSocket server for real-time sensor data handling and add sensor status update routes

This commit is contained in:
Giuseppe Raffa
2026-04-14 19:05:37 +02:00
parent a34048ae6b
commit 137c6131c3
7 changed files with 382 additions and 13 deletions

View File

@@ -1,14 +1,59 @@
const router = require('express').Router();
const db = require('../store/db');
const { query } = require('../store/redis');
const { queryAll, query } = require('../store/redis');
router.get('/pendingtokens', (req, res) => {
router.get('/', async (req, res) => {
try {
const keys = await queryAll('sensors');
const sessions = {};
for (const key of keys) {
const name = key.replace('sensors:', '');
const info = await query(name, 'sensors');
sessions[name] = {
name,
connectedAt: info.timestamp || null,
session: info.session || null,
status: info.status || 'unknown',
};
}
res.json(sessions);
} catch (err) {
console.error('Error fetching sessions', err);
res.status(500).json({ error: 'internal server error' });
}
});
router.get('/pending', (req, res) => {
try {
const pendingTokens = queryAll('snsr_pending_token');
res.json(pendingTokens);
} catch (err) {
console.error('Error fetching pending tokens', err);
res.status(500).json({ error: 'internal server error' });
res.status(500).json({ error: `Error fetching pending tokens, ${err}` });
}
});
router.get('/connected', (req, res) => {
try {
const connectedSensors = queryAll('snsr_connected');
res.json(connectedSensors);
} catch (err) {
console.error('Error fetching connected sensors', err);
res.status(500).json({ error: `Error fetching connected sensors, ${err}` });
}
});
router.get('/connected/:id', async (req, res) => {
const { id } = req.params;
try {
const sensor = await query(`snsr_connected:${id}`);
if (!sensor) {
return res.status(404).json({ error: 'sensor not connected' });
}
res.json({ id, name: sensor });
} catch (err) {
console.error('Error fetching sensor connection status', err);
res.status(500).json({ error: `Error fetching sensor connection status, ${err}` });
}
});