Replace light presets with shared hue, temperature and brightness sliders

This commit is contained in:
Max Gramser
2026-09-12 11:11:12 +02:00
parent 94546cf727
commit 90dd9d38b2
9 changed files with 389 additions and 459 deletions
+17
View File
@@ -52,7 +52,11 @@ python -m unittest discover -s tests -p 'test_*.py'
c++ -std=c++17 -Wall -Wextra -pedantic tests/test_cyd_ui.cpp -o /tmp/test_cyd_ui
/tmp/test_cyd_ui
c++ -std=c++17 -Wall -Wextra -pedantic tests/test_touch_filter.cpp -o /tmp/test_touch_filter
c++ -std=c++17 -Wall -Wextra -pedantic tests/test_light_controls.cpp -o /tmp/test_light_controls
/tmp/test_light_controls
/tmp/test_touch_filter
c++ -std=c++17 -Wall -Wextra -pedantic tests/test_light_controls.cpp -o /tmp/test_light_controls
/tmp/test_light_controls
python -m esphome config device.yaml
python -m esphome compile device.yaml
```
@@ -79,3 +83,16 @@ Lokale profielbestanden veilig bewaard:
Geef de eigenaar de drie lokale YAML-bestanden en de meetbestanden via een
passend privé-kanaal. Gebruik voor een andere eigenaar de schone repository
of starter-ZIP, zodat die eigen sleutels en eigen paneelkalibratie krijgt.
## Lichtkaart
- RGB+wit-lamp: drie schuiven; RGB-only: kleur en helderheid; wit-only:
wittemperatuur en helderheid. Een gewone dimmer behoudt de helderheidskaart.
- Sleep langzaam over de regenboog, laat los en controleer de fysieke lamp.
Herhaal voor wittemperatuur en helderheid. Helderheid behoudt de kleurmodus.
- Heropen de kaart en controleer de ontvangen waarden. Test twee lampen met
verschillende temperatuurbereiken; er mag geen waarde van de andere lamp lekken.
- Firmware-renderdiagnose bevat `Light sliders: PASS`: twintig preview-events
per schuif, precies één commit bij loslaten, geen dubbele commit, geen commit
na een afgebroken aanraking en vier capabilitycombinaties. Dit gebeurt met
vervangen callbacks en bedient geen echte lampen.
+35
View File
@@ -0,0 +1,35 @@
# Lichtregelaars — 12 september 2026
Gedeelde `light_controls.h` vervangt de kleurpresets in de CYD- en
Guition-profielen. Hue, wittemperatuur en helderheid staan op één kaart;
capabilities bepalen welke schuiven verschijnen.
## Uitgevoerd
- 23 Python-regressietests op de Guition-branch geslaagd.
- C++-tests voor touchguard, touchfilter en nieuwe lichtwaardenparser geslaagd.
- Beide persoonlijke profielen volledig gebouwd met ESPHome 2026.6.2.
- Guition: RAM statisch 74.380 bytes; firmware 1.349.559 bytes.
- CYD: RAM statisch 70.820 bytes; firmware 1.291.519 bytes (70,4% app-partitie).
- Guition via OTA geflasht en apparaatidentiteit via versleutelde API bevestigd.
- Op Guition `Light sliders: PASS`: twintig preview-events per regelaar,
één commit bij loslaten, geen dubbele commit, geen commit na press-lost,
vier capabilitycombinaties. Callbacks vervangen tijdens deze test: geen lampacties.
- Tien pagina-/geometriecontroles en vijftig overlay-rendercycli geslaagd.
Frames 6–69; vrije heap circa 6.514.320 bytes.
- Veilige voorbeeldkaart uit LVGL als screenshot opgehaald en visueel gecontroleerd.
Eerste screenshotpoging verloor de API-verbinding; herhaling met USB-logging
voltooide alle 240 rijen zonder exception/backtrace in de capture.
- Neutrale starterbundel met gedeelde header succesvol geëxporteerd.
De CYD-build vond een lokale PlatformIO-esptool-koppeling naar versie 4.9,
terwijl de platformmetadata 5.3 vereiste. De lokale editable installatie is
hersteld naar de al aanwezige 5.3-package; de volledige build slaagt daarna.
Dit is een lokale toolchainreparatie, geen wijziging van bord/flashinstellingen.
## Grenzen
Een succesvolle build is geen fysieke CYD-test: alleen de Guition was aangesloten.
Schuifevents in de firmwaretest zijn synthetisch; menselijke touchbediening en
werkelijke HA-lampacties moeten apart worden gecontroleerd. De eigenaar vond de
voorbeeldkaart er goed uitzien; de HA-koppeling ontbrak op dat moment nog.
+38
View File
@@ -49,6 +49,44 @@ De voorbeeldconfig vult ook de overige velden in. Laat die staan tenzij je
ze bewust gebruikt. `STATE_ENTITY` kan bij een scène/script een echte lamp of
schakelaar volgen; een scène heeft zelf geen betrouwbare aan/uitstatus.
## Kleur, wittemperatuur en helderheid
Een RGB-/kleurenlamp met `LONGPRESS: "slider"` opent direct de lampkaart.
Deze bevat maximaal drie horizontale schuiven:
- **Kleur:** een doorlopende regenboog (0–360° hue, 100% verzadiging).
- **Wittemperatuur:** warm naar koel, binnen de minimum-/maximum-Kelvinwaarden
die de lamp in Home Assistant meldt.
- **Helderheid:** 1–100%; aan/uit blijft via de tegel beschikbaar.
De kleur- en witschuif verschijnen alleen als `supported_color_modes` deze
ondersteunt. Een uitsluitend dimbare lamp houdt de gewone helderheidskaart.
Er zijn geen extra tegelinstellingen nodig. Gebruik voor een lamp dezelfde
`ENTITY` en `STATE_ENTITY`. De kleurkaart volgt `hs_color`, `color_temp_kelvin`,
`min_color_temp_kelvin` en `max_color_temp_kelvin` van de bediende entiteit.
Ontbreekt het temperatuurbereik, dan wacht de witschuif op HA-gegevens.
De kaart neemt bij openen de laatst ontvangen lampwaarden over. Slepen toont
lokaal de gekozen waarde; pas loslaten verstuurt één opdracht. Kleur kiest de
kleurmodus, wittemperatuur kiest de witmodus. Helderheid verandert de kleurmodus
niet. De regenboog regelt hue; pastel/verzadiging is geen aparte regelaar.
De hue-lijst wordt via ESPHome `data_template` naar HA gestuurd; zie de
[officiële API-documentatie](https://esphome.io/components/api/#homeassistantaction-action).
De gedeelde implementatie staat in `light_controls.h`. Beide schermprofielen
gebruiken deze; de Guition heeft grotere regelaars, de CYD een compacte kaart.
`diagnostics/run_ui_test.py` controleert ook de schuifevents met vervangen
callbacks: geen echte HA-acties. Voor een veilige 40-secondenvoorbeeldkaart:
```sh
python diagnostics/control_ui.py light_controls_preview --host guition-wallbox.local --name guition-wallbox
```
Gebruik voor CYD de eigen host en naam. Tijdens deze voorbeeldkaart worden
lichtopdrachten onderdrukt en verdwijnt de kaart vanzelf. Test vervolgens de
werkelijke lamp: lang indrukken, kleur kiezen, wit kiezen, helderheid aanpassen,
sluiten en heropenen. Controleer de fysieke lamp en de waarden in HA.
## Voorbeelden
Wijzig deze sleutels in de bestaande map; plak niet nogmaals `substitutions:`.