Seite 1 von 1

OH3 mqtt output transformation

Verfasst: 20. Mär 2021 23:05
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?

Re: OH3 mqtt output transformation

Verfasst: 21. Mär 2021 12:43
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"}']

Re: OH3 mqtt output transformation

Verfasst: 21. Mär 2021 18:46
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

Re: OH3 mqtt output transformation

Verfasst: 21. Mär 2021 22:28
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\"}" ]
    }
}

Re: OH3 mqtt output transformation

Verfasst: 21. Mär 2021 23:01
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ß