- Rules: "also over a page chosen by hand" (on by default); off, a rule
waits until the manual pick ends. Schedule store version 3, version 2
records are read with the option on.
- The Clock page is stored at boot from the built-in one and can be
edited; Reset (deleting it) brings back the original.
- Home Assistant attributes were never found: ArduinoJson 7.4 takes a
char array key as a literal of its full array length.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bitmaps that only pages use (backgrounds, images by state) are now icons:
own width and height, stored in /icons, not in the page lists or the Home
Assistant dropdowns. Page backgrounds and image elements use icons or
bitmaps; the renderer gets icons expanded at the top left, so pages look
the same. Web UI: Icons tab with an editor, Make icon / Make bitmap, Save
as icon on the Draw tab, icons in the backup.
A one-time migration in time-boxed steps moves the uploaded bitmaps that
only pages use, after the new firmware is marked good.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 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>
The Nano's periodic full redraw blocked for ~0.8 s. A frame that arrived
meanwhile overflowed its 64-byte serial buffer; lost bytes in a bitmap
shift the rest of the image (picture moved up), and diff frames never
repaired it.
- Nano: all drawing (frames, effects, the dot refresh) runs from update()
in ~1 ms slices; the refresh pauses while a frame is received or shown
- New commands: C (reply with the image checksum) and I (refresh minutes,
EEPROM)
- ESP32: NanoMonitor asks for the checksum after frames and sends the whole
image again on a mismatch, missing answer or Nano restart; counts ERR
replies. Periodic whole-image resync.
- Settings: "Dot refresh" and "Image resync" intervals (settings v5,
v4 records are migrated)
- System tab: loop timing, free memory, frame check counts
- test_driver: the real driver against a simulated panel
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Show as number (multiplier, decimals, auto unit W -> kW -> MW, without
minus sign), duration (seconds/minutes/hours as 2h 21m, 2:21:00, 2:21 or
smart), time (HA timestamps in local time, with weekday or date, or
relative: over 34 min / 12 min geleden) or own texts per state.
- Page format 3; version 2 pages are converted. Version 2.7.0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Schedule: daily blocks from a start time, each with up to 6 rotating pages
or bitmaps (own duration), switching with the effect or instantly. A manual
pick (Show tab, HA Mode) lasts until the next block; Back to schedule ends it.
- Rules: an HA state (=, is not, above, below) shows a page while true, adds it
to the rotation while true, or shows it for N seconds when it becomes true.
Each rule is polled at its own interval, with a 60 s back-off on errors.
- PageSelector (pure logic, tested) decides the shown page; schedule stored in
NVS; HA sensor Shown page and button Back to schedule.
- Web UI: Schedule and Stopwatch tabs, bitmaps used by pages or rules in their
own subsection, schedule in export/import. Version 2.6.0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Text elements can scroll in a window at a set speed; clock, countdown and
stopwatch can show seconds. Moving pages are sent as instant frames (new
Nano command D1) and paced by the estimated flip time.
- Countdown to a date and time (smart, days, days + time, with seconds),
stopwatch (web UI, HA switch and reset button), image element (fixed or
by Home Assistant state), multiplier for HA values, degree sign (char 127)
in all fonts and the font converter.
- Page format version 2; version 1 pages are converted.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The hardcoded clock is now the built-in dynamic page "Clock". A dynamic page
has a background bitmap per time of day and up to 8 elements (clock, date,
Home Assistant value, text), each with position, alignment, font and overlay.
Pages are drawn on the ESP32, also for the web previews.
- Pages tab in the web UI: page editor with drag and drop, font upload
(TTF/OTF converted in the browser to the FDF1 dot font format)
- Built-in fonts Small, Normal, Large and Full height (generated by
tools/make_builtin_fonts.py), built-in bitmaps Pikachu and Pikachu yawning
- Home Assistant values over the REST API (URL and token in the HA tab)
- Settings version 4: evening settings removed (now time slots of the Clock
page), old records are converted
- HA Mode dropdown lists the dynamic pages and bitmaps
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Home Assistant: remove the Clock switch (its entity is deleted on connect),
add an IP sensor and Mode / Off image dropdowns whose options follow the
saved bitmaps. Remove the built-in "Nintendo border" bitmap.
Off image: a bitmap (or blank) left on the dots when the display switches off.
Nano: pause after each flip pulse and repeat pulses for changed dots, both
stored in EEPROM (G/N commands). Refresh effects (E command): instant,
sparkle, wipe, rain, from the middle out, diagonal, spiral, flip all then
reveal, push and random, optionally only for small changes. Effects run in
steps from loop() so serial input keeps flowing.
Web UI: flip settings, refresh effect and test patterns under Settings; the
System tab shows why the ESP32 last restarted. Settings records from
versions 1 and 2 are migrated. Firmware 2.3.0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Web UI on port 80: live view of the display, choose the page (clock or
a bitmap), bitmaps (list, show, live, edit, delete), draw / image upload
with conversion in the browser, live mode, settings, Home Assistant
- Live view from a shadow buffer in the BROSE9323 driver (shownPixel)
- Settings in NVS with the original behaviour as defaults: schedule times,
quarter hours, yawning Pikachu, No WiFi screen, flip time, status LED,
Home Assistant broker (restart on change)
- Bitmaps on LittleFS; new 320 KB partition, ota slots now 1.31 MB
- DisplayController: pages, live mode, settings; app.cpp holds the objects
- README for the recovery app; docs for the web UI
- Tests: settings, time parsing, bitmap format and names, schedule with
settings, pages and live mode (95 total)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>