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

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [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.
    • I
      ichderarnd last edited by

      Hallo MIKAMI,

      ich habe mich gerade mit dem gleichen Thema beschäftigt. Bin allerdings Anfänger bzgl. iobroker. Daher ist der Code unten erstmal nur ein erster Wurf.

      Aber vielleicht kannst Du damit was anfangen?:

      // ################################
      // EFR Smart Hub Meterunit abfragen
      
      // http Zugriff wird benötigt
      var request = require('request');
      
      // Url der Meterunit
      var meterunitURL = 'http://meterunit/json.txt?LogName=user&LogPSWD=user';
      
      // Sicherstellen, dass alle Status-Variablen existieren
      const U = 'undefined';
      var forceCreation = 0;
      var Kundennummer = U;           createState('Kundennummer', 'undefined', forceCreation, {name: 'Kundennummer'});
      var Vorname = U;                createState('Vorname', 'undefined', forceCreation, {name: 'Vorname'});
      var Nachname = U;               createState('Nachname', 'undefined', forceCreation, {name: 'Nachname'});
      var Adresse = U;                createState('Adresse', 'undefined', forceCreation, {name: 'Adresse'});
      var Zaehlernummer = U;          createState('Zaehlernummer', 'undefined', forceCreation, {name: 'Zählernummer'});
      var Zeitstempel = U;            createState('Zeitstempel', 'undefined', forceCreation, {name: 'Zeitstempel'});
      var Summenregister_1_8_0 = U;   createState('Summenregister_1_8_0', 'undefined', forceCreation, {name: 'Summenregister 1.8.0', type: 'number', unit:'kWh'});
      /*
      var Register_1_8_1 = U;         createState('Register_1_8_1', 'undefined', forceCreation, {name: 'Register 1.8.1', type: 'number', unit:'kWh'});
      var Register_1_8_2 = U;         createState('Register_1_8_2', 'undefined', forceCreation, {name: 'Register 1.8.2', type: 'number', unit:'kWh'});
      var Register_1_8_3 = U;         createState('Register_1_8_3', 'undefined', forceCreation, {name: 'Register 1.8.3', type: 'number', unit:'kWh'});
      var Register_2_8_0 = U;         createState('Register_2_8_0', 'undefined', forceCreation, {name: 'Register 2.8.0', type: 'number', unit:'kWh'});
      var Register_2_8_7 = U;         createState('Register_2_8_7', 'undefined', forceCreation, {name: 'Register 2.8.7', type: 'number', unit:'kWh'});
      */
      var Gesamtleistung = U;         createState('Gesamtleistung', 'undefined', forceCreation, {name: 'Gesamtleistung', type: 'number', unit:'W'});
      var LeistungL1 = U;             createState('LeistungL1', 'undefined', forceCreation, {name: 'Leistung Phase 1', type: 'number', unit:'W'});
      var LeistungL2 = U;             createState('LeistungL2', 'undefined', forceCreation, {name: 'Leistung Phase 2', type: 'number', unit:'W'});
      var LeistungL3 = U;             createState('LeistungL3', 'undefined', forceCreation, {name: 'Leistung Phase 3', type: 'number', unit:'W'});
      var SpannungL1 = U;             createState('SpannungL1', 'undefined', forceCreation, {name: 'Spannung Phase 1', type: 'number', unit:'V'});
      var SpannungL2 = U;             createState('SpannungL2', 'undefined', forceCreation, {name: 'Spannung Phase 2', type: 'number', unit:'V'});
      var SpannungL3 = U;             createState('SpannungL3', 'undefined', forceCreation, {name: 'Spannung Phase 3', type: 'number', unit:'V'});
      var Netzfrequenz = U;           createState('Netzfrequenz', 'undefined', forceCreation, {name: 'Netzfrequenz', type: 'number', unit:'Hz'});
      var VerbrauchHeute = U;         createState('VerbrauchHeute', 'undefined', forceCreation, {name: 'Verbrauch heute', type: 'number', unit:'kWh'});
      var VerbrauchGestern = U;       createState('VerbrauchGestern', 'undefined', forceCreation, {name: 'Verbrauch gestern', type: 'number', unit:'kWh'});
      var VerbrauchLetzteWoche = U;   createState('VerbrauchLetzteWoche', 'undefined', forceCreation, {name: 'Verbrauch letzte Woche', type: 'number', unit:'kWh'});
      var VerbrauchLetztenMonat = U;  createState('VerbrauchLetztenMonat', 'undefined', forceCreation, {name: 'Verbrauch letzten Monat', type: 'number', unit:'kWh'});
      var VerbrauchLetztesJahr = U;   createState('VerbrauchLetztesJahr', 'undefined', forceCreation, {name: 'Verbrauch letztes Jahr', type: 'number', unit:'kWh'});
      /*
      var EinspeisungHeute = U;       createState('EinspeisungHeute', 'undefined', forceCreation, {name: 'Einspeisung heute', type: 'number', unit:'kWh'});
      var EinspeisungGestern = U;     createState('EinspeisungGestern', 'undefined', forceCreation, {name: 'Einspeisung gestern', type: 'number', unit:'kWh'});
      var EinspeisungLetzteWoche = U; createState('EinspeisungLetzteWoche', 'undefined', forceCreation, {name: 'Einspeisung letzte Woche', type: 'number', unit:'kWh'});
      var EinspeisungLetztenMonat = U;createState('EinspeisungLetztenMonat', 'undefined', forceCreation, {name: 'Einspeisung letzten Monat', type: 'number', unit:'kWh'});
      var EinspeisungLetztesJahr = U; createState('EinspeisungLetztesJahr', 'undefined', forceCreation, {name: 'Einspeisung letztes Jahr', type: 'number', unit:'kWh'});
      */
      
      function readMeterunit() {
          log('Get data from Meterunit', 'info');
      
          request({url: meterunitURL, timeout: 2000}, function (error, response, body) {
              if (!error && response.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 billingData = result["billingData:"];
                      var temp;
      
                      // OBIS: 8181C78227FF
                      if ((temp = billingData.assignment[0].value) != Kundennummer) {
                          log(temp, 'debug');
                          setState('Kundennummer', temp);
                          Kundennummer = temp;
                      }
      
                      // OBIS: 8181C78205FF
                      if ((temp = billingData.assignment[1].value) != Vorname) {
                          log(temp, 'debug');
                          setState('Vorname', temp);
                          Vorname = temp;
                      }
      
                      // OBIS: 8181C78206FF
                      if ((temp = billingData.assignment[2].value) != Nachname) {
                          log(temp, 'debug');
                          setState('Nachname', temp);
                          Nachname = temp;
                      }
      
                      // OBIS: 8181C78207FF
                      if ((temp = billingData.assignment[3].value) != Adresse) {
                          log(temp, 'debug');
                          setState('Adresse', temp);
                          Adresse = temp;
                      }
      
                      // OBIS: 0100000000FF
                      if ((temp = billingData.assignment[4].value) != Zaehlernummer) {
                          log(temp, 'debug');
                          setState('Zaehlernummer', temp);
                          Zaehlernummer = temp;
                      }
      
                      // OBIS: 010000090B00
                      if ((temp = billingData.assignment[5].value) != Zeitstempel) {
                          log(temp, 'debug');
                          setState('Zeitstempel', temp);
                          Zeitstempel = temp;
                      }
      
                      // OBIS: 0101010800FF
                      if ((temp = billingData.values[0].value) != Summenregister_1_8_0) {
                          log(temp, 'debug');
                          setState('Summenregister_1_8_0', temp);
                          Summenregister_1_8_0 = temp;
                      }
      
                      // OBIS: 0100010700FF
                      if ((temp = billingData.values[1].value) != Gesamtleistung) {
                          log(temp, 'debug');
                          setState('Gesamtleistung', temp);
                          Gesamtleistung = temp;
                      }
      
                      // OBIS: 0100150700FF
                      if ((temp = billingData.values[2].value) != LeistungL1) {
                          log(temp, 'debug');
                          setState('LeistungL1', temp);
                          LeistungL1 = temp;
                      }
      
                      // OBIS: 0100290700FF
                      if ((temp = billingData.values[3].value) != LeistungL2) {
                          log(temp, 'debug');
                          setState('LeistungL2', temp);
                          LeistungL2 = temp;
                      }
      
                      // OBIS: 01003D0700FF
                      if ((temp = billingData.values[4].value) != LeistungL3) {
                          log(temp, 'debug');
                          setState('LeistungL3', temp);
                          LeistungL3 = temp;
                      }
      
                      // OBIS: 010020070000
                      if ((temp = billingData.values[5].value) != SpannungL1) {
                          log(temp, 'debug');
                          setState('SpannungL1', temp);
                          SpannungL1 = temp;
                      }
      
                      // OBIS: 010034070000
                      if ((temp = billingData.values[6].value) != SpannungL2) {
                          log(temp, 'debug');
                          setState('SpannungL2', temp);
                          SpannungL2 = temp;
                      }
      
                      // OBIS: 010048070000
                      if ((temp = billingData.values[7].value) != SpannungL3) {
                          log(temp, 'debug');
                          setState('SpannungL3', temp);
                          SpannungL3 = temp;
                      }
      
                      // OBIS: 01000E070000
                      if ((temp = billingData.values[8].value) != Netzfrequenz) {
                          log(temp, 'debug');
                          setState('Netzfrequenz', temp);
                          Netzfrequenz = temp;
                      }
      
                      // OBIS: 010001080080
                      if ((temp = billingData.values[9].value) != VerbrauchHeute) {
                          log(temp, 'debug');
                          setState('VerbrauchHeute', temp);
                          VerbrauchHeute = temp;
                      }
      
                      // OBIS: 010001080081
                      if ((temp = billingData.values[10].value) != VerbrauchGestern) {
                          log(temp, 'debug');
                          setState('VerbrauchGestern', temp);
                          VerbrauchGestern = temp;
                      }
      
                      // OBIS: 010001080082
                      if ((temp = billingData.values[11].value) != VerbrauchLetzteWoche) {
                          log(temp, 'debug');
                          setState('VerbrauchLetzteWoche', temp);
                          VerbrauchLetzteWoche = temp;
                      }
      
                      // OBIS: 010001080083
                      if ((temp = billingData.values[12].value) != VerbrauchLetztenMonat) {
                          log(temp, 'debug');
                          setState('VerbrauchLetztenMonat', temp);
                          VerbrauchLetztenMonat = temp;
                      }
      
                      // OBIS: 010001080084
                      if ((temp = billingData.values[13].value) != VerbrauchLetztesJahr) {
                          log(temp, 'debug');
                          setState('VerbrauchLetztesJahr', temp);
                          VerbrauchLetztesJahr = temp;
                      }
      
                      log('OK', 'info');
                  }
              } else {
                  log('Fehler:' + error, 'error');
              }
      
          });   // Ende des Requests 
      }
      
      // schedule("* * * * *", readMeterunit); 
      // readMeterunit();
      setInterval(readMeterunit, 5000);
      
      

      In der History sieht der Energiebedarf des Hauses (javascript.0.Gesamtleistung) dann z.B. für die letzten 3 Stunden so aus:

      1877_meterunit-history.png

      Viele Grüße

      arndl

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

        Vorschlag (URL anpassen !):

        // 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 values = JSON.parse(body)['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);
        

        EDIT: Änderung billingData –> billingData:

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

          Mein Vorschlag mit node-red

          [{"id":"7a597ace.f170e4","type":"debug","z":"93e48696.f68df8","name":"","active":true,"console":"false","complete":"true","x":1251,"y":225,"wires":[]},{"id":"125b9ea.0eb4161","type":"inject","z":"93e48696.f68df8","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":96,"y":50,"wires":[["75cd084a.68c538"]]},{"id":"8a0eb211.ba2a4","type":"json","z":"93e48696.f68df8","name":"","x":420,"y":114,"wires":[["1e3d4d89.714152"]]},{"id":"1e3d4d89.714152","type":"change","z":"93e48696.f68df8","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.billingData:.values","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":587,"y":151,"wires":[["daac6ae9.37e7e8"]]},{"id":"daac6ae9.37e7e8","type":"split","z":"93e48696.f68df8","name":"","splt":"\\n","x":739,"y":206,"wires":[["17fba018.d0f18"]]},{"id":"cac2d016.c7dc6","type":"change","z":"93e48696.f68df8","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.value","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1070,"y":324,"wires":[["7a597ace.f170e4"]]},{"id":"17fba018.d0f18","type":"switch","z":"93e48696.f68df8","name":"","property":"payload.obis","propertyType":"msg","rules":[{"t":"eq","v":"0101020800FF","vt":"str"}],"checkall":"true","outputs":1,"x":866,"y":276,"wires":[["cac2d016.c7dc6"]]},{"id":"75cd084a.68c538","type":"http request","z":"93e48696.f68df8","name":"","method":"GET","ret":"txt","url":"http://192.168.2.8/json.txt?LogName=xxx&LogPSWD=xxx","tls":"","x":247,"y":92,"wires":[["8a0eb211.ba2a4"]]}]
          ````Der flow extrahiert als Beispiel den Wert für orbis 0101020800FF. Vorteil: kein Zugriff über Array und 90% weniger zu schreiben :)
          1 Reply Last reply Reply Quote 0
          • apollon77
            apollon77 last edited by

            Hey,

            ich baue gerade einen Adapter der solche Werte per Seriell/IR ausliesst und so. Geht bei mir mit SML (mein eHz-Stromzähler9 und auch bei meiner Fernwärmestation (dort per D0).

            Wenn das fertig ist wäre es denke ich auch eine Idee das Format von Eurem Zähler dort mit einzubauen.

            nach aktueller Idee (weil ich den Adapter schon generisch halten will) wären die Datenpunkte aber die verwendeten OBIS-Nummern (also das "1.8.1") … aber wenn man ja weiss was was ist dann ist das ja benutzbar.

            Macht das Sinn?

            Ingo F

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

              PS: Welche anderen Formate sind denn per HTTP noch erreichbar? SML auch? Dann wäre es noch einfacher weil ich das schon parsen kann.

              Habt Ihr mal ne Doku?

              1 Reply Last reply Reply Quote 0
              • I
                ichderarnd last edited by

                Es geht um dieses Gerät:

                http://www.efr.de/fileadmin/content/dow … NEU_DE.pdf

                Die Beschreibung der Schnittstelle finde ich grade nicht auf dem EFR Server. Sie liegt aber z.B. hier:

                http://www.sev-soemmerda.de/de/Strom/Sm … id-Hub.pdf

                Was anderes als JSON per http geht meines Wissens nicht. Klappt aber gut!

                Ich hatte ebenfalls daran gedacht, daraus einen Adapter zu bauen. Habe mich in die Adapter-Entwicklung aber bisher noch nicht eingelesen. Würde also noch etwas dauern.

                Viele Grüße

                arndl

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

                  Ich schaue mal rein

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

                    Laut Produktinformationen hat das Ding auch IR … Da kommt binärkodiertes SML raus ... Das kann ich schon direkt 🙂

                    Aber ich schaue mal das ich in meinen Adapter auch ne URL Option einbaue wo man dieses Format parsen kann, Am Ende bauen die nur SML in ein JSON um ...

                    1 Reply Last reply Reply Quote 0
                    • I
                      ichderarnd last edited by

                      Stimmt… SML ist in den technischen Daten mit aufgeführt. Bisher sagt mir das Protokoll allerdings nichts.

                      Ob das Gerät das über Ethernet spricht? Für SML scheint das Übertragungsmedium nicht festgelegt zu sein.

                      Den "Parser" für das EFR JSON Format habe ich ja weiter oben gepostet. Der funktioniert so, wie er da steht.

                      arndl

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

                        Das Parsen des JSON ist nicht das Thema 🙂

                        Also am Ende ist der Smart Grid Hub nur ein Aufsatz auf den Easymeter-Zähler und holt dort per SML die Daten alle paar Sekunden ab und bereitet diese auf und stellt Sie zur Verfügung.

                        Wird in der ersten version mit drin sein …

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

                          Hallo Zusammen,

                          vielen Dank für die schnelle Hilfe und konstruktiven Vorschläge. Das Script von Arndl funktioniert und ließt auf jedenfall schon mal einige Werte aus dem Easymeter aus. Das Script von paul53 ist einfacher (da natürlich weniger Werte) scheint aber irgendwie nicht zu funktionieren. Es kommt zu folgender Fehlermeldung:

                          javascript.0 2017-01-17 19:52:04.579 info terminating

                          javascript.0 2017-01-17 19:52:04.569 error at emitNone (events.js:72:20)

                          javascript.0 2017-01-17 19:52:04.569 error at IncomingMessage.g (events.js:260:16)

                          javascript.0 2017-01-17 19:52:04.569 error at IncomingMessage. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1001:12)

                          javascript.0 2017-01-17 19:52:04.569 error at Request.emit (events.js:169:7)

                          javascript.0 2017-01-17 19:52:04.569 error at emitOne (events.js:77:13)

                          javascript.0 2017-01-17 19:52:04.569 error at Request. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:1081:10)

                          javascript.0 2017-01-17 19:52:04.569 error at Request.emit (events.js:172:7)

                          javascript.0 2017-01-17 19:52:04.569 error at emitTwo (events.js:87:13)

                          javascript.0 2017-01-17 19:52:04.569 error at Request.self.callback (/opt/iobroker/node_modules/iobroker.javascript/node_modules/request/request.js:186:22)

                          javascript.0 2017-01-17 19:52:04.569 error at Request._callback (script.js.Scripte.Easymeter:38:54)

                          javascript.0 2017-01-17 19:52:04.569 error TypeError: Cannot read property 'values' of undefined

                          javascript.0 2017-01-17 19:52:04.555 error uncaught exception: Cannot read property 'values' of undefined

                          javascript.0 2017-01-17 19:52:03.900 info script.js.Scripte.Easymeter: registered 0 subscriptions and 1 schedule

                          Falls es zu den Logs noch eine Vorschlag zur Abhilfe gibt gerne, ansonsten werde ich mal versuchen am Wochenende das Script von arndl auf meine Bedürfnisse zu reduzieren (das sollte ja kein Problem sein)

                          Danke auch an moebius. An node-red habe ich mich allerdings bis jetzt noch nicht rangewagt (kommt sicherlich noch…)

                          Vielen Dank

                          Michael

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

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

                            var request = require('request');
                            

                            Ist das in Deinem Skript enthalten ?

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

                              Ja, die Codezeile ist im Script enthalten…

                              1 Reply Last reply Reply Quote 0
                              • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            678
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

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