Seite 1 von 2

ZIgbee2MQTT RGB Controller Farbe

Verfasst: 30. Jan 2023 21:02
von DemonKing
Abend zusammen,

ich bin so langsam am verzweifeln. Ich habe über ZIgbee2Mqtt einen LED RGB Controller angebunden. Darüber kann ich ihn auch ohne Probleme steuern. Aber leider macht OH3 Probleme. Ich habe die Channels erstellt. An/Aus und Dimmen funktioniert ohne Probleme. Jedoch bekomme ich es seit Tagen nicht hin die Farben zu wechseln. Ich erstelle den Channel und danach ein Item. Leider wird mit beim Item kein Colorpicker angezeigt sondern das Item bleibt leer. Ich habe alle möglichen Channeleinstellungen probiert, habe mit sehr sehr viele Channeleinstellungen im Internet angesehen (die bei den Usern funktionierten), bei mir eingebunden aber leider hat nix funktioniert. Der Farbmodus des Controllers ist XY.
Mein Channel sieht aktuell so aus:

Code: Alles auswählen

- id: colorpicker1112
    channelTypeUID: mqtt:color
    label: Color
    description: ""
    configuration:
      commandTopic: zigbee2mqtt/test/set
      colorMode: XYY
      formatBeforePublish: '{"color":{"hue":%s,"saturation":%s,"x":%s,"y":%s}}'
      stateTopic: zigbee2mqtt/test/
      transformationPattern: JSONPATH:$.color:{"hue":"","saturation":"","x":"","y":""}
Die Statuseinträge aus Zigbee2MQTT sehen folgendermaßen aus:

Code: Alles auswählen

{
    "brightness": 242,
    "color": {
        "hue": 43,
        "saturation": 27,
        "x": 0.3497,
        "y": 0.3533
    },
    "color_mode": "xy",
    "linkquality": 107,
    "state": "OFF"
}
Ich hoffe ihr könnt mir helfen

MfG
Chris

PS: Ich kann auch die Options-Seite von Zigbee2MQTT posten falls es weiter helfen sollte

Re: ZIgbee2MQTT RGB Controller Farbe

Verfasst: 30. Jan 2023 22:43
von udo1toni
Das kann so nicht funktionieren. %s steht für den gesamten Wert als String. Du kannst nicht ernsthaft erwarten, dass vier mal ein garantiert falsches Wertetupel (Format 1, 2, 3, 4) in ein JSON Objekt zu schreiben irgendwas bewirkt.
Wenn Du in die Doku schaust, kannst Du dies hier finden: https://www.openhab.org/addons/bindings ... re-publish

colorXY ist nicht gelistet. Wenn Du großes Glück hast, ist es nur nicht korrekt dokumentiert.
Dann würde ich %1$d %2$d %3$d und %4$d als die vier Werte erwarten, in etwa so:

Code: Alles auswählen

formatBeforePublish: '{"color":{"hue":%1$d,"saturation":%2$d,"x":%3$d,"y":%4$d}}'
%1 ... %4 ist dann der erste bis vierte Wert aus dem Tupel, $d ist die Formatierung als DecimalType, eine Zahl ohne Nachkommastellen.

Wie gesagt, das kann funktionieren, muss es aber nicht, der Datentyp colorXY ist in der Doku nicht erwähnt.
Als Alternative bliebe aber, das Topic mit Hilfe einer Rule zu schreiben.

Re: ZIgbee2MQTT RGB Controller Farbe

Verfasst: 31. Jan 2023 07:11
von Quautiputzli
Normalerweise funktioniert das schon über color XY mit openHAB. OH rechnet das um. Ich hab das probehalber auch schon probiert, hab aber nun dazu keine Funktion mehr drin im OH.

Welche Lampe hast du denn?
Hier kanns du sie auswählen, und nachsehen, wie das gesendete Format genau aussehen muss:
https://www.zigbee2mqtt.io/supported-devices/
Das solltest du als erstes checken.

Re: ZIgbee2MQTT RGB Controller Farbe

Verfasst: 31. Jan 2023 17:21
von DemonKing
udo1toni hat geschrieben: 30. Jan 2023 22:43 Das kann so nicht funktionieren. %s steht für den gesamten Wert als String. Du kannst nicht ernsthaft erwarten, dass vier mal ein garantiert falsches Wertetupel (Format 1, 2, 3, 4) in ein JSON Objekt zu schreiben irgendwas bewirkt.
Wenn Du in die Doku schaust, kannst Du dies hier finden: https://www.openhab.org/addons/bindings ... re-publish

colorXY ist nicht gelistet. Wenn Du großes Glück hast, ist es nur nicht korrekt dokumentiert.
Dann würde ich %1$d %2$d %3$d und %4$d als die vier Werte erwarten, in etwa so:

Code: Alles auswählen

formatBeforePublish: '{"color":{"hue":%1$d,"saturation":%2$d,"x":%3$d,"y":%4$d}}'
%1 ... %4 ist dann der erste bis vierte Wert aus dem Tupel, $d ist die Formatierung als DecimalType, eine Zahl ohne Nachkommastellen.

Wie gesagt, das kann funktionieren, muss es aber nicht, der Datentyp colorXY ist in der Doku nicht erwähnt.
Als Alternative bliebe aber, das Topic mit Hilfe einer Rule zu schreiben.
Vielen Dank für den Post und Link. Das hat mir schon ein wenig die Augen geöffnet.
Ich muss dazu sagen OH3 habe ich schon ca ein halbes bis dreiviertel Jahr im Einsatz. Bin aber dennoch blutiger Anfänger und war froh dass alles bis jetzt so lief wie ich mir das vorgestellt hab auch wenn es bestimmt an einigen Punkten bestimmt falsch bzw ungünstig konfiguriert ist (MQTT Channel, Rules usw). Aber so ist das leider wenn man nicht die Zeit hat die man sich dafür eigentlich nehmen sollte und so gut wie alles durch rumprobieren und Google-Suchen konfiguriert.
Der Punkt "formatBeforePublish" ist doch dazu gedacht den Farbwert, den ich einstelle, zu formatieren bevor er an den MQQT-Broker geschickt wird oder hab ich da was falsch verstanden? Bis zu diesem Punkt komme ich gar nicht. Das momentane Problem ist das ich keine Werte vom MQTT-Broker bekomme und ich somit keine Möglichkeit habe den aktuellen Farbwert auszulesen geschweige den zu ändern. Also das Item was ich erstelle ist leer.
Quautiputzli hat geschrieben: 31. Jan 2023 07:11 Normalerweise funktioniert das schon über color XY mit openHAB. OH rechnet das um. Ich hab das probehalber auch schon probiert, hab aber nun dazu keine Funktion mehr drin im OH.

Welche Lampe hast du denn?
Hier kanns du sie auswählen, und nachsehen, wie das gesendete Format genau aussehen muss:
[url]<a class="vglnk" href="https://www.zigbee2mqtt.io/supported-devices/[/url" rel="nofollow"><span>https</span><span>://</span><span>www</span><span>.</span><span>zigbee2mqtt</span><span>.</span><span>io</span><span>/</span><span>supported</span><span>-</span><span>devices</span><span>/[/</span><span>url</span></a>]
Das solltest du als erstes checken.
Ich habe so einen RGB-Controller : https://www.zigbee2mqtt.io/devices/TS0503B.html
Hab davon mehrere im Einsatz. Es gibt jedoch zwei verschiedene Varianten hab ich das Gefühl was die Attribute bei Color betrifft. In diesem Fall sind es Hue, Saturation, X, Y. Bei einem anderen sind es nur X und Y.
Ich bekomme aber beide Varianten den Color-Channel nicht in OH3 konfiguriert

Re: ZIgbee2MQTT RGB Controller Farbe

Verfasst: 31. Jan 2023 17:38
von DemonKing
Ich habe gerade ein wenig im MQTT Explorer rumgespielt und da kann ich die Farben über RGB-Werte auch ändern. Das würde unter Umständen einen Farbwechsel vereinfachen.
Aber leider zeigt mir OH immer noch keinen Colorpicker

Re: ZIgbee2MQTT RGB Controller Farbe

Verfasst: 31. Jan 2023 18:19
von udo1toni
Der Colorpicker kommt später :)
Ja, das mit dem transformationPattern ist auch so eine Sache. Das war mir bei Deinem ersten Post gar nicht aufgefallen...
Ich habe ehrlich gesagt gar keine Ahnung, wie man das aufbereiten muss. Ein erster Versuch wäre
JSONPATH:$.color (also ohne den ganzen Schmonsens hintendran.
JSONPATH hangelt sich am Objektbaum entlang und extrahiert den angegebenen Zweig des Objekts, das wäre also bei $.color der Teil

Code: Alles auswählen

{
"hue": 43,
"saturation": 27,
"x": 0.3497,
"y": 0.3533
}
allerdings sollten die Daten eigentlich einfach mit Kommata getrennt geschrieben werden... Und ich bin mir auch nicht sicher, ob die Daten überhaupt so extrahiert werden können.

EDIT:
Ich hab da noch mal drüber nachgedacht, es läuft darauf hinaus, dass man die Werte über ein JavaScript Script extrahieren bzw. zusammenbauen muss. Es gibt sogar einen konkreten Link dazu:
https://community.openhab.org/t/zigbee2 ... /86362/193

Das Ganze läuft also etwas anders ab: Es gibt zwei Scripte für Input und Output. Diese werden über das transformationPattern bzw. über das transformationPatternOut aufgerufen. Die beiden Scripte bekommen bei der Übergabe das komplette JSON Objekt bzw. den xy-Ferbwert und geben auf der Ausgangsseite den xy-Farbwertbzw. das komplette JSON Objekt aus. Auf diese Weise "sieht" openHAB den Wert in dem benötigten Format.

Im Beispiel geht es allerdings nur um die Helligkeit, nicht um die komplette Farbe. Letztlich läuft es aber auf das selbe hinaus, nur müssen halt vier Werte verarbeitet werden. Eventuell wirst Du auch in dem verlinkten Thread fündig, der ist nur "etwas" länger...

Den Colöorpicker bekommst Du übrigens erst im Item, d.h. Du musst den color Channel erst noch mit einem Color Item verlinken. Das Color Item schließlich verbindest Du in der UI mit dem Color Picker.
Das sieht auf den ersten Blick umständlich aus, aber diese beiden Abstraktionsebenen erlauben es, die Geräte völlig losgelöst von der verwendeten Technik in openHAB immer identisch zu bedienen. Farbsteuerung ist definitiv etwas für Fortgeschrittene :) weil es keine einfache Standardkonfiguration dafür gibt.

Behalte bitte auch immer in Hinterkopf, dass jede verwendete Komponente installiert sein muss, hier also der JS Transformation Service.

Re: ZIgbee2MQTT RGB Controller Farbe

Verfasst: 31. Jan 2023 18:38
von DemonKing
Ich hab das jetzt mal nur mit JSONPATH:$.color probiert. Leider ohne Erfolg. Das Item ist immer noch leer bzw NULL.
Ich hab testweise mal einen String-Channel erstellt und als transformationPath JSONPATH:$.color angegeben und dort liest er die Werte richtig aus.

Re: ZIgbee2MQTT RGB Controller Farbe

Verfasst: 31. Jan 2023 20:22
von udo1toni
Hat mir keine Ruhe gelassen, ein paar Posts später eine Lösung, die vermutlich exakt passen wird:
https://community.openhab.org/t/zigbee2 ... /86362/201

Die beiden Scripte müssen im Ordner $OPENHAB_CONF/transform/ liegen, die Dateiendung ist verpflichtend .js, weil das die Scriptsprache ist.


Nur für den Hinterkopf, um noch mehr Verwirrung zu stiften...:
Mit openHAB3.4 gibt es auch noch den Script Transformation Service, der mittelfristig JS ablösen wird. Mit dem Script Transformation Service muss die Endung dann .script lauten, dafür kann man dort dann über den Link angeben, welche Scriptsprache verwendet wird.

Re: ZIgbee2MQTT RGB Controller Farbe

Verfasst: 31. Jan 2023 20:48
von DemonKing
Vielen Dank für deine Mühe. Ich werde es mir wahrscheinlich erst Donnerstag anschauen können (leider).

Hab eben nochmal etwas rumgespielt. Ich weiß nicht warum das so ist aber als ich das Item von Color auf Switch geändert habe und dann wieder zurück zu Color hatte ich auf einmal einen Colorpicker. Vielleicht hat mein OH nen Fehler, aber das ist ein anderes Thema.
Auf jeden Fall habe ich mit dem formatBeforPublish ein wenig rumgespielt und kann jetzt über den Colorpicker die Farben des RGB Controllers ändern. Also genau das was ich wollte. Für eure Hilfe bedanke ich mich schonmal. Aber eine Sache ist da noch. Wenn ich die Farbe über Zigbee2Mqtt ändere aktualisiert er den Colorpicker nicht. Für dieses Projekt ist das nicht so wichtig aber eventuell für andere. Und man möchte es ja richtig haben.

So sieht mein aktueller Channel aus.

Code: Alles auswählen

- id: colorpicker1112
    channelTypeUID: mqtt:color
    label: Color
    description: ""
    configuration:
      commandTopic: zigbee2mqtt/test/set
      colorMode: XYY
      formatBeforePublish: '{"color":{"x":"%s", "y":"%s"},"brightness":"%s"}'
      stateTopic: zigbee2mqtt/test
      transformationPattern: JSONPATH:$.color
Seht ihr da nen Fehler?
Oder würde dein Link mein Problem lösen?

Re: ZIgbee2MQTT RGB Controller Farbe

Verfasst: 31. Jan 2023 23:24
von udo1toni
Wie sieht denn bitte die Payload von zigbee2mqtt/test/set aus, wenn Du die Farbe änderst? Mit dem formatBeforePublish kann das eigentlich nicht funktionieren.
Und beim transformationPattern hatte ich ja schon erwähnt, dass das auch nicht korrekt sein kann.