From a2c2ef7ddd146f91c6f84e4b0cd3048b3c0a7a29 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Mon, 17 Nov 2025 21:54:40 +0100 Subject: [PATCH] new ui 7 --- apps/ui/templates/device.html | 3 -- apps/ui/templates/room.html | 53 +++++++++++------------------------ 2 files changed, 17 insertions(+), 39 deletions(-) diff --git a/apps/ui/templates/device.html b/apps/ui/templates/device.html index 0cc8180..8e1fceb 100644 --- a/apps/ui/templates/device.html +++ b/apps/ui/templates/device.html @@ -301,9 +301,6 @@ let deviceState = {}; let roomName = ''; - // SSE connection - let eventSource = null; - // Device type icons const deviceIcons = { 'light': '💡', diff --git a/apps/ui/templates/room.html b/apps/ui/templates/room.html index a656488..fdbf41a 100644 --- a/apps/ui/templates/room.html +++ b/apps/ui/templates/room.html @@ -227,9 +227,6 @@ // Device states const deviceStates = {}; - // SSE connection - let eventSource = null; - async function loadRoom() { const loading = document.getElementById('loading'); const grid = document.getElementById('devices-grid'); @@ -411,43 +408,27 @@ function connectRealtime() { try { - eventSource = new EventSource(window.apiClient.api('/realtime')); - - eventSource.onmessage = (event) => { - try { - const data = JSON.parse(event.data); + // Use API client's connectRealtime method + window.apiClient.connectRealtime((event) => { + // Update device state + if (event.device_id && event.state) { + deviceStates[event.device_id] = event.state; - // Update device state - if (data.device_id && data.payload) { - deviceStates[data.device_id] = data.payload; - - // Update card if visible - const card = document.querySelector(`[data-device-id="${data.device_id}"]`); - if (card) { - const stateDiv = card.querySelector('.device-state'); - window.apiClient.getDevices().then(devices => { - const device = window.apiClient.findDevice(devices, data.device_id); - if (device) { - updateDeviceCardState(stateDiv, device); - } - }); - } + // Update card if visible + const card = document.querySelector(`[data-device-id="${event.device_id}"]`); + if (card) { + const stateDiv = card.querySelector('.device-state'); + window.apiClient.getDevices().then(devices => { + const device = window.apiClient.findDevice(devices, event.device_id); + if (device) { + updateDeviceCardState(stateDiv, device); + } + }); } - } catch (e) { - console.warn('Failed to parse SSE event:', e); } - }; - - eventSource.onerror = (error) => { + }, (error) => { console.error('SSE connection error:', error); - // Auto-reconnect after 5 seconds - setTimeout(() => { - if (eventSource) { - eventSource.close(); - connectRealtime(); - } - }, 5000); - }; + }); } catch (error) { console.error('Failed to connect to realtime events:', error);