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

Dieser Artikel wurde zuletzt am 22.03.2021 um 09:25 Uhr aktualisiert

Hinweis: für dieses Skript steht ein Update zur Verfügung!
Es wird nun auch der Shelly 3EM unterstützt.

In der Shelly Cloud App für iOS oder Android sieht man natürlich immer auf einen Blick, wie der Verbrauch der einzelnen oder aller Shelly ist.
Was ist aber, wenn man diese Daten auch gerne Offline zur weiteren Verarbeitung speichern möchte?
Hier stößt man leider schnell auf ein Problem, das der Verbrauch des Shelly zwar abgelesen werden kann – jedoch nur der Verbrauch seit dem letzten Neustart.

Somit würde sich der Verbrauch immer verändern, wenn der Shelly aufgrund von Stromausfall oder Software-Update neugestartet wurde.

Hierzu habe ich mir lange Gedanken gemacht und ein Skript entwickelt, welches die Werte aus den einzelnen Shelly in einer einstellbaren Zeit abfragt und in eigene Datenpunkte speichert. Auch ist eine Korrektur von Reboot Werten vorhanden. Somit werden die Zähler der temporären Berechnung genullt, sobald festgestellt wurde, das der Shelly neu gestartet wurde. Dies hat keinen Einfluss auf die gesamte Berechnung des Verbrauchs – im Gegenteil: Die Berechnung des Verbrauchs wird genauer!

Übersicht der Funktionen

Folgende Verbrauchswerte stehen in der Historie für jeden der Shelly zur Verfügung:

FunktionBeschreibung
Verbrauch heuteabgefragter Verbrauch heute
Verbrauch gesternabgefragter Verbrauch gestern
Verbrauch diese Wocheabgefragter Verbrauch für die gesamte Woche
Verbrauch letzte Wocheabgefragter Verbrauch für die gesamte letzte Woche
Verbrauch dieser Monatabgefragter Verbrauch für den gesamten Monat
Verbrauch letzter Monatabgefragter Verbrauch für den gesamten letzten Monat
Verbrauch dieses Jahrabgefragter Verbrauch für das gesamte Jahr
Verbrauch letztes Jahrabgefragter Verbrauch für das gesamte letzte Jahr
Verbrauch Gesamtabgefragter Verbrauch gesamt
NameZugewiesener Name des Shelly zum einfachen Wiederfinden
Übersicht über die einzelnen Datenpunkte

Screenshot der verfügbaren Variablen

Screenshot der verfügbaren Variablen
Screenshot der verfügbaren Variablen

Installation des Shelly Adapter

Installation des Shelly Adapter
Installation des Shelly Adapter

Nach kurzer Zeit stehen die Datenpunkte aller gefundenen Shellys unter shelly.0 zur Verfügung.

Skript

/*
 * @copyright 2020 Stephan Kreyenborg <stephan@kreyenborg.koeln>
 *
 * @author 2020 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.30
 * Erstell-Datum:	05. März 2021
 * 
 */

// Datenpunkte neu erstellen
var ueberschreiben = false;

// Hauptdatenpunkt unterhalb javascript
var datenpunkt = "ShellyVerbrauch.";

// Verbrauchs Objekte der einzelnen Shelly
const objekt = ["gesamt", "dieses_jahr", "letztes_jahr", "letzter_monat", "dieser_monat", "letzte_woche",
    "diese_woche", "gestern", "heute", "alter_wert", "aktueller_wert"];

// Beschreibung der Objekte
const 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 !!!)
const shellyDps = $('state[id=' + shelly_dp + '.*.*.Energy]');

// Datenpunkte der Shelly 3EM DP
const shelly3EMDps = $('state[id=' + shelly_dp + '.*.*.Total]');

// Datenpunkte der Shelly Namen (!!! Bitte nicht ändern !!!)
const 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);
                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);
                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);
            // Alter und neuer Wert -> aktuelle Differenz

            var verbrauch = (parseFloat(shelly_verbrauch) - parseFloat(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);
                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);
                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);
            // Alter und neuer Wert -> aktuelle Differenz

            var verbrauch = (parseFloat(shelly_verbrauch) - parseFloat(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) {
    var verbrauch = parseFloat(getState(shelly_DP(dp) + objekt).val) + parseFloat(wert);
    verbrauch = parseFloat(verbrauch.toFixed(2));
    setState(shelly_DP(dp) + objekt, verbrauch);
}

// 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);
        }
        // Setze heute zurück
        setState(id, 0);
    });
}

// Funktion um die aktuellen Namen des Shelly abzuholen
function aktualisiere_namen() {
    shellyDpsName.each(function (id, i) {
        setState(shelly_DP_Name(id),String(getState(id).val));
    });
    shelly3EMDps.each(function (id, i) {
        setState(shelly_DP_Name(id),String(getState(id).val));
    });
}

// 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;
        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;
        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 1 Minute zur Verfügung! Anzahl gefundener Shelly Datenpunkte: " + (anzahl_3em + anzahl));
    setTimeout(shelly_verbrauch_update, 60000);
    
    // 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: ""
        });
    });
    // Datenpunkte für die Namen der Shelly 3EM erstellen
    shelly3EMDps.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_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);

Datenpunkte

Nachdem das Skript angelaufen ist und regelmäßig die Verbräuche der Shelly abgefragt wurden, findest Du diese im Datenpunkt: javascript.0.ShellyVerbrauch

Neue Shelly eingebunden, das Skript liest die Daten nicht aus!

Solltest Du zur Laufzeit des Skripts neue Shelly eingebunden haben, so kannst du das Skript einmal stoppen und erneut starten. Dann werden auch die passenden Datenpunkte für die neuen Shelly gefunden und ausgelesen.

30 Gedanken zu „Shelly Verbrauchs-Historie für Tag, Woche, Monat, Jahr

  1. DutchmanNL

    interessanter artikel, aber nur sub-elemente von dem was der ioBroker adapter SourceAnalytix bereits alles kan 🙂
    [Link entfernt – keine Werbung]

    Antworten
    1. Stephan Beitragsautor

      Wenn man eben nur die Shelly tracken möchte, benötigt man keinen Adapter, der 80MB RAM frisst 🙂

      Es steht ja jedem frei, das zu nutzen, was er für richtig hält. Wenn Dein Adapter nützlich für jemanden ist, dann kann dieser ihn doch auch gerne benutzen. Wenn jemand nur ein Skript haben möchte, welches die Verbräuche seiner Shelly ausliest, dann reicht ihm mein Skript, da der JavaScript Adapter eh läuft.

      Antworten
    1. Stephan Beitragsautor

      Vielen Dank 😉

      Die Umrechnung kann ja mit (Wh/1000) auch in dem jeweilig benötigten Bereich erfolgen.
      Ich hatte es in Wh gelassen, da ich so auch kleinere Werte ablesen kann und bei den Werten, wo ich weiss, dass sie “größer” werden, rechne ich mit Wh/1000 um.

      Antworten
      1. Thomas

        Hallo,

        ich bin leider nicht so Fit im JavaSkript. Wo müsste ich die Umrechnung eintragen? In Zeile 231 habe ich zwar die Einheit gefunden, aber nicht wo er den Wert herbekommt.

        Könntest sie mir vielleicht sagen wo ich die Umrechnung eintragen muss.

        Danke

        Antworten
        1. Stephan Beitragsautor

          Hallo Thomas,
          Du kannst den Wert in deiner Zielanwendung bsp. VIS direkt in kw/h umrechnen. Hier muss eigentlich im Skript nichts geändert werden.

          Datenpunkt für VIS:
          Du kannst in VIS die Zahl als „number” Widget darstellen und dann unter „erweitert” den Umrechnungsfaktor 0.1 angeben.

          Gruß,
          Stephan

          Antworten
  2. Yvonne

    Hallo,

    super! Vielen Dank!
    Genau das wonach ich gesucht habe 😉

    Hatte es mit SourceAnalytix probiert, doch das ist scheinbar (lt. diversen Kommis in Foren) ziemlich buggy
    und für mich auch viel zu viele Datenpunkte. Ich will einfach nur die Shellys korrekt aufzeichnen.

    Bin noch relativ neu in iobroker, daher weiß ich nicht genau wie & wo ich das nun einfügen muss und
    auch nicht an welcher Stelle ich meinen Startwert (alter_wert) im Script eintragen muss…!?
    (Muss ggf. noch iwas eingestellt werden?)
    Kann mir bitte jemand helfen?

    Danke!

    Antworten
    1. Stephan Beitragsautor

      Hallo Yvonne,
      dieses Skript wird im Bereich “Javascript” eingefügt.

      Bei ioBroker auf der linken Seite unter “Skripte” zu finden 😉

      Dort bei “Common” den gesamten Text des Skriptes einfügen, abspeichern und auf den Play Button drücken. Die Datenpunkte werden automatisch gefüllt.
      Es ist kein Benutzereingriff notwendig – auch keine Startvariablen.

      Gruß,
      Stephan

      Antworten
  3. abase21

    ..ich habe das Script im Einsatz! Funktioniert sehr gut – mir ging es hauptsächlich darum, den Stromverbrauch meiner Gartenpumpe und meines Untertischgerätes (Außenküche) im Auge zu behalten. Vielen Dank!

    Antworten
  4. Patrick

    Hallo, Script läuft, es wird auch ein Ordner erstellt, jedoch ist in dem Ordner sonst nichts weiter drin. Es werden keine Daten gefüllt. Ich nutze einen Shelly EM3. Könnte es vllt an dem Datenpunkt Energy liegen? Dieser heißt bei dem EM3 “value.totalconsumend”.

    Antworten
    1. Stephan Beitragsautor

      Hallo Patrick,
      danke für den Hinweis. Leider besitze ich keinen EM3 und konnte so die Datenpunkte nicht einbinden.
      Gerne kann ich das Skript erweitern, wenn Du mir die Datenpunkte des EM3 einmal zur Verfügung stellen könntest – Stephan@Kreyenborg.koeln

      Danke 😉

      Antworten
  5. Tobias

    Hallo Patrick,
    danke für das Skript. Läuft gut und gibt interessante Einblicke in die Verbräuche
    Ein Fehler tritt auf bei einem Shelly 2.5 / Shutter, der nicht aktiv (versorgt) ist (mein Test-Device) und dessen Datenpunkt Shutter/Energy = “null” ist. Da ich nicht firm in Javascript bin, kann ich den Code nicht ändern. Die Änderung des DP von Hand auf “0” führt aber zu einer jetzt fehlerfreien Ausführung. Fehler-Log:
    You are assigning a string to the state “javascript.0.ShellyVerbrauch.SHSW-25#xxx#1.Shutter.aktueller_wert” which expects a number.
    at script.js.common.Shelly_Verbrauch:110:13
    Schön wäre noch, durch eine globale Variable die Logs zu unterbinden und nur im Debug Fall zu aktivieren. Den ganzen Javascript Adapter will ich aber wegen anderer Skripts nicht in diesen Zustand setzen.
    Interessiert wäre ich an einem gleichen Skript für sonoff/Tasmota. Ich habe 8 Stück SP111 Zwischenstecker als Schaltaktoren.
    Nochmals Dank für deine Arbeit.

    Antworten
    1. Stephan Beitragsautor

      Hallo Tobias,
      danke für die Rückmeldung. Ich weiß jetzt nicht, woher Du Patrick liest, aber mein Name ist Stephan 😉
      Die Protokoll Funktion kannst Du selbst entfernen. Jede Zeile beginnend mit “log” kannst Du entfernen. Dann erscheint kein Log-Eintrag mehr.

      Wenn Du mir die Datenpunkte für die Tasmota zur Verfügung stellst, lässt sich das Skript sicherlich erweitern.

      Antworten
      1. Tobias

        Hallo Stephan,
        entschuldige die Namensverwechslung und Dank für deine Antwort.
        Das mit den Log Einträgen hat funktioniert.
        Die DP sehen wie folgt aus (hoffe unter den vielen ist das für dich wichtige dabei:
        sonoff.0
        Tasmota1
        ENERGY_Current state Tasmota1 ENERGY Current
        ENERGY_Factor state Tasmota1 ENERGY Factor
        ENERGY_Power state Tasmota1 ENERGY Power
        ENERGY_Today state Tasmota1 ENERGY Today
        ENERGY_Total state Tasmota1 ENERGY Total
        ENERGY_Voltage state Tasmota1 ENERGY Voltage
        ENERGY_Yesterday state Tasmota1 ENERGY Yesterday
        EnergyReset_Today state Tasmota1 EnergyReset Today
        EnergyReset_Total state Tasmota1 EnergyReset Total
        EnergyReset_Yesterday state Tasmota1 EnergyReset Yesterday
        POWER state Tasmota1 POWER

        Noch eine weitere Frage: zumeist werden die DP heute unter 0_userdata.0 angelegt und nicht unter dem Adapter javascript.0
        Was ist dafür zu ändern?
        Danke

        Antworten
  6. Dumpfbacke

    Sehr schön: Tut genau das was es soll und nicht mehr.
    iobroker läuft bei mir auf einem FreeNAS in einem Jail.

    Danke.

    Antworten
  7. Apfelbaum

    Howdy – tolles Skript, HUT AB!
    Frage: Ist es möglich das Skript so zu modifizieren, dass es einen Datenpunkt für die Shelly 3EMs gibt, der den Gesamtverbrauch aller 3 Phasen zusammenrechnet und in kw/h ausgibt (also auch “heute”,gestern”,”diese Woche”,”letzte Woche”, usw.)?

    Schön wäre auch, wenn man optional Minuswerte(durch Messungenauigkeiten) bestimmter Shelly 3EMs (die man dann eben im Skript eintragen muss) von der jeweiligen Berechnung ausschließen könnte – also z.B. die Funktion implementieren jedoch durch Kommentarfunktion deaktivieren. – verstehst du wie ich das meine?

    Gruß Apfelbaum

    Antworten
    1. Stephan Beitragsautor

      Hallo,
      das Skript kannst Du nach Deinen Belieben anpassen. Eine zusammenfassende Berechnung ist von meiner Seite aus nicht vorgesehen.
      Wenn Du dies nach Deinen Wünschen anpassen möchtest, ist dies möglich 😉

      Gruß,
      Stephan

      Antworten
  8. Markus

    Tolle Sache….was mir gefallen würde….
    die saldierende Zählung des 3EM, also wenn die Summe der 3Phasen ins Minus geht und das Addieren einzelner Shelly´s.
    Sonst mega tolle Arbeit 🙂

    Antworten
    1. Stephan Beitragsautor

      Hallo Markus,
      danke für das Feedback. Die einzelnen Phasen werden einzeln dargestellt, da diese auch für weitere Berechnungen genutzt werden können.
      Wenn Du nun eine Summe in VIS darstellen möchtest, kannst Du diese Datenpunkte einfach dort addieren.

      Gruß,
      Stephan

      Antworten
  9. Pingback: Sonoff/Tasmota Verbrauchs-Historie für Tag, Woche, Monat, Jahr | Kreyenborg.koeln

  10. Tom B

    Hallo Stephan

    das ist genau das Skiript das ich gesucht habe um den Ertrag meiner PV Anlage zu ermitteln.
    Leider habe ivh on Java Script noch keine Ahnung. Ist es möglich, dass statt alle 15 minuten alle 5 oder sogar jede Minute ein Wert gesetzt wird? Denn so habe ich teils sehr starke Abweichungen.
    Herzlichen Dank für deine Mühe

    Antworten
    1. Stephan Beitragsautor

      Hallo Tom,
      in Zeile 304 im Skript kannst du die Abfrage anpassen.
      schedule('*/15 * * * *', shelly_verbrauch_update); heisst hier, dass es alle 15 Minuten ausgeführt wird.

      Für jede Minute änderst Du die 15 in 1.
      schedule('*/1 * * * *', shelly_verbrauch_update);

      Abweichungen sollten eigentlich nicht auftreten, da der Shelly die Werte ja speichert und das Skript sie abfragt.

      Gruß,
      Stephan

      Antworten
  11. Daniel

    Vielen Dank für die tolle Arbeit
    Wäre es noch möglich für den Shelly 3EM , den totalen Stromverbrauch als zusätlichen Datenpunkt abzubilden?

    Mfg Daniel

    Antworten
    1. Stephan Beitragsautor

      Hallo Daniel,
      danke für Deine Rückmeldung.

      Den totalen Stromverbrauch kannst Du selbst über die verschiedenen Datenpunkte addieren lassen. Das Skript erledigt nur die Verwaltung der Datenpunkte zur besseren Übersicht.

      Gruß,
      Stephan

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.