NEWS
ecoflow-connector-Script zur dynamischen Leistungsanpassung
ecoflow-connector-Script zur dynamischen Leistungsanpassung
-
Powerstream nicht mehr mit Ecoflowserver verbunden
Hintergrund: Betreibe einen Powerstream mit Delta 2 Max / Skript von @Waly_de auf 1.1.2 (super Job!!!)/ abonniert nur für Powerstream und Steuerung disabled / habe aufgrund einiger Besonderheiten meiner Heimanlage eine eigene Nulleinspeisung programmiert. Nutze aber die Daten der Powerstream und das Setzen von Werten für Einspeiseleistung der PS etc.Was passiert?
Morgens läuft alles gut an, aber irgendwann im Laufe des Tages verliert die Powerstream ihre WLAN - Verbindung. In der App nur noch über Bluetooth zu erreichen. Dh. kein Update der Daten im iobroker und das Rausschreiben von Werten an die Powerstream gelingt natürlich auch nicht.
Abhifle schafft für kurze Zeit ein Disconnect der Powerstream vom Netz (Verbindung zu Panels und Batterie bleibt bestehen). Dann ist die Powerstream wieder online, überträgt und empfängt Daten. Verbinde ich die PS wieder mit dem Netz, verliert sie nach ein paar Minuten wieder den Kontakt zum WLAN.Im Log findet sich in dann folgende Einträge:
14:03:00.245 error javascript.0 (3704815) script.js.common.Ecoflow_JS_main: Fehler beim Veröffentlichen der MQTT-Nachricht: 14:03:01.477 info javascript.0 (3704815) script.js.common.Ecoflow_JS_main: Verbunden mit dem Ecoflow MQTT-BrokerNach einigen weiteren Minuten verschwindet zwar die Fehlerzeile, jedoch wird ca. im Minuten Abstand
14:09:32.337 info javascript.0 (3704815) script.js.common.Ecoflow_JS_main: Verbunden mit dem Ecoflow MQTT-Brokerweiter ausgegeben.
Am nächsten Tag geht es wieder von vorne los...Irgendwie schräg. Eine Ahnung auf was das hindeuten kann?Es gibt ja einige Adaptoren wie z.B. Tuya/Smartlife, die haben Probleme, wenn man gleichzeitig über Cloud und MQTT direkt zugreift. Das ist hier aber nicht der Fall.
Um einen Hinweis wäre ich dankbar.
Ich bin mir nicht sicher ob es WLAN instabilität ist, oder ob es nicht doch etwas mit dem Protokoll zu tun hat.
Ich bau grad ein paar node-red Knoten auf um Power Stream und Power Station einzulesen.
Was mir dabei auffällt, ist das sich bei mir wohl nichts von WLAN trennt, sondern das Senden einfach aufhört. Das merkt man recht gut bei der Powerstation, da die viel mehr am plaudern ist.
Obwohl ich auch regelmäßig mal ein "latestQuatas" anfrage, kommt manchmal nach einer gewissen Zeit nichts an. Gehe ich dann mit der App auf das Gerät, gehts wieder los, WLAN ist demzufolge noch an.
Ich vermute eher, daß hier bei Telegrammen, die ein ACK=1 haben, auch ein ACK zu senden ist.
Ich hatte mal probehalber den .../set der powerstation im debug, da kommt eine Unmenge an gleichartigen Telegrammen rein, scheinen die ACK zu sein.Gruß
Klaus -
Ich bin mir nicht sicher ob es WLAN instabilität ist, oder ob es nicht doch etwas mit dem Protokoll zu tun hat.
Ich bau grad ein paar node-red Knoten auf um Power Stream und Power Station einzulesen.
Was mir dabei auffällt, ist das sich bei mir wohl nichts von WLAN trennt, sondern das Senden einfach aufhört. Das merkt man recht gut bei der Powerstation, da die viel mehr am plaudern ist.
Obwohl ich auch regelmäßig mal ein "latestQuatas" anfrage, kommt manchmal nach einer gewissen Zeit nichts an. Gehe ich dann mit der App auf das Gerät, gehts wieder los, WLAN ist demzufolge noch an.
Ich vermute eher, daß hier bei Telegrammen, die ein ACK=1 haben, auch ein ACK zu senden ist.
Ich hatte mal probehalber den .../set der powerstation im debug, da kommt eine Unmenge an gleichartigen Telegrammen rein, scheinen die ACK zu sein.Gruß
Klaus@foxthefox naja, ich habe manchmal pingzeiten zur powerstream von 5 sekunden… Währen der AP von einer 'excellenten' Verbindung mit 30 dB spricht. Irgendwas ist da oberfaul.
-
Ich bin mir nicht sicher ob es WLAN instabilität ist, oder ob es nicht doch etwas mit dem Protokoll zu tun hat.
Ich bau grad ein paar node-red Knoten auf um Power Stream und Power Station einzulesen.
Was mir dabei auffällt, ist das sich bei mir wohl nichts von WLAN trennt, sondern das Senden einfach aufhört. Das merkt man recht gut bei der Powerstation, da die viel mehr am plaudern ist.
Obwohl ich auch regelmäßig mal ein "latestQuatas" anfrage, kommt manchmal nach einer gewissen Zeit nichts an. Gehe ich dann mit der App auf das Gerät, gehts wieder los, WLAN ist demzufolge noch an.
Ich vermute eher, daß hier bei Telegrammen, die ein ACK=1 haben, auch ein ACK zu senden ist.
Ich hatte mal probehalber den .../set der powerstation im debug, da kommt eine Unmenge an gleichartigen Telegrammen rein, scheinen die ACK zu sein.Gruß
Klaus@foxthefox damit schlage ich mich auch schon seit Beginn rum. Es kann sicher reproduziert werden. Wenn du dich mit der App verbindest und dann die App schließt (task beenden) hört der MQTT sofort auf zu feuern. Mein Script macht dann ein reconnect und sendet ein paar dieser leeren Telegramme. Danach gehts dann weiter. Vielleicht registriert der Mqtt einfach ein disconnect und hört dann auf, auch wenn noch weitere Clients verbunden sind?
Ich hoffe immer darauf, das jemand mal den Traffic der App diesbezüglich genauer untersucht. Vielleicht läuft da ja noch mehr, was der Mqtt nicht spiegelt.dadue-max sagt ja selbst, es geht das WLAN verloren und in der App ist das Gerät nur per Bluetooth zu erreichen. Das ist ein anderes Problem.
-
@foxthefox naja, ich habe manchmal pingzeiten zur powerstream von 5 sekunden… Währen der AP von einer 'excellenten' Verbindung mit 30 dB spricht. Irgendwas ist da oberfaul.
@sirdir da ich grade nicht schlafen kann
:function getLowestValue(id, minuten = 120) { if (minuten === 0) { const value = Math.floor(Number(getState(id).val)); setStateNE(ConfigData.statesPrefix + ".lowestValue", value); return Promise.resolve(value); } ... Rest unverändertdas baue ich auch in die nächste Version ein. So kann der Wert für "MinValueMin" auf 0 gestellt werden um direkt auf RealPower zuzugreifen.
-
Ich bin mir nicht sicher ob es WLAN instabilität ist, oder ob es nicht doch etwas mit dem Protokoll zu tun hat.
Ich bau grad ein paar node-red Knoten auf um Power Stream und Power Station einzulesen.
Was mir dabei auffällt, ist das sich bei mir wohl nichts von WLAN trennt, sondern das Senden einfach aufhört. Das merkt man recht gut bei der Powerstation, da die viel mehr am plaudern ist.
Obwohl ich auch regelmäßig mal ein "latestQuatas" anfrage, kommt manchmal nach einer gewissen Zeit nichts an. Gehe ich dann mit der App auf das Gerät, gehts wieder los, WLAN ist demzufolge noch an.
Ich vermute eher, daß hier bei Telegrammen, die ein ACK=1 haben, auch ein ACK zu senden ist.
Ich hatte mal probehalber den .../set der powerstation im debug, da kommt eine Unmenge an gleichartigen Telegrammen rein, scheinen die ACK zu sein.Gruß
Klaus@foxthefox @Waly_de
Da mag ich nicht widersprechen....und es kann parallel zu dem Hitzeproblem ein Thema sein.
Zum Hitzeproblem hier noch ein Test von heute:
Ich tracke für die Powerstreamtemp "....data InverterHeartbeat llcTemp". Irgendwann heute ist mal wieder ab mittag das WLAN ausgefallen von der PS. Bei der Ilc Temp sind 45 Grad dokumentiert. (Heute morgen waren es ca 25-30 grad ohne Last). Ich habe einen alten PC Lüfter mit Heatpipe und allem Schnickschnack mal auf dem glatten PS Deckel montiert und angeschaltet und siehe da, Ilc Temp auf 42 abgesackt und WLAN funktioniert wieder....
-
@foxthefox @Waly_de
Da mag ich nicht widersprechen....und es kann parallel zu dem Hitzeproblem ein Thema sein.
Zum Hitzeproblem hier noch ein Test von heute:
Ich tracke für die Powerstreamtemp "....data InverterHeartbeat llcTemp". Irgendwann heute ist mal wieder ab mittag das WLAN ausgefallen von der PS. Bei der Ilc Temp sind 45 Grad dokumentiert. (Heute morgen waren es ca 25-30 grad ohne Last). Ich habe einen alten PC Lüfter mit Heatpipe und allem Schnickschnack mal auf dem glatten PS Deckel montiert und angeschaltet und siehe da, Ilc Temp auf 42 abgesackt und WLAN funktioniert wieder....
@dadue-max
Ich glaube nicht, dass es an der Temperatur liegt.Ich habe zwei Powerstreams. Beide werden aktiv gekühlt.
Der, der immer etwas wärmer läuft, macht so gut wie nie Probleme mit dem WLAN.
Der Andere, der trotz höherer Last kälter bleibt, macht leider recht oft Probleme.Die Effektivste Lösung für mich war bisher bei Problemen den WLAN Kanal am Router zu verstellen. Manchmal will ein Powerstream einfach nur auf einem bestimmten Kanal arbeiten. Nach ein paar Tagen kann das auch wieder ein anderer Kanal sein.
Es gibt zwar ein paar fremde WLAN in der Nähe, aber die sind vom Signal deutlich schwächer als meins. Auch ein gut platzierter Repeater konnte nicht helfen. Die Powerstreams neigen auch dazu sich auf einen ungünstigen, also weit entfernten, AP zu verbinden und dort zu verbleiben.
-
Erst einmal Super arbeit mit dem Script, nur ich hab ein problem
bekomme ein error
SetState more than 1000 times per minute
und dann hält das script an27.8.2023, 12:58:40.938 [info ]: javascript.0 (5490) Start javascript script.js.EcoFlow
27.8.2023, 12:58:40.961 [info ]: javascript.0 (5490) script.js.EcoFlow: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
27.8.2023, 12:58:41.437 [info ]: javascript.0 (5490) script.js.EcoFlow: Verbunden mit dem Ecoflow MQTT-Broker
27.8.2023, 13:00:35.459 [error]: javascript.0 (5490) Script script.js.EcoFlow is calling setState more than 1000 times per minute! Stopping Script now! Please check your script!
27.8.2023, 13:00:35.462 [info ]: javascript.0 (5490) Stop script script.js.EcoFlow
27.8.2023, 13:00:35.465 [info ]: javascript.0 (5490) script.js.EcoFlow: Ecoflow MQTT-Client beendet
27.8.2023, 13:00:59.397 [info ]: javascript.0 (5490) Stop script script.js.EcoFlow -
Hi, sorry ich bin Anfänger in Sachen iobroker (habe es hauptsächlich installiert, weil ich dieses Skript verwenden möchte) und ich bekomme es nicht richtig zum Laufen. Für Hilfe, woran es liegt, wäre ich sehr dankbar.
Das Skript habe ich eingefügt und die jeweiligen Daten eingegeben:
.Auf der Skript-Seite scheint mir auch alles in Ordnung:

Das Log zeigt auf der Einstellung "silly" laufend viele Einträge an, aber das Skript nimmt keinerlei Einfluss auf die ausgegebene Leistung; die bleibt immer bei dem was in der App händisch eingestellt wurde. Weiß jemand, was ich falsch mache oder was ich hier einblenden muss, damit man es nachvollziehen kann?
-
Hi, sorry ich bin Anfänger in Sachen iobroker (habe es hauptsächlich installiert, weil ich dieses Skript verwenden möchte) und ich bekomme es nicht richtig zum Laufen. Für Hilfe, woran es liegt, wäre ich sehr dankbar.
Das Skript habe ich eingefügt und die jeweiligen Daten eingegeben:
.Auf der Skript-Seite scheint mir auch alles in Ordnung:

Das Log zeigt auf der Einstellung "silly" laufend viele Einträge an, aber das Skript nimmt keinerlei Einfluss auf die ausgegebene Leistung; die bleibt immer bei dem was in der App händisch eingestellt wurde. Weiß jemand, was ich falsch mache oder was ich hier einblenden muss, damit man es nachvollziehen kann?
@anteater321
Hast du das richtige Objekt mit dem State deines Stromzählers im Script angegeben? -
@anteater321
Hast du das richtige Objekt mit dem State deines Stromzählers im Script angegeben?@dreffi danke für die Antwort. Ich habe aktuell nur einen Smartplug von Ecoflow eingebunden und sonst keine Daten. Aus der Erklärung des skripts erschien mir das optional. Wo muss ich denn den State im Script angeben? Hatte es jetzt mal mit dem folgenden Eintrag versucht, aber das funktioniert nicht:
SmartmeterID: "0_userdata.0.ecoflow.app_device_property_*******.data.plug_heartbeat_pack.watts",Im Debug-Modus erscheinen in regelmäßigen Abständen die folgenden Meldungen:

Ich möchte eigentlich erreiche, dass sich der vom Wechselrichter ausgegebene Strom im Wesentlichen nach dem von den Panelen eingehenden Strom richtet, aber ich vermute jetzt, dass das so nicht funktioniert? Ich wäre aber auch schon froh, wenn ich den SmartPlug integriert bekäme, um das Prinzip zu verstehen
-
@dreffi danke für die Antwort. Ich habe aktuell nur einen Smartplug von Ecoflow eingebunden und sonst keine Daten. Aus der Erklärung des skripts erschien mir das optional. Wo muss ich denn den State im Script angeben? Hatte es jetzt mal mit dem folgenden Eintrag versucht, aber das funktioniert nicht:
SmartmeterID: "0_userdata.0.ecoflow.app_device_property_*******.data.plug_heartbeat_pack.watts",Im Debug-Modus erscheinen in regelmäßigen Abständen die folgenden Meldungen:

Ich möchte eigentlich erreiche, dass sich der vom Wechselrichter ausgegebene Strom im Wesentlichen nach dem von den Panelen eingehenden Strom richtet, aber ich vermute jetzt, dass das so nicht funktioniert? Ich wäre aber auch schon froh, wenn ich den SmartPlug integriert bekäme, um das Prinzip zu verstehen
@anteater321 Hi der Smartplug kann eigentlich nur ein- und ausgeschaltet werden und liefert Messwerte vom angeschlossenen Gerät also aktuelle Netzspannung, Strom, Leistung, etc.
Wenn du nicht den Powerstream als Gerät mit Seriennummer angibst kann das Script auch nichts steuern.
Weiter muss das Script doch einen Wert vom aktuellen Verbrauch bekommen damit es dynamisch regeln kann.
Sonst kann es villeicht die Prio "Strom" oder "Akku" umschalten wenn die Batteriegrenzen über oder unterschritten sind.Was möchtest du genau erreichen und welche Geräte hast du verbaut?
-
@dreffi danke für die Antwort. Ich habe aktuell nur einen Smartplug von Ecoflow eingebunden und sonst keine Daten. Aus der Erklärung des skripts erschien mir das optional. Wo muss ich denn den State im Script angeben? Hatte es jetzt mal mit dem folgenden Eintrag versucht, aber das funktioniert nicht:
SmartmeterID: "0_userdata.0.ecoflow.app_device_property_*******.data.plug_heartbeat_pack.watts",Im Debug-Modus erscheinen in regelmäßigen Abständen die folgenden Meldungen:

Ich möchte eigentlich erreiche, dass sich der vom Wechselrichter ausgegebene Strom im Wesentlichen nach dem von den Panelen eingehenden Strom richtet, aber ich vermute jetzt, dass das so nicht funktioniert? Ich wäre aber auch schon froh, wenn ich den SmartPlug integriert bekäme, um das Prinzip zu verstehen
@anteater321 sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:
Ich möchte eigentlich erreiche, dass sich der vom Wechselrichter ausgegebene Strom im Wesentlichen nach dem von den Panelen eingehenden Strom richtet, aber ich vermute jetzt, dass das so nicht funktioniert? Ich wäre aber auch schon froh, wenn ich den SmartPlug integriert bekäme, um das Prinzip zu verstehen
Ich verstehe noch nicht ganz, was Du versuchst mit dem Skript zu machen. Wenn du mit SmartPlugs arbeitest, benötigst du das Skript eigentlich nicht. Wenn du möchtest, dass die eingespeiste Energie sich nach dem zur Verfügung stehenden Sonnenlicht richtet, benötigst du das Skript auch nicht.
Für eine "Null-Einspeisung" ist ein Smartmeter Grundvoraussetzung, dass dem Gesamtverbrauch Deiner Wohneinheit misst.
Zwar könntest du theoretisch auch die Ausgabe der Smart Plug als Smartmeter ID konfigurieren. Aber da die Smart Plug nur sehr selten Werte liefert und auch nur dann, wenn ein Gerät angeschlossen ist, und dieses seine Leistungsaufnahme ändert. Bekommst du die No Data Fehlermeldung. Da arbeitet die Smart Plug ganz ohne Skript, direkt mit dem PowerStream sicherlich viel besser. -
Erst einmal Super arbeit mit dem Script, nur ich hab ein problem
bekomme ein error
SetState more than 1000 times per minute
und dann hält das script an27.8.2023, 12:58:40.938 [info ]: javascript.0 (5490) Start javascript script.js.EcoFlow
27.8.2023, 12:58:40.961 [info ]: javascript.0 (5490) script.js.EcoFlow: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
27.8.2023, 12:58:41.437 [info ]: javascript.0 (5490) script.js.EcoFlow: Verbunden mit dem Ecoflow MQTT-Broker
27.8.2023, 13:00:35.459 [error]: javascript.0 (5490) Script script.js.EcoFlow is calling setState more than 1000 times per minute! Stopping Script now! Please check your script!
27.8.2023, 13:00:35.462 [info ]: javascript.0 (5490) Stop script script.js.EcoFlow
27.8.2023, 13:00:35.465 [info ]: javascript.0 (5490) script.js.EcoFlow: Ecoflow MQTT-Client beendet
27.8.2023, 13:00:59.397 [info ]: javascript.0 (5490) Stop script script.js.EcoFlow@milchbeck guck mal im Beitrag. Das wurde schon einige Male angesprochen. Du kannst den Wert in den Einstellungen der Javascript-Instanz hoch setzten. Je mehr Geräte Du hast, um so höher muss der Wert konfiguriert werden. Vor allem die Deltas liefern Unmengen an Updates.
Wenn Du diese Daten nicht unbedingt brauchst, stelle in den Einstellungen für deinen Delta "subscribe" auf false. -
@anteater321 sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:
Ich möchte eigentlich erreiche, dass sich der vom Wechselrichter ausgegebene Strom im Wesentlichen nach dem von den Panelen eingehenden Strom richtet, aber ich vermute jetzt, dass das so nicht funktioniert? Ich wäre aber auch schon froh, wenn ich den SmartPlug integriert bekäme, um das Prinzip zu verstehen
Ich verstehe noch nicht ganz, was Du versuchst mit dem Skript zu machen. Wenn du mit SmartPlugs arbeitest, benötigst du das Skript eigentlich nicht. Wenn du möchtest, dass die eingespeiste Energie sich nach dem zur Verfügung stehenden Sonnenlicht richtet, benötigst du das Skript auch nicht.
Für eine "Null-Einspeisung" ist ein Smartmeter Grundvoraussetzung, dass dem Gesamtverbrauch Deiner Wohneinheit misst.
Zwar könntest du theoretisch auch die Ausgabe der Smart Plug als Smartmeter ID konfigurieren. Aber da die Smart Plug nur sehr selten Werte liefert und auch nur dann, wenn ein Gerät angeschlossen ist, und dieses seine Leistungsaufnahme ändert. Bekommst du die No Data Fehlermeldung. Da arbeitet die Smart Plug ganz ohne Skript, direkt mit dem PowerStream sicherlich viel besser.@waly_de @aherby vielen Dank für Eure Antworten:
Ich habe einen Powerstream, ne Delta 2 Max und einen Smart Plug von ecoflow. Ist bei mir im Skript alles mit Seriennummern und Zugangsdaten eingegeben. Habe hier nur Sterne als Platzhalter für den Screenshot eingesetzt.
Ich würde zunächst gerne das Prinzip verstehen und scheitere aktuell schon daran, den Smartplug zu integrieren. Ich weiß, dass der SmartPlug ohnehin automatisch in der Ecoflow-App berücksichtigt wird, mir geht es ums Grundverständnis (ich hoffe das lässt sich dann auf andere Smartplugs/ein Smartmeter übertragen).
Meine Frage zum Einstieg wäre, welchen Wert (Enum?) ich beim Eintrag SmartMeterID angeben muss, damit sich der Output des Powerstream nach dem SmartPlug richtet. Ich vermute es ist "0_userdata.0.ecoflow.app_device_property_****.data.plug_heartbeat_pack.watts", aber dann schaukelt sich der Output innerhalb von ein paar Minuten auf 500W hoch, obwohl am Smartplug ein Verbrauch von 30W ausgegeben wird.
-
@waly_de @aherby vielen Dank für Eure Antworten:
Ich habe einen Powerstream, ne Delta 2 Max und einen Smart Plug von ecoflow. Ist bei mir im Skript alles mit Seriennummern und Zugangsdaten eingegeben. Habe hier nur Sterne als Platzhalter für den Screenshot eingesetzt.
Ich würde zunächst gerne das Prinzip verstehen und scheitere aktuell schon daran, den Smartplug zu integrieren. Ich weiß, dass der SmartPlug ohnehin automatisch in der Ecoflow-App berücksichtigt wird, mir geht es ums Grundverständnis (ich hoffe das lässt sich dann auf andere Smartplugs/ein Smartmeter übertragen).
Meine Frage zum Einstieg wäre, welchen Wert (Enum?) ich beim Eintrag SmartMeterID angeben muss, damit sich der Output des Powerstream nach dem SmartPlug richtet. Ich vermute es ist "0_userdata.0.ecoflow.app_device_property_****.data.plug_heartbeat_pack.watts", aber dann schaukelt sich der Output innerhalb von ein paar Minuten auf 500W hoch, obwohl am Smartplug ein Verbrauch von 30W ausgegeben wird.
-
Vielen Dank für den äußerst nützlichen Script. Ganz tolle Arbeit.....
Der Script läuft bei mir fast ohne Probleme.
Ich möchte gerne, dass bei 95% Akkustand automatisch in den Batterie-Prioritätsmodus gewechselt wird, sofern dieser nicht manuell in der Ecoflow schon eingestellt ist. Ich habe dazu den Wert 95 bei battPozOn eingetragen und battOnSwitchPrio auf true geändert. Nun ist mein Akku bei 99% und der Script schaltet in den Strommodus. Was dann leider dazu führen kann, dass der Akku leergesaugt wird. Da ich Tibber und daher einen dynamischen Strompreis habe, möchte ich den Akkustrom dann nutzen wenn der Preis hoch ist, vorher macht es keinen Sinn für mich.
Habe ich einen Denkfehler, sollte der Script nicht in dem Akkumodus bleiben? Anbei die Meldung aus dem Protokoll.

Und wann wird die Zusatzpower (tolle Funktion) ein- und ausgeschaltet? Bei dem Wert von battPozOff?
Hier würde ich mir wünschen, dass bei über 600 Watt Solarleistung 600 Watt in den Akku gehen und der Rest ins Netz, dass funktioniert aber leider nur im Strommodus. Gibt es eine Möglichkeit, dass dann bei einer Leistung von unter 600 Watt nur der Akku gespeist wird dann die Leistungsabgabe ins Netz auf 0 geregelt wird?
Viele Grüße
Nils
-
"0_userdata.0.ecoflow.app_device_property_****.data.plug_heartbeat_pack.watts" liefert W * 10
10 Watt sind also ein Wert vom 100 in dem State.
Daher das Verhalten.@waly_de Danke für den Hinweis, hatte ich auch schon irgendwo im dem langen Thread gelesen, aber wieder vergessen.
Hab nochmal drauf geachtet, der Verbrauch kennt aber nur die Richtung nach oben (also deutlich mehr als Faktor 10). Auch wenn der Verbrauch bspw. auf 15 W absinkt, geht der Output nicht runter sondern hoch. Aber ich scheine der einzige mit dem Problem zu sein, muss also irgendwie an meinem Setup liegen.
-
@waly_de Danke für den Hinweis, hatte ich auch schon irgendwo im dem langen Thread gelesen, aber wieder vergessen.
Hab nochmal drauf geachtet, der Verbrauch kennt aber nur die Richtung nach oben (also deutlich mehr als Faktor 10). Auch wenn der Verbrauch bspw. auf 15 W absinkt, geht der Output nicht runter sondern hoch. Aber ich scheine der einzige mit dem Problem zu sein, muss also irgendwie an meinem Setup liegen.
@anteater321 das ist klar, denn wenn der powerStream seine Ausgangsleistung steigert, sinkt ja der Messwert des smartplug nicht. Darum möchte das Skript immer mehr Leistungen abgeben und von Messung zu Messung steigt der Wert dadurch. Das Setup funktioniert so einfach nicht. Du brauchst einen unabhängigen Stromzähler oder zumindest muss der Powerstream mit dem Verbraucher hinter der SmartPlug eingesteckt sein. Sinn macht das aber alles nicht wirklich...
-
So, meine Anbindung läuft jetzt seit einigen Tagen sauber. Daher spendiere ich dem Skript mal einen eigenen Thread.
Anbei findet ihr ein Skript, das eine Verbindung zwischen euren ecoflow-Geräten und ioBroker herstellen kann. Dabei nutzt es die gleiche Schnittstelle wie die ecoFlow App. Ihr benötigt lediglich eure Zugangsdaten zur App und die Seriennummern eurer Geräte, um dieses Skript nutzen zu können. Alle bekannten übermittelten Daten werden in ioBroker als Zustände angelegt. Viele davon sind noch unbekannt. Wenn ihr herausfindet, was sich hinter den unbekannten Daten verbirgt, kann ich die Zustandsnamen anpassen.
Achtung: Der ecoflow-Server sendet unfassbar viele Nachrichten. Wenn ihr mehrere Geräte habt, kann dies euer System stark belasten und sogar zu Abstürzen führen. Vielleicht bekommt Ihr auch diese Meldung und das Script wird beendet:
[error]: javascript.0 (5490) Script script.js.EcoFlow is calling setState more than 1000 times per minute! Stopping Script now! Please check your script!Daher empfehle ich, nicht alle Geräte dauerhaft zu abonnieren (dies kann über einen Parameter in der Einstellungssektion festgelegt werden). Es werden nur die PowerStreams benötigt, um die Einspeiseleistung anpassen zu können.
Sonst kann dieser Grenzwert aber auch in den Einstellungen der Javascript-Instanz heraufgesetzt werden. 3000 dürfte für die meisten Szenarien reichen. (Siehe Screenshot weiter unten. Der Wert befindet sich unten links)Damit kommen wir zur eigentlichen interessanten Funktion des Skripts:
Wenn ihr ein Smartmeter habt, das euren aktuellen Stromverbrauch in Echtzeit anzeigen kann, könnt ihr es an ioBroker anbinden. Informationen dazu findet ihr im Netz.Hier hab ich das Ding gekauft (Wenn ihr über die Links kauft, bekomme ich ein paar Cent Provision ab ;-)):
Hichi Wifi, IR Lesekopf für Stromzähler
https://ebay.us/3X1pkH
Der Verkäufer hat auch ein tolles Video gemacht, wie man es einrichtet
Es funktionieren aber auch viele andere Zähler wie z.B.:
Der Shelly 3EMTibber-Kunden mit Pulse empfehle ich die lokale Einbindung des Pulse als Smartmeter mit meinem Script:
https://forum.iobroker.net/topic/70758/tibber-pulse-verbrauchsdaten-lokal-auslesenDas Skript passt dann die Einspeiseleistung des PowerStream dynamisch an, sodass möglichst der gesamte Verbrauch durch die Einspeisung gedeckt wird, aber nichts ins Netz verschenkt wird. Erst wenn die Batterie voll geladen ist, wird die gesamte Leistung ins Netz eingespeist (wenn ihr das möchtet).
Das Smartmeter muss den aktuellen Verbrauch möglichst in Echtzeit und in der Einheit Watt in einem Objekt von IOBroker zur Verfügung stellen. Im Script muss dann nur noch der Pfad zu diesem Objekt unter "SmartmeterID:" eingetragen werden. Am einfachsten geht das über die Adminoberfläche von IOBroker. Klickt auf Objekte und sucht das Objekt eures Smartmeters mit dem "Watt"-Wert im Objektbaum:

Wenn Ihr auf das markierte Symbol klickt, ist der Pfad in euerer Zwischenablage gespeichert.
Jetzt müsst Ihr ihn nur noch hinter "SmartmeterID:" im Script einfügen. Achtet darauf, dass Ihr es zwischen die "" einfügt.
Wenn alles geklappt hat, der Pfad stimmt und das Script läuft, solltet Ihr unter Objekte: "0_userdata.0.ecoflow.RealPower" sehen, dass sich dieser Wert regelmäßig anpasst.Es können mehrere PowerStreams konfiguriert werden. Im Moment wird jedoch nur der erste in der Konfiguration gesteuert. Ich habe zum Beispiel zwei PowerStreams, einen mit und einen ohne Batterie. Dadurch steht tagsüber mehr Leistung zum Laden der Batterie zur Verfügung. Die Daten werden vom Skript verwendet, um die optimale Einspeiseleistung zu berechnen. In Zukunft könnten auch mehrere PowerStreams gesteuert werden.
Nochmals vielen Dank an alle hier im Forum, die mit Ihrer Arbeit die Anbindung erst möglich gemacht haben!
Ursprünglicher Beitrag: https://forum.iobroker.net/topic/54929/adapter-für-ecoflow-einbindung/Wichtig: Zur Installation müssen 2 Module installiert werden. Einfach in den Einstellungen der Javascriptinstanz unter Zusätzliche Module die beiden Namen eintragen und speichern ("mqtt" und "protobufjs")

Erweiterungen:
Tibber Modul
Kann als eigenes, neues Script neben dem Hauptscript angelegt werden.//************************************************************* // Tibber Modul //************************************************************* // Schaltet die Regelung der Powerstation ab, wenn der Strom billig ist // und einen beliebigen Schalter zum Aktivieren der AC-Ladung ein, bis die Batterie // den durch der "BatMax" festgelegten Ladestand in % erreicht hat // // Diese Parameter aus dem Hauptscript sind wichtig: // RegulationOffPower: -2 // Wird die Regulation per State abgestellt, wird die Einspeiseleistung des ersten Powerstreams auf diesen Wert gesetzt (-1 = keine Änderung, -2 = Batterie Priomodus) // RegulationState: "Regulate" // Erzeugt der State zum Ein und Aus-Schalten der Regulation. // // Das Script versucht selbst die ID's für den TibberStatus und den Batteriestand zu ermitteln. // Wenn das nicht klappt bitte einfach die richtigen ID's hinter "batSocID" und "tibberID" angeben. // //************************************************************* //************************************************************* // Konfiguration laden, wenn nicht im Originalscript eingefügt //************************************************************* var ConfigData = { statesPrefix: '0_userdata.0.ecoflow', RegulationState: "Regulate" } if (typeof ConfigData.email === 'undefined') { try { let tempConfigData = getState("0_userdata.0.ecoflow.Settings.ConfigData").val if (typeof tempConfigData !== 'object' && tempConfigData !== null) { tempConfigData = JSON.parse(tempConfigData) } if (typeof tempConfigData === 'object' && tempConfigData !== null) { if (tempConfigData.email !== undefined) { ConfigData = tempConfigData; //log("wurde geladen als object") } } } catch (error) { log("Konfiguration wurde nicht geladen: " + error.message) } } /*************************************** ********** YOUR DATA HERE ************ ****************************************/ var tibberConfig = { BatMax: 99, //Bei diesem Ladestand stoppt die AC-Ladung und das Script wird wieder eingeschaltet BatMin: 95, //Der Ladestand der Batterie muss kleiner sein als BatMin , damit der Akku per AC-Ladung geladen wird SwitchID: "sonoff.0.NOUS-DVES_F0A844.POWER", //ID des Schalters, der die AC-Ladung einschaltet. "true" und "false" werden gesetzt LevelToSwitch: [ //Hier die Werte definieren, bei denen die AC-Ladung eingeschaltet werden soll //"NORMAL", //"CHEAP", //Einkommentieren falls gewüscht "VERY_CHEAP" ], } //***************************************/ // Nur angeben, wenn automatische Ermittlung fehlschlägt //***************************************/ let batSocID = getState(ConfigData.statesPrefix + ".Settings.Tibber.tibberBatSocID").val let tibberID = getState(ConfigData.statesPrefix + ".Settings.Tibber.tibberID").val //***************************************/ var idOK = false if (!batSocID || !tibberID) { log("Versuche die IDs für Tibber und Batterielevel zu finden") $("tibberlink.*.Homes.*.CurrentPrice.level").each(function (id, i) { tibberID = id createState(ConfigData.statesPrefix + ".Settings.Tibber.tibberID", tibberID, false) log("TibberID gefunden und gespeichert:" + id) }) $(ConfigData.statesPrefix + ".app_device_property_*.data.InverterHeartbeat.batSoc").each(function (id, i) { if (getState(id).val > 0) { batSocID = id createState(ConfigData.statesPrefix + ".Settings.Tibber.tibberBatSocID", batSocID, false) log("batSocID gefunden und gespeichert:" + id) } }) if (!batSocID || !tibberID) { log("Fehler bei der Ermittlung der IDs. Bitte händisch ins Script eintragen", 'error') } else { idOK = true } } else { idOK = true } if (idOK) { checkTibber() on({ id: tibberID, change: "ne" }, function (obj) { //log("Tibber Modul. tibberID Event:" + obj.state.val) checkTibber() }); on({ id: batSocID, change: "ne" }, function (obj) { //log("Tibber Modul. batSocID Event:" + obj.state.val + "%") checkTibber() }); } function checkTibber() { if (tibberID && batSocID) { const RegulateID = ConfigData.statesPrefix + "." + ConfigData.RegulationState let priceLevel = getState(tibberID).val; let batsoc = Number(getState(batSocID).val) let OldRegulate = toBoolean(getState(RegulateID).val) //log("Tibber Preislevel: " + priceLevel + " OldRegulate: " + OldRegulate + " batsoc: " + (batsoc)) if ((tibberConfig.LevelToSwitch.includes(priceLevel))) { if (OldRegulate) { if (batsoc <= tibberConfig.BatMin) { setState(RegulateID, false); // Regulierung aus setState(tibberConfig.SwitchID, true) //Schalter einschalten log("Script abgeschaltet AC-Ladung Ein, weil priceLevel:" + priceLevel + " batsoc:" + batsoc + "%") } } else { if (batsoc >= tibberConfig.BatMax) { setState(RegulateID, true); // Regulierung an setState(tibberConfig.SwitchID, false) //Schalter ausschalten log(" Batterie bei BatMax. Script eingeschaltet AC-Ladung Aus. priceLevel:" + priceLevel + " batsoc:" + batsoc + "%") } } } else { if (!OldRegulate) { setState(RegulateID, true); // Regulierung an setState(tibberConfig.SwitchID, false) //Schalter ausschalten log("Script eingeschaltet AC-Ladung Aus. priceLevel:" + priceLevel + " batsoc:" + batsoc + "%") } } } else { //log("checkTibber skip. batsocID und/oder tibberID fehlen.") } } //*************************************************************
Tibber-Pulse als Smartmeter nutzen und lokal auslesen:
https://forum.iobroker.net/topic/70758/tibber-pulse-verbrauchsdaten-lokal-auslesenUnterstütze das Projekt 'ecoflow-connector'
Wenn dir das Script zur dynamischen Leistungsanpassung für den IObroker gefällt und du es nützlich findest, ziehe bitte in Erwägung, eine kleine Spende via PayPal zu hinterlassen.
Jeder Beitrag hilft, das Projekt am Laufen zu halten und weitere Updates zu ermöglichen.
Danke für deine Unterstützung!
Jetzt SpendenDieses Script wird bei Änderungen und Updates immer aktualisiert:
Nutzung auf eigene Gefahr 
- Installation von ioBroker und Skript unter UNRAID in nur 12 Minuten
- Video mit Erklärung der Basiskonfiguration
- Video mit Erklärung zu AdditionalPower und Überschussladung
Download (neues JS-Script in IOBroker anlegen und den Inhalt der Datei einfügen):
- 1.2.5.f1 Fork von Florian Vogt (25.06.2024)
Feature hinzugefügt, um die Größe der Delta-Speicher beim Ausbalancieren der Entladeleistung zu berücksichtigen, damit die Batterien gleichmäßig geleert werden.
Parameter battCapacity bei den Einstellungen für PowerStream = Kapazität der angeschlossenen Batterie in kWh, default = 1
ecoflow-connector_v125_mod_FV.txt (25.06.2024)
ältere Versionen:
- ecoflow-connector_v124.txt (22.04.2024)
- ecoflow-connector_v123.txt (21.02.2024)
- ecoflow-connector_v121_05.01.2024.txt
- ecoflow-connector_v12_.04.12.2023.txt
- ecoflow-connector_v1162_04.11.2023.txt
- ecoflow-connector_v115_02.10.2023.txt
- ecoflow-connector_v1142_26.09.2023
- ecoflow-connector_v1132_31.08.2023
- ecoflow-connector_v112_17.08.2023)
@waly_de Bin immer noch begeistert, dass du die ganze Arbeit und Zeit findest das Script zu verbessern.
herzlichen Dank. Habe gerade mal eine Spende aufn Weg geschickt.Mein Problem ist dass ich aktuell nicht aus der Ferne an den Rechner mit dem Script komme.
Daher kann ich nicht immer alles hier ausprobieren oder testen wenn ich vor Ort bin.Was mir jetzt aufgefallen ist, das viele Daten der Delta 2 Max unter MPPT landen.
Hier auch Parameter wie Einstellung der DC Autoeingang 1 und Autoeingang 2 wo die Stromwerte 4, 6 und 8 Ampere als Strombegrenzung einstellen kann.
Ist das nur bei mir so oder gibt es einen Grund dafür?Was mir aber irgendwie von der Bezeichung fehlt ist das Objekt PV1InAmp, PV1InVol ok sind wohl als InVol und anderen Objekten vorhanden. Liegt das daran, dass wenn ein Zigarettenanzünder zum Laden verwendet werden dann auch diese Werte beschrieben werden?
Kann oder werden noch weitere Tests oder Daten von der Delta 2 Max benötigt?
-
Vielen Dank für den äußerst nützlichen Script. Ganz tolle Arbeit.....
Der Script läuft bei mir fast ohne Probleme.
Ich möchte gerne, dass bei 95% Akkustand automatisch in den Batterie-Prioritätsmodus gewechselt wird, sofern dieser nicht manuell in der Ecoflow schon eingestellt ist. Ich habe dazu den Wert 95 bei battPozOn eingetragen und battOnSwitchPrio auf true geändert. Nun ist mein Akku bei 99% und der Script schaltet in den Strommodus. Was dann leider dazu führen kann, dass der Akku leergesaugt wird. Da ich Tibber und daher einen dynamischen Strompreis habe, möchte ich den Akkustrom dann nutzen wenn der Preis hoch ist, vorher macht es keinen Sinn für mich.
Habe ich einen Denkfehler, sollte der Script nicht in dem Akkumodus bleiben? Anbei die Meldung aus dem Protokoll.

Und wann wird die Zusatzpower (tolle Funktion) ein- und ausgeschaltet? Bei dem Wert von battPozOff?
Hier würde ich mir wünschen, dass bei über 600 Watt Solarleistung 600 Watt in den Akku gehen und der Rest ins Netz, dass funktioniert aber leider nur im Strommodus. Gibt es eine Möglichkeit, dass dann bei einer Leistung von unter 600 Watt nur der Akku gespeist wird dann die Leistungsabgabe ins Netz auf 0 geregelt wird?
Viele Grüße
Nils
@nils_1985 sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:
Und wann wird die Zusatzpower (tolle Funktion) ein- und ausgeschaltet? Bei dem Wert von battPozOff?
im Moment ist es so eingestellt, dass bei Batteriespeisung von Maxpower(600W ) - BAT_MAX_OFFSET(60 W) angefangen wird Zusatzpower zu geben. 60W deswegen, weil der PS im Betrieb eben oft nicht die 600 W Erreicht, sondern ein paar W davor aufhört. Vielleicht thermische Probleme oder Messabweichungen...
Hier würde ich mir wünschen, dass bei über 600 Watt Solarleistung 600 Watt in den Akku gehen und der Rest ins Netz, dass funktioniert aber leider nur im Strommodus. Gibt es eine Möglichkeit, dass dann bei einer Leistung von unter 600 Watt nur der Akku gespeist wird dann die Leistungsabgabe ins Netz auf 0 geregelt wird?
das geht nur mit dem Batterie-Priomodus bis 600W und würde ich auch nicht empfehlen, denn es belastet den Akku sehr, führt zu verkürzter Lebensdauer und beschert Dir die maximal mögliche Verlustleistung wegen Umwandlungsverlusten PV-Akku und dann Akku-Netz.
Wenn du etwas ähnliches unbedingt wills, spiel doch mal mit den Werten lowBatLimitPozOn,lowBatLimitPozOff und lowBatLimit
z.B:lowBatLimitPozOn: 95, lowBatLimitPozOff: 99, lowBatLimit: 20,
Ist der Akku weniger als 95% geladen werden nur maximal 20 W eingespeist, der rest geht in den Akku. Dann greift aber Zusatzpower, um vielleicht noch etwas mehr heraus zu holen.Guck aber das es mit battPozOn:, battPozOff:, battOnSwitchPrio:, keine Überschneidungen gibt.