Let every screen choose its top bar: clocks, date and entities (0.2.38)
The name stays on the left; up to six items go on the right: the time, an analog clock, the date, or a Home Assistant entity with its icon, showing its state or how long ago it changed, always or only while active. The add-on formats entity text in Dutch and sends it as op: header right after the layout to firmware 0.2.32+; older firmware keeps the clock of show_clock, which now follows the clock item. The firmware draws every value in one font on the name's baseline, centres icons and the dial on the digit height and measures gaps between glyph ink, so the bar looks even; the editor's mockup uses Roboto and the same integer rules. tools/render_topbar.py renders the real LVGL code on a computer (ESPHome host + SDL2). The editor's section buttons are gone. Firmware 0.2.32 for both boards. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -177,6 +177,41 @@ 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.38 / firmware 0.2.32
|
||||
|
||||
Opslagversie en tegelprotocol blijven 1. Een indeling mag een optioneel object
|
||||
`header: {items: [...]}` hebben (maximaal zes): `{type: clock|analog|date}` of
|
||||
`{type: entity, entity, content: state|last_changed, icon: auto|none|<naam>, show:
|
||||
always|active}`. Zonder `header` geldt wat de firmware altijd deed (de klok van
|
||||
`show_clock`); een oude editor die `header` weglaat behoudt de opgeslagen balk. Bij
|
||||
opslaan volgt `settings.show_clock` de klok in de balk, zodat oudere firmware de tijd
|
||||
alleen toont als hij erin staat. Entiteiten in de balk mogen naast de tegeldomeinen
|
||||
ook `device_tracker`, `zone`, `lock`, `alarm_control_panel`, `counter`, `event`,
|
||||
`input_datetime`, `input_text`, `water_heater` en `humidifier` zijn; de inventaris
|
||||
markeert die met `tile: false` zodat de tegelkiezer ze overslaat.
|
||||
|
||||
Op de draad stuurt de manager direct na het layoutbericht `{v:1, op: header, items}`
|
||||
met per onderdeel `k` (`clock`, `analog`, `date`, `text`, `ago`), `i` (codepoint),
|
||||
`t` (tekst, al in het Nederlands opgemaakt en beperkt tot de glyphs van
|
||||
`sublabel_big`), `e` (unix-tijd voor `ago`) en `c` (accentkleur). Onderdelen met
|
||||
`show: active` die niet actief zijn stuurt de manager niet. Alleen firmware 0.2.32+
|
||||
krijgt dit bericht (`HEADER_MIN_FIRMWARE`, op basis van `Schermfirmware`): oudere
|
||||
firmware zou `op: header` weigeren met "Fout: ongeldig bericht". Het bericht wordt
|
||||
apart vergeleken; een gewijzigde waarde verstuurt alleen de balk, niet de indeling.
|
||||
De firmware antwoordt met dezelfde status als een tegelstatus, dus de
|
||||
Tegelinstellingen-entiteit flipt niet bij iedere waarde.
|
||||
|
||||
Firmware: `header_bar.h` (LVGL-vrij: parsen, "5 min geleden", datum, afstanden,
|
||||
plaatsing) en `runtime_tiles::draw_header()`. Het tijdlabel van het profiel blijft
|
||||
bestaan als referentie (rechtermarge, tekenvolgorde) maar is in runtime-modus
|
||||
verborgen. Waarden gebruiken `sublabel_big`, iconen `materialdesign_icons_mini`;
|
||||
`sublabel_big` kreeg `'`, `#`, `*`, `=`, `;`, `²`, `³`, `µ`, `–` en veelvoorkomende
|
||||
accenten; `tests/test_header_bar.py` houdt `header_bar.GLYPHS` gelijk aan die lijst.
|
||||
De editor (`barLayout` in `app.js`) en de firmware (`header_bar::gaps/place`) delen
|
||||
dezelfde gehele rekensommen; de test controleert dat. `tools/render_topbar.py`
|
||||
rendert de echte `draw_header()` op een Mac/Linux-machine (ESPHome host + SDL2) naar
|
||||
PNG, zonder scherm. Geen gewijzigde preferences of sleutels.
|
||||
|
||||
### Compatibiliteit 0.2.35 / firmware 0.2.30
|
||||
|
||||
Alleen firmware (Guition). `on_boot` haalt `LV_OBJ_FLAG_CLICKABLE` van `home_page` en
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
# Testresultaten app 0.2.38 / firmware 0.2.32 (2026-09-14)
|
||||
|
||||
Nieuw: de **bovenbalk** per scherm. Links de naam, rechts tot zes onderdelen: tijd,
|
||||
analoge klok, datum of een entiteit met icoon (status of "laatst gewijzigd", altijd of
|
||||
alleen als actief). Zie README "Bovenbalk" en RELEASING "Compatibiliteit 0.2.38".
|
||||
|
||||
## Wat veranderde
|
||||
|
||||
- App: `core.validate_header` (opslag), `header_bar.py` (Nederlandse opmaak met
|
||||
weergaveprecisie uit het entity-register, iconen per device class en stand,
|
||||
HA-kleuren, "alleen als actief", suggesties per ruimte), `op: header` direct na de
|
||||
indeling voor firmware 0.2.32+, `POST /api/header-preview` voor de editor,
|
||||
bovenbalk-entiteiten tellen mee voor statuswijzigingen.
|
||||
- Editor: blok **Bovenbalk** (naam, kaartjes, slepen, sheet voor toevoegen en
|
||||
instellen), de balk op elke pagina van het schermvoorbeeld als SVG met Roboto
|
||||
(`bar-roboto-400/500.woff`, gegenereerd door `tools/generate_icons.py`) en de
|
||||
plaatsingsregels van de firmware; knoppenbalk en **Klok tonen** weg.
|
||||
- Firmware: `header_bar.h` (parsen, relatieve tijd, datum, afstanden, plaatsing) en
|
||||
`runtime_tiles::draw_header()`; beide profielen zetten de fonts en het tijdlabel als
|
||||
referentie; `sublabel_big` kreeg extra glyphs.
|
||||
|
||||
## Geautomatiseerd
|
||||
|
||||
- Python (`.venv-portal`): 121 tests OK, waarvan 18 nieuw in `test_header_bar.py`
|
||||
(validatie, getallen en eenheden, waarden per domein, actief/kleur/icoon, glyphs gelijk
|
||||
aan beide profielen en pakketten, woorden en rekensommen gelijk in editor en firmware,
|
||||
profielkoppeling, manager: alleen 0.2.32+ krijgt de balk, geen herhaling bij gelijke
|
||||
balk, oude editor behoudt de balk, verdwenen entiteit geweigerd, preview-endpoint).
|
||||
- C++ (clang++ -std=c++17 -Wall -Wextra -Werror -I.): 13/13 PASS; nieuw
|
||||
`test_header_bar` (soorten, kleuren, UTF-8, alle drempels van "geleden"/"over",
|
||||
datum, afstanden voor Guition en CYD, plaatsing met overloop en lege balk).
|
||||
- `generate_packages.py --check` en `generate_icons.py --check` groen; bench-kopieën
|
||||
`.esphome/easy-*-package.yaml` opnieuw gegenereerd; `node --check app.js` OK.
|
||||
- ESPHome 2026.6.2 compile: `easy-guition-device.yaml` SUCCESS (RAM 32,4%, flash
|
||||
18,6%; was 32,3% / 18,5%), `easy-cyd-device.yaml` SUCCESS (RAM 31,4%, flash 77,3%;
|
||||
was 31,3% / 76,8%). Eén bestaande waarschuwing (`runtime_tiles.h:580`,
|
||||
enum-conversie), niet uit deze wijziging. De eerste Guition-build faalde op
|
||||
`std::max(int, long)` (int32_t is long op ESP32); opgelost met een cast.
|
||||
- **Echte LVGL-render zonder scherm:** `tools/render_topbar.py` bouwt een ESPHome
|
||||
host-project met SDL2 en de fonts uit beide profielen en tekent zeven scenario's via
|
||||
`draw_header()` (alleen klok, de mockup met "—" en "Gisteren", deur open + alarm,
|
||||
analoge klok + datum, aantal thuis + weer + verbruik, te vol met afgekorte naam,
|
||||
personen). Bekeken op 2x/3x: waarden op de basislijn van de naam, iconen op
|
||||
cijferhoogte, gelijke afstanden, overloop valt vooraan weg.
|
||||
- Editor in de browser (dev-server met een alleen-lezen momentopname van de echte HA):
|
||||
toevoegen via suggesties en zoeken, instellen (status/laatst gewijzigd, icoon, tonen),
|
||||
slepen, overloop- en verborgen markering, opslaan stuurt `layout`, `header`, states
|
||||
naar een 0.2.32-scherm en geen `header` naar 0.2.31; CYD-maten en de firmwarehint op
|
||||
een CYD; telefoonbreedte zonder horizontaal scrollen.
|
||||
|
||||
## Niet getest
|
||||
|
||||
- Geen scherm aan USB tijdens deze ronde: de bovenbalk is niet op glas gezien. De render
|
||||
gebruikt dezelfde LVGL 9.5-code en fonts, maar niet het paneel (kleuren, backlight).
|
||||
- Studio 1 draait nog firmware 0.2.31 en app 0.2.37 tot de update.
|
||||
|
||||
## Te controleren op Studio 1 na de update
|
||||
|
||||
- Add-on bijwerken naar 0.2.38, dan **Bijwerken** bij Studio 1 (firmware 0.2.32).
|
||||
- Zonder bovenbalk-aanpassing: naam links, tijd rechts in de nieuwe waardeletter.
|
||||
- Voeg temperatuur, een persoon met "Laatst gewijzigd", een deur of alarm (alleen als
|
||||
actief) en de analoge klok toe; kijk of alles op één lijn staat en even ver uit elkaar.
|
||||
- "5 min geleden" telt per minuut door; een deur die opengaat verschijnt binnen enkele
|
||||
seconden in amber; een lange naam krijgt puntjes zoals in de editor.
|
||||
- HA even loskoppelen: de entiteiten verdwijnen uit de balk, tijd en datum blijven.
|
||||
Reference in New Issue
Block a user