WebSocket
Verbindung
import { io } from 'socket.io-client';
const socket = io('https://hub.finishing2026.sw2e-lab.de', {
path: '/api/v1/ws',
transports: ['polling']
});
Jedes Frontend öffnet eine Socket.IO-Verbindung. Geräte werden per UUID abonniert — der Server liefert dann Updates nur für die abonnierten Geräte.
Abonnieren / Abmelden
socket.emit('subscribe', uuid); // Raum betreten, sofort letzte Telemetrie empfangen
socket.emit('unsubscribe', uuid); // Raum verlassen
Empfangene Events
telemetry
Live-Sensordaten, ausgelöst durch MQTT-Nachricht vom ESP.
socket.on('telemetry', ({ uuid, data, timestamp }) => {
// data: { "temp": 22.5, "power": "ON", ... }
});
status
Gerät ist online oder offline gegangen.
socket.on('status', ({ uuid, status }) => {
// status: 'online' | 'offline'
});
invalidate
Thing Model hat sich geändert — Device-Details neu laden.
socket.on('invalidate', async ({ uuid }) => {
const res = await fetch(`/api/v1/devices/${uuid}`, { headers });
const device = await res.json();
});
Events-Übersicht
| Event | Richtung | Payload |
|---|---|---|
subscribe |
Client → Server | uuid: string |
unsubscribe |
Client → Server | uuid: string |
telemetry |
Server → Client | { uuid, data, timestamp } |
status |
Server → Client | { uuid, status } |
invalidate |
Server → Client | { uuid } |
Auth
Aktuell: alle Verbindungen werden akzeptiert (Stub in src/ws/auth.js). API-Key-Validierung kann dort nachgerüstet werden.
Heartbeat
Wird von Socket.IO automatisch gehandhabt (ping 25s, timeout 20s).