Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Auswertung für smartmeter

NEWS

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

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

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

Auswertung für smartmeter

Auswertung für smartmeter

Scheduled Pinned Locked Moved Skripten / Logik
62 Posts 16 Posters 10.6k Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    J Offline
    jhg
    wrote on last edited by
    #34

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

    1 Reply Last reply
    0
    • paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #35

      @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
      

      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 Reply Last reply
      0
      • J Offline
        J Offline
        jhg
        wrote on last edited by
        #36

        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
        0
        • paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #37

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

          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 Reply Last reply
          0
          • J Offline
            J Offline
            jhg
            wrote on last edited by
            #38

            Danke sehr.

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

            1 Reply Last reply
            0
            • H Offline
              H Offline
              Huebeni
              wrote on last edited by
              #39

              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
              0
              • a200A Offline
                a200A Offline
                a200
                wrote on last edited by
                #40

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

                IoBroker auf QNAP TS-451, Raspi und NUC

                1 Reply Last reply
                0
                • C Offline
                  C Offline
                  chrissh
                  wrote on last edited by
                  #41

                  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
                  0
                  • RöstkartoffelR Offline
                    RöstkartoffelR Offline
                    Röstkartoffel
                    wrote on last edited by
                    #42

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

                    NUC7i3BNH mit Proxmox und ioBroker (VM Debian Buster), Raspi3 (Slave Smartmeter für eHZ easymeter), Hardware CCU2, SMA SB5000TL-21

                    1 Reply Last reply
                    0
                    • C Offline
                      C Offline
                      chrissh
                      wrote on last edited by
                      #43

                      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
                      0
                      • RöstkartoffelR Offline
                        RöstkartoffelR Offline
                        Röstkartoffel
                        wrote on last edited by
                        #44

                        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

                        NUC7i3BNH mit Proxmox und ioBroker (VM Debian Buster), Raspi3 (Slave Smartmeter für eHZ easymeter), Hardware CCU2, SMA SB5000TL-21

                        1 Reply Last reply
                        0
                        • B Offline
                          B Offline
                          Brookyman
                          wrote on last edited by
                          #45

                          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
                          0
                          • Palm_ManiacP Offline
                            Palm_ManiacP Offline
                            Palm_Maniac
                            wrote on last edited by
                            #46

                            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
                            0
                            • Palm_ManiacP Offline
                              Palm_ManiacP Offline
                              Palm_Maniac
                              wrote on last edited by
                              #47

                              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
                              0
                              • a200A Offline
                                a200A Offline
                                a200
                                wrote on last edited by
                                #48

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

                                IoBroker auf QNAP TS-451, Raspi und NUC

                                1 Reply Last reply
                                0
                                • Palm_ManiacP Offline
                                  Palm_ManiacP Offline
                                  Palm_Maniac
                                  wrote on last edited by
                                  #49

                                  Also unter dem Datenpunkt wird mit Nachkommastelle in Watt ausgegeben, aktuell z.b. 1143.5W. In den TMPs des Skripts steht es noch richtig.

                                  Ich habe im Skript gesehen, wenn die Differenz zwischen aktuellen und vorhergehenden Wert berechnet wird, dann werden die jeweilen Werte mit 10 multipliziert und das Ergebnis dann nochmal mit 100. Als Ergebnis gibts dann die Monsterzahlen, die eher mWh entsprechen als Wh. Hier der Ausschnitt des Codes:

                                  var nDiff = ((nAktuell * 10) - (nVorwert * 10)) * 100;
                                  

                                  Ist das Absicht so? Mir kommt das komisch vor.

                                  Hier mal ein Ausschnitt von Heute mit den Inhalten der Objekte. Da sieht man, dass sie temporär mit Nachkommastellen richtig als Wh abgelegt werden.

                                  17814_daten.jpg

                                  Und hier die Quelle, der Gesamtverbrauch.

                                  17814_gesamtverbrauch.jpg

                                  Da sind jetzt gerade mal viele Nachkommastellen, aber das Komma ist da.

                                  Vielen Dank für deine Hilfe. 🙂

                                  1 Reply Last reply
                                  0
                                  • a200A Offline
                                    a200A Offline
                                    a200
                                    wrote on last edited by
                                    #50

                                    @Palm_Maniac:

                                    Also unter dem Datenpunkt wird mit Nachkommastelle in Watt ausgegeben, aktuell z.b. 1143.5W. In den TMPs des Skripts steht es noch richtig.

                                    Ich habe im Skript gesehen, wenn die Differenz zwischen aktuellen und vorhergehenden Wert berechnet wird, dann werden die jeweilen Werte mit 10 multipliziert und das Ergebnis dann nochmal mit 100. Als Ergebnis gibts dann die Monsterzahlen, die eher mWh entsprechen als Wh. Hier der Ausschnitt des Codes:

                                    var nDiff = ((nAktuell * 10) - (nVorwert * 10)) * 100;
                                    

                                    Ist das Absicht so? Mir kommt das komisch vor.

                                    Hier mal ein Ausschnitt von Heute mit den Inhalten der Objekte. Da sieht man, dass sie temporär mit Nachkommastellen richtig als Wh abgelegt werden.

                                    Daten.JPG

                                    Und hier die Quelle, der Gesamtverbrauch.

                                    Gesamtverbrauch.jpg

                                    Da sind jetzt gerade mal viele Nachkommastellen, aber das Komma ist da.

                                    Vielen Dank für deine Hilfe. 🙂 `

                                    das sollte doch eher.

                                    var nDiff = ((nAktuell * 10) - (nVorwert * 10)) / 10;
                                    

                                    heißen. Also durch Zehn und nicht mal Hundert. So steht es wenigstens bei mir drin.

                                    Sauberer sollte es aber so sein:

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

                                    Scheint bis jetzt Niemandem aufgefallen zu sein. Habe ich im ersten Posting korrigiert.

                                    IoBroker auf QNAP TS-451, Raspi und NUC

                                    1 Reply Last reply
                                    0
                                    • Palm_ManiacP Offline
                                      Palm_ManiacP Offline
                                      Palm_Maniac
                                      wrote on last edited by
                                      #51

                                      Hallo a200,

                                      das mit *100 ist so aus deiner 2. Version, als die Punkte für Aktueller Monat und Aktuelle Woche dazu kamen, etwas weiter unten auf der ersten Seite hier. Da hat sich der Fehler wohl schon eingeschlichen. 🙂

                                      Den geänderten Code werde ich gleich übernehmen und berichten. Vielen Dank. 🙂

                                      1 Reply Last reply
                                      0
                                      • Palm_ManiacP Offline
                                        Palm_ManiacP Offline
                                        Palm_Maniac
                                        wrote on last edited by
                                        #52

                                        Jetzt klappt es, es werden keine mWh mehr berechnet. 🙂

                                        Etwas verstehe ich aber noch nicht. Wieso wird in dem Skript eine Differenzberechnung durchgehführt? Was hat ein, sich mit der Zeit aufaddierender Wert mit der Differenz zum Vortag zut un? Aktuell führt das nähmlich bei mir zu negativen Werten Bei der Berechnung für Stromverbrauch Heute und Stromverbrauch Aktuelle Woche.

                                        Nach meinem Verständnis fängt doch jeder neue Tag ab 0 Uhr bei Null an. Also müßte bei jedem Durchlauf des Skripts nach einer Stunde der neue Wert auf den alten aufaddiert werden. Im Skript wird aber immer der Vorwert vom aktuellen Wert abgezogen, was dann eben zu negativen Verbrauchsdaten führen kann. Oder habe ich da jetzt einen Denkfehler drin?

                                        Vielleicht greife ich auch die falschen Daten ab. Das Objekt "Gesamtverbrauch" ergibt sich bei mir aus den Echtzeitverbrauchswerten der PV-Anlage und dem Bezug aus dem Netz. Also Daten, die sich sekündlich ändern. Oder muß ich den Zählerstand als Quelle angeben? Dann würde ich die Differenzberechnung verstehen.

                                        1 Reply Last reply
                                        0
                                        • a200A Offline
                                          a200A Offline
                                          a200
                                          wrote on last edited by
                                          #53

                                          @Palm_Maniac:

                                          Jetzt klappt es, es werden keine mWh mehr berechnet. 🙂

                                          Etwas verstehe ich aber noch nicht. Wieso wird in dem Skript eine Differenzberechnung durchgehführt? Was hat ein, sich mit der Zeit aufaddierender Wert mit der Differenz zum Vortag zut un? Aktuell führt das nähmlich bei mir zu negativen Werten Bei der Berechnung für Stromverbrauch Heute und Stromverbrauch Aktuelle Woche.

                                          Nach meinem Verständnis fängt doch jeder neue Tag ab 0 Uhr bei Null an. Also müßte bei jedem Durchlauf des Skripts nach einer Stunde der neue Wert auf den alten aufaddiert werden. Im Skript wird aber immer der Vorwert vom aktuellen Wert abgezogen, was dann eben zu negativen Verbrauchsdaten führen kann. Oder habe ich da jetzt einen Denkfehler drin?

                                          Vielleicht greife ich auch die falschen Daten ab. Das Objekt "Gesamtverbrauch" ergibt sich bei mir aus den Echtzeitverbrauchswerten der PV-Anlage und dem Bezug aus dem Netz. Also Daten, die sich sekündlich ändern. Oder muß ich den Zählerstand als Quelle angeben? Dann würde ich die Differenzberechnung verstehen. `

                                          Dein Datenpunkt idHAGTotal muss auf den Gesamtzählerstand zeigen.

                                          Die Berechnung funktioniert wie folgt:

                                          um 13:00 wird der aktueller Gesamtzählerstand (z.B. 15000 kWh) minus der Zählerstand um 12:00 (z.B. 14800 kWh) berechnet. Das ergibt den Verbrauch der letzten Stunde (200 kWh). Der aktueller Gesamtzählerstand wird wieder in den TMP-H Datenpunkt geschrieben, um um 13:00 wieder die Differenz berechnen zu können.

                                          Also wir ziehen immer vom aktuellen Gesamtzählerstand jeweils den Vorstunden-, Vortag-, Vorwoche-, Vormonatwert abgezogen. Das ergibt den Verbrauch in der letzten Stunde, letzten Tag, Woche und Monat.

                                          Ich hoffe, jetzt ist es etwas klarer

                                          IoBroker auf QNAP TS-451, Raspi und NUC

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          571

                                          Online

                                          32.4k

                                          Users

                                          81.3k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe