Add clock, forecast, graph, sun, timer and person cards with wide tiles

Any tile can now be double width: pack() in runtime_model.h places wide
tiles in the left column and the manager preview follows the same rules.
New cards: built-in clock (digital or analog, screen.clock), five-day
weather forecast on a wide weather card fed by weather.get_forecasts,
history sparkline for sensors, sunrise/sunset (sun.sun), live kitchen
timer (timer.*, tap starts or pauses) and presence (person.*). The
manager pre-computes time-zone and forecast extras in a new 'x' object
and refuses layouts with new domains until the screen runs 0.2.14.

The self-test follows the packing, checks custom card parts and wide
widths, and diagnostics/send_layout.py pushes a demo layout of every
card type for render checks without Home Assistant. App 0.2.12,
firmware 0.2.14.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Max Gramser
2026-09-13 02:09:50 +02:00
parent 53bf1bc228
commit 517b102786
21 changed files with 1185 additions and 146 deletions
+63
View File
@@ -0,0 +1,63 @@
# App 0.2.12 / firmware 0.2.14 — speciale kaarten en dubbelbrede tegels
## Wijzigingen
- **Dubbelbreed** (`options.size: wide`) voor elke tegel. `runtime_model.h`
bevat het pak-algoritme (`pack`): een dubbelbrede tegel begint links en telt
voor twee vakjes; een lege rechterplek ervoor blijft leeg. De app gebruikt
dezelfde regels voor het schermvoorbeeld en de paginagrenzen.
- **Klok** (`screen.clock`, ingebouwd, geen HA-entity): digitaal (grote tijd +
datum) of analoog (wijzerplaat met stippen, uur- en minuutwijzer; dubbelbreed
met de digitale tijd ernaast). Eigen cijferfont (60 px Guition, 28 px CYD).
- **Weersvoorspelling** (`display: forecast`, altijd dubbelbreed): actueel
icoon, temperatuur en omschrijving links; vijf dagen met dagnaam, icoon en
hoog/laag rechts. De manager haalt `weather.get_forecasts` (dagelijks) op en
cachet dat 30 minuten. De gewone weerkaart toont nu ook het conditie-icoon.
- **Grafiek** (`display: graph`, sensoren): sparkline van de bestaande
24-punts historie; enkelbreed in de sliderstrook, dubbelbreed rechts naast
de tekst.
- **Zon** (`sun.sun`): opkomst en ondergang in de HA-tijdzone; **kookwekker**
(`timer.*`): live aftellen op het scherm, tikken start/pauzeert, lang
indrukken opent een kaart met annuleren; **aanwezigheid** (`person.*`):
Thuis/Weg met groen accent.
- Statusberichten krijgen een optioneel object `x` met berekende waarden.
Protocol, opslagversie en preferences ongewijzigd; oudere firmware krijgt
indelingen met nieuwe domeinen pas na een update (`min_firmware`).
## Tests
- 55 Python-tests geslaagd (nieuw: opties/domeinen, `extras` met tijdzone,
voorspellingstrimmen, ingebouwde klokstatus, firmwareguard in de manager).
Alle negen C++-testprogramma's geslaagd; `test_runtime_model.cpp` test de
nieuwe domeinen en het pak-algoritme inclusief paginagrenzen.
- Beide Easy Setup-profielen compileren met ESPHome 2026.6.2 (CYD-flash 72,7 %).
Voor `lv_line` is een verborgen `line`-widget aan beide profielen toegevoegd,
omdat ESPHome LVGL-widgets alleen inschakelt die in de YAML voorkomen.
- USB-flash op beide vooraf geïdentificeerde borden; `device_info` meldt 0.2.14
met de verwachte compileertijden (Guition 02:00:44, CYD 02:01:01).
- Nieuw: `diagnostics/send_layout.py` zet een demo-indeling met alle kaarttypen
(analoge klok dubbelbreed, voorspelling, grafiek enkel- en dubbelbreed,
persoon, kookwekker, zon, grote waarde dubbelbreed, gewone weerkaart; drie
pagina's) rechtstreeks in de inbox. Daarna de renderdiagnose: op **beide**
apparaten tien paginacontroles en vijftig overlaycycli geslaagd met
`count=9`, inclusief de nieuwe controles op onderdelen binnen de kaart,
dubbele breedte en de grafiek naast/onder de tekst. Guition-heap ~6,46 MB;
CYD 43,8–53,9 kB vrij (klok- en voorspellingsonderdelen kosten RAM; de
gewone indeling houdt ~52 kB).
- Guition LVGL-snapshots (lokaal in `diagnostics/guition-0214-demo-p*.png`)
gecontroleerd: klok met wijzers, tijd en datum; vijf voorspellingskolommen
met iconen en hoog/laag; sparkline; timer die aftelt; zon; persoon.
- Daarna op beide apparaten de renderdiagnose op de echte indeling van de
eigenaar geslaagd (Guition `count=10`, CYD `count=6`).
- Gevonden en verholpen tijdens de proef: de datumregel onder het 60px-klokfont
viel buiten de kaart (nu 48/24 px met fallback zonder datum); het
sparkline-object begon op de kaartoorsprong (lijn staat nu op eigen positie);
de breedte-optie komt met het statusbericht na de indeling, dus de pagina's
worden opnieuw gepakt zodra `size` wijzigt; de zelftest in de YAML rekende
nog met zes tegels per pagina.
De productie-add-on op HA is de GitHub-versie; na de push verschijnt app
0.2.12 in de winkel. De demo-indeling wordt door de lopende manager binnen
~25 s weer vervangen door de echte indeling. Er is geen langdurige
stabiliteitsproef uitgevoerd; de fysieke bevestiging van de nieuwe kaarten in
de eigen HA-indeling volgt na de add-on-update.