Hinweis: für dieses Skript steht ein Update zur Verfügung!
Es wird nun auch der Shelly 3EM unterstützt.
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:
Funktion | Beschreibung |
---|---|
Verbrauch heute | abgefragter Verbrauch heute |
Verbrauch gestern | abgefragter Verbrauch gestern |
Verbrauch diese Woche | abgefragter Verbrauch für die gesamte Woche |
Verbrauch letzte Woche | abgefragter Verbrauch für die gesamte letzte Woche |
Verbrauch dieser Monat | abgefragter Verbrauch für den gesamten Monat |
Verbrauch letzter Monat | abgefragter Verbrauch für den gesamten letzten Monat |
Verbrauch dieses Jahr | abgefragter Verbrauch für das gesamte Jahr |
Verbrauch letztes Jahr | abgefragter Verbrauch für das gesamte letzte Jahr |
Verbrauch Gesamt | abgefragter Verbrauch gesamt |
Name | Zugewiesener Name des Shelly zum einfachen Wiederfinden |
Screenshot der verfügbaren Variablen
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.
Hallo Stephan!
Ich bin seit kurzem auch Besitzer eines Shelly plus 1PM, mit dem ich mein PV-Kleinkraftwerk “monitore”.
Leider habe ich nun auch festgestellt, dass die Daten aus der Shelly cloud nicht ohne weiteres “exportiert” werden können, worauf ich bei der Suche auf dich gestossen bin.
Nun meine Frage zu deinem Script, Shelly Adapter etc.:
In welchem Programm unter Windows läuft dein Script?
Was ist dieser “Shelly Adapter” und wo installiert man diesen?
In welcher Form liegen die historischen Daten dann vor?
Ich muss gestehen, dass ich hier irgendwie wissenstechnisch anscheinend rel. weit am Anfang stehe…. na ja, ich komm halt eher von der HW Seite 🙂
Danke schon vorab für deine RM dazu!
LG Helmut
Hallo Helmut,
alle meine Skripte laufen unter ioBroker auf einem Windows oder Linux System.
Gruß,
Stephan
Hallo Stephan,
auch von mir ein herzliches Dankeschön für das veröffentlichen des Skriptes. Ich versuche mich seit ein paar Tagen an der Einrichtung, Überwachung und Abrechnng von 2 Ladepunkten in einem Mehrfamilienhaus unter Berücksichtigung der maximalen Gesamtstromstärke des Hausanschlußes, der dynamischen Lastverteilung zwischen Ladestation und Hausverbrauch und dem sich stündlich änderndem Strompreis bei Tibber, aWattar und Co. Dein Skript hilft mir sehr dabei den Überblick zu bewahren und die Daten für die Grafana Oberfläche aufzubereiten. Ich bin dabei über ein paar Ideen gestolpert die bei PV-Einspeisern mit Deinem Skript evtl. zu falschen Werten führen könnten. Wenn Du Interessen an einem Ideen Austuasch hast, einfach melden.
Viele Grüße
Nico
Hallo Nico,
ich denke, das dein beschriebener Fall eher ein Einzelfall ist.
Gerne kannst Du mir aber deine Ideen mitteilen.
Gruß,
Stephan
Hallo, wollte mich auch mal für das Script bedanken.
Bin durch einen Hinweis eines Users aus dem ioBroker Forum zu dem Script gekommen.
Läuft seit einem Tag und bis jetzt sieht es gut aus, falls ich Fragen habe werde ich mich Melden….
Hallo,
vielen Dank für die Rückmeldung. Freut mich, wenn es funktioniert 😉
Gruß,
Stephan
Guten Morgen,
leider erscheinen unter Relay0 nicht die dokumentierten Datenpunkte, sodass die vom Skript berechneten Werte auch nicht abgelegt werden.
Ich verwende den Shelly-Adapter v6.0.0 und JavaScript v6.1.4. Die Instanzen sind im Grünen Bereich (Lebenszeichen, Verbunden mit Host, verbunden mit Gerät). Der Shelly 3EM liefert die Basisdaten für alle drei Phasen.
Die integration des Skripts in den ioBroker hat problemlos funktioniert. Das Skript läuft ohne Fehler durch, das Protokoll weist keine Fehler aus.
Vermutlich habe ich nur etwas übersehen … ?
Vielen Dank im Voraus
Grüße
A. Hausotter
Hallo Andreas,
welche Datenpunkte werden denn erstellt?
Gruß,
Stephan
hallo Stephan,
wie und wo lade ich mir den Skript runter?
Hallo Markus,
Wie – wo?
Na, auf der Seite, wo Du diesen Kommentar abgesetzt hast 😉
Gruß,
Stephan
An deinem Skript ist mir noch aufgefallen, dass wenn man Stromverbräuche von Geräten die weniger als 1Wh pro 15 Minuten verbrauchen zu loggen versucht der folgende Abschnitt mit if (alter_verbrauch < 1 || alter_verbrauch == null) dazu führt, dass die Verbräuche nicht aufaddiert werden. Vllt. muss da anstatt einer 1 z.B. eine 0.1 hin oder wie siehst du das? Das z.B. eine Lampe ggf. nur 3-4 Watt verbraucht ist ja keine Seltenheit und will ja auch geloggt werden 😉
Hallo Marcel,
Du kannst die Empfindlichkeit gerne modifizieren. Meine Skripte sind global gehalten und anpassbar – somit kann die Empfindlichkeit nach eigenem Ermessen angepasst werden, wenn dies jemand wünscht.
Gruß,
Stephan
Hallo Stephan,
vielen Dank für das Skript.
Läuft bei mir seit längerer Zeit problemlos.
Ich hab neuerdings an meinem Balkonsolar einen
Shelly EM verbaut der mir den Ertrag auch als
negativen Wert ausgibt. Wie es scheint kann dein Skript
das nicht verarbeiten. Alle Werte beim EM stehen auf null.
Kann man das anpassen?
Grüße Florian
Hallo Florian,
der 3EM kann leider nicht richtig rechnen, da er die Werte aufsummiert und nicht getrennt ausgibt.
Das Skript liest nur die Werte des Adapters ein und addiert sie korrekt.
Gruß,
Stephan
Guten Morgen, ich meine nicht den 3EM sondern diesen hier
https://www.shelly.cloud/de/products/product-overview/em-120a-1
Der misst nur 1 Phase bzw. kann 2 einzelne Messen. Das Skript liest ihn ein und erstellt die Datenpunkte, zeigt aber keine (negativen)Werte an.
Gruß Florian
Ah, ok. Den kannte ich noch nicht.
Da müsste man mal schauen, wie dir negativen Werte abgebildet werden können.
Wäre cool wenn dir das mal anschauen könntest. Ich bin für sowas leider zu blöd 🙈
Super Script Danke.
Gibt es eine Möglichkeit auch die Shellys unter mqtt einzubinden?
Kann ich das Script so anpassen das er die Shellys dort findet?
Lieben Gruß und schöne Weihnachten
Hallo Ronald,
wenn die Shelly im Shelly Adapter erscheinen, kann das Skript diese Datenpunkte nutzen.
Einfach die passende Instanz eingeben.
Schöne Weihnachtstage!
Gruß,
Stephan
Hallo Stephan,
ich bekomme von dem Script folgende Fehlermeldungen:
2022-12-21 10:00:00.069 – warn: javascript.0 (32238) getState “shelly.0.SHSW-PM#B915D3#2.Relay0.Energy” not found (3) states[id]=null
2022-12-21 10:00:00.070 – warn: javascript.0 (32238) at script.js.common.Shelly_Verbrauchs-Historie:96:24
2022-12-21 10:00:00.070 – warn: javascript.0 (32238) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:915:29)
2022-12-21 10:00:00.070 – warn: javascript.0 (32238) at Object.shelly_verbrauch_update (script.js.common.Shelly_Verbrauchs-Historie:95:11)
2022-12-21 10:00:00.070 – warn: javascript.0 (32238) at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34)
2022-12-21 10:00:00.070 – warn: javascript.0 (32238) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Job.js:171:15)
2022-12-21 10:00:00.070 – warn: javascript.0 (32238) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:268:28
2022-12-21 10:00:00.070 – warn: javascript.0 (32238) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/Invocation.js:228:7)
2022-12-21 10:00:00.070 – warn: javascript.0 (32238) at listOnTimeout (node:internal/timers:559:17)
2022-12-21 10:00:00.070 – warn: javascript.0 (32238) at processTimers (node:internal/timers:502:7)
2022-12-21 10:00:00.081 – info: javascript.0 (32238) script.js.common.Shelly_Verbrauchs-Historie: Shelly Verbrauch: Verbrauchswerte aktualisiert: 4 | Reboots korrigiert: 0 | Unveränderte Werte: 32
Das betrifft die shelly.0 Datenpunkte. Ich habe das Script auch für shelly.1 am laufen. In der shelly.1 sind 2 1PM Plus und die laufen ohne Probleme.
Hier shelly.0.SHSW-25#68C63AF92F40#2.Relay0.Energy” not found (3) states[id]=null handelt es sich um ein Shelly2.5 eingestellt für einen Rolladen. Ich denke das dadurch das #2 nicht gefüllt wird. Kann ich die Warnungen deaktivieren? Alle 30 sec kommen ~99 Einträge ins Log
Schöne Grüße
Oliver
Hallo Oliver,
in diesem Falle sollte es helfen, das Skript einmal zu stoppen und dann wieder zu starten.
Es wird ein Shelly “Energy” nicht gefunden – das sollte durch Start-/Stopp behoben werden.
Gruß,
Stephan
Hallo Stephan,
ein Stop/Start hat leider keine Veränderung gebracht.
Schöne Grüße
Oliver
Hallo,
das Skript läuft bei mir jetzt ca. 5 Wochen. Bisher waren alle Werte ok.
Hatte bisher einen Verbrauch pro Tag von 10 – 15 kWh. Um Mitternacht hat das Skript dann den Tagesverbrauch auf Verbrauch gestern, letzte Woche, letzter Monat und letztes Jahr verteilt und den aktuellen Tageswert neu angefangen.
Jetzt steht plötzlich der Wert von Verbrauch gestern bei 500 kWh und alle folgenden Werte wie Woche, Monat und Jahr sind auch um 500 kWh höher.
Kann ich den erhöhten Wert von Verbrauch gestern von Hand korrigieren? Wenn ja, wie?
Gruß
Leo
Hallo,
den Wert kannst Du manuell wieder abziehen. Skript stoppen, Datenpunkte editieren und Skript wieder starten.
Hallo, ich hatt schon 2 mal ein ähnliches Problem. Bei mir wurden die beim 3EM die Werte um ca. 2400kwh erhöht. Und zwar für Vormonat und aktueller Monat.
Das editieren funktioniert.
Aber es muss doch dafür einen Grund geben.
Hallo Luigi,
Dazu kann ich leider keinen vergleichbaren Fehler finden. Das Skript holt nur die Werte vom Shelly Adapter und berechnet sie.
Gruß,
Stephan
Hallo Stephan,
seit kurzen habe ich den Fall, das sporadisch der Wert (Total/heute) um 120kwh nach oben korrigiert wird. Bei den einzelnen Phasen sind allerdings keine Auffälligkeiten festzustellen. Ich habe den 3EM, im Verdacht habe ich die Zwangstrennung des Internets, da dies bisher zwischen 1-2Uhr passiert ist. Wie kann ich das verhindern?
Lg Tim
Hallo Tim,
das Skript korrigiert keine Werte – es korrigiert nur Reboots, da diese vom Shelly nicht gespeichert werden.
Hallo Stephan,
ich habe zwei Shelly Instanzen laufen (0+1).
In der 1 sind alle “messenden” Shellys zusammengefasst, dementsprechend habe ich im Script natürlich auch die 1 eingetragen.
Die Tages, Wochen, Monats und Jahressumme wird richtig erfasst.
Allerdings sind die Gestern, letzte Woche usw. immer auf 0 stehen geblieben.
Woran könnte das liegen?
Gruß
Jürgen
Hallo,
Wenn die Werte nicht kommen, scheint etwas mit der Verbindung zu dem Shelly Adapter nicht richtig zu sein.
Bitte hier einmal schauen.
Hallo,
geht mir genauso mit dem kleinen Unterschied, das ich in beiden Instanzen Shelly mit PM habe. .0 ist COAP und .1 MQTT.
Also in die aktuellen Datenpunkte wird alles aufaddiert. Allerdings beim Wechsel von z.B. heute auf gestern bleibt gestern auf “0”. Das gleiche bei den Datenpunkten mit “letzte…”. Laut Log sollte es passiert sein. Wo er sich wohl verschluckt.
2022-12-01 00:00:00.033 – info: javascript.0 (30194) script.js.common.Shelly1.Shelly1_Verbrauch: Shelly Verbrauch: Verbrauchswerte aktualisiert: 2 | Reboots korrigiert: 0 | Unveränderte Werte: 0
2022-12-01 00:00:00.061 – info: javascript.0 (30194) script.js.common.Shelly0.Shelly0_Verbrauch: Shelly Verbrauch: Verbrauchswerte aktualisiert: 7 | Reboots korrigiert: 0 | Unveränderte Werte: 14
2022-12-01 00:00:00.086 – info: javascript.0 (30194) script.js.common.Shelly1.Shelly1_Verbrauch: Shelly Verbrauch: Verbrauchswerte aktualisiert: 0 | Reboots korrigiert: 0 | Unveränderte Werte: 2
2022-12-01 00:00:00.142 – info: javascript.0 (30194) script.js.common.Shelly1.Shelly1_Verbrauch: Shelly Verbrauch: Werte für gestern und heute aktualisiert!
2022-12-01 00:00:00.194 – info: javascript.0 (30194) script.js.common.Shelly1.Shelly1_Verbrauch: Shelly Verbrauch: Werte für diesen und letzten Monat aktualisiert!
2022-12-01 00:00:00.261 – info: javascript.0 (30194) script.js.common.Shelly0.Shelly0_Verbrauch: Shelly Verbrauch: Verbrauchswerte aktualisiert: 0 | Reboots korrigiert: 0 | Unveränderte Werte: 21
2022-12-01 00:00:00.349 – info: javascript.0 (30194) script.js.common.Shelly0.Shelly0_Verbrauch: Shelly Verbrauch: Werte für gestern und heute aktualisiert!
2022-12-01 00:00:00.400 – info: javascript.0 (30194) script.js.common.Shelly0.Shelly0_Verbrauch: Shelly Verbrauch: Werte für diesen und letzten Monat aktualisiert!
Hallo Christoph,
das kann ich leider aus der Ferne nicht sagen. Die Werte, die vorher Null sind, bleiben auch danach Null – wie man in deinem Posting sieht, sind auch 21 unveränderte Verbräuche zu sehen.
Hallo,
nachdem eine Woche rum war, gingen auch die Werte “von Gestern”.
Hat sich also gelöst.
Danke
Guten Morgen,
ich stehe etwas auf dem Schlauch. Vielleicht kannst du mir Klarheit verschaffen.
Im obigen Screenshot, in dem die verfügbaren Variablen als Beispiel gezeigt werden, “Verbrauch Gesamt” heißt für mich, dass es hier den gesamten Wert seit dem Start der Protokollierung/des Skripts zusammengerechnet hat. Darin ist der gesamte Verbrauch seit eben Beginn. Egal ob in diesem oder letzten Jahr, weil eben seit Start die Gesamtrechnung. Soweit verstehe ich das zumindest.
“Aktueller Wert (Messwert neu)” verstehe ich nicht so ganz. Jegliche andere Unterteilungen auf Tag, Woche, Monat, Jahr (jeweils diese/letzte) ergeben Sinn und die Werte sind plausibel.
Ich werde nur nicht schlau zwischen “Aktueller Wert (Messwert neu), das 2390.23 Wh stehen hat und bei “Gesamt” der Wert 2280.26 Wh steht. Der Gesamtwert müsste doch immer und überall der höchste Wert vor allen anderen haben, eben, weil ja alles ununterbrochen summiert wurde/wird. Bei “Aktueller Wert” ist die Summe jedoch höher, was sich für mich widerspricht. Ich verstehe “Aktueller Wert” so, dass wenn der Shelly (aus welchen Gründen auch immer) wieder einmal bei Null aufzeichnet in seiner “Energy”, dass dieser Wert von deinem Script genommen wird. Somit könnte und dürfte es ja niemals dort einen generell höheren Wert ausspucken, wenn der Shelly immer wieder Mal mit Null anfängt.
Habe ich hier eine Denkfehler?
Grüße
René
Hallo Rene,
anscheinend stehst Du wirklich auf dem Schlauch 😉
Der Wert innerhalb der Shelly Ebene
shelly.0.*
ist generell höher, wenn das Skript alle x Minuten läuft – ist ja logisch.Sobald das Skript erneut Werte abholt, wird aktueller_Wert in alter_Wert verschoben und der neue Wert vom Shelly abgeholt und in aktueller_Wert gespeichert.
Die Differenz ist der neue Verbrauch, der dann zu den Verbräuchen addiert wird.
Sobald die das Skript erneut Daten abholt, wird die vorher beschriebene Aktion wiederholt.
Gruß,
Stephan
Hallo Stephan,
Danke noch für die damalige Antwort hier. Ja, da stand ich echt auf dem Schlauch. Mittlerweile funktionierte auch alles reibungslos. (Einige Tage nach dem Kommentar gestartet.) Nun habe ich jedoch nur bei einem einzigen Shelly aktuell ein Problem. Vor einigen Tage habe ich den Shelly-Adapter geupdatet, auf die neuste Version 6.3.1. Seither spuckt das Log ununterbrochen für nur einen einzigen Shelly eine Javascript-Fehlermeldung aus. Betroffen ist einzig nur der Shelly Plus 2 PM. Das ist auch generell der einzigste, dessen Modell ich nutze.
Liegt das am Script-(Code) oder am Shelly-Adapter selbst, dass dort irgendwas durch den Entwickler verändert wurde, wo das Script von dir nicht mehr mitspielen will?
Grüße
René
Hier ein Auszug: (Bis auf “Unveränderte Werte”, ändert sich ansonsten in der immer wiederkehrenden Fehlermeldung nichts.)
———
javascript.0 2023-02-02 23:15:00.004 info script.js.Shelly_Messwerte_Gesamtverbrauch: Shelly Verbrauch: Verbrauchswerte aktualisiert: 2 | Reboots korrigiert: 0 | Unveränderte Werte: 19
javascript.0 2023-02-02 23:15:00.002 warn at processTimers (internal/timers.js:500:7)
javascript.0 2023-02-02 23:15:00.002 warn at listOnTimeout (internal/timers.js:557:17)
javascript.0 2023-02-02 23:15:00.002 warn at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7)
javascript.0 2023-02-02 23:15:00.002 warn at /opt/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28
javascript.0 2023-02-02 23:15:00.002 warn at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/Job.js:171:15)
javascript.0 2023-02-02 23:15:00.002 warn at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34)
javascript.0 2023-02-02 23:15:00.002 warn at Object.shelly_verbrauch_update (script.js.Shelly_Messwerte_Gesamtverbrauch:95:15)
javascript.0 2023-02-02 23:15:00.002 warn at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:915:29)
javascript.0 2023-02-02 23:15:00.002 warn at script.js.Shelly_Messwerte_Gesamtverbrauch:96:32
javascript.0 2023-02-02 23:15:00.002 warn getState “shelly.0.shellyplus2pm#441793ad4580#1.Cover0.Energy” not found (3)
javascript.0 2023-02-02 23:00:00.005 info script.js.Shelly_Messwerte_Gesamtverbrauch: Shelly Verbrauch: Verbrauchswerte aktualisiert: 0 | Reboots korrigiert: 0 | Unveränderte Werte: 21
javascript.0 2023-02-02 23:00:00.003 warn at processTimers (internal/timers.js:500:7)
javascript.0 2023-02-02 23:00:00.003 warn at listOnTimeout (internal/timers.js:557:17)
javascript.0 2023-02-02 23:00:00.003 warn at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7)
javascript.0 2023-02-02 23:00:00.003 warn at /opt/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28
javascript.0 2023-02-02 23:00:00.003 warn at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/Job.js:171:15)
javascript.0 2023-02-02 23:00:00.003 warn at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1595:34)
javascript.0 2023-02-02 23:00:00.003 warn at Object.shelly_verbrauch_update (script.js.Shelly_Messwerte_Gesamtverbrauch:95:15)
javascript.0 2023-02-02 23:00:00.003 warn at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:915:29)
javascript.0 2023-02-02 23:00:00.003 warn at script.js.Shelly_Messwerte_Gesamtverbrauch:96:32
javascript.0 2023-02-02 23:00:00.002 warn getState “shelly.0.shellyplus2pm#441793ad4580#1.Cover0.Energy” not found (3)
javascript.0 2023-02-02 22:45:00.004 info script.js.Shelly_Messwerte_Gesamtverbrauch: Shelly Verbrauch: Verbrauchswerte aktualisiert: 0 | Reboots korrigiert: 0 | Unveränderte Werte: 21
Hallo Stefan, erst mal Danke für das Script !!!!
Bin noch ziemlich am Anfang ……..ich abe das Script eingebunden und es läuft auch, jedoch finde ich keine Datenpunkte ???
Sorry bin schon noch Newbie
Eventuell kannst Du mir ja helfen…
Danke Heinz
Hallo Heinz,
die Datenpunkte befinden sich unter:
javascript.0.ShellyVerbrauch
in den Objekten von ioBroker.Gruß,
Stephan
Hallo Stephan,
vielen Dank hab#s jetzt auch gefunden(Tomaten auf den Augen ….)
Jetzt hätte ich noch eine Frage: wo werden denn Deine berechneten Werte gespeichert ?? hab den “Messwert aktuell” in der Influxdb gespeichert um ein Balkendiagramm zu erstellen……..klappt alles einwandfrei, jedoch wenn der Shelly neu bootet ist der Wert natürlich auf 0….klar……wenn ich nun den Wert “Gesamter Vebrauch des Shelly” nehmen würde, dann würde es auch funktionieren, doch bleibt dieser Wert erhalten wenn ich zum Beispiel das Script stoppe oder wenn der Raspberry neu bootet ?????
Vielen Dank und Grüße
Heinz
Hallo Heinz,
das Skript erkennt, wenn ein Shelly neu startet und berechnet den Wert dann neu. Somit ist der Wert “heute” immer genau – wie es der Shelly erlaubt.
Gruß,
Stephan
Hallo, erstmal Danke für Dein spitzen Script!
Ich bekomme es einfach nicht hin, in Dein Script noch eine stündliche Auswertung einzubauen…
Könnte mir hier jemand bitte helfen, bzw. die passenden Codeschnipsel bereitstellen?
Danke!
Bernd
Hallo Stephan,
das mit der Änderung scheint nur auf den ersten Blick geklappt zu haben, denn die aufsummierten Verbrauchs- bzw. Erzeugerwerte sind zu hoch.
Weißt Du, mit welchen shelly-Geräten das Skript zusammenspielt, weil sie Verbrauchswerte liefern? Der 1PM scheinbar nicht, weil da ja die Variable Energie 0 ist und bleibt….
Im Skript schreibst Du ja:
// Einige Shelly haben keine Verbrauchswerte (noch nicht)
Die Frage ist jetzt, welche denn Verbrauchswerte liefern …. Weißt Du evtl., ob das beim Pro 1PM der Fall ist?
Gruß
Thomas
Hallo Stephan,
das mit der Änderung scheint nur auf den ersten Blick geklappt zu haben, denn die aufsummierten Verbrauchs- bzw. Erzeugerwerte sind zu hoch.
Weißt Du, mit welchen shelly-Geräten das Skript zusammenspielt, weil sie Verbrauchswerte liefern? Der 1PM scheinbar nicht, weil da ja die Variable Energie 0 ist und bleibt….
Im Skript schreibst Du ja:
// Einige Shelly haben keine Verbrauchswerte (noch nicht)
Die Frage ist jetzt, welche denn Verbrauchswerte liefern …. Weißt Du evtl., ob das beim Pro 1PM der Fall ist?
Gruß
Thomas
Hallo Thomas,
alle Shelly mit einem PM (PowerMeter) im Namen haben die Leistungsmessung. Des Weiteren die Plugs und einige mehr.
Hallo Stephan,
das hätte ich auch gedacht, aber in einer Leihstellung einer Balkonanlage wurde ein shelly 1PM eingebaut, und der liefert definitiv nur die aktuelle Erzeugung, was mich fast zur Verzweifelung gebracht hat.
In der festen Installation der Balkonanlage wird ein shelly Pro 1PM eingebaut, mit dem klappt das auch mit Deinem Skript (habe ich schon getestet), weil der auch unter Energie Werte liefert.
Damit hat sich mein Problem geklärt.
Auch von mir vielen Dank für das Skript, das ist sehr hilfreich.
Gruß
Thomas
Hallo Stephan,
in den Zeilen 44+ 45 finde ich diese Befehle:
// Datenpunkte der Shelly (!!! Bitte nicht ändern !!!)
var shellyDps = $(‘state[id=’ + shelly_dp + ‘.*.*.Energy]’);
Die Variable
shelly.0.SHSW-PM#C45BBE77FBD8#1.Relay0.Energy
ist aber immer 0, das würde Deine Antwort bestätigen, warum keine Werte übernommen werden.
Die aktuelle Erzeugung steht bei mir aber in der Variable Power
shelly.0.SHSW-PM#C45BBE77FBD8#1.Relay0.Power
Daraufhin habe ich das Script in Zeile 45 geändert (auch wenn man das nicht machen sollte 🙂 ), nun werden auch Änderungen erkannt und die Variablen unter javascript.0.ShellyVerbrauch gefüllt 🙂
Verbaut wurde ein shelly 1PM und mich wundert, das bei keinem anderen bisher dieses Problem aufgetaucht ist, das Teil ist doch bei vielen im Einsatz.
Was mich noch irritiert sind solche Meldungen (die Ausgabe der Variableninhalte wurde im Script eingefügt)::
12:33:00.015 info javascript.0 (734) script.js.Shelly_Verbrauchs-Historie_für_Tag_Woche: shelly_verbrauch: 80.56
12:33:00.016 info javascript.0 (734) script.js.Shelly_Verbrauchs-Historie_für_Tag_Woche: aktueller_wert: 77.5
12:33:00.018 info javascript.0 (734) script.js.Shelly_Verbrauchs-Historie_für_Tag_Woche: Shelly Verbrauch: Verbrauchswerte aktualisiert: 1 | Reboots korrigiert: 0 | Unveränderte Werte: 0
12:34:00.015 info javascript.0 (734) script.js.Shelly_Verbrauchs-Historie_für_Tag_Woche: shelly_verbrauch: 78.55
12:34:00.015 info javascript.0 (734) script.js.Shelly_Verbrauchs-Historie_für_Tag_Woche: aktueller_wert: 80.56
12:34:00.026 info javascript.0 (734) script.js.Shelly_Verbrauchs-Historie_für_Tag_Woche: Shelly Verbrauch: Verbrauchswerte aktualisiert: 0 | Reboots korrigiert: 1 | Unveränderte Werte: 0
Es hat kein Reboot stattgefunden und der Wert der aktuellen Erzeugung ist sauber mit Werten gefüllt und die Summen werden auch korrekt berechnet…
Hast Du dazu noch eine Idee?
Ansonsten freue ich mich jetzt einfach über ein tolles Script, was meine Anforderungen zur Datensammlung erfüllt, vielen Dank für das Script. Leider sind die Mikrowechselrichter von Balkon-PV-Anlagen nicht sehr kommunikativ …..
Vielleicht hilft meine Analyse auch anderen.
Viele Grüße
Thomas
Hallo Stephan,
Dein Script hat mein Interesse geweckt, um die Erzeugung einer Balkon-PV-Anlage zu monitoren.
Nachdem der shelly-Adapter eingerichtet ist erhalte ich auch Daten vom shelly unter shelly.0.SHSW-PM#C45BBE77FBD8#1.Relay0.Power.
Das Script wurde angelegt und gestartet, die Datenpunkte wurden angelegt und das Script läuft ohne Fehler, aber die Datenpunkte wie z. B. javascript.0.ShellyVerbrauch.SHSW-PM#C45BBE77FBD8#1.Relay0.aktueller_wert bleiben auf 0
Der shelly wurde anscheinend erkannt, darauf deutet ja der Name der Datenpunkte hin.
Im Protokoll findet sich die Meldung:
script.js.Shelly_Verbrauchs-Historie_für_Tag_Woche: Shelly Verbrauch: Verbrauchswerte aktualisiert: 0 | Reboots korrigiert: 0 | Unveränderte Werte: 1
Da alles sauber läuft und keine Fehler/Warnungen protokolliert werden habe ich keine Idee, warum die Werte nicht aktualisiert werden.
iobroker wurde frisch installiert, daher ist die Umgebung sowie alle Adapter auf dem neuesten Stand.
Hast Du eine Idee, was ich noch prüfen/ändern soll?
Vielen Dank im Voraus
Gruß
Thomas
Hallo Thomas,
wenn die Werte sich noch nicht ändern, kommen auch keine neuen Werte rein. Somit kann das Skript keine anderen Werte darstellen.
Gruß,
Stephan
Hallo, vielen Dank für dieses Skript!
Eine frage: Ich hätte die Datenpunkte gerne unter 0_userdata.
Wenn ich im Skript die Zeile:
extendObject(“javascript.0.” + shelly_DP_Name_Main(id), {
abändere in:
extendObject(“0_userdata.0.” + shelly_DP_Name_Main(id), {
dann legt er mir nur die Shelly Ordner an, aber in den Ordnern keinen einzigen Unterordner / Datenpunkt.
Woran liegt das? Kannst du da helfen?
LG
Hallo,
Dazu müsste man viele Funktionen des Skriptes umbauen. Meine Skripte legen die Punkte unter JavaScript an – da gehören sie hin.
Hallo Stephan,
erst einmal vielen Dank für das Bereitstellen dieses tollen Scripts!
Ich habe ein kleines Problem… und zwar hatte ich ursprünglich nur eine Shelly Instanz laufen (CoAP), nun sind noch zwei neue Shelly plus dazugekommen, wofür ich eine weitere Instanz laufen habe(MQTT).
Dementsprechend habe ich jetzt auch zwei mal das Skript laufen, einmal mit DP “shelly.0” und einmal mit “shelly.1”.
Allerdings werden mir, wahrscheinlich seit dem beide Instanzen protokolliert werden, keine Werte mehr für “gestern” angezeigt, diese stehen immer auf “0”.
Hast du evtl. eine Idee woran das liegen könnte?
Gruß
Frieder
Hallo Frieder,
hast Du denn auch die Ordner unterschiedlich gehalten?
Gruß,
Stephan
Hi Stephan,
danke für den Hinweis, habe für das zweite Skript den Ordernamen geändert, sodass die Shellys aus der zweiten Instanz jetzt ihren eigenen Ordner haben.
Ich dachte das funktioniert gesammelt in einem Ordner, da jeder Shelly ja wieder seinen eigenen Unterordner hat.
Nun funktioniert es jedenfalls wieder, besten Dank!!!
Gruß
Frieder
Hallo Stephan,
ich möchte mich an der Stelle recht herzlich für das Script bedanken. – Das Script wurde direkt in den ioBroker eingebunden und läuft ohne Probleme.
Danke Gruß
Jan
Hallo DerJan,
super, danke für die Rückmeldung!
Gruß´,
Stephan