Add entity CRUD events over WebSocket with auto-refresh

Broadcast entity_changed and device_health_changed events via the event
bus so the frontend can auto-refresh cards without polling. Adds
exponential backoff on WS reconnect.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-10 11:09:09 +03:00
parent 1ce25caa35
commit 73562cd525
18 changed files with 169 additions and 10 deletions

View File

@@ -8,6 +8,7 @@ from fastapi import APIRouter, Depends, HTTPException, Query, WebSocket, WebSock
from wled_controller.api.auth import AuthRequired
from wled_controller.api.dependencies import (
fire_entity_event,
get_output_target_store,
get_processor_manager,
get_value_source_store,
@@ -100,6 +101,7 @@ async def create_value_source(
auto_gain=data.auto_gain,
tags=data.tags,
)
fire_entity_event("value_source", "created", source.id)
return _to_response(source)
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
@@ -150,6 +152,7 @@ async def update_value_source(
)
# Hot-reload running value streams
pm.update_value_source(source_id)
fire_entity_event("value_source", "updated", source_id)
return _to_response(source)
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
@@ -174,6 +177,7 @@ async def delete_value_source(
)
store.delete_source(source_id)
fire_entity_event("value_source", "deleted", source_id)
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))