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
+3 -1
View File
@@ -99,7 +99,9 @@ domeinfilters met gekleurde iconen. Je kunt maximaal twintig tegels toevoegen.
Het schermvoorbeeld toont hun plaats: twee kolommen, zes tegels per pagina.
Sleep een tegel naar een andere tegel om te ordenen. Klik op een tegel voor
een eigen naam, de pijltjes voor volgorde en **Bediening & weergave instellen**:
klikgedrag, een mini-slider of een grote waarde waar ondersteund. Kies bij
klikgedrag, een mini-slider, een grote waarde, een grafiek (sensoren), een
weersvoorspelling (weer) of de breedte **Dubbelbreed**. De ingebouwde **Klok**
staat bovenaan de kiezer; zon, kookwekkers en personen vind je via de filters. Kies bij
**Pastel achtergrond** een eigen kleur met donkere tekst; **Standaard** herstelt
de normale weergave. Hiervoor is firmware 0.2.10+ nodig. Een lege
tegel brengt je naar de zoekbalk; toevoegen vult de eerstvolgende vrije positie.
+14
View File
@@ -127,3 +127,17 @@ sleutels, geen nieuwe firmwareflash nodig voor latere kleurkeuzes.
Een oude apprelease van vóór 0.2.10 kent dit optieveld niet. Bij terugrollen van
de app herstel je daarom de bijbehorende gegevensback-up; wis of negeer geen
onbekende opties om een oud opslagbestand toch te openen.
### Compatibiliteit 0.2.12 / firmware 0.2.14
Opslagversie en tegelprotocol blijven 1. Additief: `tiles[].options.size`
(`single`/`wide`), nieuwe `display`-waarden (`forecast` voor weer, `graph` voor
sensoren, `digital`/`analog` voor `screen.clock`), de ingebouwde entity
`screen.clock` en de HA-domeinen `sun`, `timer` en `person`. Statusberichten
krijgen een optioneel object `x` met door de manager berekende waarden
(voorspellingsdagen, zontijden in de HA-tijdzone, timer-eindtijd als epoch).
Oudere firmware negeert `size`, nieuwe displays en `x`, maar weigert onbekende
domeinen in de hele indeling; de manager stuurt zo'n indeling daarom pas na
firmware 0.2.14 (`min_firmware`) en bewaart haar ondertussen. Voorspellingen
komen via `weather.get_forecasts` met `return_response`; zonder antwoord blijft
de weerkaart de gewone kaart. Geen gewijzigde preferences of sleutels.
+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.