NEWS
[gelöst] Werte einzeln aus JSON extrahieren
-
Hallo zusammen,
ich habe leider noch nie so richtig mit Json gearbeitet und benöntige für mein Saugroboter-Script Datenpunkte die aktuell nur in einer mihome-vacuum.0.history.allTableJSON integriert sind.
zwischenzeitlich habe ich eine Ganze menge ausprobiert jedoch mit mäßigen Erfolg. Vielleicht kan jemand helfen.
Inhalt der mihome-vacuum.0.history.allTableJSON
[{"Datum":"30.12","Start":"20:47","Saugzeit":"3 min","Fläche":"3.29 m²","Error":0,"Ende":false},{"Datum":"30.12","Start":"20:43","Saugzeit":"0 min","Fläche":"0 m²","Error":0,"Ende":false}........]
Ich hätte gerne die einzelnen Punkte in sep. Datenpunkte
Das war mein letzter Versuch.
on({id: 'mihome-vacuum.0.history.allTableJSON', change: "any"}, function (obj) { var json = "mihome-vacuum.0.history.allTableJSON"/*mihomeDaten*/; var StDatum = "javascript.0.Eigene_Datenpunkte.Staubi-Datum"/*Start Datum*/; var StStart = "javascript.0.Eigene_Datenpunkte.Staubi-Startzeit"/*Startzeit*/; var StSaugzeit = "javascript.0.Eigene_Datenpunkte.Saugzeit"/*Reinigungsdauer*/; var StFlaeche = "javascript.0.Eigene_Datenpunkte.Fläche"/*Fläche*/; var StError = "javascript.0.Eigene_Datenpunkte.Error"/*Error*/; var StEnde = "javascript.0.Eigene_Datenpunkte.Ende"/*Ende*/; var obj = JSON.parse(getState(json).val); setState(StDatum, parseFloat(obj.Datum)); setState(StStart, parseFloat(obj.Start)); setState(StSaugzeit, parseFloat(obj.Saugzeit)); setState(StFlaeche, parseFloat(obj.Fläche)); setState(StError, parseFloat(obj.Error)); setState(StEnde, obj.Ende); });
-
obj = JSON.parse(obj.state.val)[0]; setState(StDatum, obj.Datum); // String DD.MM setState(StStart, obj.Start); // String hh:mm setState(StSaugzeit, parseFloat(obj.Saugzeit)); // Zahl, Einheit: Minuten setState(StFlaeche, parseFloat(obj.Fläche)); // Zahl, Einheit: m² setState(StError, obj.Error); // Zahl setState(StEnde, obj.Ende); // Logikwert
-
Hallo Paul,
vielen dank für deine Antwort. konnte jedoch leider nicht wirklich etwas damit anfangen. hätte gedacht die // sind dann Komentare
Habe das ganze mal versucht im Kleinen
on({id: 'mihome-vacuum.0.history.allTableJSON', change: "any"}, function (obj) { var json = "mihome-vacuum.0.history.allTableJSON"/*mihomeDaten*/; var StDatum = "javascript.0.Eigene_Datenpunkte.Staubi-Datum"/*Start Datum*/; var obj = JSON.parse(getState(json).val); setState(StDatum, obj.Datum); // String DD.MM });
Der Datenpunkt wird aber nicht gefüllt. Im log kommt dann das
javascript.0 2019-12-31 10:06:51.846 warn (1016) at processImmediate (timers.js:658:5) javascript.0 2019-12-31 10:06:51.846 warn (1016) at tryOnImmediate (timers.js:676:5) javascript.0 2019-12-31 10:06:51.846 warn (1016) at runCallback (timers.js:705:18) javascript.0 2019-12-31 10:06:51.845 warn (1016) at Immediate.setImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:224:41) javascript.0 2019-12-31 10:06:51.845 warn (1016) at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:4745:37) javascript.0 2019-12-31 10:06:51.844 warn (1016) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:364:25) javascript.0 2019-12-31 10:06:51.844 warn (1016) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:963:38) javascript.0 2019-12-31 10:06:51.843 warn (1016) at Object.<anonymous> (script.js.Staubi.Json-Auswerten:13:5) javascript.0 2019-12-31 10:06:51.843 warn (1016) at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1258:20) javascript.0 2019-12-31 10:06:51.841 warn (1016) Wrong type of javascript.0.Eigene_Datenpunkte.Staubi-Datum: "undefined". Please fix, while deprecated and will not work in next versions.
Wie gesagt bin im Programmieren totaler Anfänger.
-
Im Log vom javaSkript kommt dies
31.12.2019, 10:06:37.330 [info ]: javascript.0 (1016) Stop script script.js.Staubi.Json-Auswerten 31.12.2019, 10:06:38.781 [info ]: javascript.0 (1016) Start javascript script.js.Staubi.Json-Auswerten 31.12.2019, 10:06:38.795 [info ]: javascript.0 (1016) script.js.Staubi.Json-Auswerten: registered 1 subscription and 0 schedules 31.12.2019, 10:06:51.843 [warn ]: javascript.0 (1016) at Object.<anonymous> (script.js.Staubi.Json-Auswerten:13:5)
-
@svenomatt
Du solltest schon richtig lesen (Zeile 1).obj = JSON.parse(obj.state.val)[0];
obj ist das erste Element eines Arrays und ist bereits als Funktionsparameter deklariert.
-
Vielen Dank,
du hast recht, wer lesen kann ist klar im Vorteil.Aufjedenfall klappt es jetzt, Vielen Dank für deine Hilfe
-
Falls das wer auch mit blockly lösen möchte.
Einfachster weg: Mit einem DEBUG baustein, das JSON Objekt in den Log ausgeben.
Den Output kopieren und in Notepad++ einfügen und dort die Plugins JSTools runterladen.
Unter Erweiterungen JSTools den JSON Viewer aktivieren und schon seht ihr die Objektstruktur und könnt gut scripten und debuggen.In Folge einzelne Attribute mit mit dem Block mit Attribut abfragen.
Ich habe so meine Busabfahrtszeiten abfragen via Alexa gelöst und lasse mir jeden Tag meine Google Termine vorlesen.