NEWS
Shelly Verbrauchsdaten direkt aus der Ecoflow Cloud holen
-
Ich habe zwei Tage gebraucht, um das ecoflow-connector-script-zur-dynamischen-leistungsanpassung zu verstehen.
Danke an Markus Walber @Waly_de für die ganzen Grundlagen-Arbeit und die vielen Features in seinem Skript.
Ich habe mir dann einen Shelly 3EM zugelegt und wiederum einen Tag gebraucht, um den einzubauen und mit dem Shelly Adapter im IOBroker zusammenzubringen. IOBroker läuft bei mir auf einem ur-alten MacBook Air, mit altem System und entsprechend älterem Docker.
Zuguterletzt habe ich es dann hingekriegt, dass Shelly über MQTT mit dem Shelly Adapter im IOBroker im Docker redet. Das bringt allerdings mit sich, dass Shelly nicht mehr mit der Shelly Cloud reden kann.
(Mit erheblichem Terminal-Fu habe ich inzwischen IOBroker auch nativ, ohne Docker, auf dem alten MacBook Air und auf einem M2 MacBook Air zum Laufen gebracht)Am nächsten Tag begann ich nachzudenken
Seit kurzem unterstützt EcoFlow eine Integration von Shelly Geräten, dies es zumindest erlaubt, die Verbrauchsdaten der z.B. Shelly 3EM in der EcoFlow App zu sehen. Es gibt noch keine Unterstützung, damit wirklich direkt den PowerStream zu steuern, aber das wird wohl früher oder später kommen. Wenn es nun aber doch so ist, dass praktisch alles was die EcoFlow App zeigt, vom EcoFlow MQTT Server kommt, dann könnte es doch eigentlich auch sein, dass man die in der App angezeigten Shelly Daten vom EcoFlow MQTT Server holen kann. Dann könnte mein Shelly 3EM in der Shelly-Cloud bleiben. Der Shelly-Adapter vom IOBroker könnte komplett aussen vor bleiben und - zumindest mit Shelly Geräten könnte alles komplett über die EcoFlow Cloud abgehandelt werden.Also begann ich zu experimentieren
Ich konnte wirklich Shelly in EcoFlow als Plattform von Drittanbietern verknüpfen und dann meinen Shelly 3EM als verknüpftes Gerät auswählen. (Anleitung folgt unten)
Der erscheint dann in der App bei Geräten und wenn man ihn anklickt erscheinen die entsprechenden Verbrauchswerte.
Dabei hat sich EcoFlow nur den Spaß erlaubt, dass das Ganze nur funktioniert, wenn der Schalter im Shelly 3EM eingeschaltet wird. Sonst erscheinen in der App nur lauter Nullen. Ich weiß nicht, was die sich dabei gedacht haben; der Schalter bedient ein physisches Relais im Shelly 3EM, es ist nicht irgendein Software-Schalter im API. Jedenfalls, solange der Schalter im Shelly an ist, erscheinen in der EcoFlow App die gleichen Zahlen wie in der Shelly App.
In der EcoFlow App erscheint der Shelly 3EM nun bei „Geräten“ mit einer eigenen Pseudo-Seriennummer.
Nun habe ich diese Seriennummer genommen und im Skript von @Waly_de ein SmartPlug mit dieser Seriennummer konfiguriert.Und siehe da
Plötzlich erscheinen in den IOBroker Objekten unter0_userdata.0.ecoflow.app_device_property_<ecoflow-seriennummer>.data.params
Daten, die im Großen und Ganzen denen entsprechen, die der Shelly-Adapter unter
shelly.0.SHEM-3#<shelly-seriennummer>#1
ablegt. Das Zusammenrechnen der 3 Phasen wurde auch schon erledigt, und unter
0_userdata.0.ecoflow.app_device_property_<ecoflow-seriennummer>.data.params.total_power
erscheint genau der Hausverbrauchs-Wert den wir brauchen! Es geht! Und das ganz ohne den Shelly Adapter im IOBroker und dessen Port-Weiterleitungen im Docker, und ohne Störung der Shelly Cloud.
Beim allerersten Lauf des Skripts wird das Objekt mit den Shelly States überhaupt erst angelegt, dann wenn das erste Mal Daten vom EcoFlow-Shelly reinkommen. Vorher existiert das Objekt noch nicht. Es gibt nun eine Stelle im Skript, die anfänglich die History für dieses Objekt anlegt. Das kann es beim allerersten Lauf aber noch nicht tun, weil das Objekt noch nicht existiert. Daher funktioniert das Skript beim allerersten Aufruf noch nicht. Abhilfe: Beim allerersten Lauf des Skripts abwarten, bis das Objekt mit den Shelly Daten auftaucht. Dann einfach das Skript noch einmal re-starten, dann funktioniert es! Es erscheinen zwar immer wieder Warnungen „Invalid selector: selector must be a string but is of type undefined“, das tut der Funktion aber keinen Abbruch.
Fazit
Es ist also möglich, den von Shelly gemessenen Stromverbrauch direkt mit den Ecoflow-Daten zu holen.
Das heisst, damit ist eine dynamische Anpassung möglich, komplett ohne den IOBroker Shelly Adapter und dessen nicht unbedingt triviale Konfiguration (insbesondere in einem nicht-Linux-Docker).
Ecoflow holt sich die Daten aus der Shelly Cloud. Damit gibt es dann auch keinen Konflikt mehr zwischen entweder Shelly-Adapter mit MQTT oder Shelly Cloud.
Der kontrollierende IOBroker muss dafür nichtmal zwingend im Heimnetzwerk laufen!Anleitung
- es wird vorausgesetzt, dass der Shelly 3EM mit der Shelly Cloud verbunden ist
- und eine Installation von IOBroker mit den Adaptern „History“ und „Skriptausführung“ entsprechend der Anleitung zum Skript von @Waly_de
EcoFlow App - In der EcoFlow App unter „Profil“ auf „Verbindung von Plattformen von Drittanbietern“ gehen
- dort „Shelly“ auswählen (dieser Tage ist noch „Tapo“ hinzugekommen, da ist man wohl fleißig bei EcoFlow)
- den nächsten Schritten folgen, mit Angabe der Zugangsdaten zur Shelly Cloud. (Ich habe beide Berechtigungen erteilt, entscheidend ist wohl nur die Leseberechtigung)
- das Gerät auswählen, das den Hausstromverbrauch misst, und alles bestätigen
- in der EcoFlow App unter „Geräte“ taucht dann das Gerät neu auf
- die von EcoFlow vergebene Seriennummer bei diesem Gerät notieren
- auf das Gerät tippen - die Verbrauchsdaten erscheinen!
- wenn die Werte alle 0 sind oder sich nicht ändern: In der Shelly App oder in der Shelly Cloud den Schalter einschalten; evtl. muss man auch ein bisschen abwarten, bis die Werte sich durch all die Clouds gewühlt haben.
IOBroker - Im Skript von @Waly_de eintragen:
SmartmeterID: "0_userdata.0.ecoflow.app_device_property_<notierteSeriennummer>.data.params.total_power", // State, der den aktuellen Gesamtverbrauch in Watt anzeigt
- und bei den „seriennummern“ einen Abschnitt für eine SmartPlug, mit der notierten Seriennummer:
{ seriennummer: "<notierteSeriennummer>“, name: "Shelly 3EM", typ: "SM", subscribe: true, // "true": Alle Daten für dieses Gerät werden angefragt. "false": Es werden keine Statusdaten abgefragt },
- das Skript einmal starten und in den IOBroker Objekten nachsehen, bis
0_userdata.0.ecoflow.app_device_property_<notierteSeriennummer>
erscheint.
- dann das Skript noch einmal beenden und neu starten
- jetzt sollte es beginnen, den PowerStream entsprechend der Konfiguration mit den Shelly-Daten zu regulieren; auch hier kann es wieder ein bisschen dauern, bis alle Daten eingetrudelt sind
Das vereinfachte Skript
Mein persönlicher Anwendungsfall ist einfach nur einen einzigen PowerStream steuern, auf Grundlage der Daten eines Shelly 3EM.
Da kommt mir das vereinfachte Skript aus automatisierte-einspeisung-für-powerstream von @cptmozz (ebenfalls vielen Dank!) genau recht, abgespeckt auf genau diesen Anwendungsfall, den wahrscheinlich die meisten so haben: eben genau einen PowerStream aufgrund einer Hausstrom-Messung zu steuern.
Auch dieses Skript lässt sich mit den Shelly Verbrauchsdaten direkt von EcoFlow verwenden: Indem man das Skript von @Waly_de mit ausgeschalteter Regulation laufen lässt, liefert es die Shelly-Daten ins oben angegebene Objekt. Dieses kann man im CptMozz Skript konfigurieren und dann beide Skripte gleichzeitig laufen lassen. Dann liefert das @Waly_de - Skript die Verbrauchsdaten und das @CptMozz - Skript steuert! Das funktioniert zwar, ist aber nicht schön und könnte viel ressourcenschonender ablaufen, wenn das Abrufen der Shelly-Daten ins @CptMozz - Skript integriert wird. Dann müssen nicht zwei Skripte parallel die EcoFlow Cloud kontaktieren. Ich denke, das werde ich mir am Wochenende mal vornehmen.(Viel Vergnügen beim Experimentieren - ich selber habe nur eine Shelly 3EM installiert und kann keine Aussagen zu anderen Shelly-Produkten in der Ecoflow Integration treffen.)
-
@dpleiss seit ganz Kurzem hat Ecoflow wohl diese unselige Abhängigkeit vom Schalter des Shelly 3EM korrigiert. Jetzt kommen die Daten immer, unabhängig davon, ob das Relais an- oder aus-geschaltet ist.
-
@dpleiss
Hast du eine Chance das ankommende Telegramm im JSON Format zu posten? Dann würde ich die shellys auch im ecoflow-mqtt Adapter mit allen Werten als Struktur und Gerät mit aufnehmen. -
@foxthefox die Shelly Daten kommen gleich als JSON in der MQTT Message an, müssen also nicht erst decodiert werden.
Hier ein Beispiel:
shelly.json
Der Wert der uns interessiert ist params.total_power - Angabe in Watt. -
@dpleiss
Danke.Da wird ganz schön viel verschickt und auch in einer etwas anderen Struktur, aber kein Problem.
Wie oft kommen die Daten rein? alle 1sec?
-
Eine tolle Idee, mir gefällt der Ansatz, dass ein Smartplug simuliert wird und nicht die Grundlast verstellt wird.
Würde es glatt ausprobieren, aber ich nutze den Shelly Pro, der wird noch nicht von EcoFlow unterstützt.
Bis dahin läuft das Script von Markus sehr gut.
-
@bastib
ein fake-shelly wäre der Hit, man könnte die Leistungen der Verbraucher zusammenfassen und darüber zu, powerstream als variable Last injizieren.
Dazu müsste allerdings auch mehr als die Anzeige bei EF implementiert sein. -
Ich habe den shelly als Gerät nun im ecoflow-mqtt Adapter verfügbar gemacht.
Wenn es dir möglich wäre, würde mich über einen Test deinerseits freuen.
Ich habe leider kein Shelly3EM zum messen der Leistung an der Zuleitung.Edit:
Adapter version wäre 0.0.32 -
@bastib hier wird kein Smartplug simuliert, auch hier wird die Grundlast eingestellt.
Der Fall liegt bei der Messung des gesamten Wohnungs-Strombedarfs (egal ob mit IOBroker Shelly Adapter oder ohne) auch anders, weil der ja durch die Einspeisung verringert wird. Die Einspeisung ist dynamisch so nachzuregeln, dass im Idealfall vom Shelly 0 gemessen wird. Daher kann so ein Shelly o.ä. nicht einfach genau so wie ein Smartplug verwendet werden. -
@foxthefox ich glaube es kommen auch nur Daten rein wenn sie sich ändern.
-
@foxthefox said in Shelly Verbrauchsdaten direkt aus der Ecoflow Cloud holen:
ecoflow-mqtt Adapter
good job!
-
@dpleiss sagte in Shelly Verbrauchsdaten direkt aus der Ecoflow Cloud holen:
@foxthefox said in Shelly Verbrauchsdaten direkt aus der Ecoflow Cloud holen:
ecoflow-mqtt Adapter
good job!
Danke für den Test!
Die Basis ist geschaffen, wenn jemand einen ShellyEM oder ShellyPlug mit EF gekoppelt hat, dann bräuchte ich wieder ein JSON.
Anpassungen dürften dann nur gering sein. -
Wie groß ist den die Regellatenz des Shelly im Vergleich zum Smartplug, kann hier jemand eine Aussage treffen?
Meinem Verständtnis nach läuft ja alles über die Cloud bei resultierend hoher Latenz und teilweise unzuverlässiger Response wenn die EF Server mal wieder überlastet sind.
Eine Möglichkeit einen PS direkt lokal über NW anzusteuern gibt es ja nicht, oder?
-
@ibrokeo Ja, läuft alles über die Cloud. Eine Möglichkeit zur direkten Ansteuerung im lokalen Netz ist mir nicht bekannt.
-
Moini,
ich bin noch ziemlich neu bei ioBroker...
aktuell nutze ich die Daten meines Tibber-Pulse in Verbindung mit dem Script zur dynamischen Einspeisung im ioBroker. Das funktioniert soweit ganz gut, aber wenn Tibber irgendwelche Updates macht, bekomme ich keine Daten. Ausserdem erscheint mir der Lesekopf etwas träge...
Ich habe mir eine Shelly 3em gekauft und installiert. Die Daten scheinen deutlich besser und schneller zu sein.
Ich würde gerne die Daten meiner Shelly 3em im io-Broker zum Reglen meiner Powerstreams verwenden.Leider bekomme ich das nicht hin, die Zeile für den aktuellen Stromverbrauch zeigt sich bei mir nicht...
Die direkte Regelung von Ecoflow funktioniert auch sehr gut, hat aber auch Nachteile. Im ioBroker werden die Akkus im Serialmodus nach ihrem Ladestand entsprechend entladen, was zu einem einheitlicheren Akkustand führt. Bei Ecoflow werden alle Akkus gleich belastet, so dass der Akku mit dem geringsten Akkustand als Erstes leer ist.
Wer hat Tips für mich?
Liebe Grüße aus dem Norden
Christian
-
@educatdcc
Das hier beschriebene Auslesen ist für den Fall, dass der Shelly an EF gekoppelt ist. Dann taucht er als topic bei EF mit auf und kann somit abonniert werden.
Für alle anderen Fälle entweder Shelly Adapter oder den MQTT im Shelly nutzen. -
@dpleiss
Hallo,in meiner ECOFLOW App ist die Serienummer von dem Shelly zu lang. Es wird mir eine Nummer angezeigt und irgendwo mittig wir die Nummer mit Punkten ... aufgefüllt. Wie bekommt man hier jetzt die komplette Seriennummer angezeigt?