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

+9 -1
View File
@@ -5,7 +5,7 @@
#include "logic/settings.h"
static const char *const TYPES[] = {"clock", "date", "ha", "text", "countdown", "stopwatch", "image"};
static const char *const TYPES[] = {"clock", "date", "ha", "text", "countdown", "stopwatch", "image", "bar"};
static const char *const ALIGNS[] = {"left", "center", "right"};
static const char *const OVERLAYS[] = {"top", "box", "invert"};
static const char *const LANGUAGES[] = {"nl", "en"};
@@ -69,6 +69,10 @@ void pageToJson(const DynamicPage &page, JsonObject out)
o["auto_unit"] = e.auto_unit;
o["absolute"] = e.absolute;
o["map"] = withDegrees(e.map);
o["bar_width"] = e.bar_width;
o["bar_height"] = e.bar_height;
o["bar_max"] = e.bar_max;
o["bar_frame"] = e.bar_frame;
}
}
@@ -128,6 +132,10 @@ const char *pageFromJson(JsonVariantConst in, DynamicPage &page)
e.input_unit = unit;
e.auto_unit = o["auto_unit"] | false;
e.absolute = o["absolute"] | false;
e.bar_width = constrain(o["bar_width"] | 40, 0, 255);
e.bar_height = constrain(o["bar_height"] | 3, 0, 255);
e.bar_max = o["bar_max"] | 100.0f;
e.bar_frame = o["bar_frame"] | true;
if (!copyText(o["map"], e.map, sizeof(e.map)))
return "The list of texts is too long (63 characters)";
const char *target = o["target"] | "";