Skip to content

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).