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:3wenn 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? -
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:3wenn 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.
-
@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? -
@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.
-
@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? -
@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); } }); -
@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!
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden