NEWS
[gelöst] - Learning JS - Part 2
-
Ich habe in einem DP ein solches JSON:
[ { "Device": "Taster Bad", "Battery": "50%" },{ "Device": "Heizung Bad", "Battery": "90%" },{ "Device": "Heizung Arbeitszimmer", "Battery": "30%" },{ "Device": "Gaszähler", "Battery": "3V" } ]Und dazu folgenden Code:
var devices = getState("device-watcher.0.batteryList").val; var jsonData = JSON.parse(devices); var message = ''; for (var i = 0; i < jsonData.length; i++) { message += jsonData[i].Device + '\n'; } console.log(message);Warum erhalte ich hier diese Fehler?
1.12.2022, 23:57:02.549 [info ]: javascript.0 (21396) Start javascript script.js.common.Informationen.OfflineWarnung 1.12.2022, 23:57:02.563 [info ]: javascript.0 (21396) script.js.common.Informationen.OfflineWarnung: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 1.12.2022, 23:57:02.572 [error]: javascript.0 (21396) script.js.common.Informationen.OfflineWarnung: SyntaxError: Unexpected token o in JSON at position 1 1.12.2022, 23:57:02.573 [error]: javascript.0 (21396) at script.js.common.Informationen.OfflineWarnung:2:21 1.12.2022, 23:57:02.573 [error]: javascript.0 (21396) at script.js.common.Informationen.OfflineWarnung:8:3Irgendwas stimmt da mit dem
getStatenicht.
Schreibe ich den Inhalt dieses DP direkt (von Hand) in die Variable, funktioniert es einwandfrei. -
Ich habe in einem DP ein solches JSON:
[ { "Device": "Taster Bad", "Battery": "50%" },{ "Device": "Heizung Bad", "Battery": "90%" },{ "Device": "Heizung Arbeitszimmer", "Battery": "30%" },{ "Device": "Gaszähler", "Battery": "3V" } ]Und dazu folgenden Code:
var devices = getState("device-watcher.0.batteryList").val; var jsonData = JSON.parse(devices); var message = ''; for (var i = 0; i < jsonData.length; i++) { message += jsonData[i].Device + '\n'; } console.log(message);Warum erhalte ich hier diese Fehler?
1.12.2022, 23:57:02.549 [info ]: javascript.0 (21396) Start javascript script.js.common.Informationen.OfflineWarnung 1.12.2022, 23:57:02.563 [info ]: javascript.0 (21396) script.js.common.Informationen.OfflineWarnung: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 1.12.2022, 23:57:02.572 [error]: javascript.0 (21396) script.js.common.Informationen.OfflineWarnung: SyntaxError: Unexpected token o in JSON at position 1 1.12.2022, 23:57:02.573 [error]: javascript.0 (21396) at script.js.common.Informationen.OfflineWarnung:2:21 1.12.2022, 23:57:02.573 [error]: javascript.0 (21396) at script.js.common.Informationen.OfflineWarnung:8:3Irgendwas stimmt da mit dem
getStatenicht.
Schreibe ich den Inhalt dieses DP direkt (von Hand) in die Variable, funktioniert es einwandfrei.@codierknecht
Mach doch mal ein log nach dem getState. Ist der DP ein object, wird er automatich geparsed.
Einmal die Objekt-Eigenschaften von dem DPdevice-watcher.0.batteryList -
@codierknecht
Mach doch mal ein log nach dem getState. Ist der DP ein object, wird er automatich geparsed.
Einmal die Objekt-Eigenschaften von dem DPdevice-watcher.0.batteryList@mcu
Danke für den Schubs in die richtige Richtung
Der DP enthält bereits ein Array von Objekten. Das wird lediglich im Objektbaum als JSON dargestellt.
Parsen ist gar nicht nötig.{ "_id": "device-watcher.0.batteryList", "type": "state", "common": { "type": "array", "role": "json", "read": true, "write": false }, "native": {}, "from": "system.adapter.device-watcher.0", "ts": 1669580330469, "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "user": "system.user.admin" }Damit sieht das dann (prinzipiell) so aus und funzt einwandfrei :-D
on({id: "device-watcher.0.lowBatteryCount", change: "ne"}, async function (obj) { var batteryCount = obj.state.val; if (batteryCount > 0) { var devices = getState("device-watcher.0.lowBatteryList").val; var message = 'ACHTUNG: Batterie in ' + batteryCount + ' Gerät(en) schwach:\n'; for (var i = 0; i < devices.length; i++) { message += devices[i].Device + '\n'; } } else { message = 'Alle Batterien sind OK!'; } sendSignalMessage(message, '+49xxxxxxxxxx'); });
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