feat(light): Farbe und Farbtemperatur ueber alle Segmente

In Home Assistant liessen sich nur Szenen und Helligkeit stellen, keine
Farben - device/state traegt naemlich keine. Die steht je Segment, und die
Segmente hat der Koordinator bisher gar nicht gelesen.

Jetzt holt er device/segments mit (fuenfte Anfrage je Zyklus), und die
Lichtentitaet bietet rgb_color und color_temp_kelvin an:

* Setzen schreibt in ALLE Segmente, aber nur die Farbfelder - Grenzen,
  Namen und Helligkeit bleiben stehen. Die Einteilung eines Strips ist von
  Hand gemacht, die reisst eine Farbwahl nicht ein. Geschrieben wird die
  ganze Liste auf einmal, danach zurueckgelesen statt angenommen.
* Angezeigt wird nur, worauf sich alle Segmente einigen. Zwei Farben und
  eine Entitaet - da waere jede Angabe gelogen, also gibt es keine.
* Farbtemperatur nur, wenn alle auf "white" stehen; sonst RGB, sonst
  blendete HA den Farbkreis aus, sobald ein Segment einen Effekt faehrt.
* Die Farbe geht VOR dem Einschalten raus, sonst leuchtet der Strip kurz
  in der alten auf.

Die Spanne 2700-6500 K ist die, die die Firmware auf die Weisskanaele
umrechnet (nl_ct.h); ohne Weisskanaele naehert sie sie in RGB an.

Dazu: das Markenbild ist jetzt dasselbe wie bei ninlight - Michaels
Wunsch, die beiden Integrationen gehoeren zusammen. Das Skript fuer ein
eigenes Motiv bleibt als Ausgangspunkt liegen.
This commit is contained in:
Michael Sauer
2026-09-23 00:20:23 +02:00
parent 2c340ea11f
commit c40c68b537
11 changed files with 361 additions and 22 deletions
+23 -8
View File
@@ -46,7 +46,7 @@ Ohne mDNS geht es auch von Hand über Adresse und Token.
| Entität | |
|---|---|
| `light` | Hauptschalter und Helligkeit des ganzen Strips |
| `light` | Hauptschalter, Helligkeit, Farbe und Farbtemperatur des ganzen Strips |
| `select` | aufgeschaltete Szene (acht Plätze in der Firmware) |
| `button` | Neustart |
| `sensor` | IP-Adresse, WLAN-Signal, Laufzeit, freier Speicher, Leistungsbegrenzung |
@@ -63,8 +63,19 @@ Signal, Laufzeit und freier Speicher sind aus; die braucht man erst im
Fehlerfall.
**Eine Lichtentität je Gerät, nicht je Segment.** `device/state` ist der
Hauptschalter und trägt keine Farbe — bei mehreren Segmenten gäbe es keine
eine Farbe, die stimmen würde. Die Segmente stellt man über Szenen.
Hauptschalter und trägt keine Farbe — die steht je **Segment**. Die
Lichtentität schreibt eine gewählte Farbe deshalb in **alle** Segmente und
lässt deren Grenzen, Namen und Helligkeit stehen; die mühsam von Hand gemachte
Einteilung bleibt also erhalten.
Zeigen kann sie nur **eine** Farbe. Sind sich die Segmente nicht einig, meldet
sie gar keine, statt sich eine auszusuchen — jede Angabe wäre dann gelogen.
Farbtemperatur meldet sie nur, wenn **alle** Segmente auf `white` stehen;
sobald eines einen Effekt fährt, ist es RGB. Die Spanne ist 2700–6500 K, das
rechnet die Firmware auf die Weißkanäle um (`nl_ct.h`); Strips ohne
Weißkanäle bekommen dieselbe Spanne als RGB-Näherung.
Für einzelne Segmente gibt es noch keine Entitäten.
## Noch nicht drin
@@ -138,11 +149,15 @@ eingebunden, der Quellcode bleibt in diesem Repo.
### Markenbilder
`scripts/make_brand.py` zeichnet die vier PNGs unter
`custom_components/ninstrip/brand/`. Ab Home Assistant 2026.3 liefert HA sie
für eine eigene Integration von dort aus; ohne sie bleibt in der
Geräteübersicht ein Platzhalter. Das Motiv ist ein Strip mit fünf leuchtenden
Pixeln — ninlight hat an derselben Stelle eine Glühbirne.
Die vier PNGs unter `custom_components/ninstrip/brand/` sind **dieselben wie
in ha-ninlight**: die beiden Integrationen gehören zusammen, und zwei
verschiedene Motive in derselben Geräteübersicht stiften nur Verwirrung. Ab
Home Assistant 2026.3 liefert HA sie für eine eigene Integration von dort
aus; ohne sie bleibt ein Platzhalter.
`scripts/make_brand.py` zeichnet ein eigenes Motiv (ein Band mit fünf
leuchtenden Pixeln) und liegt als Ausgangspunkt bereit, falls doch einmal
eines gewünscht ist — in Gebrauch ist es nicht.
### Tests