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.
114 lines
3.3 KiB
Python
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,
|
|
}
|
|
]
|
|
}
|