From c8e1fb8f72f8e9a3bada9aea2c1743b856b965b6 Mon Sep 17 00:00:00 2001 From: Max Gramser Date: Sun, 13 Sep 2026 11:35:37 +0200 Subject: [PATCH] Send the first SSE event immediately (0.2.22) Co-Authored-By: Claude Fable 5.1 --- screen_manager/CHANGELOG.md | 4 ++++ screen_manager/app/server.py | 1 + screen_manager/config.yaml | 2 +- tests/test_updates.py | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/screen_manager/CHANGELOG.md b/screen_manager/CHANGELOG.md index fe0e245..c96695e 100644 --- a/screen_manager/CHANGELOG.md +++ b/screen_manager/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.22 (firmware 0.2.18 blijft actueel) + +- De eventstream stuurt het eerste event direct bij openen in plaats van na 3 s. Gemeten op een Home Assistant Yellow na 0.2.21: `/api/inventory` 50 ms (was 7,2 s), lichte poll 2,6 KB, CPU in rust 0,5% van één core (was 8,7%). Alleen de app verandert. + ## 0.2.21 (firmware 0.2.18 blijft actueel) - **Live updates zonder pollen**: de pagina luistert op `/api/events` (server-sent events). De add-on stuurt schermstatus en updatestatus zodra de synchronisatielus of een opslag iets verandert, en controleert elke 3 s op wijzigingen tijdens een firmware-update. Zolang de stream open is pollt de pagina niet meer; valt de stream weg, dan neemt de poll van 10 s het over. De volledige lijst met entiteiten, achtergronden en iconen wordt nog elke 5 minuten ververst. diff --git a/screen_manager/app/server.py b/screen_manager/app/server.py index 158722c..2406c65 100644 --- a/screen_manager/app/server.py +++ b/screen_manager/app/server.py @@ -442,6 +442,7 @@ def create_app(manager, development=False): 'X-Accel-Buffering': 'no', 'X-Content-Type-Options': 'nosniff'}) await response.prepare(request) wake, sent = asyncio.Event(), None + wake.set() # first event goes out right away manager.listeners.add(wake) try: while True: diff --git a/screen_manager/config.yaml b/screen_manager/config.yaml index c57b826..dbbc470 100644 --- a/screen_manager/config.yaml +++ b/screen_manager/config.yaml @@ -1,5 +1,5 @@ name: ESP Screen Manager -version: "0.2.21" +version: "0.2.22" slug: esp_screen_manager description: Kies tegels voor je CYD en Guition touchscreen, zonder opnieuw flashen. url: https://github.com/MaxGramser/homeassistant_espscreen diff --git a/tests/test_updates.py b/tests/test_updates.py index b994c58..eaf4491 100644 --- a/tests/test_updates.py +++ b/tests/test_updates.py @@ -233,7 +233,7 @@ class UpdaterTests(unittest.IsolatedAsyncioTestCase): light = await (await client.get('/api/inventory?light=1')).json() async with client.get('/api/events') as stream: self.assertEqual(stream.headers['Content-Type'], 'text/event-stream') - line = await asyncio.wait_for(stream.content.readline(), 5) + line = await asyncio.wait_for(stream.content.readline(), 1) # first event is immediate pushed = json.loads(line.decode().removeprefix('data: ')) self.assertEqual([x['id'] for x in pushed['screens']], [x['id'] for x in light['screens']]) self.assertEqual(len(m.listeners), 1)