OH3 mqtt output transformation

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
slime91
Beiträge: 6
Registriert: 23. Sep 2018 18:02
Answers: 0

OH3 mqtt output transformation

Beitrag von slime91 »

Moin,
ich nutze folgendes Setup:
- OH3 auf einem RPi3
- zigbee2mqtt mit einem Zigbee Stick
- mehrere Zigbee Lampen

Bisher habe ich alles über die grafische Oberfläche konfiguriert. Davon möchte ich aber gerne weg, hin zur file-basierten Konfiguration. Über die grafische Konfiguration hat alles soweit funktioniert, daher gehe ich von einem Problem vor dem Bildschirm aus.

Ich habe ein Thing und ein Item für eine Lampe angelegt. Darüber soll eine mqtt-Nachricht gepublisht werden wenn das item (switch) betätigt wird.
Der Channel im Thing sieht so aus:

Code: Alles auswählen

Type switch : Fensterbrett_Lampe "Lampe Fensterbrett" [ stateTopic="zigbee2mqtt/Fensterbrett_Lampe/get", commandTopic="zigbee2mqtt/Fensterbrett_Lampe/set"]
Damit wird beim Betätigen des items eine 1 bzw. 0 gesendet. Meine Lampe erwartet etwas wie {"state":"ON"}.
Ich hatte eigentlich gedacht mit einem

Code: Alles auswählen

transformationPatternOut="{"state":"%s", "transition":"5"}"
werde ich da was, das führt aber nur zu einer Fehlermeldung im Log:

Code: Alles auswählen

 Configuration model 'WoZi_Lampe_Fensterbrett.things' has errors, therefore ignoring it: [5,193]: mismatched input 'state' expecting ']'

[5,202]: no viable alternative at input 's'

[5,207]: no viable alternative at input 'transition'

[5,220]: no viable alternative at input '5'

[9,1]: extraneous input '}' expecting EOF
Ich weiß grade nicht so richtig wie ich da nun weiter machen soll. Hat jemand eine Idee für mich?

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

Re: OH3 mqtt output transformation

Beitrag von udo1toni »

Du musst in diesem Fall außenrum einfache Anführungszeichen verwenden, also so:

Code: Alles auswählen

Type switch : Fensterbrett_Lampe "Lampe Fensterbrett" [ stateTopic="zigbee2mqtt/Fensterbrett_Lampe/get", commandTopic="zigbee2mqtt/Fensterbrett_Lampe/set", transformationPatternOut='{"state":"%s", "transition":"5"}']
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

slime91
Beiträge: 6
Registriert: 23. Sep 2018 18:02
Answers: 0

Re: OH3 mqtt output transformation

Beitrag von slime91 »

Moin,
danke für deinen Tip! Irgendwas scheint aber immernoch nicht zu stimmen. Jetzt wird einfach garnicht mehr gepublisht.
Hier einmal die ganze Config:
Thing:

Code: Alles auswählen

Bridge mqtt:broker:mqttBroker [ host="localhost", secure=false ]{
    Thing topic Fensterbrett_Lampe {
    Channels:
        Type switch : Lampe_Fensterbrett_state "State Lampe Fensterbrett" [ stateTopic="zigbee2mqtt/Fensterbrett_Lampe/get", commandTopic="zigbee2mqtt/Fensterbrett_Lampe/set", transformationPatternOut='{"state":"%s", "transition":"5"}' ]
    }
}
item

Code: Alles auswählen

Switch Lampe_Fensterbrett "Lampe Fensterbrett" { channel="mqtt:topic:mqttBroker:Fensterbrett_Lampe:Lampe_Fensterbrett_state" }
sidemap

Code: Alles auswählen

Switch item=Lampe_Fensterbrett icon="switch" label="Lampe"
Wenn ich die transformationPatternOut einfüge gehen alle mqtt Things in UNINITIALIZED. Vorher gibt es eine Warnung für das thing in dem die Lampe konfiguriert ist:

Code: Alles auswählen

Configuration model 'WoZi_Lampe_Fensterbrett.things' has errors, therefore ignoring it: [4,202]: Character array is missing "e" notation exponential mark.
Vielleicht habt ihr nochmal eine Idee?

Gruß
Patrick

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

Re: OH3 mqtt output transformation

Beitrag von udo1toni »

Hmm... Dann probiere es mal andersrum:

Code: Alles auswählen

Bridge mqtt:broker:mqttBroker [ host="localhost", secure=false ]{
    Thing topic Fensterbrett_Lampe {
    Channels:
        Type switch : Lampe_Fensterbrett_state "State Lampe Fensterbrett" [ stateTopic="zigbee2mqtt/Fensterbrett_Lampe/get", commandTopic="zigbee2mqtt/Fensterbrett_Lampe/set", transformationPatternOut="{'state':'%s', 'transition':'5'}" ]
    }
}
Als letzte Möglichkeit könntest Du noch versuchen, die Anführungszeichen zu escapen:

Code: Alles auswählen

Bridge mqtt:broker:mqttBroker [ host="localhost", secure=false ]{
    Thing topic Fensterbrett_Lampe {
    Channels:
        Type switch : Lampe_Fensterbrett_state "State Lampe Fensterbrett" [ stateTopic="zigbee2mqtt/Fensterbrett_Lampe/get", commandTopic="zigbee2mqtt/Fensterbrett_Lampe/set", transformationPatternOut="{\"state\":\"%s\", \"transition\":\"5\"}" ]
    }
}
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

slime91
Beiträge: 6
Registriert: 23. Sep 2018 18:02
Answers: 0

Re: OH3 mqtt output transformation

Beitrag von slime91 »

Moin,

vielen Dank für deine Hilfe. Leider haben beide Optionen nichts funktioniert.
Ich habe nochmal ein wenig rumprobiert und bin auf folgende Lösung gestoßen:

Code: Alles auswählen

        Type switch : Lampe_Fensterbrett_state "State Lampe Fensterbrett" [ stateTopic="zigbee2mqtt/Fensterbrett_Lampe/get", commandTopic="zigbee2mqtt/Fensterbrett_Lampe/set",on="ON", off="OFF", formatBeforePublish="{ \"state\": \"%s\"}" ]
Das ganze funktioniert auch mit der transition!

Code: Alles auswählen

        Type switch : Lampe_Fensterbrett_state "State Lampe Fensterbrett" [ stateTopic="zigbee2mqtt/Fensterbrett_Lampe/get", commandTopic="zigbee2mqtt/Fensterbrett_Lampe/set",on="ON", off="OFF", formatBeforePublish="{ \"state\": \"%s\",\"transition\":3 }" ]
Manchmal scheint es etwas zu dauern bis Änderungen im thing auch wirklich angewendet werden.

So bin ich erstmal zufrieden und kann alle Lampen einbinden. Vielen Dank!

Gruß

Antworten