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
    712

  • 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 Offline
    Damrak2022D Offline
    Damrak2022
    schrieb am zuletzt editiert von Damrak2022
    #1

    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.

    Mit besten Grüßen
    Andy

    S 1 Antwort Letzte Antwort
    0
    • 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

                        499

                        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