Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Werte einzeln aus JSON extrahieren

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Werte einzeln aus JSON extrahieren

    This topic has been deleted. Only users with topic management privileges can see it.
    • svenomatt
      svenomatt last edited by svenomatt

      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);
      
       });
      
      
      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @svenomatt last edited by paul53

        @svenomatt

           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
        
        1 Reply Last reply Reply Quote 0
        • svenomatt
          svenomatt last edited by

          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.

          1 Reply Last reply Reply Quote 0
          • svenomatt
            svenomatt last edited by

            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)
            
            paul53 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @svenomatt last edited by paul53

              @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.

              1 Reply Last reply Reply Quote 0
              • svenomatt
                svenomatt last edited by

                Vielen Dank,
                du hast recht, wer lesen kann ist klar im Vorteil. 😄

                Aufjedenfall klappt es jetzt, Vielen Dank für deine Hilfe

                1 Reply Last reply Reply Quote 0
                • realwax
                  realwax last edited by

                  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.

                  dda34d79-f864-4429-b653-c1cadf88a1d2-image.png

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  608
                  Online

                  31.8k
                  Users

                  80.0k
                  Topics

                  1.3m
                  Posts

                  javascript
                  3
                  7
                  1303
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo