Files
ha-ninlight/custom_components/ninlight/strings.json
T
Michael Sauer ac60428fdb feat: sACN-Einstellungen und -Status als Entitaeten
Die Firmware kann seit dieser Woche sACN/E1.31. Einstellen liess sich das nur
per REST - jetzt steht es in Home Assistant: Schalter fuer den Empfang, Zahlen
fuer Universe und Startslot, Auswahlen fuer das Verhalten nach dem Timeout und
die Slotbelegung, dazu zwei Diagnose-Binaersensoren.

Die sACN-Einstellungen liegen hinter system/settings, nicht in device/state -
der Koordinator liest sie deshalb jetzt mit, eine dritte Anfrage je Zyklus. Der
Schreibweg liest die Einstellungen danach frisch zurueck statt den gesetzten
Wert anzunehmen: die Lampe validiert selbst (die Startslot-Grenze haengt an der
Slotbelegung), und eine Entitaet, die das Gewuenschte statt des Gespeicherten
zeigt, luegt in genau dem Moment, in dem es darauf ankommt.

Aeltere Firmware antwortet ohne den sacn-Block. Die Entitaeten entstehen
trotzdem und melden sich als nicht verfuegbar - so werden sie nach einem Update
der Lampe beim naechsten Poll von selbst lebendig, ohne Neuladen.

Die Obergrenze des Startslots kommt aus dem "slots"-Feld der Lampe, nicht aus
einer festen 512: sie haengt an Board UND Slotbelegung, und eine feste Grenze
wuerde Werte anbieten, die die Lampe dann ablehnt.

Der Multicast-Sensor ist ab Werk deaktiviert wie die uebrigen Diagnosewerte. Er
meldet im Normalbetrieb schlicht "beigetreten" - aber eine falsche
Gruppenadresse hat zwei Abende gekostet, und genau dort waere sie aufgefallen.

test_update.py misst seine Zusage jetzt um den Rescan herum statt nach dem
Install: dort pollt der Koordinator ohnehin wieder und liest seitdem auch die
Einstellungen mit.
2026-09-21 23:35:54 +02:00

190 lines
5.9 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"config": {
"flow_title": "{name}",
"step": {
"user": {
"title": "Set up ninlight lamp",
"description": "Enter the address of the lamp. The token is prefilled with the public default token – anyone on your network who knows it can control and reflash the lamp.",
"data": {
"host": "Host",
"token": "Token"
},
"data_description": {
"host": "IP address or ninlight-xxxx.local name of the lamp.",
"token": "Authorization token of the lamp."
}
},
"zeroconf_confirm": {
"title": "Set up {name}",
"description": "Found the ninlight lamp {name} at {host}. The token is prefilled with the public default token – anyone on your network who knows it can control and reflash the lamp.",
"data": {
"token": "Token"
}
},
"reauth_confirm": {
"title": "Re-authenticate {name}",
"description": "The lamp rejected the stored token. Enter its current token.",
"data": {
"token": "Token"
}
},
"reconfigure": {
"title": "Reconfigure lamp",
"data": {
"host": "Host",
"token": "Token"
}
}
},
"error": {
"cannot_connect": "Cannot reach the lamp.",
"invalid_auth": "The lamp rejected the token.",
"not_ninlight": "The device did not answer like a ninlight lamp.",
"unknown": "Unexpected error."
},
"abort": {
"already_configured": "This lamp is already set up.",
"not_ninlight": "The device did not announce itself like a ninlight lamp.",
"wrong_device": "This address belongs to a different lamp.",
"reauth_successful": "Re-authentication was successful.",
"reconfigure_successful": "Reconfiguration was successful."
}
},
"options": {
"step": {
"init": {
"title": "ninlight options",
"data": {
"scan_interval": "Polling interval (seconds)",
"lamp_base_url": "Address lamps use to reach Home Assistant"
},
"data_description": {
"lamp_base_url": "Only needed for firmware updates if lamps cannot reach Home Assistant's internal URL over plain http, e.g. http://192.168.1.50:8123"
}
}
},
"error": {
"invalid_base_url": "Must be a plain http:// address with host and optional port, without path.",
"base_url_too_long": "Address too long – the lamp accepts at most 255 characters for the whole firmware URL."
}
},
"entity": {
"number": {
"fade_in": {
"name": "Fade-in"
},
"fade_out": {
"name": "Fade-out"
},
"transition_default": {
"name": "Default transition"
},
"sacn_universe": {
"name": "sACN universe"
},
"sacn_start_slot": {
"name": "sACN start slot"
}
},
"select": {
"power_on_behaviour": {
"name": "Power-on behaviour",
"state": {
"last": "Last state",
"on": "On",
"off": "Off"
}
},
"sacn_on_timeout": {
"name": "sACN after timeout",
"state": {
"release": "Back to Home Assistant",
"hold": "Hold last values"
}
},
"sacn_layout": {
"name": "sACN slot layout",
"state": {
"dimmer": "Dimmer first",
"rgb": "RGB only"
}
}
},
"switch": {
"wake_on_change": {
"name": "Turn on when changed"
},
"sacn_enabled": {
"name": "sACN reception"
}
},
"sensor": {
"ip_address": {
"name": "IP address"
},
"free_heap": {
"name": "Free memory"
},
"last_ota_error": {
"name": "Last update error"
},
"boot_time": {
"name": "Last start"
}
},
"binary_sensor": {
"sacn_active": {
"name": "Remote controlled"
},
"sacn_multicast": {
"name": "Multicast group"
}
}
},
"exceptions": {
"cannot_connect": {
"message": "Cannot reach the lamp."
},
"auth_failed": {
"message": "The lamp rejected the token."
},
"request_failed": {
"message": "The lamp rejected the request: {message}"
},
"update_busy": {
"message": "An update is already running on the lamp."
},
"no_update": {
"message": "No firmware update is available."
},
"no_http_url": {
"message": "Lamps can only reach Home Assistant over plain http. Set the address in the integration options."
},
"lamp_url_too_long": {
"message": "The firmware URL is longer than the 255 characters the lamp accepts."
},
"image_invalid": {
"message": "The firmware file changed or is no longer valid."
},
"wifi_guard": {
"message": "This firmware does not contain the Wi-Fi credentials for {ssid}; the lamp would lose its network connection."
},
"update_failed": {
"message": "The update failed: {reason}"
},
"update_timeout": {
"message": "The lamp did not report the new firmware within 12 minutes."
}
},
"issues": {
"default_token": {
"title": "{name} uses the public default token",
"description": "With the public default token, anyone on your network can reconfigure, restart, reflash, or factory-reset this lamp (losing its Wi-Fi settings and falling back to its onboarding access point). Switching and dimming are possible for anyone on the network regardless, unless auth_all is enabled. Set your own token on the lamp and enter it via reconfigure; to also protect switching, additionally enable auth_all."
},
"wifi_guard": {
"title": "Firmware for {name} not offered",
"description": "The firmware folder contains {version} for {device_type}, but without Wi-Fi credentials for {ssid}. The lamp only knows its Wi-Fi from its firmware and would lose its network connection after this update, so the update is not offered."
}
}
}