Hello all.
I’m looking to convert an incoming string from my Tasmota TH16 to items via an openhab rule, but am having a JSONPATH error. I haven’t really forrayed into this form of transformation before, so I have to admit I could be missing something fundameltal here.
My incoming string is a variation of this:
{“Time”:“2019-12-16T21:43:35”,“SI7021”:{“Temperature”:15.2,“Humidity”:57.8},“TempUnit”:“C”}
The string is stored in sonoffCNCRoom_Sensor_Raw via MQTT. This is working,
My rule triggers on sonoffCNCRoom_Sensor_Raw change, but throws an error.
Rule:
rule "CNCRoom Sensor Transform"
when
Item sonoffCNCRoom_Sensor_Raw changed
then
var sJSONBLOB = sonoffCNCRoom_Sensor_Raw.state.toString
var sTemp = transform("JSONPATH","$.Temperature", sJSONBLOB)
var sHumid= transform("JSONPATH","$.Humidity", sJSONBLOB)
// var updateTime = transform("JSONPATH","$.Time", sJSONBLOB)
// will cheat and just use now.toString.
sonoffCNCRoom_Humidity.postUpdate(sHumid)
sonoffCNCRoom_Temp.postUpdate(sTemp)
sonoffCNCRoom_LastUpdate.postUpdate(now.toString)
end
items definitions:
Number sonoffCNCRoom_Humidity "Humidity [%.1f]" <humidity> (S_GeneralShop, gHumidityItems)
Number sonoffCNCRoom_Temp "Temperature [%.1f °C]" <temperature> (S_GeneralShop, gTemperatureItems)
String sonoffCNCRoom_Sensor_Raw "Sensor" (S_GeneralShop, gTemperatureItems) {channel="mqtt:topic:6da4d316:Sensor"}
DateTime sonoffCNCRoom_LastUpdate "CNC Room Sensor Last Update [%1$tm/%1$td %1tH:%1tM]" <clock>
Relevant excerpt from the log:
2019-12-16 22:03:37.001 [vent.ItemStateChangedEvent] - mqtt_topic_6da4d316_Sensor changed from {"Time":"2019-12-16T22:02:36","SI7021":{"Temperature":15.4,"Humidity":57.3},"TempUnit":"C"} to {"Time":"2019-12-16T22:03:36","SI7021":{"Temperature":15.4,"Humidity":57.3},"TempUnit":"C"}
2019-12-16 22:03:37.005 [vent.ItemStateChangedEvent] - sonoffCNCRoom_Sensor_Raw changed from {"Time":"2019-12-16T22:02:36","SI7021":{"Temperature":15.4,"Humidity":57.3},"TempUnit":"C"} to {"Time":"2019-12-16T22:03:36","SI7021":{"Temperature":15.4,"Humidity":57.3},"TempUnit":"C"}
==> /var/log/openhab2/openhab.log <==
2019-12-16 22:03:37.010 [DEBUG] [.internal.InfluxDBPersistenceService] - got String value {"Time":"2019-12-16T22:03:36","SI7021":{"Temperature":15.4,"Humidity":57.3},"TempUnit":"C"}
2019-12-16 22:03:37.015 [DEBUG] [.internal.InfluxDBPersistenceService] - got String value {"Time":"2019-12-16T22:03:36","SI7021":{"Temperature":15.4,"Humidity":57.3},"TempUnit":"C"}
2019-12-16 22:03:37.028 [WARN ] [rthome.model.script.actions.BusEvent] - Cannot convert '{"Time":"2019-12-16T22:03:36","SI7021":{"Temperature":15.4,"Humidity":57.3},"TempUnit":"C"}' to a state type which item 'sonoffCNCRoom_Humidity' accepts: [DecimalType, QuantityType, UnDefType].
2019-12-16 22:03:37.036 [WARN ] [rthome.model.script.actions.BusEvent] - Cannot convert '{"Time":"2019-12-16T22:03:36","SI7021":{"Temperature":15.4,"Humidity":57.3},"TempUnit":"C"}' to a state type which item 'sonoffCNCRoom_Temp' accepts: [DecimalType, QuantityType, UnDefType].
Any pointers/suggestions? I’ve wandered many JSONPATH documentation sites, with little direction.
I’m guessing it may have something to do with how the temperature/humidity is nested within the string.
Thanks!
–
(OH 2.4 on RPi3B extended onto a large SSD, MQTT working well with several other devices)