Send the first SSE event immediately (0.2.22)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -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)
|
## 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.
|
- **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.
|
||||||
|
|||||||
@@ -442,6 +442,7 @@ def create_app(manager, development=False):
|
|||||||
'X-Accel-Buffering': 'no', 'X-Content-Type-Options': 'nosniff'})
|
'X-Accel-Buffering': 'no', 'X-Content-Type-Options': 'nosniff'})
|
||||||
await response.prepare(request)
|
await response.prepare(request)
|
||||||
wake, sent = asyncio.Event(), None
|
wake, sent = asyncio.Event(), None
|
||||||
|
wake.set() # first event goes out right away
|
||||||
manager.listeners.add(wake)
|
manager.listeners.add(wake)
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: ESP Screen Manager
|
name: ESP Screen Manager
|
||||||
version: "0.2.21"
|
version: "0.2.22"
|
||||||
slug: esp_screen_manager
|
slug: esp_screen_manager
|
||||||
description: Kies tegels voor je CYD en Guition touchscreen, zonder opnieuw flashen.
|
description: Kies tegels voor je CYD en Guition touchscreen, zonder opnieuw flashen.
|
||||||
url: https://github.com/MaxGramser/homeassistant_espscreen
|
url: https://github.com/MaxGramser/homeassistant_espscreen
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ class UpdaterTests(unittest.IsolatedAsyncioTestCase):
|
|||||||
light = await (await client.get('/api/inventory?light=1')).json()
|
light = await (await client.get('/api/inventory?light=1')).json()
|
||||||
async with client.get('/api/events') as stream:
|
async with client.get('/api/events') as stream:
|
||||||
self.assertEqual(stream.headers['Content-Type'], 'text/event-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: '))
|
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([x['id'] for x in pushed['screens']], [x['id'] for x in light['screens']])
|
||||||
self.assertEqual(len(m.listeners), 1)
|
self.assertEqual(len(m.listeners), 1)
|
||||||
|
|||||||
Reference in New Issue
Block a user