NEWS
Energy v. gewollt mal abwesendem Shelly Plug S erfassen
-
Hallo in die Runde und wahrscheinlich das absolute Newbie-Problem...:
Umfeld: iobroker mit vis auf Raspi4, Solaranlage auf dem Wohnmobil (mit eigenem Gridwechselrichter), AC-seitig mit Shelly Plug S, der eigentlich auch brav "Energy" aufsummiert. Das WLAN reicht bis auf den Stellplatz, Netzanschluss des Fahrzeugs über steckbare Leitung.
Problem: Ab und an wird das Fahrzeug mal tagsüber benötigt. Wird jetzt der Plug S vom Stromnetz getrennt, dann verliert er den "Energy"-Wert und fängt nach dem Reboot diesen bei 0 wieder neu an aufzusummieren. Die Shelly-Cloud kriegt es hin, die Werte halbwegs korrekt auf den Tageszählwert zu rechnen - aber das nützt mir im iob erstmal nichts.
Der iob bekommt bspw. als letzten Datenpunkt "223 Wh" vom Shelly-Adapter, dann geht der Shelly wegen Stromausfall (Stecker ziehen vor Abfahrt) ohne Warnung offline. Kommt das Fahrzeug jetzt zurück und der Stecker wird wieder eingesteckt, dann kommt als neuer Wert "0 Wh" vom Shelly, was die Berechnung des Tages-Solarertrages doch stark behindert.
Meine Idee wäre jetzt, den Wert zyklisch (60s) in einen Datenpunkt zu schreiben, dann bei "online=false" den Wert einmalig in einen anderen Datenpunkt zu addieren (und an der Quelle zu nullen), der Mitternacht (nach Übernahme in "Energy_Bus_gestern") genullt wird und bei "online=true" (Rückkehr des Busses) aus diesem Additions-Hilfsdatenpunkt in den regulären "Energy_Bus_heute" zurückzuschreiben.
Funktioniert das so? Hat schon mal jemand dieses Problem gehabt und gelöst?
Grüße von Mirco, der zwar recht fit mit Shellys ist, aber im iob noch auf den ersten paar Metern ist...
-
@rallyecom sagte: dann kommt als neuer Wert "0 Wh" vom Shelly
Das kann man prüfen und den aktuellen Zählerstand in einen Startwert schreiben, auf den der Shelly-Wert addiert wird.
Wert und vorheriger Wert(unter "Trigger"):
-
Gesetz dem Fall du bist ein wenig firm mit plain Javascript, kannst du auch den folgenden Code-Snippet verwenden
var shellyEnergyId = "shelly.0.[...].Energy"; var solarGesamtId = "0_userdata.0.solar.gesamt"; var solarTempId = "0_userdata.0.solar.zwischenwert"; createState(solarGesamtId, 0, {name: "PV-Erfassung Gesamt [Wh]", desc: "PV-Erfassung Gesamt [Wh]", type: "number", read: true, write: true, role: "value"}); createState(solarTempId, 0, {name: "PV-Erfassung Zwischenwert [Wh]", desc: "PV-Erfassung Zwischenwert [Wh]", type: "number", read: true, write: true, role: "value"}); // Workaround für die Erfassung der PV Gesamtenergie on({id: shellyEnergyId, change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (value < oldValue) { // Letzten Gesamtwert zwischenspeichern var totalValue = getState(solarGesamtId).val; setState(solarTempId, totalValue); } // Neuen Gesamtwert berechnen var tempValue = getState(solarTempId).val; setState(solarGesamtId, tempValue + value); });
Du kannst natürlich auch das Blockly-Skript von @paul53 verwenden, allerdings birgt das die Gefahr, dass das nicht immer 100% richtig reagiert. Ich hatte es anfangs auch sorum (der "sonst"-Zweig tritt nur ein, wenn Wert exakt 0 (oder negativ) ist) und habe leider ein paar Momente verpasst, weil der Shelly als nächsten Wert manchmal 0,0023 o.ä. als ersten Wert gemeldet hat. Für meine Graphen lasse ich dann die Variable "solarGesamtId" historisieren und einspeisen.
Hoffe das hilft ein wenig weiter.
-
@stefi sagte: paar Momente verpasst, weil der Shelly als nächsten Wert manchmal 0,0023 o.ä. als ersten Wert gemeldet hat.
Habe es oben berücksichtigt.
-
@paul53 said in Energy v. gewollt mal abwesendem Shelly Plug S erfassen:
@stefi sagte: paar Momente verpasst, weil der Shelly als nächsten Wert manchmal 0,0023 o.ä. als ersten Wert gemeldet hat.
Habe es oben berücksichtigt.
Sehr cool
-
@paul53 das sieht schon recht lecker aus, werde ich morgen mal testen. In der Tat könnten Startwerte über null auftreten, nämlich dann, wenn der Wechselrichter nach "Stecker rein" schneller mit der Produktion beginnt wie das WLAN mit dem connect establishing fertig ist.
Nice ist, dass dein Skript nicht nur den Fall "Strom und WLAN weg" erfasst, sondern auch einen Geräteneustart allgemein. Dein Skript lässt sich für jeden "Zähl-Shelly" verwenden, der bei Reboot Demez bekommt...
Danke!
-
@paul53 vielen Dank erst mal auch für deine ganzen anderen Scripte. Sehe deinen Namen hier an jeder Ecke
Ich habe es mal nachgebaut. Was mich wundert wieso vor "Wert" und "vorheriger Wert" ein weißer Pfeil ist. Eventuell gabs da mal nen Update ? Ich hoffe meins funktioniert trotzdem
-
@romestylez sagte in Energy v. gewollt mal abwesendem Shelly Plug S erfassen:
Eventuell gabs da mal nen Update
vor Jahren!
diese Bausteine wurden in Beispiel-Blocklies sonst für selbst erstellte Variablen gehalten.