Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst]: Easymeter bzw. Smart Grid Hub über Javascript auslesen (JSON)

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.7k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.0k

[gelöst]: Easymeter bzw. Smart Grid Hub über Javascript auslesen (JSON)

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
27 Beiträge 6 Kommentatoren 4.6k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    MIKAMI
    schrieb am zuletzt editiert von
    #1

    Hallo Community,

    ich bin neu hier und mache gerade erste "Gehversuche" mit IO-Broker. Für mich eine sehr wichtige Funktion wäre das Auslesen meiner beiden Smartmeter bzw. des Smart Grid Hub den mir mein Energieversorger im Rahmen eines Piloten zur Verfügung gestellt hat (Photovoltaik Ertragszähler + Einspeise/Bezugszähler). Ich habe hier im Forum ein Script gefunden mit dem per JSON ein Fronius Wechselrichter ausgelesen werden kann. Leider schaffe ich es aufgrund meiner wenigen bis keinen Kenntnisse mit JavaScript dieses Script (Fronius Symo Hybrid über Javaskript auszulesen (Json) > http://www.iobroker.net/docu/?page_id=3691&lang=de ) auf meine Bedürfnisse zu adaptieren. Ich stelle hier mal mein JSON Output File zur Verfügung in der Hoffnung es findet sich jemand der mir das Script auf den Smart Grid HUB adaptiern kann:

    Über den Aufruf:

    http://192.168.2.8/json.txt?LogName=xxx&LogPSWD=xxx

    bekomme ich folgende Werte von meinem Ertragszähler:

    { "billingData:" : { "assignment" :[ { "obis":"8181C78227FF","value":""}, { "obis":"8181C78205FF","value":""}, { "obis":"8181C78206FF","value":""}, { "obis":"8181C78207FF","value":""}, { "obis":"0100000000FF","value":"1271160146079"}, { "obis":"010000090B00","value":"07.01.2017,13:11:43"}], "values" : [ {"obis":"0101020800FF","value":7860.29,"unit":"kWh"},{"obis":"0100010700FF","value":786.95,"unit":"W"},{"obis":"<u>~~[u]~~0100150700FF","value":786.95,"unit":"W"</u>},{"obis":"0100290700FF","value":0.00,"unit":"W"},{"obis":"01003D0700FF","value":0.00,"unit":"W"},{"obis":"010020070000","value":224.13,"unit":"V"},{"obis":"010034070000","value":225.76,"unit":"V"},{"obis":"010048070000","value":223.80,"unit":"V"},{"obis":"01000E070000","value":50.000,"unit":"Hz"},{"obis":"<u>010002080080","value":2.66,"unit":"kWh</u>"},{"obis":"<u>010002080081","value":10.15,"unit":"kWh"</u>},{"obis":"010002080082","value":38.90,"unit":"kWh"},{"obis":"010002080083","value":97.73,"unit":"kWh"},{"obis":"010002080084","value":2036.09,"unit":"kWh"} ] }}

    Mir ist aktuell nicht klar wie ich das Script umbauen muss um z.B. die rot markierten bzw. unterstrichenen Werte (Momentanleistung, Ertrag Tag, Ertrag Vortag) auszulesen.

    Vielen Dank

    Gruß Michael

    1 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2
      ... = myJson.billingData.values[2].value;  // 1\. Wert (786.95)
      ... = myJson.billingData.values[9].value;  // 2\. Wert (2.66)
      ... = myJson.billingData.values[10].value; // 3\. Wert (10.15)
      
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • I Offline
        I Offline
        ichderarnd
        schrieb am zuletzt editiert von
        #3

        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 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          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:

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          0
          • M Offline
            M Offline
            moebius
            schrieb am zuletzt editiert von
            #5

            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 Antwort Letzte Antwort
            0
            • apollon77A Offline
              apollon77A Offline
              apollon77
              schrieb am zuletzt editiert von
              #6

              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

              Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

              • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
              • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
              1 Antwort Letzte Antwort
              0
              • apollon77A Offline
                apollon77A Offline
                apollon77
                schrieb am zuletzt editiert von
                #7

                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?

                Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                1 Antwort Letzte Antwort
                0
                • I Offline
                  I Offline
                  ichderarnd
                  schrieb am zuletzt editiert von
                  #8

                  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 Antwort Letzte Antwort
                  0
                  • apollon77A Offline
                    apollon77A Offline
                    apollon77
                    schrieb am zuletzt editiert von
                    #9

                    Ich schaue mal rein

                    Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                    • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                    • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                    1 Antwort Letzte Antwort
                    0
                    • apollon77A Offline
                      apollon77A Offline
                      apollon77
                      schrieb am zuletzt editiert von
                      #10

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

                      Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                      • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                      • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                      1 Antwort Letzte Antwort
                      0
                      • I Offline
                        I Offline
                        ichderarnd
                        schrieb am zuletzt editiert von
                        #11

                        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 Antwort Letzte Antwort
                        0
                        • apollon77A Offline
                          apollon77A Offline
                          apollon77
                          schrieb am zuletzt editiert von
                          #12

                          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 …

                          Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                          • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                          • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                          1 Antwort Letzte Antwort
                          0
                          • M Offline
                            M Offline
                            MIKAMI
                            schrieb am zuletzt editiert von
                            #13

                            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 Antwort Letzte Antwort
                            0
                            • paul53P Offline
                              paul53P Offline
                              paul53
                              schrieb am zuletzt editiert von
                              #14

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

                              var request = require('request');
                              

                              Ist das in Deinem Skript enthalten ?

                              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                              1 Antwort Letzte Antwort
                              0
                              • M Offline
                                M Offline
                                MIKAMI
                                schrieb am zuletzt editiert von
                                #15

                                Ja, die Codezeile ist im Script enthalten…

                                1 Antwort Letzte Antwort
                                0
                                • paul53P Offline
                                  paul53P Offline
                                  paul53
                                  schrieb am zuletzt editiert von
                                  #16

                                  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);
                                  

                                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                  1 Antwort Letzte Antwort
                                  0
                                  • blauholstenB Offline
                                    blauholstenB Offline
                                    blauholsten
                                    Developer
                                    schrieb am zuletzt editiert von
                                    #17

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

                                    Entwickler vom: - Viessman Adapter
                                    - Alarm Adapter

                                    1 Antwort Letzte Antwort
                                    0
                                    • blauholstenB Offline
                                      blauholstenB Offline
                                      blauholsten
                                      Developer
                                      schrieb am zuletzt editiert von
                                      #18

                                      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);
                                      

                                      Entwickler vom: - Viessman Adapter
                                      - Alarm Adapter

                                      1 Antwort Letzte Antwort
                                      0
                                      • M Offline
                                        M Offline
                                        MIKAMI
                                        schrieb am zuletzt editiert von
                                        #19

                                        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 Antwort Letzte Antwort
                                        0
                                        • blauholstenB Offline
                                          blauholstenB Offline
                                          blauholsten
                                          Developer
                                          schrieb am zuletzt editiert von
                                          #20

                                          EDIT: Blödsinniger Post :oops:

                                          Entwickler vom: - Viessman Adapter
                                          - Alarm Adapter

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          823

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe