MQTT Value Transformations

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Willi Brumm
Beiträge: 17
Registriert: 28. Apr 2023 20:06
Answers: 0

MQTT Value Transformations

Beitrag von Willi Brumm »

Moin zusammen,

ich habe einen Fensterkontakt, den ich über MQTT (zigbee2mqtt) abfrage. Er liefert mir im Topic "contact" jeweils "true" für geschlossen und "false" für geöffnet. Und genau da ist mein Problem bzw. meine Frage:

Kann ich des jeweiligen Status zu "open" bzw. "closed" (geöffnet/geschlossen) ändern? Ich dachte da an sowas wie die "Incommig Value Transformations":

Code: Alles auswählen

transformationPattern="JSONPATH:$.contact", geschlossen="true", geöffnet="false"
Wo kann ich das ändern? Bei "Transform Values" --> "Incoming Value Transformations" kann ich das nicht eingeben.
Oder kann/muss ich da vielleicht schon in zigbee2nḿqqt was ändern?

Wichtig: Ich möchte mit geöffnet/geschlossen auch weiterarbeiten. Da heißt ich möchte nicht einfach nur den Namen zu Anzeigezwecken ändern.

Vielen Dank vorab ;-)
thingconfig.png
thingconfig2.png
von udo1toni » 6. Aug 2023 14:19
Zunächst einmal zu den Begrifflichkeiten:
Das Topic ist in diesem Fall (anhand Deiner Screenshots) zigbee2mqtt/Fensterkontakt-Kinderzimmer.
Die Payload dieses Topics enthält ein JSON Objekt, welches unter anderen auch das Feld contact enthält.
Über die incomming Value Transformation kannst Du per JSONPATH Transformation Service den Wert in diesem Feld extrahieren: JSONPATH:S.contact
Nun erhältst Du die Status true und false.
Damit Du in openHAB mit den korrekten Status weiter arbeiten kannst, musst Du unbedingt einen Contact Channel verwenden, kein String.
Der Channeltyp Contact bietet dann in der Konfiguration zwei Parameter, custom On/Open Value und custom Off/Closed value. In diesem beiden Feldern trägst Du passend true und false ein.
Die Payload kommt also über das Topic rein, wird von der incomming value transformation auf die Status true/false reduziert und diese Status werden schlussendlich über die custom values in OPEN bzw. CLOSED umgesetzt.
Nun koppelst Du ein Contact Item mit diesem Channel.
Damit Du nicht OPEN/CLOSED angezeigt bekommst, wechselst Du im Item in die Metadaten und fügst dort eine state Description hinzu.
Wenn ich es richtig im Kopf habe, reicht es, im Feld options zwei Zeilen einzufügen:

Code: Alles auswählen

OPEN=offen
CLOSED=geschlossen
Natürlich kannst Du auch statt "offen" "geöffnet" schreiben, das ist komplett Dir überlassen.
In Rules nutzt Du hingegen OPEN/CLOSED als Werte, denn ein Contact Item kennt nur diese beiden Zustände. Verknüpfst Du ein window Icon mit dem Contact Item, dann wird das Icon dynamisch entweder ein geöffnetes oder eine geschlossenes Fenster anzeigen. Schon aus diesem Grund verbietet es sich, hier mit Strings zu arbeiten (etwas anders ist es, wenn das Fenster zusätzliche Kontakte für den Zustand gekippt hat, dann muss es ein String Item sein, welches aber als Werte OPEN/CLOSED/AJAR liefern muss, das geht meist nur über Umwege.
Gehe zur vollständigen Antwort
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: MQTT Value Transformations

Beitrag von udo1toni »

Zunächst einmal zu den Begrifflichkeiten:
Das Topic ist in diesem Fall (anhand Deiner Screenshots) zigbee2mqtt/Fensterkontakt-Kinderzimmer.
Die Payload dieses Topics enthält ein JSON Objekt, welches unter anderen auch das Feld contact enthält.
Über die incomming Value Transformation kannst Du per JSONPATH Transformation Service den Wert in diesem Feld extrahieren: JSONPATH:S.contact
Nun erhältst Du die Status true und false.
Damit Du in openHAB mit den korrekten Status weiter arbeiten kannst, musst Du unbedingt einen Contact Channel verwenden, kein String.
Der Channeltyp Contact bietet dann in der Konfiguration zwei Parameter, custom On/Open Value und custom Off/Closed value. In diesem beiden Feldern trägst Du passend true und false ein.
Die Payload kommt also über das Topic rein, wird von der incomming value transformation auf die Status true/false reduziert und diese Status werden schlussendlich über die custom values in OPEN bzw. CLOSED umgesetzt.
Nun koppelst Du ein Contact Item mit diesem Channel.
Damit Du nicht OPEN/CLOSED angezeigt bekommst, wechselst Du im Item in die Metadaten und fügst dort eine state Description hinzu.
Wenn ich es richtig im Kopf habe, reicht es, im Feld options zwei Zeilen einzufügen:

Code: Alles auswählen

OPEN=offen
CLOSED=geschlossen
Natürlich kannst Du auch statt "offen" "geöffnet" schreiben, das ist komplett Dir überlassen.
In Rules nutzt Du hingegen OPEN/CLOSED als Werte, denn ein Contact Item kennt nur diese beiden Zustände. Verknüpfst Du ein window Icon mit dem Contact Item, dann wird das Icon dynamisch entweder ein geöffnetes oder eine geschlossenes Fenster anzeigen. Schon aus diesem Grund verbietet es sich, hier mit Strings zu arbeiten (etwas anders ist es, wenn das Fenster zusätzliche Kontakte für den Zustand gekippt hat, dann muss es ein String Item sein, welches aber als Werte OPEN/CLOSED/AJAR liefern muss, das geht meist nur über Umwege.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Willi Brumm
Beiträge: 17
Registriert: 28. Apr 2023 20:06
Answers: 0

Re: MQTT Value Transformations

Beitrag von Willi Brumm »

Moin udo1toni,

sorry, dass ich mit den Begrifflichkeiten da etwas durcheinander gebracht habe. Umso erfreulicher ist es, dass du trotzdem alles verstanden hast und eine (wie immer) sehr ausführliche und verständliche Antwort gegeben hast. 8-)

Danke dafür!! Jetzt läuft alles und ich habe, dank dir mal wieder was dazugelernt.

Viele Grüße

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: MQTT Value Transformations

Beitrag von udo1toni »

Prima :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten