Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. ioBroker Allgemein
  4. Shelly zeigen keinen Verbrauch an

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    1.7k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    711

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    1.2k

Shelly zeigen keinen Verbrauch an

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
11 Beiträge 3 Kommentatoren 696 Aufrufe 4 Beobachtet
  • Ä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.
  • Damrak2022D Damrak2022

    Hallo zusammen,

    ich nutze mehrere Shelly Plug S und seit gestern wird mir der Verbrauch für "gestern und letzte Woche" nicht mehr angezeigt. Alle anderen Verbräuche - also dieser Monat, letzter Monat, heute etc. werden korrekt angezeigt. Ich nutze das Skript von Kreyenborg und bisher hatte alles ohne Probleme geklappt.
    Habt Ihr eine Idee, was die Ursache sein könnte?
    Bildschirm­foto 2022-11-07 um 21.45.55.png

    Auch das Neustarten des Skripts hat nichts geholfen.

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

    @damrak2022 mmh
    Hast du am Script was geändert? Vieleicht auch mal Javascript Instanz neu starten? Gegebenenfalls kompletten ioBroker neu starten?
    Kommt den im log die Meldung "Shelly Verbrauch: Werte für gestern und heute aktualisiert!"?

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

    Damrak2022D 1 Antwort Letzte Antwort
    0
    • S SpacerX

      @damrak2022 mmh
      Hast du am Script was geändert? Vieleicht auch mal Javascript Instanz neu starten? Gegebenenfalls kompletten ioBroker neu starten?
      Kommt den im log die Meldung "Shelly Verbrauch: Werte für gestern und heute aktualisiert!"?

      Damrak2022D Offline
      Damrak2022D Offline
      Damrak2022
      schrieb am zuletzt editiert von Damrak2022
      #3

      @spacerx Javascript habe ich eben neu gestartet. Habe diese Warmeldung im Log:

      [authEnabled] 192.168.178.37 (shellyplug-s / shellyplug-s-4022D8836452 / SHPLG-S#4022D8836452#1): This device is not protected via restricted login (see adapter documentation for details)
      

      Da ich aber die kompletten Verbräuche auslese, verstehe ich nicht, warum nur "gestern und letzte Woche" keine Werte liefert und alles andere schon.
      Am Script habe ich nichts geändert, da ich davon viel zu wenig Ahnung habe.

      Bildschirm­foto 2022-11-08 um 22.03.41.png

      Mit besten Grüßen
      Andy

      S 1 Antwort Letzte Antwort
      0
      • Damrak2022D Damrak2022

        @spacerx Javascript habe ich eben neu gestartet. Habe diese Warmeldung im Log:

        [authEnabled] 192.168.178.37 (shellyplug-s / shellyplug-s-4022D8836452 / SHPLG-S#4022D8836452#1): This device is not protected via restricted login (see adapter documentation for details)
        

        Da ich aber die kompletten Verbräuche auslese, verstehe ich nicht, warum nur "gestern und letzte Woche" keine Werte liefert und alles andere schon.
        Am Script habe ich nichts geändert, da ich davon viel zu wenig Ahnung habe.

        Bildschirm­foto 2022-11-08 um 22.03.41.png

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

        @damrak2022 die Warnmeldungen sagt nur aus das du im Shelly Device kein Restrict Login mit Benutzernamen und Passwort aktiviert hast. Das kannst du in der Doku auf GitHub nachlesen.
        Wegen den Wochen und Monatswerten denk ich mal da klemmt was im Script. Zeig das mal hier in Codetags.
        Es sollte auch um Mitternacht eine Logmeldung wie ich oben geschrieben habe auftauchen.

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

        Damrak2022D 1 Antwort Letzte Antwort
        0
        • S SpacerX

          @damrak2022 die Warnmeldungen sagt nur aus das du im Shelly Device kein Restrict Login mit Benutzernamen und Passwort aktiviert hast. Das kannst du in der Doku auf GitHub nachlesen.
          Wegen den Wochen und Monatswerten denk ich mal da klemmt was im Script. Zeig das mal hier in Codetags.
          Es sollte auch um Mitternacht eine Logmeldung wie ich oben geschrieben habe auftauchen.

          Damrak2022D Offline
          Damrak2022D Offline
          Damrak2022
          schrieb am zuletzt editiert von Damrak2022
          #5

          @spacerx

          /*
           * @copyright 2021 Stephan Kreyenborg <stephan@kreyenborg.koeln>
           *
           * @author 2021 Stephan Kreyenborg <stephan@kreyenborg.koeln>
           *
           * Dieses Skript dient zur freien Verwendung in ioBroker zur Verbrauchserfassung der Shelly Geräte.
           * Jegliche Verantwortung liegt beim Benutzer. Das Skript wurde unter Berücksichtigung der bestmöglichen Nutzung
           * und Performance entwickelt.
           * Der Entwickler versichert, das keine böswilligen Systemeingriffe im originalen Skript vorhanden sind.
           *
           * Sollte das Skript wider Erwarten nicht korrekt funktionieren, so hast Du jederzeit die Möglichkeit, Dich auf
           * https://www.kreyenborg.koeln
           * für Unterstützung zu melden. Jedes Skript besitzt seine eigene Kommentarseite, auf der,
           * nach zeitlicher Möglichkeit des Autors, Hilfe angeboten wird. Ein Anrecht hierauf besteht nicht!
           * 
           * Ansprüche gegenüber Dritten bestehen nicht. 
           * 
           * Skript Name:        Shelly-Verbrauch
           * Skript Version:    1.60
           * Erstell-Datum:    08. Oktober 2021 | Update: 21. April 2022
           * 
           */
          // Datenpunkte neu erstellen
          var ueberschreiben = false;
          // Hauptdatenpunkt unterhalb javascript
          var datenpunkt = "ShellyVerbrauch."; // Abschließender Punkt !!! WICHTIG !!!
          // Verbrauchs Objekte der einzelnen Shelly
          var objekt = ["gesamt", "dieses_jahr", "letztes_jahr", "letzter_monat", "dieser_monat", "letzte_woche",
              "diese_woche", "gestern", "heute", "alter_wert", "aktueller_wert"];
          // Beschreibung der Objekte
          var beschreibung = ["Gesamter Vebrauch des Shelly", "Verbrauch aktuelles Jahr", "Verbrauch letztes Jahr",
              "Verbrauch letzten Monat", "Verbrauch aktueller Monat", "Verbrauch letzte Woche", "Verbrauch diese Woche",
              "Verbrauch gestern", "Verbrauch heute", "Messwert alt", "Messwert neu"];
          // Datenpunkt der Shelly (Standard: shelly.0)
          var shelly_dp = "shelly.0";
          // Datenpunkte der Shelly (!!! Bitte nicht ändern !!!)
          var shellyDps = $('state[id=' + shelly_dp + '.*.*.Energy]');
          // Datenpunkte der Shelly 3EM DP
          var shelly3EMDps = $('state[id=' + shelly_dp + '.*.*.Total]');
          // Datenpunkte der Shelly 3EM DP - Total
          var shelly3EMTotalDps = $('state[id=' + shelly_dp + '.*.*.ConsumedPower]');
          // Datenpunkte der Shelly Namen (!!! Bitte nicht ändern !!!)
          var shellyDpsName = $('state[id=' + shelly_dp + '.*.name]');
          // Shelly Verbrauch aktualisieren - nachts um 00:00 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 00:00 Uhr
              verschiebe_verbrauch_objekt("heute", "gestern");
              log("Shelly Verbrauch: Werte für gestern und heute aktualisiert!");
              // aktuelle Woche in letzte Woche verschieben. Am Montag um 00:00 Uhr
              if (heute.getDay() === 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 1. des Monats um 00:00 Uhr
              if (heute.getDate() === 1) {
                  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 1. des Monats am 1. Monat um 00:00 Uhr
              if (heute.getDate() === 1 && heute.getMonth() === 0) {
                  verschiebe_verbrauch_objekt("dieses_jahr", "letztes_jahr");
                  log("Shelly Verbrauch: Werte für dieses und letztes Jahr aktualisiert!");
              }
          }
          // Tagesverbrauch alle 15 Min von der Original Variable des Shelly in eigene Variable kopieren
          function shelly_verbrauch_update() {
              var anzahl_updates = 0;
              var anzahl_reboots = 0;
              var anzahl_gleich = 0;
              shellyDps.each(function (id, i) {
                  var shelly_verbrauch = getState(id).val;
                  // Einige Shelly haben keine Verbrauchswerte (noch nicht)
                  if (shelly_verbrauch != null) {
                      // Hole aktuellen Wert, um zu kontrollieren, ob ein Reboot stattgefunden hat
                      var aktueller_wert = getState(shelly_DP(id) + "aktueller_wert").val;
                      var alter_wert = 0;
                      // Prüfe alten und neuen Wert
                      if (shelly_verbrauch > aktueller_wert) {
                          // Verbrauchswert ist größer als alter Wert -> es wurde kein Reboot durchgeführt
                          setState(shelly_DP(id) + "alter_wert", aktueller_wert, true);
                          alter_wert = aktueller_wert;
                          anzahl_updates++;
                      }
                      if (aktueller_wert > shelly_verbrauch) {
                          // Verbrauchswert ist kleiner als alter Wert -> es wurde ein Reboot durchgeführt
                          setState(shelly_DP(id) + "alter_wert", 0, true);
                          alter_wert = 0;
                          anzahl_reboots++;
                      }
                      if (shelly_verbrauch == aktueller_wert) {
                          // Verbrauchswert ist gleich wie alter Wert -> kein Update notwendig
                          alter_wert = aktueller_wert;
                          anzahl_gleich++;
                      }
                      setState(shelly_DP(id) + "aktueller_wert", shelly_verbrauch, true);
                      // Alter und neuer Wert -> aktuelle Differenz
                      var verbrauch = parseFloat(shelly_verbrauch) - alter_wert;
                      // Tagesverbrauch aktualisieren
                      aktualisiere_vebrauch_objekt(id, "heute", verbrauch);
                      // Wochenverbrauch aktualisieren
                      aktualisiere_vebrauch_objekt(id, "diese_woche", verbrauch);
                      // Monatsverbrauch aktualisieren
                      aktualisiere_vebrauch_objekt(id, "dieser_monat", verbrauch);
                      // Jahresverbrauch aktualisieren
                      aktualisiere_vebrauch_objekt(id, "dieses_jahr", verbrauch);
                      // Gesamten Vebrauch aktualisieren
                      aktualisiere_vebrauch_objekt(id, "gesamt", verbrauch);
                  }
              });
              shelly3EMDps.each(function (id, i) {
                  var shelly_verbrauch = getState(id).val;
                  // Einige Shelly haben keine Verbrauchswerte (noch nicht)
                  if (shelly_verbrauch != null) {
                      // Hole aktuellen Wert, um zu kontrollieren, ob ein Reboot stattgefunden hat
                      var aktueller_wert = getState(shelly_DP(id) + "aktueller_wert").val;
                      var alter_wert = 0;
                      // Prüfe alten und neuen Wert
                      if (shelly_verbrauch > aktueller_wert) {
                          // Verbrauchswert ist größer als alter Wert -> es wurde kein Reboot durchgeführt
                          setState(shelly_DP(id) + "alter_wert", aktueller_wert, true);
                          alter_wert = aktueller_wert;
                          anzahl_updates++;
                      }
                      if (aktueller_wert > shelly_verbrauch) {
                          // Verbrauchswert ist kleiner als alter Wert -> es wurde ein Reboot durchgeführt
                          setState(shelly_DP(id) + "alter_wert", 0, true);
                          alter_wert = 0;
                          anzahl_reboots++;
                      }
                      if (shelly_verbrauch == aktueller_wert) {
                          // Verbrauchswert ist gleich wie alter Wert -> kein Update notwendig
                          alter_wert = aktueller_wert;
                          anzahl_gleich++;
                      }
                      setState(shelly_DP(id) + "aktueller_wert", shelly_verbrauch, true);
                      // Alter und neuer Wert -> aktuelle Differenz
                      var verbrauch = parseFloat(shelly_verbrauch) - alter_wert;
                      // Tagesverbrauch aktualisieren
                      aktualisiere_vebrauch_objekt(id, "heute", verbrauch);
                      // Wochenverbrauch aktualisieren
                      aktualisiere_vebrauch_objekt(id, "diese_woche", verbrauch);
                      // Monatsverbrauch aktualisieren
                      aktualisiere_vebrauch_objekt(id, "dieser_monat", verbrauch);
                      // Jahresverbrauch aktualisieren
                      aktualisiere_vebrauch_objekt(id, "dieses_jahr", verbrauch);
                      // Gesamten Vebrauch aktualisieren
                      aktualisiere_vebrauch_objekt(id, "gesamt", verbrauch);
                  }
              });
              shelly3EMTotalDps.each(function (id, i) {
                  var shelly_verbrauch = getState(id).val;
                  // Einige Shelly haben keine Verbrauchswerte (noch nicht)
                  if (shelly_verbrauch != null) {
                      // Hole aktuellen Wert, um zu kontrollieren, ob ein Reboot stattgefunden hat
                      var aktueller_wert = getState(shelly_DP(id) + "aktueller_wert").val;
                      var alter_wert = 0;
                      // Prüfe alten und neuen Wert
                      if (shelly_verbrauch > aktueller_wert) {
                          // Verbrauchswert ist größer als alter Wert -> es wurde kein Reboot durchgeführt
                          setState(shelly_DP(id) + "alter_wert", aktueller_wert, true);
                          alter_wert = aktueller_wert;
                          anzahl_updates++;
                      }
                      if (aktueller_wert > shelly_verbrauch) {
                          // Verbrauchswert ist kleiner als alter Wert -> es wurde ein Reboot durchgeführt
                          setState(shelly_DP(id) + "alter_wert", 0, true);
                          alter_wert = 0;
                          anzahl_reboots++;
                      }
                      if (shelly_verbrauch == aktueller_wert) {
                          // Verbrauchswert ist gleich wie alter Wert -> kein Update notwendig
                          alter_wert = aktueller_wert;
                          anzahl_gleich++;
                      }
                      setState(shelly_DP(id) + "aktueller_wert", shelly_verbrauch, true);
                      // Alter und neuer Wert -> aktuelle Differenz
                      var verbrauch = parseFloat(shelly_verbrauch) - alter_wert;
                      // Tagesverbrauch aktualisieren
                      aktualisiere_vebrauch_objekt(id, "heute", verbrauch);
                      // Wochenverbrauch aktualisieren
                      aktualisiere_vebrauch_objekt(id, "diese_woche", verbrauch);
                      // Monatsverbrauch aktualisieren
                      aktualisiere_vebrauch_objekt(id, "dieser_monat", verbrauch);
                      // Jahresverbrauch aktualisieren
                      aktualisiere_vebrauch_objekt(id, "dieses_jahr", verbrauch);
                      // Gesamten Vebrauch aktualisieren
                      aktualisiere_vebrauch_objekt(id, "gesamt", verbrauch);
                  }
              });
              aktualisiere_namen();
              log("Shelly Verbrauch: Verbrauchswerte aktualisiert: " + anzahl_updates + " | Reboots korrigiert: " + anzahl_reboots + " | Unveränderte Werte: " + anzahl_gleich);
          }
          // aktualisiert das jeweilige Verbrauchs-Objekt und addiert den Verbrauch dazu
          function aktualisiere_vebrauch_objekt(dp, objekt, wert) {
              // Hole alten Verbrauch
              let alter_verbrauch = getState(shelly_DP(dp) + objekt).val;
              let verbrauch = 0;
              // Kein Wert vorhanden - nutze den übermittelten Wert
              if (alter_verbrauch<1 || alter_verbrauch==null) {
                  verbrauch = parseFloat(wert)
              } else {
                  verbrauch = parseFloat(alter_verbrauch) + parseFloat(wert);
              }
              setState(shelly_DP(dp) + objekt, parseFloat(verbrauch.toFixed(2)), true);
          }
          // Verschiebt das jeweilige Verbrauchs-Objekt und nullt den Ursprung (Tag, Woche, Monat, Jahr)
          function verschiebe_verbrauch_objekt(von, nach) {
              $('state[id=*.' + datenpunkt + '*.*.' + von + ']').each(function (id, i) {
                  // 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);
              });
          }
          // 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("javascript.0." + shelly_DP_Name_Main(id), {
                              common: {
                                  name: String(getState(id).val),
                                  desc: String(getState(id).val)
                              }, type: "channel"
                          });
                      }
                  });
              }
          }
          // Erstelle die benötigten Datenpunkte
          function datenpunkte_erstellen() {
              // Anzahl der gefundenen Shelly
              var anzahl = shellyDps.length;
              shellyDps.each(function (id, j) {
                  var initial_wert = 0.0;
                  for (var i = 0; i < objekt.length; i++) {
                      // Startwerte werden nur bei alter_wert und aktueller_wert eingetragen
                      if (i > 8) {
                          initial_wert = getState(id).val;
                      }
                      createState(shelly_DP(id) + objekt[i], initial_wert, ueberschreiben, {
                          name: beschreibung[i],
                          desc: beschreibung[i],
                          type: "number",
                          role: "value.power",
                          unit: "Wh"
                      });
                  }
              });
              // Anzahl der gefundenen Shelly 3EM
              var anzahl_3em = shelly3EMDps.length;
              shelly3EMDps.each(function (id, j) {
                  var initial_wert = 0.0;
                  for (var i = 0; i < objekt.length; i++) {
                      // Startwerte werden nur bei alter_wert und aktueller_wert eingetragen
                      if (i > 8) {
                          initial_wert = getState(id).val;
                      }
                      createState(shelly_DP(id) + objekt[i],  initial_wert, ueberschreiben, {
                          name: beschreibung[i],
                          desc: beschreibung[i],
                          type: "number",
                          role: "value.power",
                          unit: "Wh"
                      });
                  }
              });
              // Anzahl der gefundenen Shelly 3EM - Total
              var anzahl_3em_total = shelly3EMTotalDps.length;
              shelly3EMTotalDps.each(function (id, j) {
                  var initial_wert = 0.0;
                  for (var i = 0; i < objekt.length; i++) {
                      // Startwerte werden nur bei alter_wert und aktueller_wert eingetragen
                      if (i > 8) {
                          initial_wert = getState(id).val;
                      }
                      createState(shelly_DP(id) + objekt[i], initial_wert, ueberschreiben, {
                          name: beschreibung[i],
                          desc: beschreibung[i],
                          type: "number",
                          role: "value.power",
                          unit: "Wh"
                      });
                  }
              });
              // Alle Datenpunkte erstellt. Frage ersten Verbrauch ab!
              log("Shelly Verbrauch: Datenpunkte erstellt! Erster Verbrauch steht nach 30 Sekunden zur Verfügung! Anzahl gefundener Shelly Datenpunkte: " + (anzahl_3em + anzahl + anzahl_3em_total));
              setTimeout(shelly_verbrauch_update, 30000);
              // Datenpunkte für die Namen der Shelly erstellen
              shellyDpsName.each(function (id, j) {
                  createState(shelly_DP_Name(id), "", ueberschreiben, {
                      name: "Name des Shelly",
                      desc: "Name des Shelly",
                      type: "string",
                      role: "value",
                      unit: ""
                  });
              });
          }
          function shelly_DP(dp) {
              dp = dp.split(".");
              dp = datenpunkt + dp[2] + "." + dp[3] + ".";
              return dp;
          }
          function shelly_DP_Name(dp) {
              dp = dp.split(".");
              dp = datenpunkt + dp[2] + "." + dp[3];
              return dp;
          }
          function shelly_DP_Name_Main(dp) {
              dp = dp.split(".");
              dp = datenpunkt + dp[2];
              return dp;
          }
          function shelly_verbrauch_erster_start() {
              log("Shelly Verbrauch: Erster Start des Skriptes! Datenpunkte werden erstellt!");
              // Datenpunkte werden erstellt
              datenpunkte_erstellen();
          }
          // Erster Start und Initialisierung
          shelly_verbrauch_erster_start();
          // Alle 15 Minuten das Skript für den Tagesverbrauch ausführen
          schedule('*/15 * * * *', shelly_verbrauch_update);
          // Nachts um 24 Uhr werden die Werte in andere Variablen gespeichert, um den Verlauf zu erstellen
          schedule('0 0 * * *', shelly_vebrauch_tag);
          

          Bis vor ein paar Tagen lief alles Top.

          Mit besten Grüßen
          Andy

          crunchipC 1 Antwort Letzte Antwort
          0
          • Damrak2022D Damrak2022

            @spacerx

            /*
             * @copyright 2021 Stephan Kreyenborg <stephan@kreyenborg.koeln>
             *
             * @author 2021 Stephan Kreyenborg <stephan@kreyenborg.koeln>
             *
             * Dieses Skript dient zur freien Verwendung in ioBroker zur Verbrauchserfassung der Shelly Geräte.
             * Jegliche Verantwortung liegt beim Benutzer. Das Skript wurde unter Berücksichtigung der bestmöglichen Nutzung
             * und Performance entwickelt.
             * Der Entwickler versichert, das keine böswilligen Systemeingriffe im originalen Skript vorhanden sind.
             *
             * Sollte das Skript wider Erwarten nicht korrekt funktionieren, so hast Du jederzeit die Möglichkeit, Dich auf
             * https://www.kreyenborg.koeln
             * für Unterstützung zu melden. Jedes Skript besitzt seine eigene Kommentarseite, auf der,
             * nach zeitlicher Möglichkeit des Autors, Hilfe angeboten wird. Ein Anrecht hierauf besteht nicht!
             * 
             * Ansprüche gegenüber Dritten bestehen nicht. 
             * 
             * Skript Name:        Shelly-Verbrauch
             * Skript Version:    1.60
             * Erstell-Datum:    08. Oktober 2021 | Update: 21. April 2022
             * 
             */
            // Datenpunkte neu erstellen
            var ueberschreiben = false;
            // Hauptdatenpunkt unterhalb javascript
            var datenpunkt = "ShellyVerbrauch."; // Abschließender Punkt !!! WICHTIG !!!
            // Verbrauchs Objekte der einzelnen Shelly
            var objekt = ["gesamt", "dieses_jahr", "letztes_jahr", "letzter_monat", "dieser_monat", "letzte_woche",
                "diese_woche", "gestern", "heute", "alter_wert", "aktueller_wert"];
            // Beschreibung der Objekte
            var beschreibung = ["Gesamter Vebrauch des Shelly", "Verbrauch aktuelles Jahr", "Verbrauch letztes Jahr",
                "Verbrauch letzten Monat", "Verbrauch aktueller Monat", "Verbrauch letzte Woche", "Verbrauch diese Woche",
                "Verbrauch gestern", "Verbrauch heute", "Messwert alt", "Messwert neu"];
            // Datenpunkt der Shelly (Standard: shelly.0)
            var shelly_dp = "shelly.0";
            // Datenpunkte der Shelly (!!! Bitte nicht ändern !!!)
            var shellyDps = $('state[id=' + shelly_dp + '.*.*.Energy]');
            // Datenpunkte der Shelly 3EM DP
            var shelly3EMDps = $('state[id=' + shelly_dp + '.*.*.Total]');
            // Datenpunkte der Shelly 3EM DP - Total
            var shelly3EMTotalDps = $('state[id=' + shelly_dp + '.*.*.ConsumedPower]');
            // Datenpunkte der Shelly Namen (!!! Bitte nicht ändern !!!)
            var shellyDpsName = $('state[id=' + shelly_dp + '.*.name]');
            // Shelly Verbrauch aktualisieren - nachts um 00:00 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 00:00 Uhr
                verschiebe_verbrauch_objekt("heute", "gestern");
                log("Shelly Verbrauch: Werte für gestern und heute aktualisiert!");
                // aktuelle Woche in letzte Woche verschieben. Am Montag um 00:00 Uhr
                if (heute.getDay() === 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 1. des Monats um 00:00 Uhr
                if (heute.getDate() === 1) {
                    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 1. des Monats am 1. Monat um 00:00 Uhr
                if (heute.getDate() === 1 && heute.getMonth() === 0) {
                    verschiebe_verbrauch_objekt("dieses_jahr", "letztes_jahr");
                    log("Shelly Verbrauch: Werte für dieses und letztes Jahr aktualisiert!");
                }
            }
            // Tagesverbrauch alle 15 Min von der Original Variable des Shelly in eigene Variable kopieren
            function shelly_verbrauch_update() {
                var anzahl_updates = 0;
                var anzahl_reboots = 0;
                var anzahl_gleich = 0;
                shellyDps.each(function (id, i) {
                    var shelly_verbrauch = getState(id).val;
                    // Einige Shelly haben keine Verbrauchswerte (noch nicht)
                    if (shelly_verbrauch != null) {
                        // Hole aktuellen Wert, um zu kontrollieren, ob ein Reboot stattgefunden hat
                        var aktueller_wert = getState(shelly_DP(id) + "aktueller_wert").val;
                        var alter_wert = 0;
                        // Prüfe alten und neuen Wert
                        if (shelly_verbrauch > aktueller_wert) {
                            // Verbrauchswert ist größer als alter Wert -> es wurde kein Reboot durchgeführt
                            setState(shelly_DP(id) + "alter_wert", aktueller_wert, true);
                            alter_wert = aktueller_wert;
                            anzahl_updates++;
                        }
                        if (aktueller_wert > shelly_verbrauch) {
                            // Verbrauchswert ist kleiner als alter Wert -> es wurde ein Reboot durchgeführt
                            setState(shelly_DP(id) + "alter_wert", 0, true);
                            alter_wert = 0;
                            anzahl_reboots++;
                        }
                        if (shelly_verbrauch == aktueller_wert) {
                            // Verbrauchswert ist gleich wie alter Wert -> kein Update notwendig
                            alter_wert = aktueller_wert;
                            anzahl_gleich++;
                        }
                        setState(shelly_DP(id) + "aktueller_wert", shelly_verbrauch, true);
                        // Alter und neuer Wert -> aktuelle Differenz
                        var verbrauch = parseFloat(shelly_verbrauch) - alter_wert;
                        // Tagesverbrauch aktualisieren
                        aktualisiere_vebrauch_objekt(id, "heute", verbrauch);
                        // Wochenverbrauch aktualisieren
                        aktualisiere_vebrauch_objekt(id, "diese_woche", verbrauch);
                        // Monatsverbrauch aktualisieren
                        aktualisiere_vebrauch_objekt(id, "dieser_monat", verbrauch);
                        // Jahresverbrauch aktualisieren
                        aktualisiere_vebrauch_objekt(id, "dieses_jahr", verbrauch);
                        // Gesamten Vebrauch aktualisieren
                        aktualisiere_vebrauch_objekt(id, "gesamt", verbrauch);
                    }
                });
                shelly3EMDps.each(function (id, i) {
                    var shelly_verbrauch = getState(id).val;
                    // Einige Shelly haben keine Verbrauchswerte (noch nicht)
                    if (shelly_verbrauch != null) {
                        // Hole aktuellen Wert, um zu kontrollieren, ob ein Reboot stattgefunden hat
                        var aktueller_wert = getState(shelly_DP(id) + "aktueller_wert").val;
                        var alter_wert = 0;
                        // Prüfe alten und neuen Wert
                        if (shelly_verbrauch > aktueller_wert) {
                            // Verbrauchswert ist größer als alter Wert -> es wurde kein Reboot durchgeführt
                            setState(shelly_DP(id) + "alter_wert", aktueller_wert, true);
                            alter_wert = aktueller_wert;
                            anzahl_updates++;
                        }
                        if (aktueller_wert > shelly_verbrauch) {
                            // Verbrauchswert ist kleiner als alter Wert -> es wurde ein Reboot durchgeführt
                            setState(shelly_DP(id) + "alter_wert", 0, true);
                            alter_wert = 0;
                            anzahl_reboots++;
                        }
                        if (shelly_verbrauch == aktueller_wert) {
                            // Verbrauchswert ist gleich wie alter Wert -> kein Update notwendig
                            alter_wert = aktueller_wert;
                            anzahl_gleich++;
                        }
                        setState(shelly_DP(id) + "aktueller_wert", shelly_verbrauch, true);
                        // Alter und neuer Wert -> aktuelle Differenz
                        var verbrauch = parseFloat(shelly_verbrauch) - alter_wert;
                        // Tagesverbrauch aktualisieren
                        aktualisiere_vebrauch_objekt(id, "heute", verbrauch);
                        // Wochenverbrauch aktualisieren
                        aktualisiere_vebrauch_objekt(id, "diese_woche", verbrauch);
                        // Monatsverbrauch aktualisieren
                        aktualisiere_vebrauch_objekt(id, "dieser_monat", verbrauch);
                        // Jahresverbrauch aktualisieren
                        aktualisiere_vebrauch_objekt(id, "dieses_jahr", verbrauch);
                        // Gesamten Vebrauch aktualisieren
                        aktualisiere_vebrauch_objekt(id, "gesamt", verbrauch);
                    }
                });
                shelly3EMTotalDps.each(function (id, i) {
                    var shelly_verbrauch = getState(id).val;
                    // Einige Shelly haben keine Verbrauchswerte (noch nicht)
                    if (shelly_verbrauch != null) {
                        // Hole aktuellen Wert, um zu kontrollieren, ob ein Reboot stattgefunden hat
                        var aktueller_wert = getState(shelly_DP(id) + "aktueller_wert").val;
                        var alter_wert = 0;
                        // Prüfe alten und neuen Wert
                        if (shelly_verbrauch > aktueller_wert) {
                            // Verbrauchswert ist größer als alter Wert -> es wurde kein Reboot durchgeführt
                            setState(shelly_DP(id) + "alter_wert", aktueller_wert, true);
                            alter_wert = aktueller_wert;
                            anzahl_updates++;
                        }
                        if (aktueller_wert > shelly_verbrauch) {
                            // Verbrauchswert ist kleiner als alter Wert -> es wurde ein Reboot durchgeführt
                            setState(shelly_DP(id) + "alter_wert", 0, true);
                            alter_wert = 0;
                            anzahl_reboots++;
                        }
                        if (shelly_verbrauch == aktueller_wert) {
                            // Verbrauchswert ist gleich wie alter Wert -> kein Update notwendig
                            alter_wert = aktueller_wert;
                            anzahl_gleich++;
                        }
                        setState(shelly_DP(id) + "aktueller_wert", shelly_verbrauch, true);
                        // Alter und neuer Wert -> aktuelle Differenz
                        var verbrauch = parseFloat(shelly_verbrauch) - alter_wert;
                        // Tagesverbrauch aktualisieren
                        aktualisiere_vebrauch_objekt(id, "heute", verbrauch);
                        // Wochenverbrauch aktualisieren
                        aktualisiere_vebrauch_objekt(id, "diese_woche", verbrauch);
                        // Monatsverbrauch aktualisieren
                        aktualisiere_vebrauch_objekt(id, "dieser_monat", verbrauch);
                        // Jahresverbrauch aktualisieren
                        aktualisiere_vebrauch_objekt(id, "dieses_jahr", verbrauch);
                        // Gesamten Vebrauch aktualisieren
                        aktualisiere_vebrauch_objekt(id, "gesamt", verbrauch);
                    }
                });
                aktualisiere_namen();
                log("Shelly Verbrauch: Verbrauchswerte aktualisiert: " + anzahl_updates + " | Reboots korrigiert: " + anzahl_reboots + " | Unveränderte Werte: " + anzahl_gleich);
            }
            // aktualisiert das jeweilige Verbrauchs-Objekt und addiert den Verbrauch dazu
            function aktualisiere_vebrauch_objekt(dp, objekt, wert) {
                // Hole alten Verbrauch
                let alter_verbrauch = getState(shelly_DP(dp) + objekt).val;
                let verbrauch = 0;
                // Kein Wert vorhanden - nutze den übermittelten Wert
                if (alter_verbrauch<1 || alter_verbrauch==null) {
                    verbrauch = parseFloat(wert)
                } else {
                    verbrauch = parseFloat(alter_verbrauch) + parseFloat(wert);
                }
                setState(shelly_DP(dp) + objekt, parseFloat(verbrauch.toFixed(2)), true);
            }
            // Verschiebt das jeweilige Verbrauchs-Objekt und nullt den Ursprung (Tag, Woche, Monat, Jahr)
            function verschiebe_verbrauch_objekt(von, nach) {
                $('state[id=*.' + datenpunkt + '*.*.' + von + ']').each(function (id, i) {
                    // 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);
                });
            }
            // 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("javascript.0." + shelly_DP_Name_Main(id), {
                                common: {
                                    name: String(getState(id).val),
                                    desc: String(getState(id).val)
                                }, type: "channel"
                            });
                        }
                    });
                }
            }
            // Erstelle die benötigten Datenpunkte
            function datenpunkte_erstellen() {
                // Anzahl der gefundenen Shelly
                var anzahl = shellyDps.length;
                shellyDps.each(function (id, j) {
                    var initial_wert = 0.0;
                    for (var i = 0; i < objekt.length; i++) {
                        // Startwerte werden nur bei alter_wert und aktueller_wert eingetragen
                        if (i > 8) {
                            initial_wert = getState(id).val;
                        }
                        createState(shelly_DP(id) + objekt[i], initial_wert, ueberschreiben, {
                            name: beschreibung[i],
                            desc: beschreibung[i],
                            type: "number",
                            role: "value.power",
                            unit: "Wh"
                        });
                    }
                });
                // Anzahl der gefundenen Shelly 3EM
                var anzahl_3em = shelly3EMDps.length;
                shelly3EMDps.each(function (id, j) {
                    var initial_wert = 0.0;
                    for (var i = 0; i < objekt.length; i++) {
                        // Startwerte werden nur bei alter_wert und aktueller_wert eingetragen
                        if (i > 8) {
                            initial_wert = getState(id).val;
                        }
                        createState(shelly_DP(id) + objekt[i],  initial_wert, ueberschreiben, {
                            name: beschreibung[i],
                            desc: beschreibung[i],
                            type: "number",
                            role: "value.power",
                            unit: "Wh"
                        });
                    }
                });
                // Anzahl der gefundenen Shelly 3EM - Total
                var anzahl_3em_total = shelly3EMTotalDps.length;
                shelly3EMTotalDps.each(function (id, j) {
                    var initial_wert = 0.0;
                    for (var i = 0; i < objekt.length; i++) {
                        // Startwerte werden nur bei alter_wert und aktueller_wert eingetragen
                        if (i > 8) {
                            initial_wert = getState(id).val;
                        }
                        createState(shelly_DP(id) + objekt[i], initial_wert, ueberschreiben, {
                            name: beschreibung[i],
                            desc: beschreibung[i],
                            type: "number",
                            role: "value.power",
                            unit: "Wh"
                        });
                    }
                });
                // Alle Datenpunkte erstellt. Frage ersten Verbrauch ab!
                log("Shelly Verbrauch: Datenpunkte erstellt! Erster Verbrauch steht nach 30 Sekunden zur Verfügung! Anzahl gefundener Shelly Datenpunkte: " + (anzahl_3em + anzahl + anzahl_3em_total));
                setTimeout(shelly_verbrauch_update, 30000);
                // Datenpunkte für die Namen der Shelly erstellen
                shellyDpsName.each(function (id, j) {
                    createState(shelly_DP_Name(id), "", ueberschreiben, {
                        name: "Name des Shelly",
                        desc: "Name des Shelly",
                        type: "string",
                        role: "value",
                        unit: ""
                    });
                });
            }
            function shelly_DP(dp) {
                dp = dp.split(".");
                dp = datenpunkt + dp[2] + "." + dp[3] + ".";
                return dp;
            }
            function shelly_DP_Name(dp) {
                dp = dp.split(".");
                dp = datenpunkt + dp[2] + "." + dp[3];
                return dp;
            }
            function shelly_DP_Name_Main(dp) {
                dp = dp.split(".");
                dp = datenpunkt + dp[2];
                return dp;
            }
            function shelly_verbrauch_erster_start() {
                log("Shelly Verbrauch: Erster Start des Skriptes! Datenpunkte werden erstellt!");
                // Datenpunkte werden erstellt
                datenpunkte_erstellen();
            }
            // Erster Start und Initialisierung
            shelly_verbrauch_erster_start();
            // Alle 15 Minuten das Skript für den Tagesverbrauch ausführen
            schedule('*/15 * * * *', shelly_verbrauch_update);
            // Nachts um 24 Uhr werden die Werte in andere Variablen gespeichert, um den Verlauf zu erstellen
            schedule('0 0 * * *', shelly_vebrauch_tag);
            

            Bis vor ein paar Tagen lief alles Top.

            crunchipC Abwesend
            crunchipC Abwesend
            crunchip
            Forum Testing Most Active Developer
            schrieb am zuletzt editiert von
            #6

            @damrak2022 da kann das script auch nix für, wenn dein shelly nix überträgt aus Gründen xy, kann das script auch nix berechnen.
            guck doch mal ins log was z.b. gestern/vorgestern war, möglicherweisse der shelly vllt nicht erreichbar gewesen

            umgestiegen von Proxmox auf Unraid

            Damrak2022D 1 Antwort Letzte Antwort
            0
            • crunchipC crunchip

              @damrak2022 da kann das script auch nix für, wenn dein shelly nix überträgt aus Gründen xy, kann das script auch nix berechnen.
              guck doch mal ins log was z.b. gestern/vorgestern war, möglicherweisse der shelly vllt nicht erreichbar gewesen

              Damrak2022D Offline
              Damrak2022D Offline
              Damrak2022
              schrieb am zuletzt editiert von
              #7

              @crunchip Im Log ist nichts zu sehen und in der Shelly App wird mir auch ein Verbrauch dargestellt, nur nicht in den beiden Datenpunkten.

              Mit besten Grüßen
              Andy

              crunchipC 1 Antwort Letzte Antwort
              0
              • Damrak2022D Damrak2022

                @crunchip Im Log ist nichts zu sehen und in der Shelly App wird mir auch ein Verbrauch dargestellt, nur nicht in den beiden Datenpunkten.

                crunchipC Abwesend
                crunchipC Abwesend
                crunchip
                Forum Testing Most Active Developer
                schrieb am zuletzt editiert von
                #8

                @damrak2022 sagte in Shelly zeigen keinen Verbrauch an:

                in der Shelly App

                juckt nicht
                was entscheidend ist, der Datenpunkt vom shelly und wenn dieser nicht aktualisiert wird, kann auch das script nichts rechnen

                umgestiegen von Proxmox auf Unraid

                1 Antwort Letzte Antwort
                0
                • Damrak2022D Offline
                  Damrak2022D Offline
                  Damrak2022
                  schrieb am zuletzt editiert von
                  #9

                  @crunchip Ich weiß nicht woran es liegt, aber jetzt wird mir der Verbrauch von gestern angezeigt. Nur die von letzter Woche weigern sich beharrlich.
                  Nun meldet mir der Log aber das ein Gerät offline sei:

                  [http controlFunction] Unable to perform request - device 192.168.178.51 (undefined / undefined / undefined) is offline
                  

                  Ich kann das Gerät aber anpingen. Habe mal den Router neu gestartet sowie das Skript und den Adapter - bringt aber nichts.

                  Mit besten Grüßen
                  Andy

                  crunchipC S 2 Antworten Letzte Antwort
                  0
                  • Damrak2022D Damrak2022

                    @crunchip Ich weiß nicht woran es liegt, aber jetzt wird mir der Verbrauch von gestern angezeigt. Nur die von letzter Woche weigern sich beharrlich.
                    Nun meldet mir der Log aber das ein Gerät offline sei:

                    [http controlFunction] Unable to perform request - device 192.168.178.51 (undefined / undefined / undefined) is offline
                    

                    Ich kann das Gerät aber anpingen. Habe mal den Router neu gestartet sowie das Skript und den Adapter - bringt aber nichts.

                    crunchipC Abwesend
                    crunchipC Abwesend
                    crunchip
                    Forum Testing Most Active Developer
                    schrieb am zuletzt editiert von
                    #10

                    @damrak2022 und kommst du aufs Gerät selbst?

                    umgestiegen von Proxmox auf Unraid

                    1 Antwort Letzte Antwort
                    0
                    • Damrak2022D Damrak2022

                      @crunchip Ich weiß nicht woran es liegt, aber jetzt wird mir der Verbrauch von gestern angezeigt. Nur die von letzter Woche weigern sich beharrlich.
                      Nun meldet mir der Log aber das ein Gerät offline sei:

                      [http controlFunction] Unable to perform request - device 192.168.178.51 (undefined / undefined / undefined) is offline
                      

                      Ich kann das Gerät aber anpingen. Habe mal den Router neu gestartet sowie das Skript und den Adapter - bringt aber nichts.

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

                      @damrak2022 der Verbrauch von letzter Woche kommt auch nicht mehr wieder weil dieser am Ende der Woche aus Verbrauch der Woche geschrieben wird.
                      Also Kommenden Sonntag zu Montag wird dann der Wert der jetzigen Woche in die letzte Woche geschrieben.

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

                      1 Antwort Letzte Antwort
                      0

                      Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                      Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                      Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                      Registrieren Anmelden
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate
                      FAQ Cloud / IOT
                      HowTo: Node.js-Update
                      HowTo: Backup/Restore
                      Downloads
                      BLOG

                      541

                      Online

                      32.9k

                      Benutzer

                      83.0k

                      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