Files
ha-ninstrip/tests_unit/samples.py
T
Michael Sauer c40c68b537 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.
2026-09-23 00:20:23 +02:00

114 lines
3.3 KiB
Python

"""Echte Nutzdaten zweier Geraete. Bewusst keine Grenzwerte - die stehen in den Tests selbst."""
from __future__ import annotations
from typing import Any
TOKEN = "a201883d13a570dd3cf1f3b64b5e1df7"
HOST_K1Y = "192.168.2.238"
MAC_K1Y = "b0:81:84:49:ad:4c"
# Abgefragt an der Stehlampe (KL-LSC5C3WV2-K1Y, SK6812-RGBW, 60 Pixel).
STATE_K1Y: dict[str, Any] = {
"on": True,
"brightness": 100,
"power_on_behaviour": "last",
"fade_in": 500,
"fade_out": 500,
"transition_default": 300,
"wake_on_change": False,
"preset": 2,
"preset_modified": False,
"segment_count": 1,
"pixel_count": 60,
}
INFO_K1Y: dict[str, Any] = {
"product": "ninstrip",
"device_type": "ninstrip-k1y",
"fw_version": "0.1.0-12-g71a57",
"build_date": "2026-09-22",
"mac": MAC_K1Y,
"name": "",
"wifi": {"mode": "sta", "ssid": "ninIOT", "rssi": -68, "ip": HOST_K1Y, "error": None},
"sacn": {"enabled": True, "active": False, "universe": 1, "universes": 1, "multicast": True},
"uptime": 1459,
"free_heap": 156848,
"strip": {
"chipset": "sk6812_rgbw",
"color_order": "grb",
"data_pin": 19,
"pixel_count": 60,
"leds_per_pixel": 1,
"has_white": True,
"inverted": True,
"power_scale": 100,
"max_milliamps": 1800,
},
"render": {"fps": 50, "render_us": 900, "show_us": 1800, "dropped_frames": 0},
"last_ota_error": None,
}
# wifi.source "compiled": das Geraet kennt sein WLAN nur aus der Firmware.
SETTINGS_COMPILED: dict[str, Any] = {
"name": "",
"wifi": {"ssid": "ninIOT", "source": "compiled"},
"auth_all": False,
"sacn": {
"enabled": True,
"universe": 1,
"start_slot": 1,
"on_timeout": "release",
"channels_per_pixel": 3,
},
"strip": {
"chipset": "sk6812_rgbw",
"color_order": "grb",
"data_pin": 19,
"pixel_count": 60,
"leds_per_pixel": 1,
"max_milliamps": 1800,
"supply_volts": 12,
"inverted": True,
},
}
PRESETS_K1Y: dict[str, Any] = {
"presets": [
{"id": 0, "name": "Warmweiss", "used": True, "segment_count": 1},
{"id": 1, "name": "Kaltweiss", "used": True, "segment_count": 1},
{"id": 2, "name": "Regenbogen", "used": True, "segment_count": 1},
{"id": 3, "name": "Feuer", "used": True, "segment_count": 1},
{"id": 4, "name": "", "used": False, "segment_count": 0},
{"id": 5, "name": "", "used": False, "segment_count": 0},
{"id": 6, "name": "", "used": False, "segment_count": 0},
{"id": 7, "name": "", "used": False, "segment_count": 0},
],
"active": 2,
"modified": False,
}
# wifi.source "stored": ueber das Onboarding ins WLAN gebracht, also vom
# Abbild unabhaengig.
SETTINGS_STORED: dict[str, Any] = {
**SETTINGS_COMPILED,
"wifi": {"ssid": "ninIOT", "source": "stored"},
}
# Ein Segment ueber den ganzen Strip, warmweiss - so kommt ein Geraet aus dem
# Werkszustand. Farbe und Farbtemperatur stehen nur hier, nicht in state.
SEGMENTS_K1Y: dict[str, Any] = {
"segments": [
{
"id": 0,
"name": None,
"start": 0,
"end": 59,
"mode": "white",
"color_temp": 2700,
"brightness": 80,
}
]
}