Handling von Nicht-Hue-RGB-Leuchtmitteln
-
- Beiträge: 102
- Registriert: 18. Apr 2021 11:30
- Wohnort: Berlin
Handling von Nicht-Hue-RGB-Leuchtmitteln
Ich doktere schon seit einer ganzen Weile mit der Möglichkeit herum, eine Nicht-Hue Lampe unter Openhab anzusprechen. Ich rede dabei von den vielen Zigbee-Devices, welche dann über irgendein Gateway, wie z.B. Zigbee2MQTT angesprochen werden können. Leider beissen sich hier die unterschiedlichen Farbmodelle gegenseitig und ohne Farbmodellkonvertierung studiert zu haben, komme ich leider nicht weiter. Hier finde ich, geht Openhab nicht mit der Zeit, weil diese Devices gerade aus China leicht zu bekommen ist.
Ohne auf die unterschiedlichen Zugriffssyntaxes einzugehen, bekomme ich es aber noch nicht einmal hin, ein Color-Item zu erstellen, bei dem ich z.B. eine Farbe auswählen kann, von der Weiterverarbeitung mal zu schweigen.
Das zweite Problem ist, wie ich dann diese Farbinformation in einen MQTT-Payload konvertiere, welchen dann die Lampe auch versteht, bzw. das Zigbee-Gateway. Ich habe z.B. eine E27-Lampe von Nous und eine LED-Stripe-Controller, welcher von Zigbee2MQTT als Lampe erkannt wird. Beide bieten unterschiedliche Kontrollmöglichkeiten, wie die folgenden Bilder zeigen :
Nous-Lampe LED-Stripe Sollte es hier einen Ansatz für eine Lösung geben, wäre mir un bestimmt vielen Anderen sehr geholfen.
Ohne auf die unterschiedlichen Zugriffssyntaxes einzugehen, bekomme ich es aber noch nicht einmal hin, ein Color-Item zu erstellen, bei dem ich z.B. eine Farbe auswählen kann, von der Weiterverarbeitung mal zu schweigen.
Das zweite Problem ist, wie ich dann diese Farbinformation in einen MQTT-Payload konvertiere, welchen dann die Lampe auch versteht, bzw. das Zigbee-Gateway. Ich habe z.B. eine E27-Lampe von Nous und eine LED-Stripe-Controller, welcher von Zigbee2MQTT als Lampe erkannt wird. Beide bieten unterschiedliche Kontrollmöglichkeiten, wie die folgenden Bilder zeigen :
Nous-Lampe LED-Stripe Sollte es hier einen Ansatz für eine Lösung geben, wäre mir un bestimmt vielen Anderen sehr geholfen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Handling von Nicht-Hue-RGB-Leuchtmitteln
Also, das interne Farbmodell von openHAB ist HSB. Wenn eine Leuchte mit RGB angesteuert werden will, kann openHAB das genauso zur Verfügung stellen wie das xy-Modell. Guggst Du hier: https://www.openhab.org/addons/bindings ... type-color 
Die größte Herausforderung besteht darin, die korrekte Steuerung zu finden. Leider verraten die gezeigten Bildausschnitte lediglich ankommende Topics, verraten aber nichts über eine zu sendende Payload.
Hier wäre es wichtig, den genauen Typ der Hardware zu kennen, um bei Zigbee2mqtt nachschauen zu können, wie genau gesteuert wird. Z.B. https://www.zigbee2mqtt.io/devices/GL-B-001Z.html fordert für die Farbe ein josn Objekt der Form
wobei laut Doku des mqtt Bindings (oben) ein Parameter
funktionieren sollte. Notfalls könnte man die Lampe oben aber immer noch über RGB ansteuern.
Nur zur Erinnerung: so gut wie alle am Markt erhältlichen Leuchten arbeiten intern mit den drei Grundfarben Rot, Grün und Blau. Das Farbmodell ist halt nicht sehr intuitiv - ganz im Gegensatz zu HSB, wo die Vollfarbe, die Sättigung und die Helligkeit angegeben wird. Die Sättigung kann man auch als umgekehrten Weißanteil betrachten, das lässt sich also recht einfach verstehen, und die Helligkeit kennt jeder vom Dimmer.
Das xyy-Modell hingegen ist dieser Farbraum, den kein Display vollständig abdecken kann. Und das soll dann für die Beleuchtung sinnvoller sein, als die anderen beiden Modelle...

Die größte Herausforderung besteht darin, die korrekte Steuerung zu finden. Leider verraten die gezeigten Bildausschnitte lediglich ankommende Topics, verraten aber nichts über eine zu sendende Payload.
Hier wäre es wichtig, den genauen Typ der Hardware zu kennen, um bei Zigbee2mqtt nachschauen zu können, wie genau gesteuert wird. Z.B. https://www.zigbee2mqtt.io/devices/GL-B-001Z.html fordert für die Farbe ein josn Objekt der Form
Code: Alles auswählen
{"color": {"x": X_VALUE, "y": Y_VALUE}}
Code: Alles auswählen
formatBeforePulish:{"color": {"x": "%1$d, "y": %2$d}}
Nur zur Erinnerung: so gut wie alle am Markt erhältlichen Leuchten arbeiten intern mit den drei Grundfarben Rot, Grün und Blau. Das Farbmodell ist halt nicht sehr intuitiv - ganz im Gegensatz zu HSB, wo die Vollfarbe, die Sättigung und die Helligkeit angegeben wird. Die Sättigung kann man auch als umgekehrten Weißanteil betrachten, das lässt sich also recht einfach verstehen, und die Helligkeit kennt jeder vom Dimmer.
Das xyy-Modell hingegen ist dieser Farbraum, den kein Display vollständig abdecken kann. Und das soll dann für die Beleuchtung sinnvoller sein, als die anderen beiden Modelle...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 102
- Registriert: 18. Apr 2021 11:30
- Wohnort: Berlin
Re: Handling von Nicht-Hue-RGB-Leuchtmitteln
Hallo Udo, vielen Dank für die Hinweise.
Das Steuern über ein Colorpicker-Widget auf einer Page funktioniert erst einmal und ich habe auch herausgefunden, dass ich über den Topic auch zum Ziel komme. Das Problem ist nur der umgekehrte Weg, das Auslesen, bzw. reagieren auf einen xy-Wert. Da fehlt mir der Ansatz um Werte über einen Channel->Item angezeigt zu bekommen und dort direkt zu ändern.
Das Steuern über ein Colorpicker-Widget auf einer Page funktioniert erst einmal und ich habe auch herausgefunden, dass ich über den Topic
Code: Alles auswählen
{["color": {"R" : r_value, "G": g_value, "B": b_value}}
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Handling von Nicht-Hue-RGB-Leuchtmitteln
Wichtig ist, dass Du eine Leuchte immer mit dem gleichen Modus befiehlst, den die Lampe auch liefert. Wenn Zigbee2mqtt nur xyy zurück liefert, dann muss der gesamte Channel mit xyy arbeiten, ansonsten müsste man Sende- und Empfangsweg über zwei getrennte Channel realisieren, das wäre aber quasi der letzte Weg.
Das mqtt Binding in openHAB unterstützt jedenfalls alle drei Modi.
Das mqtt Binding in openHAB unterstützt jedenfalls alle drei Modi.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 102
- Registriert: 18. Apr 2021 11:30
- Wohnort: Berlin
Re: Handling von Nicht-Hue-RGB-Leuchtmitteln
Leider handhabt Openhab dies bei dem Item scheinbar nicht.
Ich habe einen Color-Channel erstellt mit Color-Mode CIE und mit einem Color-Item verlinkt, welches die Kategorie colorlight hat.
Nun bekomme ich als Steuerelemente aber 2 Slider für H - S - B angezeigt, die dann irgendwelche Farben und Warnungen im Log erzeugen, aber nicht so, wie ich es gern hätte und es beim Hue-Binding ja geht.
Da werde ich wohl noch etwas experimentieren und recherchieren müssen, wie ich das hinbekomme.
Hmm: Vernünftige Farben bekomme ich dann, wenn ich den S-Slider, also die Sättigung, höher als 75 stelle, Vollfarben mit 100. wie sage ich dem Item das dann aber z.B. über ein Skript? Der B - Slider macht irgendwie gar nichts.
Ich habe einen Color-Channel erstellt mit Color-Mode CIE und mit einem Color-Item verlinkt, welches die Kategorie colorlight hat.
Nun bekomme ich als Steuerelemente aber 2 Slider für H - S - B angezeigt, die dann irgendwelche Farben und Warnungen im Log erzeugen, aber nicht so, wie ich es gern hätte und es beim Hue-Binding ja geht.
Da werde ich wohl noch etwas experimentieren und recherchieren müssen, wie ich das hinbekomme.
Hmm: Vernünftige Farben bekomme ich dann, wenn ich den S-Slider, also die Sättigung, höher als 75 stelle, Vollfarben mit 100. wie sage ich dem Item das dann aber z.B. über ein Skript? Der B - Slider macht irgendwie gar nichts.
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Handling von Nicht-Hue-RGB-Leuchtmitteln
Wie gesagt, intern arbeitet openHAB immer mit HSB, es ist vollkommen egal, welcher Typ Lampe hier angesteuert wird.
Wichtig ist aber, dass Input und Output (also beide Kommunikationsrichtungen mit der Lampe) identisch arbeiten. Das heißt, Wenn Du eine Lampe mit CIE zur Steuerung anlegst, dann muss auch die Rückmeldung mit CIE erfolgen. Und natürlich muss die Betriebsart vom Binding vorgesehen sein.
Wichtig in dem Zusammenhang: Was ist bitte CIE? Das openHAB MQTT Binding unterstützt laut offizieller Doku:
Wichtig ist aber, dass Input und Output (also beide Kommunikationsrichtungen mit der Lampe) identisch arbeiten. Das heißt, Wenn Du eine Lampe mit CIE zur Steuerung anlegst, dann muss auch die Rückmeldung mit CIE erfolgen. Und natürlich muss die Betriebsart vom Binding vorgesehen sein.
Wichtig in dem Zusammenhang: Was ist bitte CIE? Das openHAB MQTT Binding unterstützt laut offizieller Doku:
Also entweder HSB, RGB oder XYY.colorMode: An optional string that defines the color representation: HSB, RGB or XYY (x,y,brightness). Defaults to HSB when not specified.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 102
- Registriert: 18. Apr 2021 11:30
- Wohnort: Berlin
Re: Handling von Nicht-Hue-RGB-Leuchtmitteln
Ich habe nur die Hauptabkürzung genommen, CIE ist dann wohl eine genormte Definition von xyY:
kann weder ich noch scheinbar der Channel etwas anfangen. Oder kennst du ein Skript, was das in HSB umwandelt?
Steuerungstechnisch scheint es ja bei mir zu funktionieren, nur eingabetechnisch nicht, mit den Payload Code: Alles auswählen
{"color":{"hue":120,"saturation":100,"x":0.1724,"y":0.7468}}
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Handling von Nicht-Hue-RGB-Leuchtmitteln
Na, das Ding ist ja, intern arbeitet openHAB mit einer kommaseparierten Werteliste, es kommt aber ein JSON Objekt rein. Zum Senden musst Du aus der kommaseparierten Werteliste das JSON bauen (formatBeforePublish), und genauso muss das für den Eingangswert nun auch passieren, die Werte aus dem JSON herauslösen, in die richtige Reihenfolge bringen und durch Kommata voneinander trennen.
Ich vermute, das wird am einfachsten mit der JS Transformation gehen (auch die muss installiert werden).
JS steht für JavaScript. Du musst also ein JavaScript Script schreiben, welches den ankommenden Wert in die Bestandteile zerlegt und korrekt zusammensetzt, z.B. so:
Den Code speicherst Du im Verzeichnis $OPENHAB_CONF/transform/ ab, z.B. unter dem Namen json2cie.js (auf einem openHABian Image z.B. /etc/openhab/transform/json2cie.js)
Nun kannst Du im Channel den Parameter transformationPattern="JS:json2cie.js" setzen (in der UI über Show advanced). Damit nimmt openHAB den ankommenden Wert (das JSON Objekt) und leitet es an den JS Transformation Service weiter, mit dem Namen des auszuführenden Scripts. Im Script wird das JSON Objekt in seine Bestandteile zerlegt und in der passenden Reihenfolge zurückgegeben.
Da der Channel als CIE definiert ist (nirgends in der Doku...), wird openHAB die gelieferten Werte anschließend automatisch nach HSB überführen.
Zum Debuggen kann es sinnvoll sein, zusätzlich zum color Channel noch einen String Channel anzulegen, auch dort kannst Du transformationPattern setzen (identisch zum color Channel) und Dir dann anschließend das Resultat in einem String Item anzeigen lassen.
Ich vermute, das wird am einfachsten mit der JS Transformation gehen (auch die muss installiert werden).
JS steht für JavaScript. Du musst also ein JavaScript Script schreiben, welches den ankommenden Wert in die Bestandteile zerlegt und korrekt zusammensetzt, z.B. so:
Code: Alles auswählen
(function(dataString){
var json = JSON.parse(dataString);
var hue = json.color.hue;
var saturation = json.color.saturation;
var x = json.color.x;
var y = json.color.y;
var retval = x + ", " + y + ", " + saturation;
return retval;
})(input)
Nun kannst Du im Channel den Parameter transformationPattern="JS:json2cie.js" setzen (in der UI über Show advanced). Damit nimmt openHAB den ankommenden Wert (das JSON Objekt) und leitet es an den JS Transformation Service weiter, mit dem Namen des auszuführenden Scripts. Im Script wird das JSON Objekt in seine Bestandteile zerlegt und in der passenden Reihenfolge zurückgegeben.
Da der Channel als CIE definiert ist (nirgends in der Doku...), wird openHAB die gelieferten Werte anschließend automatisch nach HSB überführen.
Zum Debuggen kann es sinnvoll sein, zusätzlich zum color Channel noch einen String Channel anzulegen, auch dort kannst Du transformationPattern setzen (identisch zum color Channel) und Dir dann anschließend das Resultat in einem String Item anzeigen lassen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 102
- Registriert: 18. Apr 2021 11:30
- Wohnort: Berlin
Re: Handling von Nicht-Hue-RGB-Leuchtmitteln
ok, danke dir, werde aber erst am Wochenende Zeit dafür haben. Ich werde mich auf jeden Fall melden.
-
- Beiträge: 14
- Registriert: 20. Feb 2023 09:26
Re: Handling von Nicht-Hue-RGB-Leuchtmitteln
Moin, habe hier ebenfalls eine Nous am Wickel, eine https://www.zigbee2mqtt.io/devices/P3Z.html.
Laut Zigbee2MQTT etwartet dieses Gerät (color_mode = xy) anscheinend Farbe und Helligkeit in sepearaten Topics. Hat dafür schon jemand eine elegante Lösung gefunden? Und wenn nicht - hat jemand einen Idee ob/wie man dies elegant lösen könnte? LG Gerrit
Laut Zigbee2MQTT etwartet dieses Gerät (color_mode = xy) anscheinend Farbe und Helligkeit in sepearaten Topics. Hat dafür schon jemand eine elegante Lösung gefunden? Und wenn nicht - hat jemand einen Idee ob/wie man dies elegant lösen könnte? LG Gerrit