Ich habe ein kleines Problem mit JSONPATH. Ich habe nun alles von Mqtt1.x nach Mqtt2.5 umgestellt. Das Ganze hat zwar
gedauert, aber es hat soweit funktioniert. Ein Problem habe ich jedoch mit JSONPATH.
Sofern beim Topic das entsprechende Payload dabei ist kein Problem, der Wert ist auszulesen, aber bei meiner Tasmota ZbBrigde senden z.B. die Umweltsensoren nur Werte die sich ändern. Also mal nur die Temperatur, mal die Feuchte, mal beides, mal mit Batterieangabe, mal ohne usw.
Funktioniert, wenn die Werte da sind. Das Problem ist, wenn diese fehlen, werden die Werte auf NULL gesetzt
MQTT Message:
Code: Alles auswählen
TOPIC: tardis/tele/ZigbeeBridge/1234/SENSOR
{"ZbReceived":{"0x1234":{"Device":"0x1234","BatteryVoltage":3.01,"BatteryPercentage":99,"Temperature":21.5,"Humidity":48.2,"Pressure":994,"PressureScale":-1,"PressureScaledValue":9945,"SeaPressure":994,"Endpoint":1,"LinkQuality":166}}}
oder
{"ZbReceived":{"0x1234":{"Device":"0x1234","Temperature":21.3,"Humidity":49.4,"Pressure":994,"PressureScale":-1,"PressureScaledValue":9945,"SeaPressure":994,"Endpoint":1,"LinkQuality":167}}}
Code: Alles auswählen
Thing topic Test {
Channels:
Type string : Test_Temp [ stateTopic="tardis/tele/ZigbeeBridge/1234/SENSOR", transformationPattern="JSONPATH:$.ZbReceived.*.Temperature" ]
Type string : Test_Hydo [ stateTopic="tardis/tele/ZigbeeBridge/1234/SENSOR", transformationPattern="JSONPATH:$.ZbReceived.*.Humidity" ]
Type string : Test_Batt [ stateTopic="tardis/tele/ZigbeeBridge/1234/SENSOR", transformationPattern="JSONPATH:$.ZbReceived.*.BatteryPercentage" ]
}
Code: Alles auswählen
String Test_Temp "Temperatur [%s °C]" { channel="mqtt:topic:Broker:Test:Test_Temp" }
String Test_Hydo "Feuchte [%s %%]" { channel="mqtt:topic:Broker:Test:Test_Hydo" }
String Test_Batt "Batterie [%s %%]" { channel="mqtt:topic:Broker:Test:Test_Batt" }
Code: Alles auswählen
2020-12-30 21:27:28.929 [vent.ItemStateChangedEvent] - Test_Hydo changed from 49.2 to NULL
2020-12-30 21:27:28.933 [vent.ItemStateChangedEvent] - Test_Batt changed from 98 to NULL
2020-12-30 21:27:28.940 [vent.ItemStateChangedEvent] - Test_Temp changed from 22.5 to 22.9
Bisher als rule (anderer Sensor):
Code: Alles auswählen
rule "Aquara THP 01 Sensor"
when
Item Aquara_THP_01 changed
then
val String json = (Aquara_THP_01.state as StringType).toString
if(Aquara_THP_01.state.toString.contains("Temperature")) {
val String temp = transform("JSONPATH", "$.ZbReceived.*.Temperature", json)
Aquara_THP_01_temp.postUpdate(temp)
}
usw.......
Bis dahin einen guten Rutsch in 2021 und bleibt gesund.
Holger