Home Assistant requests in a task, progress bar, Plex page, bitmap cache

- net/ha_api: the HTTP requests run in a FreeRTOS task on core 0; loop()
  only hands over copies through queues. The web UI's test button polls.
  No more 3-4 s loop() stalls once a minute; timeout raised to 5 s.
- Progress bar page element (page format 4, v3 pages are converted)
- Plex user setting (settings v6): {plex_user} in entity ids
- Plex page (examples): watchers, play/pause icon, title, progress
- Bitmaps cached in RAM: a LittleFS read took ~100 ms on every render
  and web preview; long JSON lists sent in 2 KB pieces
- Backup includes the refresh settings and the Plex user

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
mangavalkandClaude Opus 5.5 committed 2026-10-16 16:17:23 +02:00
1 parent 090c2bf8ae
commit 490cefc360
42 files changed
+1074 -175

No files matched your search

+22 -2
View File
@@ -294,11 +294,23 @@ bitmaps['bg nacht'] = night
bitmaps['bg kader'] = corners()
bitmaps['bg vol'] = [[1] * W for _ in range(H)]
# Plex: the chevron (a thick ">", tip on the middle row) and the Tautulli state icons
plex = blank()
for y in range(1, 18):
start = (8 - abs(y - 9)) // 2
for x in range(start, start + 5):
plex[y][x] = 1
bitmaps['plex logo'] = plex
bitmaps['plex playing'] = put(blank(), ["#..", "##.", "###", "##.", "#.."], 0, 0)
bitmaps['plex paused'] = put(blank(), ["##.##"] * 5, 0, 0)
bitmaps['plex buffering'] = put(blank(), [".....", ".....", ".....", ".....", "#.#.#"], 0, 0)
def el(type, x, y, font='Normal', **kw):
e = {'type': type, 'x': x, 'y': y, 'align': 'left', 'overlay': 'top', 'font': font, 'format': 0,
'language': 'nl', 'decimals': -1, 'text': '', 'suffix': '', 'entity': '', 'attribute': '',
'factor': 1, 'scroll_width': 0, 'scroll_speed': 8, 'target': '2000-01-01T00:00'}
'factor': 1, 'scroll_width': 0, 'scroll_speed': 8, 'target': '2000-01-01T00:00',
'bar_width': 40, 'bar_height': 3, 'bar_max': 100, 'bar_frame': True}
e.update(kw)
return e
@@ -364,10 +376,18 @@ pages = {
'Stopwatch': {'slots': [], 'elements': [
el('stopwatch', 42, 0, 'Full height', align='center'),
]},
# Plex: how many watch (Plex integration), and for the Plex user of the settings
# (Tautulli's sensors): play/pause icon, title (scrolls) and a progress bar
'Plex': {'slots': [{'start': '00:00', 'bitmap': 'plex logo'}], 'elements': [
el('ha', 13, 0, entity='sensor.mangavalkserver', suffix=' watching'),
el('image', 13, 9, text='plex ', entity='sensor.{plex_user}_state'),
el('ha', 19, 9, 'Small', entity='sensor.{plex_user}_full_title', scroll_width=65, scroll_speed=8),
el('bar', 13, 16, entity='sensor.{plex_user}_progress', bar_width=71, bar_height=3),
]},
}
backup = {
'format': 'flipdot-backup', 'version': 1, 'firmware': '2.5.0', 'exported': '2026-10-15T00:00:00Z',
'format': 'flipdot-backup', 'version': 1, 'firmware': '2.9.0', 'exported': '2026-10-16T00:00:00Z',
'bitmaps': [{'name': n, 'data': to_hex(b)} for n, b in bitmaps.items()],
'pages': [{'name': n, 'page': p} for n, p in pages.items()],
'fonts': [],