Direct controls on wide cards, weather/climate cards, spinner busy state (0.2.23)

App 0.2.23 / firmware 0.2.19.

- Wide cards of climate, switch, light, fan, vacuum, cover, media_player,
  number, select, timer, scene, script and button show Home Assistant style
  controls on the right (keys, -/+ pill with debounced send, slider with
  handle, toggle, run key); per-tile choice `options.controls` in the editor
  with mockup preview; the add-on sends only the set a card really shows.
- Weather card: now + next hours and coming days with rain, from daily and
  hourly forecasts; scenes/scripts/buttons show when they last ran.
- Climate card: power key, tap-to-toggle option, fan and swing rows in a
  redesigned mode picker (grey backdrop, white chips, accent selection).
- Busy state as a spinner on a translucent sheet; render guards so only
  changed styles reach LVGL; dark theme removed from the runtime code.
- supported_features above 1e6 reaches the screen; middle dot in text fonts;
  18 control glyphs in the icon fonts; diagnostics services
  preview_climate_picker and preview_busy; demo layout --controls.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Max Gramser
2026-09-13 15:02:15 +02:00
parent c8e1fb8f72
commit 2667f41f6f
27 changed files with 3247 additions and 544 deletions
+9 -1
View File
@@ -100,7 +100,15 @@ 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, een grote waarde, een grafiek (sensoren), een
weersvoorspelling (weer) of de breedte **Dubbelbreed**. De ingebouwde **Klok**
weersvoorspelling (weer) of de breedte **Dubbelbreed**. Een dubbelbrede tegel van
een klimaat, schakelaar, lamp, ventilator, stofzuiger, zonwering, mediaspeler,
getal, keuzelijst, kookwekker, scène, script of knop krijgt rechts **directe
bediening** zoals de rijen in Home Assistant (bijvoorbeeld temperatuur − / +,
open/stop/dicht, volume met dempen, een toggle); kies onder **Directe bediening
op de tegel** welke set, of **Geen** (firmware 0.2.19+). **Bediening openen** op
een weertegel toont de weerkaart met de komende uren en dagen (regen inbegrepen);
op een klimaattegel de kaart met aan/uit-knop en de modus-, ventilator- en
zwenkstanden. 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 en **Geen** laat de kaart weg, zodat de inhoud even groot
+28
View File
@@ -177,6 +177,34 @@ staan iconen in de browser uit het midden); draai daarna `generate_packages.py`.
De substituties `MDI_GLYPH_*` zijn vervallen: `TILEn_ICON` in handmatige
profielen moet uit de set komen. Geen gewijzigde preferences of sleutels.
### Compatibiliteit 0.2.23 / firmware 0.2.19
Opslagversie en tegelprotocol blijven 1. `tiles[].options.controls` is additief:
`none` of een set uit `CONTROLS` in `core.py` per domein (climate `setpoint`/`mode`,
switch/light/fan `toggle` plus `brightness`/`speed`, vacuum/cover/timer `buttons`,
cover `position`, media_player `volume`/`playback`, number `stepper`/`slider`,
select `stepper`, scene/script/button `run`). Op de draad stuurt de manager in
`o.controls` alleen de set die de kaart werkelijk toont: uitsluitend dubbelbreed,
weergave standaard en zonder mini-schuif; zonder keuze de eerste set van het
domein, bij `none` niets. Statusberichten krijgen de attributen `device_class`,
`hvac_action` en `is_volume_muted` (de enige boolean die meegaat). Oudere
firmware negeert het veld en toont de gewone brede kaart, daarom geen
`min_firmware`; het tegelpaneel meldt vanaf welke firmware het werkt. Een oude
editor die `controls` weglaat behoudt de opgeslagen keuze (zoals `background`).
De firmware bouwt het paneel lui per set (`layout_panel`), stuurt −/+ na 700 ms
als één `set_temperature`/`set_value` en laat de lokale waarde staan tot HA hem
meldt (of 10 s). De iconfonts krijgen 18 vaste bedieningsglyphs
(`tile_icons.FIXED`). Geen gewijzigde preferences of sleutels.
Ook additief in dezelfde release: `x.hours` (maximaal acht uren `t`, `c`, `h`,
`p`, `r`) en `p`/`r` per dag in `x.days` voor de weerkaart; `x.last` (unix-tijd)
voor scènes, scripts en knoppen; de attributen `humidity`, `wind_speed`,
`wind_speed_unit`, `apparent_temperature`, `fan_modes`, `swing_modes`, `fan_mode`
en `swing_mode`. `supported_features` mag boven de grens van een miljoen. Oudere
firmware negeert al deze velden. De bezig-status gebruikt LVGL's spinner; beide
bordprofielen bevatten daarvoor een verborgen `spinner` (`busy_spinner_seed`),
anders compileert ESPHome `LV_USE_SPINNER` als 0.
### Compatibiliteit 0.2.12 / firmware 0.2.14
Opslagversie en tegelprotocol blijven 1. Additief: `tiles[].options.size`
+39
View File
@@ -0,0 +1,39 @@
# Testresultaten app 0.2.23 / firmware 0.2.19 (2026-09-13)
Directe bediening op dubbelbrede tegels, weerkaart met uren en dagen, klimaatkaart
met aan/uit-knop en ventilator-/zwenkstanden, "Laatst"-status voor scènes, scripts
en knoppen, bezig-status als spinner, lichter tekenen, donker thema verwijderd.
## Geautomatiseerd
- Python: `.venv-portal/bin/python -m unittest discover -s tests` → 82 tests OK
(nieuw: `test_tile_controls.py`, `test_rich_cards.py`).
- C++: alle `tests/*.cpp` met `c++ -std=c++17 -Wall -Wextra -pedantic -I.` → 11 PASS
(nieuw: `test_tile_controls.cpp`; `test_cyd_ui.cpp` dekt `cyd::list_item`).
- `tools/generate_icons.py --check` (177 glyphs) en `tools/generate_packages.py --check` groen.
- ESPHome 2026.6.2: `easy-guition-device.yaml` en `easy-cyd-device.yaml` compileren
(lokale componenten en fonts); beide via OTA geflasht, `device_info` meldt 0.2.19 (build 14:53).
## Op de borden
- Guition `ui_self_test` met de demo-indeling `send_layout.py --controls` (18 tegels,
6 pagina's): 10/10 `page_check=PASS`, geen `Panel bounds`, `Tile geometry` of
`GEOMETRY FAIL`; heap stabiel rond 6,33 MB.
- CYD `ui_self_test` met dezelfde demo: 10/10 PASS, heap 20–26 KB vrij.
- LVGL-snapshots (Guition, `capture_ui.py`) bekeken: gordijnknoppen, temperatuur-pill,
volumeschuif met greep en dempknop, modusknoppen (actieve in accent), playback,
stofzuiger (stop/dock grijs in het dock), toggle op pastelkaart, helderheidsschuif,
−/+ voor getallen, keuze-chevrons, kookwekker, "Activeren"; weerkaart in twee kaarten
(nu + komende uren, komende dagen met regen en hoog/laag); "Laatst 12:09" en
"Gisteren 09:17"; spinner-laag op een bezige tegel; moduskiezer met drie chips per rij.
- De bezig-status wordt niet meer elke 250 ms herrenderd; stijlzetters in `render()`
raken LVGL alleen bij een echte wijziging.
## Bekend / nog te doen
- De productie-add-on (0.2.22) stuurt `controls`, `x.hours`, `x.last`, `fan_modes` enz.
nog niet; echte tegels tonen de nieuwe onderdelen pas na de add-on-update naar 0.2.23.
- De klimaatkaart-snapshot lukte niet in dezelfde run (de manager herstelde de echte
indeling); de moduskiezer wel. Fysieke controle door Max: knoppen, −/+ debounce,
spinner-vloeiendheid, weerkaart op de CYD.
- `capture_ui.py` mist af en toe enkele rijen (snapshot-stream); gewoon opnieuw draaien.