NEWS
json parse array aus Datenpunkt
-
Hallo zusammen,
ich würde gerne nach einer Vorlage meinen Datenpunkt aufteilen.
//Verschachteltes JSON Object - dynamisch const json = 'mqtt.1.SmartHome.Velux.tele.SENSOR'; const obj2 = JSON.parse(json); for (var key in obj2) { console.log(key + ' => ' + obj2[key]); if (key === "Time") { createState("0_userdata.0.Test2.DHT11." + key , "", {name: key, type: 'string'}); setState('0_userdata.0.Test2.DHT11.' + key , obj2[key], true); } } for (var key in obj2.DHT11) { console.log(key + ' => ' + obj2.DHT11[key]); createState("0_userdata.0.Test2.DHT11." + key , "", {name: key, type: 'number'}); setState('0_userdata.0.Test2.DHT11.' + key , obj2.DHT11[key], true); }
bekomme ich diese Fehlermelungen
2:09:37.734 info javascript.0 (842) Stop script script.js.common.Velux_Sensor 12:09:37.889 info javascript.0 (842) Start javascript script.js.common.Velux_Sensor 12:09:37.919 info javascript.0 (842) script.js.common.Velux_Sensor: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 12:09:37.922 error javascript.0 (842) script.js.common.Velux_Sensor: SyntaxError: Unexpected token m in JSON at position 0 12:09:37.922 error javascript.0 (842) at script.js.common.Velux_Sensor:5:19 12:09:37.922 error javascript.0 (842) at script.js.common.Velux_Sensor:20:3
wenn ich
const json = '{"Time":"2023-02-06T12:00:30","DHT11":{"Temperature":20.8,"Humidity":15.0,"DewPoint":-6.9},"TempUnit":"C"}';
eingebe, passt alles.
Warum stimmt das beim Datenpunkt nicht? -
@australien sagte:
const json = 'mqtt.1.SmartHome.Velux.tele.SENSOR';
Das ist eine Datenpunkt-ID - kein JSON. Richtig:
const json = getState('mqtt.1.SmartHome.Velux.tele.SENSOR').val;
Im Skript fehlt ein Trigger. Der Datenpunkt wird nur einmal bei Skriptstart eingelesen.
-
@paul53
Danke, genau das war es.
nur noch eines, warum wird die TempUnit am ende des json nicht erkannt?{"Time":"2023-02-06T12:20:30","DHT11":{"Temperature":20.8,"Humidity":15.0,"DewPoint":-6.9},"TempUnit":"C"}
Kein Trigger?
Wird das script nicht immer nach Änderung des json ausgeführt? -
@australien sagte: Wird das script nicht immer nach Änderung des json ausgeführt?
Nein, genau dafür benötigt man einen Trigger.
-
@paul53
wie du merkst hab ich da keine Ahnung. Wie bekomme ich diesen Trigger? -
@australien sagte: Wie bekomme ich diesen Trigger?
const idJson = 'mqtt.1.SmartHome.Velux.tele.SENSOR'; const json = getState(idJson).val; const obj2 = JSON.parse(json); for (var key in obj2) { console.log(key + ' => ' + obj2[key]); if (key === "Time") { createState("0_userdata.0.Test2.DHT11." + key , "", {name: key, type: 'string'}); } } for (var key in obj2.DHT11) { console.log(key + ' => ' + obj2.DHT11[key]); createState("0_userdata.0.Test2.DHT11." + key , "", {name: key, type: 'number'}); } on(idJson, function(dp) { // triggert bei Wertänderung const obj = JSON.parse(dp.state.val); setState('0_userdata.0.Test2.DHT11.Time', obj.Time, true); for (var key in obj.DHT11) { setState('0_userdata.0.Test2.DHT11.' + key , obj.DHT11[key], true); } });
-
@paul53
Super, DANKE!Wieder was dazu gelernt!