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

Lesedauer: 9 Minuten

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 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: 20. Juli 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 3EM DP - Total
var shelly3EMTotalReturned = $('state[id=' + shelly_dp + '.*.*.Total_Returned]');

// 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(shelly_DP(id), "heute", verbrauch);

            // Wochenverbrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(id), "diese_woche", verbrauch);

            // Monatsverbrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(id), "dieser_monat", verbrauch);

            // Jahresverbrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(id), "dieses_jahr", verbrauch);

            // Gesamten Vebrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(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(shelly_DP(id), "heute", verbrauch);

            // Wochenverbrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(id), "diese_woche", verbrauch);

            // Monatsverbrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(id), "dieser_monat", verbrauch);

            // Jahresverbrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(id), "dieses_jahr", verbrauch);

            // Gesamten Vebrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(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(shelly_DP(id), "heute", verbrauch);

            // Wochenverbrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(id), "diese_woche", verbrauch);

            // Monatsverbrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(id), "dieser_monat", verbrauch);

            // Jahresverbrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(id), "dieses_jahr", verbrauch);

            // Gesamten Vebrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(id), "gesamt", verbrauch);
        }
    });
    shelly3EMTotalReturned.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, true) + "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, true) + "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, true) + "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, true) + "aktueller_wert", shelly_verbrauch, true);
            // Alter und neuer Wert -> aktuelle Differenz

            var verbrauch = parseFloat(shelly_verbrauch) - alter_wert;
            // Tagesverbrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(id, true), "heute", verbrauch);

            // Wochenverbrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(id, true), "diese_woche", verbrauch);

            // Monatsverbrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(id, true), "dieser_monat", verbrauch);

            // Jahresverbrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(id, true), "dieses_jahr", verbrauch);

            // Gesamten Vebrauch aktualisieren
            aktualisiere_vebrauch_objekt(shelly_DP(id, true), "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(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(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"
            });
        }
    });

    // Anzahl der gefundenen Shelly 3EM - Total
    var anzahl_3em_total_returned = shelly3EMTotalReturned.length;

    shelly3EMTotalReturned.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, true) + 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 + anzahl_3em_total_returned));
    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: ""
        });
    });
}

/**
 * Wenn 3EM DP, dann anderen Wert zurückgeben
 * @param {any} dp
 * @param {boolean} extended
 */
function shelly_DP(dp, extended = false) {
    dp = dp.split(".");
    dp = datenpunkt + dp[2] + "." + dp[3];
    if (extended) {
        dp = dp + "_Returned.";
    } else {
        dp = dp + ".";
    }
    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);

Datenpunkte

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

Fehlersuche

Fehlermeldung im Log

javascript.0 2022-01-25 17:41:56.234	error	Function "extendObject" is not allowed. Use adapter settings to allow it.

Solltest Du diese Fehlermeldung erhalten, dann werden die Namen deiner Shelly dem Datenpunkt nicht zugewiesen. Hierzu musst Du im Javascript – Adapter die Funktion “setObject” erlauben. Dies bedeutet, das Skripte die Eigenschaften von Objekten verändern dürfen. Hier dient es dazu, dem Objekt den Namen des jeweiligen Shelly zu geben.

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.

Wie hat Dir der Beitrag gefallen?
Bewertung: 4.9/5 - abgegebene Bewertungen: 17

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

  1. Luigi Antworten

    Es ist eine echt klasse Arbeit!

    Umrechnung von Wh in kWh hat auch super funktioniert. Mit deinem Tip, dies gleich in VIS zu machen.

  2. Josef Antworten

    Hallo Stephan,
    leider funktioniert das Skript bei mir nicht.
    Im Fehlerprotokoll habe ichfolgende Meldungen:

    javascript.0
    2021-12-23 17:09:41.356 error at processImmediate (internal/timers.js:466:21)

    javascript.0
    2021-12-23 17:09:41.356 error at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/main.js:1311:17)

    javascript.0
    2021-12-23 17:09:41.355 error at /opt/iobroker/node_modules/iobroker.javascript/main.js:1832:17

    javascript.0
    2021-12-23 17:09:41.355 error at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:1731:37)

    javascript.0
    2021-12-23 17:09:41.354 error at createVM (/opt/iobroker/node_modules/iobroker.javascript/main.js:1482:28)

    javascript.0
    2021-12-23 17:09:41.354 error at Object.createScript (vm.js:262:10)

    javascript.0
    2021-12-23 17:09:41.353 error at new Script (vm.js:102:7)

    javascript.0
    2021-12-23 17:09:41.353 error SyntaxError: Identifier ‘objekt’ has already been declared

    javascript.0
    2021-12-23 17:09:41.343 error ^

    javascript.0
    2021-12-23 17:09:41.338 error const objekt = [“gesamt”, “dieses_jahr”, “letztes_jahr”, “letzter_monat”, “dieser_monat”, “letzte_woche”,

    javascript.0
    2021-12-23 17:09:41.337 error script.js.common.shelly_statistik compile failed:
    at script.js.common.shelly_statistik:31

    Der javascript-Adapter spuckt bei Start folgendes aus:

    17:16:08.399 info javascript.0 (22009) Start javascript script.js.common.shelly_statistik
    17:16:08.403 error javascript.0 (22009) script.js.common.shelly_statistik compile failed: at script.js.common.shelly_statistik:31
    17:16:11.048 info javascript.0 (22009) Stop script script.js.common.shelly_statistik

    Hast Du einen Tip?

    Besten Dank im Voraus.

    • Stephan Autor des BeitragsAntworten

      Hallo Josef,
      ich habe gerade gesehen, das beim letzten Update einige Werte im Beitrag nicht richtig übernommen worden sind.

      Bitte kopiere das Skript erneut und teste es einmal.

      Vielen Dank & smarte Weihnachten 😉

      Gruß,
      Stephan

      • Josef Antworten

        Hallo Stephan,
        Fehlerbild ist leider unverändert.

        javascritp.0 2021-12-24 10:11:42.536 error at processImmediate (internal/timers.js:466:21)
        javascript.0 2021-12-24 10:11:42.535 error at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/main.js:1311:17)
        javascript.0 2021-12-24 10:11:42.535 error at /opt/iobroker/node_modules/iobroker.javascript/main.js:1832:17
        javascript.0 2021-12-24 10:11:42.535 error at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:1731:37)
        javascript.0 2021-12-24 10:11:42.535 error at createVM (/opt/iobroker/node_modules/iobroker.javascript/main.js:1482:28)
        javascript.0 2021-12-24 10:11:42.534 error at Object.createScript (vm.js:262:10)
        javascript.0 2021-12-24 10:11:42.534 error at new Script (vm.js:102:7)
        javascript.0 2021-12-24 10:11:42.534 error SyntaxError: Identifier ‘objekt’ has already been declared
        javascript.0 2021-12-24 10:11:42.534 error ^
        javascript.0 2021-12-24 10:11:42.533 error var objekt = [“gesamt”, “dieses_jahr”, “letztes_jahr”, “letzter_monat”, “dieser_monat”, “letzte_woche”,
        javascript.0 2021-12-24 10:11:42.532 error script.js.common.shelly_statistik compile failed: at script.js.common.shelly_statistik:31

        Frohes Fest,
        Gruß Josef

        • Stephan Autor des BeitragsAntworten

          Hallo Josef,
          kann ich mir kaum vorstellen 😉

          Stutzig macht mich: javascript.0 2021-12-24 10:11:42.534 error SyntaxError: Identifier ‘objekt’ has already been declared

          Das hieße, Objekt wird schon verwendet – was aber eigentlich nicht sein kann, wenn es als neues Skript angelegt wurde.

          Fügst Du das Skript als ein neues Javascript ein?
          Bitte mal einen Screenshot von den Log-Einträgen per Mail an Stephan@Kreyenborg.koeln.
          Im Text kann man das hier leider schwer erkennen.

          Dir und Deiner Familie auch schöne Weihnachten!

          Gruß,
          Stephan

  3. Achim Antworten

    Hallo Stephan,
    auch ich möchte mich als erstes für deine tolle Arbeit und dein Engagement bedanken.
    Mein Problem: Bei allen meiner 3 RGW2 Shellys wurde der Ordner lights nicht angelegt.
    Erkannt wurden sie alle. Habe das Skript bereits mehrfach gestoppt, die Ordner gelöscht und dann das Skript erneut gestartet.
    Leider immer ohne Erfolg.
    Bin sehr gespannt, woran es liegt bzw. was ich falsch gemacht habe.

    Besten Dank im Voraus!

    • Stephan Autor des BeitragsAntworten

      Hallo Achim,
      tut mir Leid, wenn Du mit einem meiner Skripte Probleme hast.

      Die Shelly RGBW2 zeigen leider nur den aktuellen Verbrauch an – der WattStunden Verbrauch wird aktuell noch nicht protokolliert.
      Hierzu fehlt der Datenpunkt “Energy”.

      Gruß,
      Stephan

      • Achim Antworten

        Hallo Stephan,

        du must dich doch nicht für dein Skript entschuldigen, wenn Shelly nicht die entsprechenden Daten liefert.
        Werde auch weiterhin viel Freude damit haben.

        Vielen Dank für deine schnelle Antwort!

        Achim

  4. Roland Antworten

    Hallo Stephan,
    auch ich bedanke mich für die Veröffentlichung.
    Wäre es möglich noch die beiden channel-Namen der Shelly 2.5 mit zu übernehmen?
    Vielen Dank und Gruß
    Roland

    • Stephan Autor des BeitragsAntworten

      HI Roland,
      freut mich, wenn das Skript bei Dir funktioniert.

      Du kannst derzeit dem 2.5 einen generellen Namen geben und beide Kanäle benennen. Das Skript liest den “generellen” Namen aus.

      So kannst Du z.B. den generellen Namen in “Esszimmer/Wohnzimmer” benennen. Eine Unterscheidung der Kanäle findet aktuell nicht statt.
      Ich schaue mal, ob man das Umsetzen kann.

      Gruß,
      Stephan

  5. Rolf-Dieter Gerke Antworten

    Hallo Stephan,

    Shelly löschen und neu anlegen hat geholfen. Fehlermeldung weg!

    Tschüss
    Rolf

    PS: Das Script für Sonoff/Tasmota läuft auch prima! Danke..

  6. Rolf-Dieter Gerke Antworten

    Hallo Stephan,

    danke für die schnelle Antwort 🙂

    Meinst Du es würde helfen, den Shelly löschen und neu anlegen?

    Viele Grüße und schönes Wochenende
    Rolf

    • Stephan Autor des BeitragsAntworten

      … das bleibt Dir überlassen.

      Auf jeden Fall kommt der Fehler vom Shelly Adapter. Anscheinend gibt es ein Problem mit einem 3EM.

  7. Rolf-Dieter Gerke Antworten

    Hallo Stephan,

    danke für das tolle Script. Es läuft soweit, auch die Daten werden soweit ich das überblicken kann ausgelesen. Nur es kommen bei jedem Abruf folgende Fehlermeldungen , die ich nicht zuordnen kann. Ich bin nicht der Programmierer, deshalb die Bitte um Hilfe. 🙂 Die angemeckerten Datenpunkte existieren nicht. Soll ich sie manuell anlegen?

    Schon mal vielen Dank für Deine Hilfe
    Rolf

    shelly.0
    2021-11-26 20:07:33.538 error Error TypeError: Cannot read property ‘val’ of null in function dp.mqtt.mqtt_publish_funct for state SHEM-3#xxxxxx#1.Total.Total_Returned for 192.168.178.30 (shellyem3 / shellyem3-xxxxxx / SHEM-3#xxxxxx#1)
    shelly.0
    2021-11-26 20:07:33.495 warn State “shelly.0.SHEM-3#xxxxxx#1.Emeter2.Voltage” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:33.495 warn State “shelly.0.SHEM-3#xxxxxx#1.Emeter2.Current” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:33.495 warn State “shelly.0.SHEM-3#xxxxxx#1.Emeter2.Power” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:33.495 warn State “shelly.0.SHEM-3#xxxxxx#1.Emeter1.Voltage” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:33.495 warn State “shelly.0.SHEM-3#xxxxxx#1.Emeter1.Current” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:33.495 warn State “shelly.0.SHEM-3#xxxxxx#1.Emeter1.PowerFactor” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:33.495 warn State “shelly.0.SHEM-3#xxxxxx#1.Emeter1.Power” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:33.495 warn State “shelly.0.SHEM-3#xxxxxx#1.Emeter0.Voltage” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:33.494 warn State “shelly.0.SHEM-3#xxxxxx#1.Emeter0.Power” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:29.980 warn State “shelly.0.SHEM-3#xxxxxx#1.rssi” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:29.980 warn State “shelly.0.SHEM-3#xxxxxx#1.uptime” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:24.896 warn State “shelly.0.SHEM-3#xxxxxx#1.uptime” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:19.805 warn State “shelly.0.SHEM-3#xxxxxx#1.rssi” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:19.805 warn State “shelly.0.SHEM-3#xxxxxx#1.uptime” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:19.805 warn State “shelly.0.SHEM-3#xxxxxx#1.Total.Voltage” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:19.504 warn State “shelly.0.SHEM-3#xxxxxx#1.Total.VoltageMean” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:19.504 warn State “shelly.0.SHEM-3#xxxxxx#1.Total.Current” has no existing object, this might lead to an error in future versions
    shelly.0
    2021-11-26 20:07:19.503 warn State “shelly.0.SHEM-3#xxxxxx#1.Total.InstantPower” has no existing object, this might lead to an error in future versions

    • Stephan Autor des BeitragsAntworten

      Hallo Rolf-Dieter,
      Danke für deine Nachricht.

      Die Meldungen kommen nicht von meinem Skript.
      Dies liegt am Shelly Adapter selbst.
      Bitte dort einmal prüfen.

      Gruß,
      Stephan

  8. Bernhard Antworten

    Hallo Stephan,

    Danke für das super Skript.
    Leider habe ich das Problem, dass in den Feldern
    heute, (auch nach mehreren Tagen) diese Woche, etc. die gleichen Werte sind.

    Bitte um Info

    Besten Dank im voraus

    LG Bernhard

    • Stephan Autor des BeitragsAntworten

      Hallo Bernhard,
      tut mir Leid, wenn es mit dem Skript ein Problem gibt.

      Ich würde Dich bitten, mir einmal einen Screenshot der aufgeklappten Objekt-Struktur bei
      javascript.0.ShellyVerbrauch.Dein_Shelly.(lights,Relay0,Relay1,usw)
      von einem Shelly per Email an Stephan@Kreyenborg.koeln zu schicken.

      Dann schauen wir weiter 😉

      Fehler im Log hast Du aber nicht?

      Gruß,
      Stephan

  9. Pascal Antworten

    Hallo Stephan,

    vielen Dank für das super Skript, nach sowas hatte ich schon lange gesucht.

    LG
    Pascal

  10. Medoc Antworten

    interessantes script
    leider lassen sich die datenpunkte via VIS nicht abgreifen

    gruß medoc

    • Stephan Autor des BeitragsAntworten

      Hallo Medoc,
      aber natürlich lassen sich die Werte in VIS und allen anderen Visualisierungen darstellen.
      Woran machst du Deine Erkenntnis fest?

      Gruß,
      Stephan

    • Eugen Antworten

      Hallo Stephan,,
      vielen Dank für das Script,
      habe es auch am Laufen, die Datenpunkte werden angelegt,
      aber im Protokoll kommt die folgende Fehlermeldung:

      javascript.0
      2021-11-01 22:39:30.011 warn at Object. (script.js.shelly_verbrauch:6:4)

      javascript.0
      2021-11-01 22:39:30.005 warn at Object. (script.js.shelly_verbrauch:5:4)

      Kenne mich mit JS leider nicht aus und kann dies daher nicht deuten.
      Könntest du evtl. helfen?

      • Stephan Autor des BeitragsAntworten

        Hallo Eugen,
        danke für deine Nachricht.
        Um weiter nach Lösungen zu suchen, würde ich dich bitten, die komplette Fehlermeldung mitzuteilen.

        Gruß,
        Stephan

        • Eugen Antworten

          Hallo Stephan,

          viel mehr Fehlermeldungen gibt es da nicht, oder teile mir ggf. mit, wo ich noch nachschauen kann.

          Gruß
          Eugen

          • Stephan Autor des Beitrags

            Hallo Eugen,
            welche Version meines Skriptes verwendest Du?
            Die hier abgebildete Version 1.5?

            Kannst Du mir vielleicht einen Screenshot der Log-Ausgabe senden, wo der Fehler steht?
            Bitte auch etwas von davor und danach.
            E-Mail: Stephan@Kreyenborg.koeln

            Danke!

  11. Steve Antworten

    Hi,

    vielen Dank für das tolle Script!

    Ich habe ein kleines Problem, vielleicht kannst Du es ja lösen.

    Ich habe einen Shelly 3em im Einsatz
    Habe dein Script gestartet, die Datenpunkte usw. werden auf den ersten Blick auch alle angelegt und die Daten scheinen auch richtig zu sein. Allerdings wird meine Log Datei im iobroker ein bisschen voll, denn im Log erscheint immer wenn das Script neu startet bzw. die Funktion ausführt folgendes:

    2021-10-31 20:02:00.011 – warn: javascript.0 (87288) getState “shelly.0.SHEM-3#C45BBE6BD432#1.name” not found (3)
    2021-10-31 20:02:00.012 – warn: javascript.0 (87288) at script.js.common.Shelly-Verbrauchs-Script:256:37
    2021-10-31 20:02:00.012 – warn: javascript.0 (87288) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:819:29)
    2021-10-31 20:02:00.012 – warn: javascript.0 (87288) at aktualisiere_namen (script.js.common.Shelly-Verbrauchs-Script:255:15)
    2021-10-31 20:02:00.012 – warn: javascript.0 (87288) at Object.shelly_verbrauch_update (script.js.common.Shelly-Verbrauchs-Script:228:1)
    2021-10-31 20:02:00.012 – warn: javascript.0 (87288) at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1313:34)
    2021-10-31 20:02:00.012 – warn: javascript.0 (87288) at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/Job.js:168:15)
    2021-10-31 20:02:00.012 – warn: javascript.0 (87288) at /opt/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28
    2021-10-31 20:02:00.012 – warn: javascript.0 (87288) at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7)
    2021-10-31 20:02:00.012 – warn: javascript.0 (87288) at listOnTimeout (internal/timers.js:554:17)
    2021-10-31 20:02:00.012 – warn: javascript.0 (87288) at processTimers (internal/timers.js:497:7)
    2021-10-31 20:02:00.012 – warn: javascript.0 (87288) getState “shelly.0.SHEM-3#C45BBE6BD432#1.name” not found (3)
    2021-10-31 20:02:00.012 – warn: javascript.0 (87288) at script.js.common.Shelly-Verbrauchs-Script:259:14
    2021-10-31 20:02:00.012 – warn: javascript.0 (87288) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:819:29)
    2021-10-31 20:02:00.012 – warn: javascript.0 (87288) at aktualisiere_namen (script.js.common.Shelly-Verbrauchs-Script:255:15)
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at Object.shelly_verbrauch_update (script.js.common.Shelly-Verbrauchs-Script:228:1)
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1313:34)
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/Job.js:168:15)
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at /opt/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7)
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at listOnTimeout (internal/timers.js:554:17)
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at processTimers (internal/timers.js:497:7)
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) getState “shelly.0.SHEM-3#C45BBE6BD432#1.name” not found (3)
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at script.js.common.Shelly-Verbrauchs-Script:260:14
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:819:29)
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at aktualisiere_namen (script.js.common.Shelly-Verbrauchs-Script:255:15)
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at Object.shelly_verbrauch_update (script.js.common.Shelly-Verbrauchs-Script:228:1)
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1313:34)
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/Job.js:168:15)
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at /opt/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7)
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at listOnTimeout (internal/timers.js:554:17)
    2021-10-31 20:02:00.013 – warn: javascript.0 (87288) at processTimers (internal/timers.js:497:7)
    2021-10-31 20:02:00.013 – info: javascript.0 (87288) script.js.common.Shelly-Verbrauchs-Script: Shelly Verbrauch: Verbrauchswerte aktualisiert: 2 | Reboots korrigiert: 0 | Unveränderte Werte: 2

    Hast Du einen Tipp für mich?

    • Stephan Autor des BeitragsAntworten

      Hallo Steve,
      danke für deine Rückmeldung.
      Kannst Du vielleicht einmal schauen, ob der Datenpunkt: “shelly.0.SHEM-3#C45BBE6BD432#1.name” vorhanden ist?
      Sieht so aus, als wäre der Datenpunkt mit dem Namen nicht vorhanden.
      Dies bringt den o.g. Fehler.

      Gruß,
      Stephan

        • Stephan Autor des BeitragsAntworten

          Prima, kannst du dort mal einen Namen eingeben und das Skript nochmal starten?

          Bleiben die Fehlermeldungen?

          • Stephan Autor des Beitrags

            Du gehst in deine Shelly App auf dem Telefon und gibst den 3EM einen Namen.
            Bei den Einstellungen des 3EM den Haken bei Sync Name setzen 😉

          • Steve

            ohhhh, hat sich erledigt……Hab jetzt einen Namen da eingetragen, der Fehler ist auf den ersten Blick hin, behoben.

            Vielen Danke!

          • Stephan Autor des Beitrags

            Danke für den Hinweis.
            Ich werde das Skript noch anpassen – dieser Fehler könnte häufiger vorkommen.
            Danke!

  12. Roman Antworten

    Danke, das hat geholfen. Und auch ein Offset beim Gesamtverbrauch scheint zu funktionieren. Damit müsste ich dann meinen Zählerstand somit in den Gesamt Wert einfließen lassen können

  13. Roman Antworten

    schließe mich vielen Vorrednern an, großartiges Script.
    Wünsche von meiner Seite, den Namen mit in den DP aufnehmen, so dass man einfacher sieht um welchen es sich handelt.
    Beim 3EM wäre die Summer der 3 Phasen noch out of the box interessant. Habe mir jetzt ein eigenes script gebastelt, dass die Werte addiert.
    Das ganze jetzt in InfluxDB und Grafana zu bringen ist noch viiiiieel fleißarbeit. Ich fange mal mit der Summe des 3EM an sobald ein paar Daten vorhanden sind.

    • Stephan Autor des BeitragsAntworten

      Hallo Roma,
      danke für die Rückmeldung. Freut mich sehr 😉

      Die Namen der Datenpunkte werden so genannt, wie Du deine Shelly benennst. Die Namen der Shelly stehen im Datenpunkt:
      shelly.0.Shelly.name
      Shelly Namen
      Die Addition der 3EM habe ich bewusst weggelassen, da ich auch bei einem 2.5, der 2 Kreise steuern kann, nicht addieren lasse.

      Gruß,
      Stephan

      • Roman Antworten

        ich muss leider einen Eintrag aufklappen damit ich ihn sehen kann.
        https://ibb.co/1zpWvWq

        bei den 2.5er macht das auch meiner Meinung nach total Sinn, dass nicht aufaddiert wird. Sind ja meist 2 unterschiedliche Verbraucher die dran hängen.
        Aber am 3EM hängt ja normalerweise das komplette Haus bzw Wohnung, da macht die Summe über alles ja schon Sinn.

        Aber trotzdem super Arbeit.
        Hast du auch mal über eine Option nachgedacht wie man alte Werte, auch gerne manuell, mit einfliessen lassen könnte? bzw kann ich einfach bei Gesamt den Offset zu meinem Stromzähler hinzuaddieren?

        • Stephan Autor des BeitragsAntworten

          Hallo Roman,
          ja, da steht der Name auch drin. Aber in der Ordner Struktur vom ioBroker steht der Name des Shelly in der Bezeichnung des Datenpunkts.
          Vielleicht hast du die Spalte “Name” bei ioBroker ausgeblendet?

          Zu deinen Anfragen:
          Ich baue aktuell Skripte, die in etwa 95% der User “Out-of-the-Box” nutzen können. Sollten die restlichen 5% die Skripte noch anderweitig nutzen wollen,
          so steht es Ihnen ja frei, diese zu erweitern. Werte, die von anderen Verbrauchern kommen, machen in einem Skript, welches auf Shelly abzielt wenig Sinn, oder? 😉

          Die Aufteilung der Phasen beim 3EM macht durchaus Sinn, da sie physikalisch getrennt sind. Klar lässt sich hier auch eine Addition vornehmen – die aber, soweit mir bekannt ist, nicht so oft gebraucht wird.
          Auch sind viele User anders unterwegs und möchten die Phasen einzeln noch irgendwo weiter verwenden.

          Du kannst, wenn Du andere Verbräuche protokollieren wollen würdest, den Adapter SourceAnalytic verwenden. Der kann alles protokollieren – ist aber, soweit ich weiss, nicht so genau bzw. nicht so stabil.

          Gruß,
          Stephan

          • Roman

            mmh seltsam, hab extra nachgeschaut, die Spalte Name ist nicht ausgeblendet, bleibt aber bei mir auf Ordnerlevel leer.

            und zum 3EM, da bietet shelly selbst ja den Datenpunkt “Total” an. Darunter heissen die Werte dann halt nicht total und energy wie bei den 3 Phasen sondern “ConsumedPower” und “InstantPower”. Wenn du die noch in dein Script aufnimmst wäre sicher noch ein paar mehr Leuten geholfen 😉

          • Stephan Autor des Beitrags

            Hi Roman,
            Du könntest folgendes Versuchen:
            – Sicherung der Datenpunkte
            – Skript stoppen
            – Zeile 25 in “true” ändern
            – Skript starten
            – 1 Minute warten
            – Skript stoppen
            – Zeile 25 wieder auf false setzen
            – Skript normal starten

            Danach sollten die Datenpunkte die Namen der Shelly enthalten.

            Gruß,
            Stephan

  14. Reimund Konertz Antworten

    Hallo bin da Anfänger. Was brauche ich denn genau alles um das Script laufen zu lassen ß Ich habe die Original App von Shelly und die Shelly Cloud, wo ich die Daten von meinem Solarpanel sehen kann.

  15. patrick Antworten

    Hallo Stephan

    ich habe das Sript komplett Kopiert und im Io broker unter Skripte common / dann neues Javaskript erstelt ,, dann eingefügt und gestartet.
    nur finde ich bei mir die genanten daten punkte nicht.

    • Stephan Autor des BeitragsAntworten

      Hallo Patrick,
      schaust du in das Log? Siehst du irgendwelche Fehler?
      Wenn nicht, dann musst du die Seite neuladen.
      Dann erscheinen die Datenpunkte.

      Gruß,
      Stephan

  16. tobbes Antworten

    Noch eine Frage:

    Wie kann ich den Verbrauch der letzten Stunde irgendwie bekommen?
    Könntest Du einen DP einfügen?

    Gruß tobbes

    • Stephan Autor des BeitragsAntworten

      Hallo Tobbes,
      das Skript stellt die Grundbedürfnisse zur Verfügung.
      Für genauere Ausgaben kann/sollte jeder das Skript an seine Bedürfnisse anpassen.
      Für deinen Einsatzzweck würde sich das protokollieren via influxDB und Ausgabe per Grafana bestens eignen.
      Hier hast du dann die Möglichkeit, alles detailliert anzeigen und ausgeben zu lassen.

      Gruß,
      Stephan

  17. tobbes Antworten

    Hallo,

    danke für das tolle Script!
    Hat es jemand zur Messung der Einspeisung von Solarstrom getestet?

    Ein Kommentar gab es hier, aber leider keine Rückmeldung. Würde gerne die Erzeugung an einem Balkonkraftwerk messen.

    Gruß tobbes

    • Stephan Autor des BeitragsAntworten

      Hallo Tobbes,
      Das Skript zeigt an, was der jeweilige Shelly misst. Somit sollte dies auch mit dem Balkonkraftwerk funktionieren.

      Gruß,
      Stephan

  18. Jörg S. Antworten

    Moin.
    Vilen Dank für das Skript. Genau das habe ich gesucht. Fürs selber schreiben bin ich einfach zu “blöde”.

    Das Skript funktioniert soweit. Allerdings habe ich Fehlermeldungen im Protokoll vom ioBroker. Kann mir die einer “übersetzen” was da falsch läuft? Kommt so ca. alle 10min.

    javascript.0 2021-06-04 14:39:01.705 error Function “extendObject” is not allowed. Use adapter settings to allow it.
    javascript.0 2021-06-04 14:39:01.704 error Function “extendObject” is not allowed. Use adapter settings to allow it.
    javascript.0 2021-06-04 14:39:01.704 error Function “extendObject” is not allowed. Use adapter settings to allow it.
    javascript.0 2021-06-04 14:39:01.704 error Function “extendObject” is not allowed. Use adapter settings to allow it.
    javascript.0 2021-06-04 14:39:01.703 error Function “extendObject” is not allowed. Use adapter settings to allow it.

    • Stephan Autor des BeitragsAntworten

      Hallo Jörg,
      der “Fehler” besagt, das du die Einstellung “Erlaube das Kommando ‘setObject'” im JavaScript Adapter aktivieren musst.

      Gruß,
      Stephan

      • Jörg S. Antworten

        Hi Stephan.
        Danke für die rasche Antwort.

        Ok. Dann werde ich die Einstellung heute abend mal anpassen.

        🙂

        Grüße aus dem Norden…
        Jörg

  19. Andreas Antworten

    Hallo Stephan,

    Erst Mal Danke für das coole Skript.
    Wäre es möglich das du auch noch die Quartalswerte errechnen könntest?

    Danke und Grüße
    Andreas

  20. Ralf O. Antworten

    Hallo Stephan
    hab da nur ein Problem.
    Der aktuelle Wert heute ist ok ,aber der ersten Eintrag nach der Installation war falsch.
    Jetzt stimmen die anderen Wert ja nicht !!!! z,b Jahresverbrauch kann man die Werte vielleicht anpassen??
    Wie oben beschrieben habe Ich es durch geführt.
    ( Ich würde vielleicht einfach mal hingehen und den Shelly Adapter stoppen, dann die Steckdose neustarten und dann wieder den Adapter zu starten.)

    Gruß Ralf

    • Stephan Autor des BeitragsAntworten

      Hallo Ralf,
      Du kannst einfach das Skript nochmal stoppen, dann den kompletten Datenpunkt:
      javascript.0.ShellyVerbrauch löschen. So fängst Du einfach nochmal von Vorne an 😉

      Gruß,
      Stephan

      • Ralf O. Antworten

        Hallo Stephan
        habe es so gemacht. Habe wohl das gleiche Problem wie Tim.
        die Werte “Energy” und “aktueller_Wert” sind identisch.
        Aber in der Shelly app stimmt der Wert nicht !!!!

        Gruß Ralf

        • Stephan Autor des BeitragsAntworten

          Hallo Ralf,
          Ich kann leider nicht ganz folgen.
          Wenn das Skript läuft, sind die Werte immer identisch, da hier die Prüfung erfolgt, ob der Shelly neugestartet hat.
          Die Werte, die von Bedeutung sind, sind alle außer: alter_wert und aktueller_wert. Diese sind nur für die Berechnung notwendig.

          Gruß,
          Stephan

Schreibe einen Kommentar

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