NEWS
[GELÖST] Auslesen JSON Wert Bedeutung
-
Habe mir ein kleines Blockly geschrieben das einen Wert aus einer Objekt JSON in einen eigenen DP schreibt. Das funktioniert aber ich erhalte Fehlermeldungen und in der Ausgabe des Wertes erscheint nicht nur was ich dachte.
Die Fehlermeldung bemängelt einen falschen Zustandstyp. Aber egal was ich beim DP einstelle (String / Objekt) kommt diese Meldung. Was mache ich da falsch?
Zudem habe ich noch eine Verständnisfrage zum JSON. Der in den DP geschriebene Wert ist der den ich will, aber warum wird immer der aktuelle Wert des JSON in den DP geschrieben? Das JSON hat ja 24 Channels und so wie ich es sehe nimmt es irgendwie den aktuellen.2025-01-30 13:37:00.020 - info: javascript.0 (927) script.js.common.Werte_aus_Json: { val: undefined, ack: true } 2025-01-30 13:37:00.023 - info: javascript.0 (927) State value to set for "0_userdata.0.Tibberlink_Kanäle.höchste_Kosten_Status" has to be stringified but received type "object"
Hier noch das JSON
[ { "hour": 0, "startsAt": "2025-01-30T00:00:00.000+01:00", "total": 0.3263, "output": true }, { "hour": 1, "startsAt": "2025-01-30T01:00:00.000+01:00", "total": 0.3263, "output": true }, { "hour": 2, "startsAt": "2025-01-30T02:00:00.000+01:00", "total": 0.3274, "output": true }, { "hour": 3, "startsAt": "2025-01-30T03:00:00.000+01:00", "total": 0.3269, "output": true }, { "hour": 4, "startsAt": "2025-01-30T04:00:00.000+01:00", "total": 0.3263, "output": true }, { "hour": 5, "startsAt": "2025-01-30T05:00:00.000+01:00", "total": 0.3456, "output": true }, { "hour": 6, "startsAt": "2025-01-30T06:00:00.000+01:00", "total": 0.3827, "output": true }, { "hour": 7, "startsAt": "2025-01-30T07:00:00.000+01:00", "total": 0.398, "output": true }, { "hour": 8, "startsAt": "2025-01-30T08:00:00.000+01:00", "total": 0.4071, "output": false }, { "hour": 9, "startsAt": "2025-01-30T09:00:00.000+01:00", "total": 0.3966, "output": true }, { "hour": 10, "startsAt": "2025-01-30T10:00:00.000+01:00", "total": 0.3771, "output": true }, { "hour": 11, "startsAt": "2025-01-30T11:00:00.000+01:00", "total": 0.363, "output": true }, { "hour": 12, "startsAt": "2025-01-30T12:00:00.000+01:00", "total": 0.3542, "output": true }, { "hour": 13, "startsAt": "2025-01-30T13:00:00.000+01:00", "total": 0.3511, "output": true }, { "hour": 14, "startsAt": "2025-01-30T14:00:00.000+01:00", "total": 0.3703, "output": true }, { "hour": 15, "startsAt": "2025-01-30T15:00:00.000+01:00", "total": 0.3986, "output": false }, { "hour": 16, "startsAt": "2025-01-30T16:00:00.000+01:00", "total": 0.4078, "output": false }, { "hour": 17, "startsAt": "2025-01-30T17:00:00.000+01:00", "total": 0.4309, "output": false }, { "hour": 18, "startsAt": "2025-01-30T18:00:00.000+01:00", "total": 0.4264, "output": false }, { "hour": 19, "startsAt": "2025-01-30T19:00:00.000+01:00", "total": 0.4082, "output": false }, { "hour": 20, "startsAt": "2025-01-30T20:00:00.000+01:00", "total": 0.3951, "output": true }, { "hour": 21, "startsAt": "2025-01-30T21:00:00.000+01:00", "total": 0.376, "output": true }, { "hour": 22, "startsAt": "2025-01-30T22:00:00.000+01:00", "total": 0.3668, "output": true }, { "hour": 23, "startsAt": "2025-01-30T23:00:00.000+01:00", "total": 0.3594, "output": true }]
-
@peter-c sagte in Auslesen JSON Wert Bedeutung:
Was mache ich da falsch?
Du hast ein Array mit 24 Objekten.
Du musst entscheiden, welches Element Du überhaupt lesen möchtest.
Da erste? Das letzte? Oder eines mit bestimmten Eigenschaften? -
@codierknecht said in Auslesen JSON Wert Bedeutung:
Oder eines mit bestimmten Eigenschaften?
Ja das im Moment gültige.
-
-
@codierknecht said in Auslesen JSON Wert Bedeutung:
Und das wäre? Das erste?
Nein das mit der aktuellen Stunde. Das JSON hat 24 Channel. Verstehe deine Anmerkung.
"hour": 0, "startsAt": "2025-01-30T00:00:00.000+01:00", "total": 0.3263, "output": true
Müßte einen Vergleich zur aktuellen Uhrzeit und dem startsAt machen. -
@peter-c
Siehe Edit -
oder so:
-
@homoran sagte: oder so:
Das setzt voraus, dass die Liste immer mit Stunde 0 beginnt.
Die Wandlung nach Zahl ist nicht erforderlich. -
@paul53 sagte in Auslesen JSON Wert Bedeutung:
Das setzt voraus, dass die Liste immer mit Stunde 0 beginnt.
Könnte man jetzt mal annehmen. Dann wäre die Vorgehensweise sehr effizient.
Allein: Wir wissen es nicht sicher
-
@paul53 sagte in Auslesen JSON Wert Bedeutung:
@homoran sagte: oder so:
Das setzt voraus, dass die Liste immer mit Stunde 0 beginnt.
ich bin davon ausgegangen, dass die Liste imner die entsprechenden Elemente enthält
egal in welcher Reihenfolge
-
Habs jetzt nachgebaut.
Ergebnis stimmt jetzt mit dem von Dir vorgeschlagenem ersten Ansatz.
Keine Fehlermeldung mehr.Hab Deine andere Lösung erst jetzt gesehen.
2025-01-30 14:37:00.017 - info: javascript.0 (927) script.js.common.Werte_aus_Json: { ack: true } 2025-01-30 14:37:00.019 - info: javascript.0 (927) script.js.common.Werte_aus_Json: 14 2025-01-30 14:38:00.025 - info: javascript.0 (927) script.js.common.Werte_aus_Json: { ack: true } 2025-01-30 14:38:00.026 - info: javascript.0 (927) script.js.common.Werte_aus_Json: 14
-
@peter-c sagte: Habs jetzt nachgebaut.
Nein, die Schleife wird zu früh abgebrochen.
Es genügt, auf jede volle Stunde zu triggern. -
@paul53 sagte in Auslesen JSON Wert Bedeutung:
Nein, die Schleife wird zu früh abgebrochen.
Der Abbruch muss mit in den "Falls"-Block.
Die Schleife soll ja erst verlassen werden, wenn der passende Eintrag gefunden wurde. -
@paul53 said in Auslesen JSON Wert Bedeutung:
Es genügt, auf jede volle Stunde zu triggern.
Ja das ändere ich noch, hatte den Zeitplan nur zum Ausprobieren gewählt.
-
@peter-c sagte in Auslesen JSON Wert Bedeutung:
hatte den Zeitplan nur zum Ausprobieren gewählt
Zum Ausprobieren kannst Du den Zeitplan erstmal komplett weglassen.
Dann wird der Code bei jedem Start des Script 1x ausgeführt -
@codierknecht said in Auslesen JSON Wert Bedeutung:
Der Abbruch muss mit in den "Falls"-Block.
Stimmt habe ich geändert, bekomme aber jetzt Fehlermeldung.
2025-01-30 14:53:53.286 - info: javascript.0 (927) Start JavaScript script.js.common.Werte_aus_Json (Blockly) 2025-01-30 14:53:53.292 - warn: javascript.0 (927) You are assigning a boolean to the state "0_userdata.0.Tibberlink_Kanäle.höchste_Kosten_Status" which expects a string. Please fix your code to use a string or change the state type to boolean. This warning might become an error in future versions. 2025-01-30 14:53:53.294 - warn: javascript.0 (927) at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2090:20) 2025-01-30 14:53:53.294 - warn: javascript.0 (927) at script.js.common.Werte_aus_Json:10:5 2025-01-30 14:53:53.294 - warn: javascript.0 (927) at script.js.common.Werte_aus_Json:22:3 2025-01-30 14:53:53.294 - info: javascript.0 (927) script.js.common.Werte_aus_Json: true 2025-01-30 14:53:53.294 - info: javascript.0 (927) script.js.common.Werte_aus_Json: 14
-
@peter-c sagte: bekomme aber jetzt Fehlermeldung.
Aus dem JSON:
"output": true
Der Datenpunkt hat den falschen Typ.
-
@paul53 said in Auslesen JSON Wert Bedeutung:
Der Datenpunkt hat den falschen Typ.
Ja stimmt, jetzt keine Fehler mehr.
Puh was man alles übersehen kann - danke für die Unterstützung, hab wieder was gelernt!