Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst]: Easymeter bzw. Smart Grid Hub über Javascript auslesen (JSON)

    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]: Easymeter bzw. Smart Grid Hub über Javascript auslesen (JSON)

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

      Dann versuch das mal:

      // Easymeter auslesen
      
      var request = require('request');
      var pfad = "Easymeter.";
      
      var idpower       = pfad + "Leistung";
      var idheute       = pfad + "Ertrag-heute";
      var idgestern     = pfad + "Ertrag-gestern";
      
      var url = 'http://192.168.2.8/json.txt?LogName=xxx&LogPSWD=xxx';
      
      createState(idpower, 0, {
          desc: 'Momentanleistung',
          type: 'number',
          role: 'value',
          unit: 'W'
      });
      
      createState(idheute, 0, {
          desc: 'Ertrag Tag',
          type: 'number',
          role: 'value',
          unit: 'kWh'
      });
      
      createState(idgestern, 0, {
          desc: 'Ertrag Vortag',
          type: 'number',
          role: 'value',
          unit: 'kWh'
      });
      
      function main() {
          request(url, function (err, state, body) {
              if(!err && state.statusCode == 200) {
                  var result;
                  try{
                      result = JSON.parse(body);
                      log('JSON response: ' + JSON.stringify(result, null, 2), 'debug');
                  } catch (e) {
                      log('JSON parse error:' + e, 'error');
                  }   
                  if (result) {
                      var values = result.billingData.values;
                      log("Momentanleistung: " + values[2].value,"info");
                      log("Ertrag Tag: "       + values[9].value,"info");
                      log("Ertrag Vortag: "    + values[10].value,"info");
                      setState(idpower  , values[2].value);
                      setState(idheute  , values[9].value);
                      setState(idgestern, values[10].value);
                  }
              } else {
                  log("Fehler: " + err + " bei Abfrage von: " + url, "warn");
              }
          });
      }
      
      schedule("*/10 * * * *", main); // alle 10 Minuten die Werte abfragen
      
      // Beim Skriptstart die Werte abfragen
      setTimeout(main,500);
      
      1 Reply Last reply Reply Quote 0
      • blauholsten
        blauholsten Developer last edited by

        @paul53:

        Ich hatte das Skript nachträglich korrigiert (Zeile 3):

        var request = require('request');
        

        Ist das in Deinem Skript enthalten ? `

        Kann es sein das durch das asyncrone verhalten von "request" das Object noch nicht geladen ist?

        1 Reply Last reply Reply Quote 0
        • blauholsten
          blauholsten Developer last edited by

          Kannst ja mal das probieren…

          // Easymeter auslesen
          
          var request = require('request');
          var pfad = "Easymeter.";
          
          var idpower       = pfad + "Leistung";
          var idheute       = pfad + "Ertrag-heute";
          var idgestern     = pfad + "Ertrag-gestern";
          
          var url = 'http://192.168.2.8/json.txt?LogName=xxx&LogPSWD=xxx';
          
           createState(idpower, 0, {
              desc: 'Momentanleistung',
              type: 'number',
              role: 'value',
              unit: 'W'
          });
          
          createState(idheute, 0, {
              desc: 'Ertrag Tag',
              type: 'number',
              role: 'value',
              unit: 'kWh'
          });
          
          createState(idgestern, 0, {
              desc: 'Ertrag Vortag',
              type: 'number',
              role: 'value',
              unit: 'kWh'
          });
          
          function write(values){
                      log("Momentanleistung: " + values[2].value,"info");
                      log("Ertrag Tag: "       + values[9].value,"info");
                      log("Ertrag Vortag: "    + values[10].value,"info");
                      setState(idpower  , values[2].value);
                      setState(idheute  , values[9].value);
                      setState(idgestern, values[10].value);
          } 
          
          function main() {
              request(url, function (err, state, body) {
                  if(!err && state.statusCode == 200) {
                      try{
                          var values = JSON.parse(body).billingData.values;
                          setTimout(function(){
                          write(values)},100);
                      }
                      catch(e){
                          log(e + "parsen fehlgeschlagen");
                      }
          
                  } else {
                      log("Fehler: " + err + " bei Abfrage von: " + url, "warn");
                  }
              });
          }
          
          schedule("*/10 * * * *", main); // alle 10 Minuten die Werte abfragen
          
          // Beim Skriptstart die Werte abfragen
          setTimeout(main,500);
          
          1 Reply Last reply Reply Quote 0
          • M
            MIKAMI last edited by

            Hallo Zusammen,

            danke für die Rückmeldungen. Das Script von blauholsten bringt leider ebenfalls einen Fehler:

            javascript.0 2017-01-18 19:20:00.568 info javascript.0 script.js.Scripte.Easymeter_1: TypeError: Cannot read property 'values' of undefinedparsen fehlgeschlagen

            javascript.0 2017-01-18 19:18:42.130 info script.js.Scripte.Easymeter_1: TypeError: Cannot read property 'values' of undefinedparsen fehlgeschlagen

            Das aktualisierte Script von paul53 bringt folgende Logeinträge

            javascript.0 2017-01-18 19:35:12.595 info terminating

            javascript.0 2017-01-18 19:35:12.579 error at emitNone (events.js:72:20)

            javascript.0 2017-01-18 19:35:12.579 error at IncomingMessage.g (events.js:260:16)

            javascript.0 2017-01-18 19:35:12.579 error at IncomingMessage. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1001:12)

            javascript.0 2017-01-18 19:35:12.579 error at Request.emit (events.js:169:7)

            javascript.0 2017-01-18 19:35:12.579 error at emitOne (events.js:77:13)

            javascript.0 2017-01-18 19:35:12.579 error at Request. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1081:10)

            javascript.0 2017-01-18 19:35:12.579 error at Request.emit (events.js:172:7)

            javascript.0 2017-01-18 19:35:12.579 error at emitTwo (events.js:87:13)

            javascript.0 2017-01-18 19:35:12.579 error at Request.self.callback (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:186:22)

            javascript.0 2017-01-18 19:35:12.579 error at Request._callback (script.js.Scripte.Easymeter_1_2:45:48)

            javascript.0 2017-01-18 19:35:12.579 error TypeError: Cannot read property 'values' of undefined

            javascript.0 2017-01-18 19:35:12.565 error uncaught exception: Cannot read property 'values' of undefined

            Mach ich evt. selbst einen Fehler? Für das Verständnis kann mir evt. mal jemand erklären wie ich hier auf die values [2],[9] und [10] im Script komme wenn im JSON Output die gewünschten Werte an einer anderen Stelle stehen? Warum ist im JSON Output der Wert meistens "value" nur einmal "values" und im Script "values* .value Ist evt. da der Fehler oder liegt es an meinen Nichtwissen bezüglich Javascript und JSON :?

            Danke und Gruß
            
            Michael
            1 Reply Last reply Reply Quote 0
            • blauholsten
              blauholsten Developer last edited by

              EDIT: Blödsinniger Post :oops:

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

                Füge mal vor oder nach

                var result;
                

                ein und poste das Ergebnis:

                log('body: ' + body);
                
                1 Reply Last reply Reply Quote 0
                • I
                  ichderarnd last edited by

                  @MIKAMI:

                  Mach ich evt. selbst einen Fehler? Für das Verständnis kann mir evt. mal jemand erklären wie ich hier auf die values [2],[9] und [10] im Script komme wenn im JSON Output die gewünschten Werte an einer anderen Stelle stehen? Warum ist im JSON Output der Wert meistens "value" nur einmal "values" und im Script "values* .value Ist evt. da der Fehler oder liegt es an meinen Nichtwissen bezüglich Javascript und JSON :?

                  Danke und Gruß
                  
                  Michael
                  
                  Hallo Michael,
                  
                  
                  
                  guck Dir mal die Zeile:
                  
                  
                  ````
                  var billingData = result["billingData:"];
                  ````
                  
                  aus meinem Code weiter oben im Post an. EFR hat da leider einen Doppelpunkt in das "billingData" gebastelt…
                  
                  Wenn Du es so löst, sollte es auch mit den anderen Beispielen klappen.
                  
                  
                  
                  Viele Grüße
                  
                  arndl ` 
                  1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 last edited by

                    @arndl:

                    EFR hat da leider einen Doppelpunkt in das "billingData" gebastelt… `
                    Stimmt, habe ich glatt übersehen :? Dann muss die Zeile

                                    var values = result.billingData.values;
                    

                    geändert werden in

                                    var values = result["billingData:"].values;
                    
                    
                    1 Reply Last reply Reply Quote 0
                    • M
                      MIKAMI last edited by

                      Hallo Zusammen,

                      vielen Dank für die Unterstützung und Fehlersuche. Ich habe jetzt die Scripte auf meine 2 Smart Grid Hubs erfolgreich angepasst und bekomme die Werte die ich brauche…

                      1876_smart_grid_hub.jpg

                      Danke und Gruß Michael

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

                        @MIKAMI:

                        Ich habe jetzt die Scripte auf meine 2 Smart Grid Hubs erfolgreich angepasst und bekomme die Werte die ich brauche.. `
                        Dann markiere bitte den Beitrag als [gelöst].

                        1 Reply Last reply Reply Quote 0
                        • M
                          MIKAMI last edited by

                          Betreff markiert als [gelöst]

                          Danke

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

                            Alle interessierten können auch gern den neuen Adapter testen …

                            http://forum.iobroker.net/viewtopic.php?f=36&t=5047

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            816
                            Online

                            31.8k
                            Users

                            80.0k
                            Topics

                            1.3m
                            Posts

                            6
                            27
                            4040
                            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