feat(playlists): expose scene playlists as Home Assistant entities

One device per scene playlist (model "Scene Playlist"), each with:
- a switch (start/stop; the server cycles one playlist at a time, so starting one stops any other)
- a "Current Scene" sensor that resolves the active preset name from scene_presets while this playlist is cycling
- an "Items" diagnostic sensor (configured scene count; no state_class)

The coordinator reads scene_playlists plus the flat playlist_state from the /api/v1/snapshot payload and gains start_playlist()/stop_playlist(); __init__ registers and prunes per-playlist devices and reloads on playlist-id changes; the event listener also refreshes on the playlist_state_changed WS event. Shared device/lookup/running-state plumbing lives in a new LedGrabPlaylistEntity base (entity.py) used by both the switch and the sensors. Adds en/ru translation keys.

Note: this also lands the in-progress coordinator migration from the per-request fan-out to the single /api/v1/snapshot poll that was already present in the working tree.

Requires the led-grab server /api/v1/snapshot to emit scene_playlists + playlist_state (companion server change, tracked separately).
This commit is contained in:
2026-06-08 15:59:08 +03:00
parent a666d9eb9c
commit 705616f8b0
9 changed files with 404 additions and 289 deletions
+9
View File
@@ -45,6 +45,9 @@
},
"sync_clock_running": {
"name": "Active"
},
"playlist_active": {
"name": "Active"
}
},
"sensor": {
@@ -66,6 +69,12 @@
"sync_clock_elapsed": {
"name": "Elapsed Time"
},
"playlist_current_scene": {
"name": "Current Scene"
},
"playlist_items": {
"name": "Scenes"
},
"server_cpu_percent": {
"name": "CPU Usage"
},