Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Stromzählung stündlich

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Stromzählung stündlich

    This topic has been deleted. Only users with topic management privileges can see it.
    • K
      klassisch Most Active @Homoran last edited by

      @Homoran Danke, also den Monatstag rausholen und dann auf 1 prüfen. Da wird sich in JS was finden, ich mache ja kein Blockly.

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

        @klassisch sagte in Stromzählung stündlich:

        also den Monatstag rausholen und dann auf 1 prüfen.

        nicht ganz,
        das aktuelle Datum nehmen, Anzahl msec hinzuzählen, bis der nächste Tag sein wird und das dann auf den 1. prüfen

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

          @Homoran @klassisch so mache ich das:

          // NEU - Zählerstand vom Anfang der akt. Stunde wird ermittelt
          // 
          
          var cronH           = "0 * * * *";
          var cronD           = "59 23 * * *";
          var cronW           = "0 0 * * 1";
          var cronM           = "0 0 1 * *";
          var cronY           = "1 0 1 1 *";
          
          var PathToDP        = "javascript.0.Stromzähler.Hager.";  // Pfad zum Datenpunkt
          
          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 idHAGTotY       = PathToDP + "tmp.Total-y";
          var idHAGTotal      = "smartmeter.0.1-0:1_8_0__255.value";
          var idHAGZielH      = PathToDP + "Hour";
          var idHAGZielD      = PathToDP + "Day";
          var idHAGZielW      = PathToDP + "Week";
          var idHAGZielM      = PathToDP + "Month";
          var idHAGZielT      = PathToDP + "CurrentDay";
          var idHAGZielY      = PathToDP + "Year";
          var idHAGZielCW     = PathToDP + "CurrentWeek";
          var idHAGZielCM     = PathToDP + "CurrentMonth";
          var Teiler, dat, zahl;
          var debug           = true;
          
          var DPArray         = [idHAGTotH, idHAGTotD , idHAGTotW, idHAGTotM, idHAGTotY, idHAGZielH, idHAGZielD, idHAGZielW, idHAGZielM, idHAGZielY, idHAGZielT, idHAGZielCW, idHAGZielCM];
          var DPUnit          = "W";
          
          DPArray.forEach(function(wert, index, array) {
              var DPType = wert.split(".");
              var DPDescr = "Power consumption of " + (DPType[DPType.length - 1]);
              
              if(index > 4) 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 = (parseFloat(nAktuell) - parseFloat(nVorwert)).toFixed(3);
              if(debug) log("Vor: " + parseFloat(nVorwert) + " Aktuell: " +parseFloat(nAktuell) + " Differenz: " + nDiff);
              setState(ZielId, parseFloat(nDiff), true);
              if(SetN) {
                  var shandler = on ({id: ZielId, change: 'any'}, function(data) {
                      setState(VorId, nAktuell, true);
                      unsubscribe(shandler); 
                  });
              }
          }
          
          // regelmäßige Wiederholungen
          // -----------------------------------------------------------------------------
          
          schedule(cronH, function () {
              haupt(idHAGTotH, idHAGZielH, true);
          
              haupt(idHAGTotD, idHAGZielT, false);    // Today
          
              haupt(idHAGTotW, idHAGZielCW, false);  // Current Week
          
              haupt(idHAGTotM, idHAGZielCM, false);  // Current Month
          });
          
          schedule(cronD, function () {
              haupt(idHAGTotD, idHAGZielD, true);
          });
          
          schedule(cronW, function () {
              haupt(idHAGTotW, idHAGZielW, true);
          });
          
          schedule(cronM, function () {
              haupt(idHAGTotM, idHAGZielM, true);
          });
          
          schedule(cronY, function () {
              haupt(idHAGTotY, idHAGZielY, true);
          });
          
          

          Ich schreibe die Vorperioden-Werte in einzelne DP (das sind die tmp.Total-?)
          Damit habe ich die DP für minütlich, stündlich, täglich, wöchentlich, monatlich, jährlich, heute, diese Woche und dieser Monat.

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

            @a200 sagte in Stromzählung stündlich:

            Damit habe ich die DP für minütlich, stündlich, täglich, wöchentlich, monatlich, jährlich, heute, diese Woche und dieser Monat.

            Ich habe mir das script nicht näher angesehen, aber der cronM mit 0 0 1 * * wird am ersten (ich nehme an des Folgemonats) geschrieben, das wird bei grafischer Darstellung dann dem nächsten Monat zugeordnet, während cronD "korrekterweise" kurz vor Mitternacht 59 23 * * * abläuft

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

              @Homoran sagte in Stromzählung stündlich:

              @a200 sagte in Stromzählung stündlich:

              Damit habe ich die DP für minütlich, stündlich, täglich, wöchentlich, monatlich, jährlich, heute, diese Woche und dieser Monat.

              Ich habe mir das script nicht näher angesehen, aber der cronM mit 0 0 1 * * wird am ersten (ich nehme an des Folgemonats) geschrieben, das wird bei grafischer Darstellung dann dem nächsten Monat zugeordnet, während cronD "korrekterweise" kurz vor Mitternacht 59 23 * * * abläuft

              am ersten eines Monats wird der aktueller Gesamtwert in den DP tmp.Total-m geschrieben. Am ersten des Folgemonats wird die Differenz der beider Werte als Monatsverbrauch gespeichert und danach der aktueller Gesamtwert wieder in den DP tmp.Total-m geschrieben.

              Das gleiche mache ich stündlich, wöchentlich und jährlich. Die Werte für heute, diese Woche und dieser Monat werden nach dem Prinzip "aktueller Wert" - "Vorwert" gerechnet.

              Ich verstehe deinen Einwand, deine Frage nicht ganz.

              cronD könnte auch "0 0 * * *" sein, aber es gab da schon genug andere Jobs.

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

                @a200 sagte in Stromzählung stündlich:

                Ich verstehe deinen Einwand, deine Frage nicht ganz.

                Ich versuche es nochmal 😉

                Wenn du deinen Stromverbrauch als Balkengrafik darstellen willst, werden dein Balken dem Folgemonat (in dem du vielleicht in Urlaub bist) zugeordnet.
                Aus dem Grund mache ich das (genau wie du am Tag) am letzten Tag des Monats um 23:59
                Dann ist der Timestmp des Wertes noch im aktuellen Monat

                a200 1 Reply Last reply Reply Quote 0
                • L
                  loni78 @Homoran last edited by

                  @Homoran
                  @Asgothian

                  So ich habe mal meine Sammlung von Datenpunkten gelöscht...... und habe Euren Ratschlag umgesetzt. D.h. ich aggregiere jetzt die Werte hoch --> von Stunde --> zu Tage --> zu Monate usw.

                  Es scheint so, dass es funktioniert. Manchmal sieht man den Wald vor lauter Bäumen nicht. Jetzt muss ich mir nur noch überlegen, wie ich das mit den Tageswerten mache, da diese erst um 0.01 Uhr in der Influx gespeichert werden.

                  Erstmal vielen Dank an alle.

                  Grüße
                  Rafael

                  L 1 Reply Last reply Reply Quote 0
                  • L
                    loni78 @loni78 last edited by

                    @Homoran
                    @Asgothian 4df46893-0211-4af0-8c87-88752288613f-image.png

                    So habe ich das in Blockly umgesetzt. Müsste doch so funktionieren bzw. gibt es Verbesserungsvorschlage. In diesem Skript werden erstmal nur die kWh gezählt bzw. geloggt. In einem zweiten würde ich das noch in EUR umrechnen.

                    Grüße
                    Rafael

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

                      @Homoran sagte in Stromzählung stündlich:

                      Ich versuche es nochmal 😉

                      Wenn du deinen Stromverbrauch als Balkengrafik darstellen willst, werden dein Balken dem Folgemonat (in dem du vielleicht in Urlaub bist) zugeordnet.
                      Aus dem Grund mache ich das (genau wie du am Tag) am letzten Tag des Monats um 23:59
                      Dann ist der Timestmp des Wertes noch im aktuellen Monat

                      Ok, jetzt! Balkendiagramm ist das Stichwort! Du hast vorhin nur von Grafen gesprochen.
                      Ich nutze Liniendiagram und dann habe ich korrekterweise am Ersten eines Monats um 0:00 den Verbrauch bis zu diesem Zeitpunkt.

                      002.PNG

                      003.PNG

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

                        Hallo,

                        darf ich mal in die Runde fragen, wie Ihr das dann speichert? Ich kann ja DPs anlegen für 31 Tage und die dann jeweils füllen. Für Wochen, Monate und Jahre ist das Anlegen von DPs (man möchte ja nichts verlieren) aber irgendwie viel Aufwand (kann man automatisieren, ist mir bekannt). Lässt sich sowas in einer Art array speichern, oder habt Ihr jeweils wirklich DPs erstellt?

                        paul53 Asgothian Homoran 3 Replies Last reply Reply Quote 0
                        • paul53
                          paul53 @XxJooO last edited by

                          @XxJooO sagte:

                          Lässt sich sowas in einer Art array speichern

                          Ja, das lässt sich in einem Datenpunkt vom Typ "array" speichern.

                          1 Reply Last reply Reply Quote 0
                          • Asgothian
                            Asgothian Developer @XxJooO last edited by

                            @XxJooO
                            Ich speichere das in einer Datenbank, und mache den Graph dann mit Grafana, Flot oder dem neuen E-Charts adapter.

                            Gefällt mir besser als irgendeine selbstgebaute "array" Speicherung.

                            A.

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

                              @XxJooO sagte in Stromzählung stündlich:

                              Ich kann ja DPs anlegen für 31 Tage und die dann jeweils füllen

                              Wieso?
                              ein TagesDatenpunkt reicht.
                              Der wird historisiert und einmal am Tag befüllt

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              881
                              Online

                              32.0k
                              Users

                              80.4k
                              Topics

                              1.3m
                              Posts

                              7
                              22
                              1768
                              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