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. JavaScript
  5. Shelly Verbrauchs-Historie für Tag, Woche, Monat, Jahr

NEWS

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

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

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

Shelly Verbrauchs-Historie für Tag, Woche, Monat, Jahr

Geplant Angeheftet Gesperrt Verschoben JavaScript
134 Beiträge 24 Kommentatoren 22.9k Aufrufe 27 Watching
  • Ä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.
  • S SpacerX

    @skb Skript ist von Dir?

    Danke dafür. Hättest was dagegen wenn ich hier mal einen Schnipsel zum Anpassen des Speicherpfades poste?

    SKBS Offline
    SKBS Offline
    SKB
    Developer Most Active
    schrieb am zuletzt editiert von
    #56

    @spacerx Dazu bitte erstmal einen Change-Request an @homecineplexx stellen :D

    Spass beiseite - kannst Du gerne machen.

    ... wer nicht mit der Zeit geht, geht mit der Zeit ...

    Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

    1 Antwort Letzte Antwort
    0
    • SKBS SKB

      @homecineplexx Versionsverwaltung? Und weiter? Soll ich gerne auch noch Change-Requeste einstellen? Projektmanager beschäftigen?

      Und das alles in meiner privaten Zeit? Sonst geht es Dir aber gut?

      H Offline
      H Offline
      homecineplexx
      schrieb am zuletzt editiert von
      #57

      @skb said in Shelly Verbrauchs-Historie für Tag, Woche, Monat, Jahr:

      @homecineplexx Versionsverwaltung? Und weiter? Soll ich gerne auch noch Change-Requeste einstellen? Projektmanager beschäftigen?

      Und das alles in meiner privaten Zeit? Sonst geht es Dir aber gut?

      alter was bist du denn für ein schüttler....wahnsinn

      SKBS 1 Antwort Letzte Antwort
      -2
      • H homecineplexx

        @skb said in Shelly Verbrauchs-Historie für Tag, Woche, Monat, Jahr:

        @homecineplexx Versionsverwaltung? Und weiter? Soll ich gerne auch noch Change-Requeste einstellen? Projektmanager beschäftigen?

        Und das alles in meiner privaten Zeit? Sonst geht es Dir aber gut?

        alter was bist du denn für ein schüttler....wahnsinn

        SKBS Offline
        SKBS Offline
        SKB
        Developer Most Active
        schrieb am zuletzt editiert von
        #58

        @homecineplexx Jetzt bin ich interessiert, was ein "Schüttler" ist :D

        ... wer nicht mit der Zeit geht, geht mit der Zeit ...

        Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

        I 1 Antwort Letzte Antwort
        0
        • SKBS SKB

          @homecineplexx Jetzt bin ich interessiert, was ein "Schüttler" ist :D

          I Offline
          I Offline
          IOBaer
          schrieb am zuletzt editiert von
          #59

          @SpacerX kannst Du Dein Skript hier zur Verfügung stellen? Das wäre toll.

          Eigentlich ist es schon traurig, welcher Aufwand betrieben werden muss, um so eine einfache Sache wie Energiedatenprotokollierung in Verbindung mit einem Shelly zum Laufen zu bekommen ;)

          S 2 Antworten Letzte Antwort
          0
          • I IOBaer

            @SpacerX kannst Du Dein Skript hier zur Verfügung stellen? Das wäre toll.

            Eigentlich ist es schon traurig, welcher Aufwand betrieben werden muss, um so eine einfache Sache wie Energiedatenprotokollierung in Verbindung mit einem Shelly zum Laufen zu bekommen ;)

            S Offline
            S Offline
            SpacerX
            schrieb am zuletzt editiert von
            #60

            @iobaer sagte in Shelly Verbrauchs-Historie für Tag, Woche, Monat, Jahr:

            kannst Du Dein Skript hier zur Verfügung stellen? Das wäre toll.

            Dazu muss ich erst mal an meinen Rechner kommen. Heute Abend dann.

            DS720|Nuc8i3BEH|Proxmox|RaspberryMatic|ioBroker|influxDB2|Grafana

            1 Antwort Letzte Antwort
            1
            • I IOBaer

              @SpacerX kannst Du Dein Skript hier zur Verfügung stellen? Das wäre toll.

              Eigentlich ist es schon traurig, welcher Aufwand betrieben werden muss, um so eine einfache Sache wie Energiedatenprotokollierung in Verbindung mit einem Shelly zum Laufen zu bekommen ;)

              S Offline
              S Offline
              SpacerX
              schrieb am zuletzt editiert von SpacerX
              #61

              @iobaer

              Das sind meine Änderungen am original Script

              * Skript Name:      Shelly-Verbrauch
               * Skript Version:   1.60
               * Erstell-Datum:    08. Oktober 2021 | Update: 20. Juli 2022 | Override Functions by SpacerX 26.09.2022 (Zeile 402)
              

              Ab Zeile 402 sieht mein Skript dann so aus.
              Die Funktionen die einer Änderung bedurften werden einfach überschrieben. So muss ich nicht Quer durch den Code Änderungen vornehmen und bei Updates kann ich schnell anpassen.
              Ich habe die Hinweise mal im Code belassen.

              Zu beachten ist, es so angepasst ist das die Tageswerte um 23:59 Uhr, Wochenwerte am Sonntag um 23:59 Uhr, Monatswerte am letzten Tag des Monats um 23:59 Uhr und Jahreswerte am 31 Dez. um 23:59.

              In Zeile 409 wird dann der Userdatenpunkt definiert.

              /*
               * Override Functions
               * @autor 2022 SpacerX <spacerx@rbe-base.de>
               * Überschreibt Funktionen um Datenpunkte unter 0_userdata.0 zu erstellen
               *
               *** START SpacerX ***/
              // Userdatenpunkt
              var userdir = "0_userdata.0."; // Abschließender Punkt !!! WICHTIG !!!
              /**
               * Letzten des Monats berechnen.
               * @param {Date} oHeute
               */
              function letzterDesMonats(oHeute) {
                  return new Date(oHeute.getFullYear(), oHeute.getMonth() + 1, 0).getDate();
              }
              //Override at row 48
              // Shelly Verbrauch aktualisieren - nachts um 23:59 Uhr
              function shelly_vebrauch_tag() {
                  // Nochmals das Tagesupdate durchlaufen, damit die restlichen Werte gelesen werden
                  shelly_verbrauch_update();
                  // Datumsvariable
                  var heute = new Date();
                  // Heute zu Gestern verschieben. Täglich um 23:59 Uhr
                  verschiebe_verbrauch_objekt("heute", "gestern");
                  log("Shelly Verbrauch: Werte für gestern und heute aktualisiert!");
                  // aktuelle Woche in letzte Woche verschieben. Am Sonntag um 23:59 Uhr
                  if (heute.getDay() === 0) {   /*line changed by spacerx (Sonntag=0, Montag=1)*/
                      verschiebe_verbrauch_objekt("diese_woche", "letzte_woche");
                      log("Shelly Verbrauch: Werte für diese und letzte Woche aktualisiert!");
                  }
                  // aktueller Monat in letzten Monat verschieben. Am letzten des Monats um 23:59 Uhr
                  if (heute.getDate() === letzterDesMonats(heute)) {   /*line changed by spacerx*/
                      verschiebe_verbrauch_objekt("dieser_monat", "letzter_monat");
                      log("Shelly Verbrauch: Werte für diesen und letzten Monat aktualisiert!");
                  }
                  // aktuelles Jahr in letztes Jahr verschieben. Am letzten Tag des Jahres um 23:59 Uhr
                  if (heute.getDate() === letzterDesMonats(heute) && heute.getMonth() === 11) { /*line changed by spacerx (Jan=0, Dez=11)*/
                      verschiebe_verbrauch_objekt("dieses_jahr", "letztes_jahr");
                      log("Shelly Verbrauch: Werte für dieses und letztes Jahr aktualisiert!");
                  }
              }
              //Override at row 254
              //Verschiebt das jeweilige Verbrauchs-Objekt und nullt den Ursprung (Tag, Woche, Monat, Jahr)
              function verschiebe_verbrauch_objekt(von, nach) {
                  $('state[id=' + userdir + datenpunkt + '*.*.' + von + ']').each(function (id, i) {   /*line changed by spacerx*/
                      // Temporärer Gruppen-Datenpunkt
                      var tmp_dp = id.slice(0, -(von.length));
                      var verbrauch = getState(id).val;
                      if (verbrauch != null) {
                          setState(tmp_dp + nach, verbrauch, true);
                      }
                      // Setze "von" zurück
                      setState(id, 0, true);
                  });
              }
              //Override at row 267
              // Funktion um die aktuellen Namen des Shelly abzuholen
              function aktualisiere_namen() {
                  if (typeof extendObject === "function") {
                      shellyDpsName.each(function (id, i) {
                          if (existsState(id)) {
                              setState(shelly_DP_Name(id), String(getState(id).val), true);
                              extendObject(shelly_DP_Name_Main(id), {   /*line changed by spacerx*/
                                  common: {
                                      name: String(getState(id).val),
                                      desc: String(getState(id).val)
                                  },
                                  type: "channel"
                              });
                          }
                      });
                  }
              }
              //Override at row 377
              function shelly_DP(dp, extended = false) {
                  dp = dp.split(".");
                  dp = userdir + datenpunkt + dp[2] + "." + dp[3];   /*line changed by spacerx*/
                  if (extended) {
                      dp = dp + "_Returned.";
                  } else {
                      dp = dp + ".";
                  }
                  return dp;
              }
              //Override at row 387
              function shelly_DP_Name(dp) {
                  dp = dp.split(".");
                  dp = userdir + datenpunkt + dp[2] + "." + dp[3];   /*line changed by spacerx*/
                  return dp;
              }
              //Override at row 392
              function shelly_DP_Name_Main(dp) {
                  dp = dp.split(".");
                  dp = userdir + datenpunkt + dp[2];   /*line changed by spacerx*/
                  return dp;
              }
              /*** END SpacerX ***/
              // Erster Start und Initialisierung
              shelly_verbrauch_erster_start();
              // Alle 15 Minuten das Skript für den Tagesverbrauch ausführen
              schedule('*/15 * * * *', shelly_verbrauch_update);
              /*** START Edit SpacerX ***/
              // Nachts um 24 Uhr werden die Werte in andere Variablen gespeichert, um den Verlauf zu erstellen
              //schedule('0 0 * * *', shelly_vebrauch_tag);
              // Nachts um 23:59 Uhr werden die Werte in andere Variablen gespeichert, um den Verlauf zu erstellen
              schedule('59 23 * * *', shelly_vebrauch_tag);
              /*** END Edit SpacerX ***/
              

              Warum Aktualisierung um 23:59 Uhr und nicht 0:00 Uhr?
              Ganz einfach, in InfluxDB gehört 0:00 Uhr schon zum nächsten Tag.

              DS720|Nuc8i3BEH|Proxmox|RaspberryMatic|ioBroker|influxDB2|Grafana

              I SKBS 3 Antworten Letzte Antwort
              2
              • S SpacerX

                @iobaer

                Das sind meine Änderungen am original Script

                * Skript Name:      Shelly-Verbrauch
                 * Skript Version:   1.60
                 * Erstell-Datum:    08. Oktober 2021 | Update: 20. Juli 2022 | Override Functions by SpacerX 26.09.2022 (Zeile 402)
                

                Ab Zeile 402 sieht mein Skript dann so aus.
                Die Funktionen die einer Änderung bedurften werden einfach überschrieben. So muss ich nicht Quer durch den Code Änderungen vornehmen und bei Updates kann ich schnell anpassen.
                Ich habe die Hinweise mal im Code belassen.

                Zu beachten ist, es so angepasst ist das die Tageswerte um 23:59 Uhr, Wochenwerte am Sonntag um 23:59 Uhr, Monatswerte am letzten Tag des Monats um 23:59 Uhr und Jahreswerte am 31 Dez. um 23:59.

                In Zeile 409 wird dann der Userdatenpunkt definiert.

                /*
                 * Override Functions
                 * @autor 2022 SpacerX <spacerx@rbe-base.de>
                 * Überschreibt Funktionen um Datenpunkte unter 0_userdata.0 zu erstellen
                 *
                 *** START SpacerX ***/
                // Userdatenpunkt
                var userdir = "0_userdata.0."; // Abschließender Punkt !!! WICHTIG !!!
                /**
                 * Letzten des Monats berechnen.
                 * @param {Date} oHeute
                 */
                function letzterDesMonats(oHeute) {
                    return new Date(oHeute.getFullYear(), oHeute.getMonth() + 1, 0).getDate();
                }
                //Override at row 48
                // Shelly Verbrauch aktualisieren - nachts um 23:59 Uhr
                function shelly_vebrauch_tag() {
                    // Nochmals das Tagesupdate durchlaufen, damit die restlichen Werte gelesen werden
                    shelly_verbrauch_update();
                    // Datumsvariable
                    var heute = new Date();
                    // Heute zu Gestern verschieben. Täglich um 23:59 Uhr
                    verschiebe_verbrauch_objekt("heute", "gestern");
                    log("Shelly Verbrauch: Werte für gestern und heute aktualisiert!");
                    // aktuelle Woche in letzte Woche verschieben. Am Sonntag um 23:59 Uhr
                    if (heute.getDay() === 0) {   /*line changed by spacerx (Sonntag=0, Montag=1)*/
                        verschiebe_verbrauch_objekt("diese_woche", "letzte_woche");
                        log("Shelly Verbrauch: Werte für diese und letzte Woche aktualisiert!");
                    }
                    // aktueller Monat in letzten Monat verschieben. Am letzten des Monats um 23:59 Uhr
                    if (heute.getDate() === letzterDesMonats(heute)) {   /*line changed by spacerx*/
                        verschiebe_verbrauch_objekt("dieser_monat", "letzter_monat");
                        log("Shelly Verbrauch: Werte für diesen und letzten Monat aktualisiert!");
                    }
                    // aktuelles Jahr in letztes Jahr verschieben. Am letzten Tag des Jahres um 23:59 Uhr
                    if (heute.getDate() === letzterDesMonats(heute) && heute.getMonth() === 11) { /*line changed by spacerx (Jan=0, Dez=11)*/
                        verschiebe_verbrauch_objekt("dieses_jahr", "letztes_jahr");
                        log("Shelly Verbrauch: Werte für dieses und letztes Jahr aktualisiert!");
                    }
                }
                //Override at row 254
                //Verschiebt das jeweilige Verbrauchs-Objekt und nullt den Ursprung (Tag, Woche, Monat, Jahr)
                function verschiebe_verbrauch_objekt(von, nach) {
                    $('state[id=' + userdir + datenpunkt + '*.*.' + von + ']').each(function (id, i) {   /*line changed by spacerx*/
                        // Temporärer Gruppen-Datenpunkt
                        var tmp_dp = id.slice(0, -(von.length));
                        var verbrauch = getState(id).val;
                        if (verbrauch != null) {
                            setState(tmp_dp + nach, verbrauch, true);
                        }
                        // Setze "von" zurück
                        setState(id, 0, true);
                    });
                }
                //Override at row 267
                // Funktion um die aktuellen Namen des Shelly abzuholen
                function aktualisiere_namen() {
                    if (typeof extendObject === "function") {
                        shellyDpsName.each(function (id, i) {
                            if (existsState(id)) {
                                setState(shelly_DP_Name(id), String(getState(id).val), true);
                                extendObject(shelly_DP_Name_Main(id), {   /*line changed by spacerx*/
                                    common: {
                                        name: String(getState(id).val),
                                        desc: String(getState(id).val)
                                    },
                                    type: "channel"
                                });
                            }
                        });
                    }
                }
                //Override at row 377
                function shelly_DP(dp, extended = false) {
                    dp = dp.split(".");
                    dp = userdir + datenpunkt + dp[2] + "." + dp[3];   /*line changed by spacerx*/
                    if (extended) {
                        dp = dp + "_Returned.";
                    } else {
                        dp = dp + ".";
                    }
                    return dp;
                }
                //Override at row 387
                function shelly_DP_Name(dp) {
                    dp = dp.split(".");
                    dp = userdir + datenpunkt + dp[2] + "." + dp[3];   /*line changed by spacerx*/
                    return dp;
                }
                //Override at row 392
                function shelly_DP_Name_Main(dp) {
                    dp = dp.split(".");
                    dp = userdir + datenpunkt + dp[2];   /*line changed by spacerx*/
                    return dp;
                }
                /*** END SpacerX ***/
                // Erster Start und Initialisierung
                shelly_verbrauch_erster_start();
                // Alle 15 Minuten das Skript für den Tagesverbrauch ausführen
                schedule('*/15 * * * *', shelly_verbrauch_update);
                /*** START Edit SpacerX ***/
                // Nachts um 24 Uhr werden die Werte in andere Variablen gespeichert, um den Verlauf zu erstellen
                //schedule('0 0 * * *', shelly_vebrauch_tag);
                // Nachts um 23:59 Uhr werden die Werte in andere Variablen gespeichert, um den Verlauf zu erstellen
                schedule('59 23 * * *', shelly_vebrauch_tag);
                /*** END Edit SpacerX ***/
                

                Warum Aktualisierung um 23:59 Uhr und nicht 0:00 Uhr?
                Ganz einfach, in InfluxDB gehört 0:00 Uhr schon zum nächsten Tag.

                I Offline
                I Offline
                IOBaer
                schrieb am zuletzt editiert von IOBaer
                #62

                @spacerx Ganz lieben Dank - ich komme aber überhaupt nicht klar, wo ich nun was einfügen muss. Ich beziehe mich auf die aktuellste Version des ursprünglichen Skripts, abrufbar unter https://www.kreyenborg.koeln/shelly-verbrauchs-historie-fuer-tag-woche-monat-jahr/

                S 1 Antwort Letzte Antwort
                0
                • S SpacerX

                  @iobaer

                  Das sind meine Änderungen am original Script

                  * Skript Name:      Shelly-Verbrauch
                   * Skript Version:   1.60
                   * Erstell-Datum:    08. Oktober 2021 | Update: 20. Juli 2022 | Override Functions by SpacerX 26.09.2022 (Zeile 402)
                  

                  Ab Zeile 402 sieht mein Skript dann so aus.
                  Die Funktionen die einer Änderung bedurften werden einfach überschrieben. So muss ich nicht Quer durch den Code Änderungen vornehmen und bei Updates kann ich schnell anpassen.
                  Ich habe die Hinweise mal im Code belassen.

                  Zu beachten ist, es so angepasst ist das die Tageswerte um 23:59 Uhr, Wochenwerte am Sonntag um 23:59 Uhr, Monatswerte am letzten Tag des Monats um 23:59 Uhr und Jahreswerte am 31 Dez. um 23:59.

                  In Zeile 409 wird dann der Userdatenpunkt definiert.

                  /*
                   * Override Functions
                   * @autor 2022 SpacerX <spacerx@rbe-base.de>
                   * Überschreibt Funktionen um Datenpunkte unter 0_userdata.0 zu erstellen
                   *
                   *** START SpacerX ***/
                  // Userdatenpunkt
                  var userdir = "0_userdata.0."; // Abschließender Punkt !!! WICHTIG !!!
                  /**
                   * Letzten des Monats berechnen.
                   * @param {Date} oHeute
                   */
                  function letzterDesMonats(oHeute) {
                      return new Date(oHeute.getFullYear(), oHeute.getMonth() + 1, 0).getDate();
                  }
                  //Override at row 48
                  // Shelly Verbrauch aktualisieren - nachts um 23:59 Uhr
                  function shelly_vebrauch_tag() {
                      // Nochmals das Tagesupdate durchlaufen, damit die restlichen Werte gelesen werden
                      shelly_verbrauch_update();
                      // Datumsvariable
                      var heute = new Date();
                      // Heute zu Gestern verschieben. Täglich um 23:59 Uhr
                      verschiebe_verbrauch_objekt("heute", "gestern");
                      log("Shelly Verbrauch: Werte für gestern und heute aktualisiert!");
                      // aktuelle Woche in letzte Woche verschieben. Am Sonntag um 23:59 Uhr
                      if (heute.getDay() === 0) {   /*line changed by spacerx (Sonntag=0, Montag=1)*/
                          verschiebe_verbrauch_objekt("diese_woche", "letzte_woche");
                          log("Shelly Verbrauch: Werte für diese und letzte Woche aktualisiert!");
                      }
                      // aktueller Monat in letzten Monat verschieben. Am letzten des Monats um 23:59 Uhr
                      if (heute.getDate() === letzterDesMonats(heute)) {   /*line changed by spacerx*/
                          verschiebe_verbrauch_objekt("dieser_monat", "letzter_monat");
                          log("Shelly Verbrauch: Werte für diesen und letzten Monat aktualisiert!");
                      }
                      // aktuelles Jahr in letztes Jahr verschieben. Am letzten Tag des Jahres um 23:59 Uhr
                      if (heute.getDate() === letzterDesMonats(heute) && heute.getMonth() === 11) { /*line changed by spacerx (Jan=0, Dez=11)*/
                          verschiebe_verbrauch_objekt("dieses_jahr", "letztes_jahr");
                          log("Shelly Verbrauch: Werte für dieses und letztes Jahr aktualisiert!");
                      }
                  }
                  //Override at row 254
                  //Verschiebt das jeweilige Verbrauchs-Objekt und nullt den Ursprung (Tag, Woche, Monat, Jahr)
                  function verschiebe_verbrauch_objekt(von, nach) {
                      $('state[id=' + userdir + datenpunkt + '*.*.' + von + ']').each(function (id, i) {   /*line changed by spacerx*/
                          // Temporärer Gruppen-Datenpunkt
                          var tmp_dp = id.slice(0, -(von.length));
                          var verbrauch = getState(id).val;
                          if (verbrauch != null) {
                              setState(tmp_dp + nach, verbrauch, true);
                          }
                          // Setze "von" zurück
                          setState(id, 0, true);
                      });
                  }
                  //Override at row 267
                  // Funktion um die aktuellen Namen des Shelly abzuholen
                  function aktualisiere_namen() {
                      if (typeof extendObject === "function") {
                          shellyDpsName.each(function (id, i) {
                              if (existsState(id)) {
                                  setState(shelly_DP_Name(id), String(getState(id).val), true);
                                  extendObject(shelly_DP_Name_Main(id), {   /*line changed by spacerx*/
                                      common: {
                                          name: String(getState(id).val),
                                          desc: String(getState(id).val)
                                      },
                                      type: "channel"
                                  });
                              }
                          });
                      }
                  }
                  //Override at row 377
                  function shelly_DP(dp, extended = false) {
                      dp = dp.split(".");
                      dp = userdir + datenpunkt + dp[2] + "." + dp[3];   /*line changed by spacerx*/
                      if (extended) {
                          dp = dp + "_Returned.";
                      } else {
                          dp = dp + ".";
                      }
                      return dp;
                  }
                  //Override at row 387
                  function shelly_DP_Name(dp) {
                      dp = dp.split(".");
                      dp = userdir + datenpunkt + dp[2] + "." + dp[3];   /*line changed by spacerx*/
                      return dp;
                  }
                  //Override at row 392
                  function shelly_DP_Name_Main(dp) {
                      dp = dp.split(".");
                      dp = userdir + datenpunkt + dp[2];   /*line changed by spacerx*/
                      return dp;
                  }
                  /*** END SpacerX ***/
                  // Erster Start und Initialisierung
                  shelly_verbrauch_erster_start();
                  // Alle 15 Minuten das Skript für den Tagesverbrauch ausführen
                  schedule('*/15 * * * *', shelly_verbrauch_update);
                  /*** START Edit SpacerX ***/
                  // Nachts um 24 Uhr werden die Werte in andere Variablen gespeichert, um den Verlauf zu erstellen
                  //schedule('0 0 * * *', shelly_vebrauch_tag);
                  // Nachts um 23:59 Uhr werden die Werte in andere Variablen gespeichert, um den Verlauf zu erstellen
                  schedule('59 23 * * *', shelly_vebrauch_tag);
                  /*** END Edit SpacerX ***/
                  

                  Warum Aktualisierung um 23:59 Uhr und nicht 0:00 Uhr?
                  Ganz einfach, in InfluxDB gehört 0:00 Uhr schon zum nächsten Tag.

                  SKBS Offline
                  SKBS Offline
                  SKB
                  Developer Most Active
                  schrieb am zuletzt editiert von
                  #63

                  @spacerx Hier hast Du, denke ich, einen Denkfehler, wenn Du um 23:59 alles "Tagesabschlüsse" fährst.

                  Denn die Zeit zwischen 23:59 und 00:00 gehört eben noch zum gleichen Tag und wenn dann um 00:00 gespeichert wird, passt das. Dir würde der Verbrauch von 23:59 bis 00:00 zum nächsten Tag gebucht werden.

                  ... wer nicht mit der Zeit geht, geht mit der Zeit ...

                  Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

                  S 1 Antwort Letzte Antwort
                  0
                  • I IOBaer

                    @spacerx Ganz lieben Dank - ich komme aber überhaupt nicht klar, wo ich nun was einfügen muss. Ich beziehe mich auf die aktuellste Version des ursprünglichen Skripts, abrufbar unter https://www.kreyenborg.koeln/shelly-verbrauchs-historie-fuer-tag-woche-monat-jahr/

                    S Offline
                    S Offline
                    SpacerX
                    schrieb am zuletzt editiert von
                    #64

                    @iobaer
                    im originalen Skript alles ab Zeile 402 mit dem Code der oben in CodeTags steht ersetzen.

                    Mit der Prämisse das die Aktualisierungen der Tages-, Wochen-, Monats-, Jahreswerte nach dem oben genannten Hinweis passiert.
                    Natürlich alles ohne Garantie. :blush:
                    Alte Werte aus dem Javascript Zweig werden aber nicht übernommen. Fängt alles von vorne an.

                    DS720|Nuc8i3BEH|Proxmox|RaspberryMatic|ioBroker|influxDB2|Grafana

                    1 Antwort Letzte Antwort
                    0
                    • SKBS SKB

                      @spacerx Hier hast Du, denke ich, einen Denkfehler, wenn Du um 23:59 alles "Tagesabschlüsse" fährst.

                      Denn die Zeit zwischen 23:59 und 00:00 gehört eben noch zum gleichen Tag und wenn dann um 00:00 gespeichert wird, passt das. Dir würde der Verbrauch von 23:59 bis 00:00 zum nächsten Tag gebucht werden.

                      S Offline
                      S Offline
                      SpacerX
                      schrieb am zuletzt editiert von
                      #65

                      @skb damit hast du völlig recht. ist aber besser als wenn mir 15 Minuten fehlen weil ja alle 15min die Werte aktualisiert werden. Dann würde die Zeit von 23:45 bis 0:00 schon auf den nächsten Tag geschrieben werden. Jetzt mal nicht von deinem Skript sondern von InfluxDB weil ich nur Änderungen logge.

                      DS720|Nuc8i3BEH|Proxmox|RaspberryMatic|ioBroker|influxDB2|Grafana

                      SKBS 1 Antwort Letzte Antwort
                      0
                      • S SpacerX

                        @skb damit hast du völlig recht. ist aber besser als wenn mir 15 Minuten fehlen weil ja alle 15min die Werte aktualisiert werden. Dann würde die Zeit von 23:45 bis 0:00 schon auf den nächsten Tag geschrieben werden. Jetzt mal nicht von deinem Skript sondern von InfluxDB weil ich nur Änderungen logge.

                        SKBS Offline
                        SKBS Offline
                        SKB
                        Developer Most Active
                        schrieb am zuletzt editiert von SKB
                        #66

                        @spacerx Also bei den 15 Minuten wird ja 00, 15, 30, 45 und wieder 00 ausgeführt. Somit ist beim 5. Lauf der Rest drin. Es fehlt somit nichts.

                        (Editiert)

                        ... wer nicht mit der Zeit geht, geht mit der Zeit ...

                        Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

                        S 1 Antwort Letzte Antwort
                        0
                        • SKBS SKB

                          @spacerx Also bei den 15 Minuten wird ja 00, 15, 30, 45 und wieder 00 ausgeführt. Somit ist beim 5. Lauf der Rest drin. Es fehlt somit nichts.

                          (Editiert)

                          S Offline
                          S Offline
                          SpacerX
                          schrieb am zuletzt editiert von
                          #67

                          @skb es fehlt auch nicht!

                          Ich logge den Datenpunkt Gesamtverbrauch und das nur bei Änderung.
                          Wenn das Skript den Verbrauch der letzten 15 Minuten vor 0:00 Uhr um 0:00Uhr schreibt wird 0:00 in die Datenbank geschrieben. 0:00 Uhr gehört unter InfluxDB nun mal zum nächsten Tag. Das führt sich zwar jeden Tag fort und man merkt es gar nicht richtig weil der Verbrauch um die Uhrzeit nicht so hoch ist.
                          Doch stimmen dann die errechneten Werte vom Skript, die zweifelsohne stimmen, mit denen aus InfluxDB errechneten nicht überein.

                          DS720|Nuc8i3BEH|Proxmox|RaspberryMatic|ioBroker|influxDB2|Grafana

                          SKBS 1 Antwort Letzte Antwort
                          0
                          • S SpacerX

                            @skb es fehlt auch nicht!

                            Ich logge den Datenpunkt Gesamtverbrauch und das nur bei Änderung.
                            Wenn das Skript den Verbrauch der letzten 15 Minuten vor 0:00 Uhr um 0:00Uhr schreibt wird 0:00 in die Datenbank geschrieben. 0:00 Uhr gehört unter InfluxDB nun mal zum nächsten Tag. Das führt sich zwar jeden Tag fort und man merkt es gar nicht richtig weil der Verbrauch um die Uhrzeit nicht so hoch ist.
                            Doch stimmen dann die errechneten Werte vom Skript, die zweifelsohne stimmen, mit denen aus InfluxDB errechneten nicht überein.

                            SKBS Offline
                            SKBS Offline
                            SKB
                            Developer Most Active
                            schrieb am zuletzt editiert von
                            #68

                            @spacerx Hier wäre der Datenpunkt "heute" eigentlich passender - so logge ich es. Dann stimmt es meiner Meinung nach.

                            ... wer nicht mit der Zeit geht, geht mit der Zeit ...

                            Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

                            S 1 Antwort Letzte Antwort
                            0
                            • SKBS SKB

                              @spacerx Hier wäre der Datenpunkt "heute" eigentlich passender - so logge ich es. Dann stimmt es meiner Meinung nach.

                              S Offline
                              S Offline
                              SpacerX
                              schrieb am zuletzt editiert von SpacerX
                              #69

                              @skb wenn ich heute logge dann muss ich in InfluxDB bei Monatswerten jeden Tag mit add() zusammenzählen. Habe ich den Gesamtstand reicht egal ob Tag, Woche, Monat, oder was weiß ich ein einfaches difference().
                              Ich hab vorher auch immer den Tageswert geloggt. Ich bin da nicht so richtig zurechtgekommen, schon weil ich aus dem Bucket mit Retention 1 Monat in ein anderes Bucket die Daten Downsample.

                              Edit: Bei loggen von heute um 0:00 Uhr steht der Verbrauch dann einen Tag weiter im Bucket.

                              DS720|Nuc8i3BEH|Proxmox|RaspberryMatic|ioBroker|influxDB2|Grafana

                              SKBS 1 Antwort Letzte Antwort
                              0
                              • S SpacerX

                                @skb wenn ich heute logge dann muss ich in InfluxDB bei Monatswerten jeden Tag mit add() zusammenzählen. Habe ich den Gesamtstand reicht egal ob Tag, Woche, Monat, oder was weiß ich ein einfaches difference().
                                Ich hab vorher auch immer den Tageswert geloggt. Ich bin da nicht so richtig zurechtgekommen, schon weil ich aus dem Bucket mit Retention 1 Monat in ein anderes Bucket die Daten Downsample.

                                Edit: Bei loggen von heute um 0:00 Uhr steht der Verbrauch dann einen Tag weiter im Bucket.

                                SKBS Offline
                                SKBS Offline
                                SKB
                                Developer Most Active
                                schrieb am zuletzt editiert von
                                #70

                                @spacerx Logg' doch, was Du willst :D

                                ... wer nicht mit der Zeit geht, geht mit der Zeit ...

                                Aktuelle Entwicklung: Energiefluss - erweitert (https://forum.iobroker.net/topic/64734)

                                S 1 Antwort Letzte Antwort
                                1
                                • SKBS SKB

                                  @spacerx Logg' doch, was Du willst :D

                                  S Offline
                                  S Offline
                                  SpacerX
                                  schrieb am zuletzt editiert von
                                  #71

                                  @skb genauso wie es jeder für richtig hält :grin:

                                  DS720|Nuc8i3BEH|Proxmox|RaspberryMatic|ioBroker|influxDB2|Grafana

                                  1 Antwort Letzte Antwort
                                  0
                                  • S SpacerX

                                    @iobaer

                                    Das sind meine Änderungen am original Script

                                    * Skript Name:      Shelly-Verbrauch
                                     * Skript Version:   1.60
                                     * Erstell-Datum:    08. Oktober 2021 | Update: 20. Juli 2022 | Override Functions by SpacerX 26.09.2022 (Zeile 402)
                                    

                                    Ab Zeile 402 sieht mein Skript dann so aus.
                                    Die Funktionen die einer Änderung bedurften werden einfach überschrieben. So muss ich nicht Quer durch den Code Änderungen vornehmen und bei Updates kann ich schnell anpassen.
                                    Ich habe die Hinweise mal im Code belassen.

                                    Zu beachten ist, es so angepasst ist das die Tageswerte um 23:59 Uhr, Wochenwerte am Sonntag um 23:59 Uhr, Monatswerte am letzten Tag des Monats um 23:59 Uhr und Jahreswerte am 31 Dez. um 23:59.

                                    In Zeile 409 wird dann der Userdatenpunkt definiert.

                                    /*
                                     * Override Functions
                                     * @autor 2022 SpacerX <spacerx@rbe-base.de>
                                     * Überschreibt Funktionen um Datenpunkte unter 0_userdata.0 zu erstellen
                                     *
                                     *** START SpacerX ***/
                                    // Userdatenpunkt
                                    var userdir = "0_userdata.0."; // Abschließender Punkt !!! WICHTIG !!!
                                    /**
                                     * Letzten des Monats berechnen.
                                     * @param {Date} oHeute
                                     */
                                    function letzterDesMonats(oHeute) {
                                        return new Date(oHeute.getFullYear(), oHeute.getMonth() + 1, 0).getDate();
                                    }
                                    //Override at row 48
                                    // Shelly Verbrauch aktualisieren - nachts um 23:59 Uhr
                                    function shelly_vebrauch_tag() {
                                        // Nochmals das Tagesupdate durchlaufen, damit die restlichen Werte gelesen werden
                                        shelly_verbrauch_update();
                                        // Datumsvariable
                                        var heute = new Date();
                                        // Heute zu Gestern verschieben. Täglich um 23:59 Uhr
                                        verschiebe_verbrauch_objekt("heute", "gestern");
                                        log("Shelly Verbrauch: Werte für gestern und heute aktualisiert!");
                                        // aktuelle Woche in letzte Woche verschieben. Am Sonntag um 23:59 Uhr
                                        if (heute.getDay() === 0) {   /*line changed by spacerx (Sonntag=0, Montag=1)*/
                                            verschiebe_verbrauch_objekt("diese_woche", "letzte_woche");
                                            log("Shelly Verbrauch: Werte für diese und letzte Woche aktualisiert!");
                                        }
                                        // aktueller Monat in letzten Monat verschieben. Am letzten des Monats um 23:59 Uhr
                                        if (heute.getDate() === letzterDesMonats(heute)) {   /*line changed by spacerx*/
                                            verschiebe_verbrauch_objekt("dieser_monat", "letzter_monat");
                                            log("Shelly Verbrauch: Werte für diesen und letzten Monat aktualisiert!");
                                        }
                                        // aktuelles Jahr in letztes Jahr verschieben. Am letzten Tag des Jahres um 23:59 Uhr
                                        if (heute.getDate() === letzterDesMonats(heute) && heute.getMonth() === 11) { /*line changed by spacerx (Jan=0, Dez=11)*/
                                            verschiebe_verbrauch_objekt("dieses_jahr", "letztes_jahr");
                                            log("Shelly Verbrauch: Werte für dieses und letztes Jahr aktualisiert!");
                                        }
                                    }
                                    //Override at row 254
                                    //Verschiebt das jeweilige Verbrauchs-Objekt und nullt den Ursprung (Tag, Woche, Monat, Jahr)
                                    function verschiebe_verbrauch_objekt(von, nach) {
                                        $('state[id=' + userdir + datenpunkt + '*.*.' + von + ']').each(function (id, i) {   /*line changed by spacerx*/
                                            // Temporärer Gruppen-Datenpunkt
                                            var tmp_dp = id.slice(0, -(von.length));
                                            var verbrauch = getState(id).val;
                                            if (verbrauch != null) {
                                                setState(tmp_dp + nach, verbrauch, true);
                                            }
                                            // Setze "von" zurück
                                            setState(id, 0, true);
                                        });
                                    }
                                    //Override at row 267
                                    // Funktion um die aktuellen Namen des Shelly abzuholen
                                    function aktualisiere_namen() {
                                        if (typeof extendObject === "function") {
                                            shellyDpsName.each(function (id, i) {
                                                if (existsState(id)) {
                                                    setState(shelly_DP_Name(id), String(getState(id).val), true);
                                                    extendObject(shelly_DP_Name_Main(id), {   /*line changed by spacerx*/
                                                        common: {
                                                            name: String(getState(id).val),
                                                            desc: String(getState(id).val)
                                                        },
                                                        type: "channel"
                                                    });
                                                }
                                            });
                                        }
                                    }
                                    //Override at row 377
                                    function shelly_DP(dp, extended = false) {
                                        dp = dp.split(".");
                                        dp = userdir + datenpunkt + dp[2] + "." + dp[3];   /*line changed by spacerx*/
                                        if (extended) {
                                            dp = dp + "_Returned.";
                                        } else {
                                            dp = dp + ".";
                                        }
                                        return dp;
                                    }
                                    //Override at row 387
                                    function shelly_DP_Name(dp) {
                                        dp = dp.split(".");
                                        dp = userdir + datenpunkt + dp[2] + "." + dp[3];   /*line changed by spacerx*/
                                        return dp;
                                    }
                                    //Override at row 392
                                    function shelly_DP_Name_Main(dp) {
                                        dp = dp.split(".");
                                        dp = userdir + datenpunkt + dp[2];   /*line changed by spacerx*/
                                        return dp;
                                    }
                                    /*** END SpacerX ***/
                                    // Erster Start und Initialisierung
                                    shelly_verbrauch_erster_start();
                                    // Alle 15 Minuten das Skript für den Tagesverbrauch ausführen
                                    schedule('*/15 * * * *', shelly_verbrauch_update);
                                    /*** START Edit SpacerX ***/
                                    // Nachts um 24 Uhr werden die Werte in andere Variablen gespeichert, um den Verlauf zu erstellen
                                    //schedule('0 0 * * *', shelly_vebrauch_tag);
                                    // Nachts um 23:59 Uhr werden die Werte in andere Variablen gespeichert, um den Verlauf zu erstellen
                                    schedule('59 23 * * *', shelly_vebrauch_tag);
                                    /*** END Edit SpacerX ***/
                                    

                                    Warum Aktualisierung um 23:59 Uhr und nicht 0:00 Uhr?
                                    Ganz einfach, in InfluxDB gehört 0:00 Uhr schon zum nächsten Tag.

                                    I Offline
                                    I Offline
                                    IOBaer
                                    schrieb am zuletzt editiert von IOBaer
                                    #72

                                    @spacerx sorry, alles rot bei mir, Skript läuft nicht.

                                    Wo soll ich was einfügen? Was bedeutet "ab" - soll die originale Zeile 402 stehenbleiben?

                                    b69b75ce-4d72-415c-acb2-851effd93c5a-grafik.png

                                    S 1 Antwort Letzte Antwort
                                    0
                                    • I IOBaer

                                      @spacerx sorry, alles rot bei mir, Skript läuft nicht.

                                      Wo soll ich was einfügen? Was bedeutet "ab" - soll die originale Zeile 402 stehenbleiben?

                                      b69b75ce-4d72-415c-acb2-851effd93c5a-grafik.png

                                      S Offline
                                      S Offline
                                      SpacerX
                                      schrieb am zuletzt editiert von SpacerX
                                      #73

                                      @iobaer oh sorry in meinem Script gibts keine Leerzeilen.
                                      Ich kann gerade nicht an meinen Rechner, Arbeit halt. Kann dir aber anbieten später das ganze Script zu posten. Wenn es trotzdem versuchen möchtest alle Leerzeilen entfernen. Zeile 402 sollte dann am Ende einer Funktion sein. Nach einem }

                                      DS720|Nuc8i3BEH|Proxmox|RaspberryMatic|ioBroker|influxDB2|Grafana

                                      1 Antwort Letzte Antwort
                                      1
                                      • S Offline
                                        S Offline
                                        SpacerX
                                        schrieb am zuletzt editiert von SpacerX
                                        #74

                                        @iobaer beim original Skript mit Leerzeilen sollte das die Zeile 460 sein.

                                        Vor:

                                        // Erster Start und Initialisierung
                                        shelly_verbrauch_erster_start();
                                        

                                        Also ab da, alles mit dem Code oben überschreiben.

                                        DS720|Nuc8i3BEH|Proxmox|RaspberryMatic|ioBroker|influxDB2|Grafana

                                        I 1 Antwort Letzte Antwort
                                        1
                                        • S SpacerX

                                          @iobaer beim original Skript mit Leerzeilen sollte das die Zeile 460 sein.

                                          Vor:

                                          // Erster Start und Initialisierung
                                          shelly_verbrauch_erster_start();
                                          

                                          Also ab da, alles mit dem Code oben überschreiben.

                                          I Offline
                                          I Offline
                                          IOBaer
                                          schrieb am zuletzt editiert von IOBaer
                                          #75

                                          @spacerx hat geklappt - besten Dank! Jetzt kann ich testen ;)

                                          Edit: Da passt noch immer was nicht. Vielleicht kannst Du bei Gelegenheit ja mal das vollständige Skript posten.

                                          S 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

                                          818

                                          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