Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Auswertung für smartmeter

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Auswertung für smartmeter

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

      Ich sehe womöglich war die Datenpunkte weg sein könnten.

      Er hat die Zähler jetzt gewechselt nach Neustart.

      Obwohl ich die Zuordnung der USB gemacht hatte wie im anderen Tread beschrieben.

      Hat wohl nicht geklappt.

      Ich nehme mal so kann es dazu kommen oder?

      1 Reply Last reply Reply Quote 0
      • E
        ein-bayer last edited by

        Hallo

        ich muss mal wieder einige dumme fragen stellen. Die scripte laufen und eines hab ich auch umgebaut für die Minutenerfassung.

        Wenn der Zähler ein Zweirichtungszähler ist, dann ist es doch meiner Meinung nach nicht möglich mit den aktuellen scripten den aktuellen Stromverbrauch zu erfassen, sobald die Solaranlage Strom liefert, oder ?

        Sollte ich mit meiner annahme recht haben, erfassen wir ja nur den Verbrauch den wir im moment vom Versorger beziehen, und nicht den tatsächlichen?

        1 Reply Last reply Reply Quote 0
        • J
          jhg last edited by

          Hallo zusammen,

          ich benötige mal kurz eure Hilfe.

          Wie bekomme ich es denn hin, die ausgegebenen Zahlen aus dem Skript zu runden?

          Danke für eure Hilfe.

          1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators last edited by

            @ein-bayer:

            Hallo

            Wenn der Zähler ein Zweirichtungszähler ist, dann ist es doch meiner Meinung nach nicht möglich mit den aktuellen scripten den aktuellen Stromverbrauch zu erfassen, sobald die Solaranlage Strom liefert, oder ? `

            Vollkommen richtig.

            Bei einem Zweirichtungszähler benötigst du noch zusätzlich die Leistung deiner Solaranlage. Die musst du auf den Bezug addieren.

            Ansonsten hast du z.B. bei 2500W PV-Leistung und 2800W Verbrauch einen Bezug von nur 300W, der nicht deinem Verbrauch entspricht.

            Gruß

            Rainer

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

              @jhg:

              Wie bekomme ich es denn hin, die ausgegebenen Zahlen aus dem Skript zu runden? `

              function runden(wert,stellen) {
                  return Math.round(wert * Math.pow(10,stellen)) / Math.pow(10,stellen);
              }
              
              
              1 Reply Last reply Reply Quote 0
              • J
                jhg last edited by

                Muss ich das in jedes Skript am Anfang einfügen und dann werden alle Ergebnisse gerundet?

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

                  @jhg:

                  Muss ich das in jedes Skript am Anfang einfügen und dann werden alle Ergebnisse gerundet? `
                  Nein. Du kannst diese Funktion in einem globalen Skript (Gruppe "global") anlegen und musst sie an den Stellen, an denen Du runden willst (vor setState oder innerhalb setState) aufrufen. Beispiel:

                  setState(VorId, runden(nAktuell, 1), true);  // Rundung auf 1 Nachkommastelle
                  
                  1 Reply Last reply Reply Quote 0
                  • J
                    jhg last edited by

                    Ich muss hier nochmal nachfrage, weil das nicht klappt.

                    Das runden script habe ich als globales script angelegt, das läuft auch.

                    Aber an welcher Stelle muss ich nun die Runden Funktion einfügen?

                    Ich habe das erfolglos versucht.

                    Hier der wohl relevante Teil des Scripts.

                    function haupt (VorId, ZielId, SetN) {

                    var nVorwert = getState(VorId).val;

                    var nAktuell = getState(idESTotal).val;

                    var nDiff = ((nAktuell) - (nVorwert));

                    setState(ZielId, nDiff, true);

                    if(debug) log("Aus: " + nAktuell +" - "+ nVorwert + " = " + nDiff);

                    if(SetN) {

                    var shandler = on ({id: ZielId, change: 'any'}, function(data) {

                    setState(VorId, (nAktuell*10)/10, true);

                    unsubscribe(shandler);

                    });

                    }

                    Danke für die Hilfe.

                    Scripting ist (noch) nicht meins.

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

                      @jhg:

                      Aber an welcher Stelle muss ich nun die Runden Funktion einfügen? `

                      function haupt (VorId, ZielId, SetN) {
                        var nVorwert = getState(VorId).val;
                        var nAktuell = getState(idESTotal).val;
                        var nDiff = nAktuell - nVorwert;
                        setState(ZielId, runden(nDiff, 1), true);
                        if(debug) log("Aus: " + nAktuell +" - "+ nVorwert + " = " + nDiff);
                        if(SetN) {
                          var shandler = on ({id: ZielId, change: 'any'}, function(data) {
                            setState(VorId, runden(nAktuell, 1), true);
                            unsubscribe(shandler);
                          });
                        }
                      }
                      
                      
                      1 Reply Last reply Reply Quote 0
                      • J
                        jhg last edited by

                        Danke sehr.

                        Hat alles geklappt und die anderen Fehler habe ich auch gleich korrigiert.

                        1 Reply Last reply Reply Quote 0
                        • H
                          Huebeni last edited by

                          Hi a200,

                          danke für das super Skript. Damit Werte ich mein Smartmeter, als auch meine Photovoltaik-Anlage, aus.

                          Ich wollte ein paar Erweiterungen basteln, allerdings verstehe ich das Skript noch nicht ganz. Vielleicht kannst Du mir die entscheidende Erklärung geben.

                          Es geht um:

                          function haupt (VorId, ZielId, SetN) {
                              var nVorwert = getState(VorId).val;
                              var nAktuell = getState(idHAGTotal).val;
                              var nDiff = ((nAktuell * 10) - (nVorwert * 10)) * 100;
                              setState(ZielId, nDiff, true);
                              if(debug) log("Aus: " + nAktuell +" - "+ nVorwert + " = " + nDiff);
                              if(SetN) {
                                  var shandler = on ({id: ZielId, change: 'any'}, function(data) {
                                      setState(VorId, (nAktuell*10)/10, true);
                                      unsubscribe(shandler); 
                                  });
                              }
                          }
                          

                          Warum wird die VorId in dem handler bei Änderung der ZielId gesetzt?

                          Könnte ich das nicht direkt nach dem setState(ZielId, nDiff, true) machen?

                          Irgendwie hakt es da bei mir. Wann wird denn der Handler genau ausgeführt? Beim nächsten Aufruf von haupt() über den Scheduler? Dann ist aber der Wert von nVorwert vor dem setState(ZielId, nDiff, true) noch auf dem alten Wert???

                          Danke schon mal,

                          Huebeni

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

                            @Huebeni:

                            Hi a200,

                            danke für das super Skript. Damit Werte ich mein Smartmeter, als auch meine Photovoltaik-Anlage, aus.

                            Ich wollte ein paar Erweiterungen basteln, allerdings verstehe ich das Skript noch nicht ganz. Vielleicht kannst Du mir die entscheidende Erklärung geben.

                            Es geht um:

                            function haupt (VorId, ZielId, SetN) {
                                var nVorwert = getState(VorId).val;
                                var nAktuell = getState(idHAGTotal).val;
                                var nDiff = ((nAktuell * 10) - (nVorwert * 10)) * 100;
                                setState(ZielId, nDiff, true);
                                if(debug) log("Aus: " + nAktuell +" - "+ nVorwert + " = " + nDiff);
                                if(SetN) {
                                    var shandler = on ({id: ZielId, change: 'any'}, function(data) {
                                        setState(VorId, (nAktuell*10)/10, true);
                                        unsubscribe(shandler); 
                                    });
                                }
                            }
                            

                            Warum wird die VorId in dem handler bei Änderung der ZielId gesetzt?

                            Könnte ich das nicht direkt nach dem setState(ZielId, nDiff, true) machen?

                            Irgendwie hakt es da bei mir. Wann wird denn der Handler genau ausgeführt? Beim nächsten Aufruf von haupt() über den Scheduler? Dann ist aber der Wert von nVorwert vor dem setState(ZielId, nDiff, true) noch auf dem alten Wert???

                            Danke schon mal,

                            Huebeni `
                            Hi,
                            @Huebeni:

                            Warum wird die VorId in dem handler bei Änderung der ZielId gesetzt? `
                            Weil ich den Wert nicht immer schreiben will. Der Wert VorId wird nur dann geschrieben, wenn:

                            • in dem Aufruf der Funktion haupt als dritter Parameter "true" steht (if(SetN))

                            und

                            • wenn der Wert, der geschrieben werden soll, sich von dem bereits vorhandenen Wert unterscheidet (id: ZielId, change: 'any').
                              @Huebeni:

                            Könnte ich das nicht direkt nach dem setState(ZielId, nDiff, true) machen? `
                            Wird ja auch prinzipiell gemacht. Mit den o.a. Einschränkungen.
                            @Huebeni:

                            Wann wird denn der Handler genau ausgeführt? Beim nächsten Aufruf von haupt() über den Scheduler? `
                            Schau dir mal die Aufrufe von haupt an:

                            schedule(cronH, function () {
                                haupt(idHAGTotH, idHAGZielH, true);
                                haupt(idHAGTotD, idHAGZielT, false);
                            });
                            

                            Erstmal wird der Stunden-Zwischenwert berechnet und soll auch geschrieben werden. Beim zweiten Aufruf nutzen wir diesen Wert zwar, wir speichern ihn aber nicht neu. Deshalb "false" als 3. Parameter.

                            Ich hoffe diese Erklärung hilft dir weiter. Falls sie nicht gut genug war und du noch offene Fragen hast, dann melde dich einfach!

                            a200.

                            1 Reply Last reply Reply Quote 0
                            • C
                              chrissh last edited by

                              Hallo zusammen.

                              Ich versuche gerade mit dem Skript

                              ! //````
                              NEU - Zählerstand vom Anfang der akt. Stunde wird ermittelt v 0.11
                              //
                              ! var AktWoche = true; // Berechnung des Wertes: Aktuelle Woche ein-/ausschalten
                              var AktMonat = true; // Berechnung des Wertes: Aktueller Monat ein-/ausschalten
                              var PathToDP = "javascript.0.scriptEnabled.Netzbezug"/scriptEnabled.Netzbezug/; // Pfad zum Datenpunkt
                              ! var cronH = "0 * * * *";
                              var cronD = "59 23 * * *";
                              var cronW = "0 0 * * 1";
                              var cronM = "0 0 1 * *";
                              ! var idHAGTotH = PathToDP + "tmp.Total-h";
                              var idHAGTotD = PathToDP + "tmp.Total-d";
                              var idHAGTotW = PathToDP + "tmp.Total-w";
                              var idHAGTotM = PathToDP + "tmp.Total-m";
                              var idHAGTotal = PathToDP + "sma-em.0.1900205359.pregardcounter"/pregardcounter/; /Netzbezug insgesammt/
                              var idHAGZielH = PathToDP + "Hour";
                              var idHAGZielD = PathToDP + "Day";
                              var idHAGZielW = PathToDP + "Week";
                              var idHAGZielM = PathToDP + "Month";
                              var idHAGZielT = PathToDP + "Today";
                              var idHAGZielCW = PathToDP + "CurrentWeek";
                              var idHAGZielCM = PathToDP + "CurrentMonth";
                              ! var debug = false;
                              ! var DPArray = [idHAGTotH, idHAGTotD , idHAGTotW, idHAGTotM, idHAGZielH, idHAGZielD, idHAGZielW, idHAGZielM, idHAGZielT, idHAGZielCW, idHAGZielCM];
                              var DPUnit = "Wh";
                              ! DPArray.forEach(function(wert, index, array) {
                              var DPType = wert.split(".");
                              var DPDescr = "Power consumption of " + (DPType[DPType.length - 1]);

                              if(index > 3) DPUnit = "Wh";
                              createState(wert, 0, {
                                  name: DPDescr,
                                  desc: DPDescr,
                                  type: 'number',
                                  unit: DPUnit,
                                  role: 'value'
                              });
                              

                              });

                              ! function haupt (VorId, ZielId, SetN) {
                              var nVorwert = getState(VorId).val;
                              var nAktuell = getState(idHAGTotal).val;
                              var nDiff = ((nAktuell * 10) - (nVorwert * 10)) * 100;
                              setState(ZielId, nDiff, true);
                              if(debug) log("Aus: " + nAktuell +" - "+ nVorwert + " = " + nDiff);
                              if(SetN) {
                              var shandler = on ({id: ZielId, change: 'any'}, function(data) {
                              setState(VorId, (nAktuell*10)/10, true);
                              unsubscribe(shandler);
                              });
                              }
                              }
                              ! // regelmässige Wiederholungen
                              // -----------------------------------------------------------------------------
                              ! schedule(cronH, function () {
                              haupt(idHAGTotH, idHAGZielH, true);
                              haupt(idHAGTotD, idHAGZielT, false);
                              if(AktWoche) haupt(idHAGTotW, idHAGZielCW, false);
                              if(AktMonat) haupt(idHAGTotM, idHAGZielCM, false);
                              });
                              ! schedule(cronD, function () {
                              haupt(idHAGTotD, idHAGZielD, true);
                              });
                              ! schedule(cronW, function () {
                              haupt(idHAGTotW, idHAGZielW, true);
                              });
                              ! schedule(cronM, function () {
                              haupt(idHAGTotM, idHAGZielM, true);
                              });

                              
                              meinen Netzbezug darzustellen.
                              
                              Ich lesen den Wert pregardcounter (Strombezugszähler) vom SMA Energymeter aus.
                              
                              Aber irgendwie mache ich was falsch. :|
                              [5713_bildschirmfoto_2018-02-07_um_19.06.07.png](/assets/uploads/files/5713_bildschirmfoto_2018-02-07_um_19.06.07.png)
                              [5713_bildschirmfoto_2018-02-07_um_19.04.49.png](/assets/uploads/files/5713_bildschirmfoto_2018-02-07_um_19.04.49.png)
                              1 Reply Last reply Reply Quote 0
                              • Röstkartoffel
                                Röstkartoffel last edited by

                                @a200:

                                @simpixo:

                                Hallo a200

                                irgendwas ist komisch….

                                Screenshot 2017-02-13 18.21.32.png

                                warum ist das eine Minus Zahl? Soll das so sein? oder habe ich was falsch gemacht?

                                Gruß

                                Adrian `

                                aus

                                var idHAGTotal = PathToDP + "smartmeter.0.1-0:1_8_0*255.value"; /Stromverbrauch insgesammt/

                                mach

                                var idHAGTotal = "smartmeter.0.1-0:1_8_0*255.value"; /Stromverbrauch insgesammt/

                                Ein fataler Fehler! Die aktueller Wert konnte nicht ausgelesen werden! Etwas zu viel Cut&Paste 😢

                                Kopiere vorher den aktuellen Wert in Total-d und Total-h

                                Danach sollte es gehen. `

                                Guten Morgen.

                                Lösche bitte aus der Variablen "idHAGTotal" den PathToDP + . Siehe obiges Zitat.

                                Ich würde auch

                                var PathToDP = "javascript.0.scriptEnabled.Netzbezug"/scriptEnabled.Netzbezug/; // Pfad zum Datenpunkt

                                in zum Beispiel

                                var PathToDP = "javascript.0.Stromzaehler.Netzbezug"/Stromzaehler.Netzbezug/; // Pfad zum Datenpunkt

                                ändern.

                                1 Reply Last reply Reply Quote 0
                                • C
                                  chrissh last edited by

                                  Super Danke. Jetzt klappt es.

                                  Jetzt sollte ich den rest hinbekommen.

                                  • Tagesertrag via Modbus vom SMA Wechselrichter

                                  • Netzbezug vom SMA Energymeter

                                  • Einspeisung vom SMA Energymeter

                                  Daraus kann ich den Eigenverbrauch und den Gesamtstromverbrauch über ein Skript (besp. Blocky) rechnen

                                  und dies dann auch mit Hilfe dieses Skriptes in Tag, Stunde, Monat, anzeigen bzw. errechnen lassen.
                                  5713_bildschirmfoto_2018-02-08_um_16.35.09.png

                                  1 Reply Last reply Reply Quote 0
                                  • Röstkartoffel
                                    Röstkartoffel last edited by

                                    Hi crissh.

                                    Das freut mich.

                                    Da du jetzt die notwendigen Daten hast, ist der Rest mit der Darstellung in Vis nur noch Kosmetik.

                                    Gruß

                                    Volker

                                    1 Reply Last reply Reply Quote 0
                                    • B
                                      Brookyman last edited by

                                      Hallo,

                                      für die Überwachung meiner Wärmepumpe möchte ich mir den Verbrauch je Minute in Watt ausrechnen lassen. Da ich aber mit Scripten noch nie was zu tun hatte wollte ich hier mal an fragen ob mir wer sagen kann was ich z.B. an dem Stunden Script anpassen muss, damit ich den Wert minütlich ausgerechnet bekomme.

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

                                        Hallo,

                                        ich bin der neue hier bei ioBroker und ich weiß, dass der Threat schon etwas älter ist, aber bei mir gerade aktuell. 🙂

                                        Vor einer Woche habe ich angfangen mit ioBroker zu experimentieren und bin jetzt schon soweit, dass ich mich frage, wieso ich erst jetzt auf diese Software setze. Mit intensiven Lesen hier im Forum und ausprobieren, habe ich alles Rund um meinen SMA-WR und Discovergy-Zähler hinbekommen. Auch das Skript hier aus dem Threat habe ich endlich zu Laufen gebracht.

                                        Nun gibt es aber doch eine Frage.

                                        17814_werte.jpg

                                        Wie man sehen kann, werden Daten von Skript erfasst. Bei der Übergabe von TMP in die Objekte für Tag, Woche, Monat, usw. werden 3 Nachkommastellen ohne Trennung angehängt. Das ist natürlich falsch. Wie bekomme ich die richtige Anzeige hin mit 3 Nachkommastellen? Wo muß ich was eintragen? Kann ich das eventuell in den Objekt-Eigenschaften festlegen oder muß dazu etwas ins Skript eingefügt werden?

                                        Vielen Dank im voraus für eure Hilfe und vielen Dank an die Autoren für dieses tolle Programm/Projekt. 🙂

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

                                          Hallo,

                                          ich habe das Skript vergessen, welches ich benutze. Hier ist es:

                                          // NEU - Zählerstand vom Anfang der akt. Stunde wird ermittelt v 0.11
                                          //
                                          
                                          var AktWoche 	= true;					// Berechnung des Wertes: Aktuelle Woche ein-/ausschalten 
                                          var AktMonat	= true;					// Berechnung des Wertes: Aktueller Monat ein-/ausschalten 
                                          var PathToDP  = "javascript.0.Stromzähler.Discovergy.";  // Pfad zum Datenpunkt
                                          
                                          var cronH           = "0 * * * *";
                                          var cronD           = "59 23 * * *";
                                          var cronW           = "0 0 * * 1";
                                          var cronM           = "0 0 1 * *";
                                          
                                          var idHAGTotH       = PathToDP + "tmp.Total-h";
                                          var idHAGTotD       = PathToDP + "tmp.Total-d";
                                          var idHAGTotW       = PathToDP + "tmp.Total-w";
                                          var idHAGTotM       = PathToDP + "tmp.Total-m";
                                          var idHAGTotal      = "script.js.Strom.Einspeise-Bezug.Werte.Gesamtverbrauch";               /*Stromverbrauch insgesammt*/
                                          var idHAGZielH      = PathToDP + "Stunde";
                                          var idHAGZielD      = PathToDP + "Tag";
                                          var idHAGZielW      = PathToDP + "Woche";
                                          var idHAGZielM      = PathToDP + "Monat";
                                          var idHAGZielT      = PathToDP + "Heute";
                                          var idHAGZielCW     = PathToDP + "AktuelleWoche";
                                          var idHAGZielCM     = PathToDP + "AktuellerMonat";
                                          
                                          var debug           = false;
                                          
                                          var DPArray         = [idHAGTotH, idHAGTotD , idHAGTotW, idHAGTotM, idHAGZielH, idHAGZielD, idHAGZielW, idHAGZielM, idHAGZielT, idHAGZielCW, idHAGZielCM];
                                          var DPUnit          = "Wh";
                                          
                                          DPArray.forEach(function(wert, index, array) {
                                              var DPType = wert.split(".");
                                              var DPDescr = "Stromverbrauch " + (DPType[DPType.length - 1]);
                                          
                                              if(index > 3) DPUnit = "Wh";
                                              createState(wert, 0, {
                                                  name: DPDescr,
                                                  desc: DPDescr,
                                                  type: 'number',
                                                  unit: DPUnit,
                                                  role: 'value'
                                              });
                                          });
                                          
                                          function haupt (VorId, ZielId, SetN) {
                                              var nVorwert = getState(VorId).val;
                                              var nAktuell = getState(idHAGTotal).val;
                                              var nDiff = ((nAktuell * 10) - (nVorwert * 10)) * 100;
                                              setState(ZielId, runden(nDiff, 3), true);
                                              if(debug) log("Aus: " + nAktuell +" - "+ nVorwert + " = " + nDiff);
                                              if(SetN) {
                                                  var shandler = on ({id: ZielId, change: 'any'}, function(data) {
                                                      setState(VorId, (nAktuell*10)/10, true);
                                                      unsubscribe(shandler); 
                                                  });
                                              }
                                          }
                                          
                                          // regelmässige Wiederholungen
                                          // -----------------------------------------------------------------------------
                                          
                                          schedule(cronH, function () {
                                              haupt(idHAGTotH, idHAGZielH, true);
                                              haupt(idHAGTotD, idHAGZielT, false);
                                              if(AktWoche) haupt(idHAGTotW, idHAGZielCW, false);
                                              if(AktMonat) haupt(idHAGTotM, idHAGZielCM, false);
                                          });
                                          
                                          schedule(cronD, function () {
                                              haupt(idHAGTotD, idHAGZielD, true);
                                          });
                                          
                                          schedule(cronW, function () {
                                              haupt(idHAGTotW, idHAGZielW, true);
                                          });
                                          
                                          schedule(cronM, function () {
                                              haupt(idHAGTotM, idHAGZielM, true);
                                          });
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • a200
                                            a200 last edited by

                                            @Palm_Maniac:

                                            Hallo,

                                            ich habe das Skript vergessen, welches ich benutze. Hier ist es: `
                                            bist du dir sicher, dass du Nachkommastellen überhaupt hast? Was steht bei dir im Datenpunkt: "script.js.Strom.Einspeise-Bezug.Werte.Gesamtverbrauch"

                                            Wenn du immer nur ganze Wh Angaben hast, dann können keine Nachkommastellen entstehen. Schau aber erstmal in dem o.g. Datenpunkt.

                                            a200.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            540
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            16
                                            62
                                            8608
                                            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