Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. ecoflow-connector-Script zur dynamischen Leistungsanpassung

    NEWS

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    ecoflow-connector-Script zur dynamischen Leistungsanpassung

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      Ponti92 @Waly_de last edited by

      @waly_de Ich habe nur die zwei PS abonniert und die D2M erst mal auf false gesetzt. Die Probleme sind erst mit der zweiten PS aufgetreten, wobei ich davor eine PS und eine D2M abonniert habe.
      Nun habe ich die D2M erst mal abbestellt, jedoch kann ich bei der D2M trotzdem die Werte ändern und die writeables werden auch angelegt. Ist das so korrekt, oder ist sie doch noch irgendwie abonniert, ohne dass ich das sehe?

      Ich habe auf meinem iobroker schon einiges am Laufen.. Zigbee, hue, hmip, js, mqtt, shelly, influxdb, grafana, pushover, sourceanalytics etc..

      Jedoch ist die Auslastung der CPU meist unter 50% und der RAM macht das locker mit. Ich versuche mal ein paar Adapter aufzuräumen, die ich nicht mehr benötige.

      Spielt vielleicht die nodejs version eine Rolle, denn da bin ich noch auf version 14 und müsste langsam mal wieder updaten 😉

      W 1 Reply Last reply Reply Quote 0
      • W
        Waly_de @Ponti92 last edited by Waly_de

        @ponti92 so ähnlich siehts auch bei mir aus. Viele Adapter und Scripte laufen auf einem Raspi.
        Das geht auch in der Regel gut. Aber ich hab es dennoch mehrfach geschafft mein System komplett lahm zu legen, indem ich den Delta abonniert habe. Der feuert bei mir übrigens noch mehr Nachrichten, wenn ich gerade mit der App darauf zugreife. Ich glaube es ist weniger CPU oder Speicher das Problem. Vielmehr die ganzen Schreibvorgänge.

        Writeables laufen weiter (werden auch abonniert) nur die ganzen Statusmeldungen werden ausgelassen. Vielleicht findet sich ja irgendwann mal eine Möglichkeit den Deltas eine langsamere Updatefrequenz beizubringen...

        nodejs wird daran vermutlich nicht viel ändern.... aber Updates sind immer sinnvoll 😉

        P 1 Reply Last reply Reply Quote 0
        • T
          tom7657 @Waly_de last edited by

          @waly_de Also, ich finde, das ist eine tolle Idee! Habe beim Einrichten aller Komponenten für dein Skript selbst eine Menge gelernt. Und es scheint tatsächlich zu laufen. Ohne dass ich wirklich weiß, warum. 🙂 Aber den Umzug auf einen Raspberry Pi hatte ich ohnehin geplant, weil ich meinen "normalen" PC nicht ständig laufen lassen möchte.

          1 Reply Last reply Reply Quote 0
          • T
            tom7657 @Waly_de last edited by

            @waly_de Ah, wie gut! Das hatte ich gehofft. 🙂

            Aktuell erhalte ich häufig folgende Meldung:

            script.js.Ecoflow: Fehler beim Abrufen des niedrigsten Werts: Error: No data

            Woran könnte es liegen?

            Und ich würde gern etwas spenden. Wo wäre dies möglich?

            W 1 Reply Last reply Reply Quote 0
            • W
              Waly_de @tom7657 last edited by Waly_de

              @tom7657 sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

              script.js.Ecoflow: Fehler beim Abrufen des niedrigsten Werts: Error: No data
              Woran könnte es liegen?
              Und ich würde gern etwas spenden. Wo wäre dies möglich?

              Diese Meldung kommt wenn Dein Smartmeter innerhalb der eingestellten Zeit: MinValueMin keine neuen Daten an IoBroker geliefert hat. Beim ersten Start normal. Aber dann sollte es regelmäßig neue Daten geben... Du kannst unter Objekte nachsehen, ob der Wert aktualisiert wird.

              0_userdata.0.ecoflow.RealPower 
              

              muss sich auch regelmäßig ändern, wenn alles klappt.

              PS: Spende ist angekommen! Vielen Dank! 😉

              T 1 Reply Last reply Reply Quote 0
              • G
                GerdSo last edited by GerdSo

                Ich habe bei der PowerStream die neueste Firmware drauf V1.0.0.154 und kann aktuell nicht mehr den AC Ausgang steuern, wieviel Watt dort ausgegeben werden (habe keinen SmartPlug installiert). Ob da jetzt ein Zusammenhang mit dem Firmwareupdate gibt, kann ich nicht genau sagen, zumindest wird der Wert aktuell weder aktualisiert noch kann ich ihn setzen. subscribe ist auf false, da im anderen Fall nach kurzer Zeit die Fehlermeldung erscheint, dass setState zu oft aufgerufen wurde und daher das Script disabled wird.
                Nachtrag, es wird auch mit subscribe false disabled, dauert nur länger

                error	javascript.0 (194) Script script.js.common.EcoFlow-Script is calling setState more than 1000 times per minute! Stopping Script now! Please check your script!
                

                und meine Delta möchte ich subscriben, da ansonsten der SoC nicht kommt und benötige ich für meine Steuerung oder kann man das zukünftig so abändern, dass der Soc auch bei subscribe false aktualisiert wird? Ich habe eine Delta Pro und diese als Delta Max im Script eingestellt, da es keine Delta Pro als Parameter gibt.

                Nachtrag, wenn das Script frisch gestartet wird, dann kann ich das kurzzeitig machen, dann scheint das Script aber die Verbindung zum PowerStream zu verlieren und dann geht es nicht mehr. Das hatte bei mir mal wochenlang alles super funktioniert

                W 1 Reply Last reply Reply Quote 0
                • W
                  Waly_de @GerdSo last edited by Waly_de

                  @gerdso siehe Eingangsbeitrag: https://forum.iobroker.net/topic/66743/ecoflow-connector-script-zur-dynamischen-leistungsanpassung

                  Wenn die Delta an der PS hängt kannst du SoC auch über die PS Daten abfragen

                  G 1 Reply Last reply Reply Quote 0
                  • G
                    GerdSo @Waly_de last edited by GerdSo

                    @waly_de Deswegen die Frage, ob bei subscribe=false zumindest der Soc aktualisiert werden kann, ansonsten kann ja nichts gesteuert werden, da man den SoC nicht kennt oder der sbuscribe mehrstufig gemacht werden kann. Evtl. auch, dass die writables ebenfalls als State subscribe werden, damit man auch Änderungen von der Delta oder dem PS sieht, da handelt es sich ja nur um 1-3 Variablen pro Geräte.

                    Was ich nicht verstehe, das hat wochenlang super funktioniert und seit Anfang der Woche gibt es Probleme bei mir, fällt zusammen mit NAS-Update, worauf der iobroker Docker läuft und dem PowerStream Update

                    W 1 Reply Last reply Reply Quote 0
                    • T
                      tom7657 @Waly_de last edited by

                      @waly_de Danke! Ich verstehe.
                      Ich hatte ja Energieversorgung priorisiert (in der App). Mein Akku ist nun voll und die Solarleistung wird gedrosselt auf den tatsächlichen Bedarf. Allerdings holt sich der PowerStream nun einen Teil der Energie aus der Batterie. Das finde ich seltsam, weil ja real aktuell noch das Dreifache an Solarpower zur Verfügung stehen würde. Das sehe ich, wenn ich manuell auf "Batterie priorisieren" umstelle.
                      Das Protokoll meldet: script.js.Ecoflow: Batterie runter auf 92%: Normalbetrieb.

                      Wie ist dies zu verstehen?

                      1 Reply Last reply Reply Quote 0
                      • W
                        Waly_de @GerdSo last edited by Waly_de

                        @gerdso setzt erst mal das Limit wie im Eingangsbeitrag beschrieben hoch. siehe Eingangsbeitrag: https://forum.iobroker.net/topic/66743/ecoflow-connector-script-zur-dynamischen-leistungsanpassung leider kann man im Moment nur alles oder nichts subscriben. Aber wie gesagt. Hängt die Delta an de PS braucht es kein Subscribe vom Delta

                        Du findest den Wert dann auch hier:

                        0_userdata.0.ecoflow.app_device_property_HWXXXXXXXXXXXX.data.InverterHeartbeat.batSoc
                        
                        G 1 Reply Last reply Reply Quote 0
                        • A
                          aherby @Waly_de last edited by

                          @waly_de ich weiß die Smartplugs magst du nicht so aber vielleicht für die Anzeige von Energieflüssen würde ich sie vielleicht weiter verwenden. Wäre es für dich einfach "zentral" die Wattwerte der Smartplugs durch 10 zu teilen und als nur lesendes Objekt auszugeben? Scripte liegen mir gerade nicht so oder irgendwie fehlt mir die Stelle wo ich durch 10 teile oder so.

                          Ich brauche zudem noch mal eine Erklräung was folgende Objekte genau sind oder wie ich was damit machen:

                          • Realpower
                          • totalPV
                          • RegulationState: ""
                          • BasePowerOffset: 30 (kann der Wert auch negativ sein)

                          und was würde passieren wenn man die Smartplugs bei BasePowerOffset irgendwie berücksichten könnte / würde?

                          vielleicht ist es auch gerade noch zu warm oder das Brett vorm Kopf löst sich nicht. Danke

                          W 1 Reply Last reply Reply Quote 0
                          • P
                            Ponti92 @Waly_de last edited by Ponti92

                            @waly_de
                            Nach langen Debuggen und versuchen zu verstehen wie das Skript so funktioniert konnte ich den Übeltäter im Skript nun weiter eingrenzen.
                            An dieser Codestelle wird überprüft ob gewisse Zeitstempel größer/kleiner sind und dann ob Realtime sich in einem gewissen Zeitrahmen geändert hat.
                            Ich könnte mir vorstellen, dass das bei 2 PS nicht ganz funktioniert, da diese nicht synchron geregelt werden, sodass die Hauslast nur mit einer PS geregelt wird und die 2. auf einem beliebigen Wert stehen bleibt.
                            Sobald das Skript dann in Zeile 12 hinein kommt, returned es, bevor es den RealPower Value weiter unten schreiben kann.

                                            for (const item of ConfigData.seriennummern) {
                                                if (item.typ == "PS") {
                                                    const asn = item.seriennummer;
                                                    const LastACset = getState(ConfigData.statesPrefix + '.app_' + mqttDaten.UserID + '_' + asn + '_thing_property_set.setAC').ts;
                                                    const invOutputWattsState = GetValAkt(ConfigData.statesPrefix + ".app_device_property_" + asn + ".data.InverterHeartbeat.invOutputWatts", 50, true);
                                                    const invOutputWatts = Number(invOutputWattsState.val) / DIVISION_FACTOR;
                                                    const lastOutset = invOutputWattsState.ts;
                            
                                                    if ((Number(lastOutset) < Number(LastACset)) && invOutputWatts !== 0) {
                                                        const lastRealset = getState(ConfigData.statesPrefix + ".RealPower").ts;
                                                        if (Number(lastRealset) > Date.now() - ((ConfigData.MinValueMin * 1000 * 60) / TOLERANCE_PERIOD_FACTOR)) {
                                                            log("RealPower Set Warte auf aktuelle Daten von: " + asn + " lezter: " + new Date(lastOutset).toLocaleTimeString('de-DE') + " / ACset: " + new Date(LastACset).toLocaleTimeString('de-DE'));
                                                            WorkInProz = false;
                                                            return;
                                                        } else {
                                                            //log("Überspringe ab jetzt warten auf Daten von: " + asn + " und setzte Wert für Einspeisung auf 0 ")
                                                            //setState(ConfigData.statesPrefix + ".app_device_property_" + asn + ".data.InverterHeartbeat.invOutputWatts", "0")
                                                            Einspeisung += invOutputWatts;
                                                        }
                                                    } else {
                            
                                                        Einspeisung += invOutputWatts;
                                                    }
                                                }
                                            }
                                            const RealPower = Number((Hausstrom + Einspeisung).toFixed(0))
                                            if (RealPower + 100 < LastRealPower) {
                                                //log("PeakSkip Delta: " + (LastRealPower - RealPower) )
                                            } else {
                                                setState(ConfigData.statesPrefix + ".RealPower", RealPower);
                                            }
                                            LastRealPower = RealPower
                                            WorkInProz = false;
                            

                            Ich habe Zeile 12 wieder einkommentiert und nach einiger Zeit habe ich diese Logs auch bekommen:

                            2023-09-10 23:23:14.868 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower Set Warte auf aktuelle Daten von: XXXXXXXXXXXXXXX lezter: 23:23:00 / ACset: 23:23:14
                            2023-09-10 23:23:20.192 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower Set Warte auf aktuelle Daten von: XXXXXXXXXXXXXXX lezter: 23:23:00 / ACset: 23:23:14
                            2023-09-10 23:23:25.498 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower Set Warte auf aktuelle Daten von: XXXXXXXXXXXXXXX lezter: 23:23:00 / ACset: 23:23:14
                            2023-09-10 23:23:30.836 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower Set Warte auf aktuelle Daten von: XXXXXXXXXXXXXXX lezter: 23:23:01 / ACset: 23:23:27
                            2023-09-10 23:23:36.173 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower Set Warte auf aktuelle Daten von: XXXXXXXXXXXXXXX lezter: 23:23:01 / ACset: 23:23:27
                            2023-09-10 23:23:41.494 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower Set Warte auf aktuelle Daten von: XXXXXXXXXXXXXXX lezter: 23:23:01 / ACset: 23:23:27
                            2023-09-10 23:23:46.836 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower Set Warte auf aktuelle Daten von: XXXXXXXXXXXXXXX lezter: 23:23:01 / ACset: 23:23:27
                            2023-09-10 23:23:52.227 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower Set Warte auf aktuelle Daten von: XXXXXXXXXXXXXXX lezter: 23:23:01 / ACset: 23:23:27
                            2023-09-10 23:23:57.586 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower Set Warte auf aktuelle Daten von: XXXXXXXXXXXXXXX lezter: 23:23:01 / ACset: 23:23:27
                            2023-09-10 23:24:03.187 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower Set Warte auf aktuelle Daten von: XXXXXXXXXXXXXXX lezter: 23:23:01 / ACset: 23:23:27
                            2023-09-10 23:24:08.442 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower Set Warte auf aktuelle Daten von: XXXXXXXXXXXXXXX lezter: 23:23:01 / ACset: 23:23:27
                            2023-09-10 23:24:13.942 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower Set Warte auf aktuelle Daten von: XXXXXXXXXXXXXXX lezter: 23:23:01 / ACset: 23:23:27
                            2023-09-10 23:24:19.273 - info: javascript.0 (1259) script.js.Ecoflow3: Hausstrom: 27.19
                            2023-09-10 23:24:19.273 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower: 316
                            2023-09-10 23:24:19.274 - info: javascript.0 (1259) script.js.Ecoflow3: LastRealPower: 326
                            2023-09-10 23:24:19.274 - info: javascript.0 (1259) script.js.Ecoflow3: Einspeisung: 289.3
                            2023-09-10 23:24:24.676 - info: javascript.0 (1259) script.js.Ecoflow3: Hausstrom: 27.19
                            2023-09-10 23:24:24.678 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower: 318
                            2023-09-10 23:24:24.679 - info: javascript.0 (1259) script.js.Ecoflow3: LastRealPower: 316
                            2023-09-10 23:24:24.679 - info: javascript.0 (1259) script.js.Ecoflow3: Einspeisung: 290.4
                            2023-09-10 23:24:30.158 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower Set Warte auf aktuelle Daten von: XXXXXXXXXXXXXXX lezter: 23:24:20 / ACset: 23:24:27
                            2023-09-10 23:24:35.525 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower Set Warte auf aktuelle Daten von: XXXXXXXXXXXXXXX lezter: 23:24:20 / ACset: 23:24:27
                            2023-09-10 23:24:40.984 - info: javascript.0 (1259) script.js.Ecoflow3: RealPower Set Warte auf aktuelle Daten von: XXXXXXXXXXXXXXX lezter: 23:24:20 / ACset: 23:24:27
                            

                            Zwischendrin kommen dann wieder Werte (Hausstrom, RealPower etc), aber das Skript hängt dann anschließend weiter in dieser Schleife und der Realpower Wert wird nur all 1 min 30s aktualisiert, was dann die Regelung komplett ruiniert.

                            EDIT:
                            Es sieht so aus, als ob die Daten vom ersten PS nicht richtig ankommen und er deshalb da hängenbleibt. Auch wenn ich das ganze auskommentiere und immer die Einspeisung schreibe, dann fehlt dort der Wert vom ersten PS. Irgendwie kann er die nicht mehr abrufen..

                            Ich vermute es liegt doch irgendwie an der MQTT Verbindung und dem reconnect Zyklus in der Nacht. Da wird ja nur alle 15min reconnected, wenn beim PS nichts mehr ankommt. Tagsüber jede Minute. Muss es noch länger beobachten.
                            Jedenfalls konnte ich feststellen, dass bei einem Ausfall die Regelung wieder gestartet hat, nachdem ich die App geöffnet habe. Als ich dann die App komplett geschlossen habe, ist die Regelung wieder stehen geblieben. (Ein restart des Skripts hilft auch dabei, sich wieder mit dem Mqtt zu verbinden.)

                            W 1 Reply Last reply Reply Quote 0
                            • A
                              Accu last edited by

                              ich würde gerne den Watt Ladewert der EF DP per Skript hochregeln.
                              Weiß jemand wieso der Wert nicht überschreibbar ist? Ich versuche z.B. 300W zu setzen, sehe auch kurz dass der wert in dem Datenpunkt hinterlegt wird, aber irgendwie wird das sofort auf 200W zurück gesetzt.

                              Bildschirmfoto 2023-09-11 um 11.58.54.png

                              auch mit dem Befehl "steuere" gehts nicht.
                              0_userdata.0.ecoflow.app_device_property_DCEBZ8ZE7041280.data.params.inv.cfgSlowChgWatts

                              P 1 Reply Last reply Reply Quote 0
                              • P
                                Ponti92 @Accu last edited by

                                @accu Das musst du über die writeables steuern, z.b. bei der D2M

                                0_userdata.0.powerstream.app_XXXXXXXXXXX_XXXXXXXXXX_thing_property_set.writeables.slowChgWatts
                                

                                Da ich keine config im Skript für die DP sehe, weiß ich nicht, ob das schon unterstützt wird. Kannst du einen writeables Ordner im *thing_property_set." Ordner deiner DP sehen?

                                A 1 Reply Last reply Reply Quote 0
                                • A
                                  Accu @Ponti92 last edited by

                                  @ponti92 danke für den Hinweis. Habe im Skript den Powerstream komplett gedisabled und nutze nur die Werte für die Delta Pro, die im iobroker angzeigt werden, die das Skript bereit stellt.
                                  Habe jetzt mal auf den writeable gestellt: 0_userdata.0.ecoflow.app_155651236123138923482_DCEBZ8ZE7041280_thing_property_set.writeables.slowChgPower

                                  und mal kurz getestet.
                                  im iobroker wird das writeable tatsächlich jetzt mit den richtigen wert aus dem Skript befüllt (300, 400 ...) allerdings wenn ich die iOS app aufmache, steht darin leider immer noch die 200W beim Laden 😞

                                  P 1 Reply Last reply Reply Quote 0
                                  • P
                                    Ponti92 @Accu last edited by

                                    @accu Hast du als Typ "DM" eingetragen für deine Delta Pro?
                                    Manchmal dauert es auch ein bisschen, bis der Wert in die App übernommen wird, da die App sehr träge ist..

                                    Leider habe ich keine DP, sodass ich das Testen kann, aber zumindest in GitHub habe ich die selbe Konfiguration der DP für das slowChg gefunden:

                                    Chargepower from grid
                                    {
                                    "from": "Android",
                                    "id": "312541279",
                                    "moduleType": 0,
                                    "operateType": "TCP",
                                    "params": {
                                    "slowChgPower": 300,
                                    "id": 69
                                    },
                                    "version": "1.0"
                                    },
                                    

                                    https://github.com/tolwi/hassio-ecoflow-cloud/issues/1

                                    Das sieht eigentlich genauso aus, wie es in diesem Skript verwendet wird..

                                    github-sunny created this issue in tolwi/hassio-ecoflow-cloud

                                    closed Delta Pro #1

                                    A 1 Reply Last reply Reply Quote 0
                                    • A
                                      Accu @Ponti92 last edited by Accu

                                      @ponti92 nein DP für Delta Pro

                                      Schaut so bei mir aus:

                                       {
                                                  seriennummer: "DCE123358Z45672341280",
                                                  name: "DELTA Pro",
                                                  typ: "DP",
                                                  subscribe: true,                            // "true": Alle Daten für dieses Gerät werden angefragt. "false": Es werden keine Statusdaten abgefragt
                                              },```
                                      P G 2 Replies Last reply Reply Quote 0
                                      • P
                                        Ponti92 @Accu last edited by

                                        @accu dieser Type wird aber im Skript nicht explizit unterstützt. Da gibt es nur PS, D2, D2M, SM und NA (andere).
                                        Deshalb würde ich mal „DM“ probieren, da die config für slowChgPower wie für die DP identisch sein müsste.

                                        A 1 Reply Last reply Reply Quote 0
                                        • G
                                          GerdSo @Accu last edited by

                                          @accu DM funktioniert für die Delta Pro sehr gut, inkl. setzen des AC-Ausgangs

                                          1 Reply Last reply Reply Quote 0
                                          • G
                                            GerdSo @Waly_de last edited by

                                            @waly_de Danke, habe es jetzt auf 3000 hochgesetzt und es steigt zwar aus, durch den reconnect verbindet sich es aber wieder und es erscheint nicht mehr die error Zeile.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            967
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            126
                                            1630
                                            512872
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo