Hallo,
ich habe das MQTT Plugin bei mir erfolgreich integriert und bekomme von einem SONOFF auf fleissig die Daten (Testumgebung).
So wie ich es verstanden habe, kommen die Topics als JSON String.
Das MQTT Plugin versucht die Daten in das Format zu bringen, das bei der Itemdefinition als "type" definiert wurde.
Das der Konsole des SONOFF habe ich hier den gesendeten Inhalt in einem Topic:
Dieses weise ich einem Item, dass als dict definiert wurde, zu:
Damit möchte ich die einzelnen Werte aus dem JSON extrahieren.
Mit der Methode, die smai mal vergeschlagen hat, funktioniert es nicht immer. Es sieht so aus, dass man damit nur die Infos aus der "ersten Ebene" des JSON auslesen kann. Bei SSId, das im JSON in der "zweiten Ebene" steht, kommt im Log:
Der Inhalt des dict im Backend sieht so aus:
Daher die Frage, wie man am besten des JSON zerlegen kann, um an die Infos zu kommen? Braucht man da noch einen JSON endocer bzw. decoder?
So wie ich gesehen habe, sind die einzelnen Informationen im dem JSON auch oft in anderer Reihenfolge.
Danke für Eure "Best Practices"!
ich habe das MQTT Plugin bei mir erfolgreich integriert und bekomme von einem SONOFF auf fleissig die Daten (Testumgebung).
So wie ich es verstanden habe, kommen die Topics als JSON String.
Das MQTT Plugin versucht die Daten in das Format zu bringen, das bei der Itemdefinition als "type" definiert wurde.
Das der Konsole des SONOFF habe ich hier den gesendeten Inhalt in einem Topic:
tele/sonoff_1/STATE = {"Time":"2017-12-29T09:28:57","Uptime":17,"Vcc":3.178,"POWER":"OFF" ,"Wifi":{"AP":1,"SSId":"WLAN-Access","RSSI":52,"APMac":"C0:25:06:15:95:57"}}
Status_dict:
type: dict
mqtt_topic_in: tele/sonoff_1/STATE
Voltage:
type: num
eval_trigger: Sonoff.wz_Tasmota.Status_dict
eval: value['Vcc']
SSId:
type: num
eval_trigger: Sonoff.wz_Tasmota.Status_dict
eval: value['SSId']
type: dict
mqtt_topic_in: tele/sonoff_1/STATE
Voltage:
type: num
eval_trigger: Sonoff.wz_Tasmota.Status_dict
eval: value['Vcc']
SSId:
type: num
eval_trigger: Sonoff.wz_Tasmota.Status_dict
eval: value['SSId']
Mit der Methode, die smai mal vergeschlagen hat, funktioniert es nicht immer. Es sieht so aus, dass man damit nur die Infos aus der "ersten Ebene" des JSON auslesen kann. Bei SSId, das im JSON in der "zweiten Ebene" steht, kommt im Log:
WARNING Sonoff.wz_Tasmota.Status_dict.SSId Item Sonoff.wz_Tasmota.Status_dict.SSId: problem evaluating value['SSId']: 'SSId'
{'Time': '2017-12-29T10:04:15', 'Wifi': {'RSSI': 54, 'SSId': 'WLAN-Access', 'APMac': 'C0:25:06:15:95:57', 'AP': 1}, 'Vcc': 3.178, 'Uptime': 18, 'POWER': 'OFF'}
So wie ich gesehen habe, sind die einzelnen Informationen im dem JSON auch oft in anderer Reihenfolge.
Danke für Eure "Best Practices"!
Kommentar