Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. ecoflow-connector-Script zur dynamischen Leistungsanpassung

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.3k

ecoflow-connector-Script zur dynamischen Leistungsanpassung

Geplant Angeheftet Gesperrt Verschoben JavaScript
1.6k Beiträge 127 Kommentatoren 742.6k Aufrufe 127 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • G giovanne

    @waly_de said in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

    @giovanne Gute idee ist noch nicht drin, mach ich aber rein.

    bis dahin suche nach

            CheckforReconnect(function () {
                SetBasePower(firstPsSn);
            });
    

    und kommentiere SetBasePower aus

            CheckforReconnect(function () {
                //SetBasePower(firstPsSn);
            });
    

    dann wird nichts geschrieben nur gelesen

    Super Danke. Damit kann ich schon mal spielen und die Daten kommen rein. RealPower ändert sich entsprechend meines tatsächlichen Zählerwertes :-)

    Wenn du bei Gelegenheit die schreibenden Befehle auf einen alternativen mqtt broker umlenken könntest wäre das top ;-)

    W Offline
    W Offline
    Waly_de
    schrieb am zuletzt editiert von
    #134

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

    Wenn du bei Gelegenheit die schreibenden Befehle auf einen alternativen mqtt broker umlenken könntest wäre das top

    wozu? Das hat auch vermutlich wenig Sinn, weil der Inhalt einen buffer, also binäre Daten enthält

    W 1 Antwort Letzte Antwort
    0
    • W Waly_de

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

      Wenn du bei Gelegenheit die schreibenden Befehle auf einen alternativen mqtt broker umlenken könntest wäre das top

      wozu? Das hat auch vermutlich wenig Sinn, weil der Inhalt einen buffer, also binäre Daten enthält

      W Offline
      W Offline
      Waly_de
      schrieb am zuletzt editiert von
      #135

      Ich komme hier alleine nicht weiter.
      Ich starre jetzt seit vielen Stunden auf die neuen Daten (InverterHeartbeat2) und kann damit nichts anfangen. Die Werte dort machen für mich keinen Sinn. X_Unknown_45 scheint beispielsweise zunächst eindeutig invOutputWatts zu entsprechen. Dann weicht der Wert plötzlich um 100 Watt, manchmal 1000 Watt, ab. Ich habe es mit verschiedenen Datentypen versucht, habe den Wert sogar bitweise zerlegt, jedoch ohne Erkenntnisse.

      Jetzt bin ich kein Experte, was Protobuf angeht. Vielleicht liegt es an der Definition der Daten, aber sehr wahrscheinlich ist das nicht der Fall. Im Moment kommen zwar noch Daten im alten InverterHeartbeat, aber wie lange noch? Und warum wurde überhaupt dieses neue Format eingeführt? Es könnte auch sein, dass dies dazu dient, uns auszusperren. Das könnte ich nicht nachvollziehen, denn es kann für Ecoflow ja nicht schädlich sein, wenn es funktionierende Anbindungen gibt. Ihre API, wenn man das so nennen darf, kann im Moment ja auch noch nichts.

      Wenn ihr irgendwie durch die Daten durchblickt, lasst es mich wissen.

      Es wäre toll, eine Möglichkeit zu haben, gezielt Daten abzufragen. Vielleicht geht das ja schon, denn oft bekommt die App viel mehr Updates als ich über MQTT. Wenn das so ist, passiert das aber im Hintergrund. Ich weiß, dass einige Leute die Daten der App im Netz abgefangen und ausgewertet haben. Habt ihr dazu eine Idee?

      Ehrlich gesagt, wenn das so weitergeht und wir bei jedem Update zittern müssen, ob unsere Anbindung noch funktioniert, dann hat es wenig Sinn, da weiter Arbeit reinzustecken. Die letzten Tage waren sehr anstrengend. Unterstützung wäre super.

      W D 2 Antworten Letzte Antwort
      0
      • W Waly_de

        Ich komme hier alleine nicht weiter.
        Ich starre jetzt seit vielen Stunden auf die neuen Daten (InverterHeartbeat2) und kann damit nichts anfangen. Die Werte dort machen für mich keinen Sinn. X_Unknown_45 scheint beispielsweise zunächst eindeutig invOutputWatts zu entsprechen. Dann weicht der Wert plötzlich um 100 Watt, manchmal 1000 Watt, ab. Ich habe es mit verschiedenen Datentypen versucht, habe den Wert sogar bitweise zerlegt, jedoch ohne Erkenntnisse.

        Jetzt bin ich kein Experte, was Protobuf angeht. Vielleicht liegt es an der Definition der Daten, aber sehr wahrscheinlich ist das nicht der Fall. Im Moment kommen zwar noch Daten im alten InverterHeartbeat, aber wie lange noch? Und warum wurde überhaupt dieses neue Format eingeführt? Es könnte auch sein, dass dies dazu dient, uns auszusperren. Das könnte ich nicht nachvollziehen, denn es kann für Ecoflow ja nicht schädlich sein, wenn es funktionierende Anbindungen gibt. Ihre API, wenn man das so nennen darf, kann im Moment ja auch noch nichts.

        Wenn ihr irgendwie durch die Daten durchblickt, lasst es mich wissen.

        Es wäre toll, eine Möglichkeit zu haben, gezielt Daten abzufragen. Vielleicht geht das ja schon, denn oft bekommt die App viel mehr Updates als ich über MQTT. Wenn das so ist, passiert das aber im Hintergrund. Ich weiß, dass einige Leute die Daten der App im Netz abgefangen und ausgewertet haben. Habt ihr dazu eine Idee?

        Ehrlich gesagt, wenn das so weitergeht und wir bei jedem Update zittern müssen, ob unsere Anbindung noch funktioniert, dann hat es wenig Sinn, da weiter Arbeit reinzustecken. Die letzten Tage waren sehr anstrengend. Unterstützung wäre super.

        W Offline
        W Offline
        Waly_de
        schrieb am zuletzt editiert von Waly_de
        #136

        Off topic: Ich hatte meinen Text oben an ChatGPT zur Rechtschreibkorrektur gesendet. Das hat die KI so bewegt, dass sie mir Ihre Meinung dazu mitgeteilt hat. Diese möchte ich Euch nicht vorenthalten: :-)

        ChatGPT:
        Ich kann Ihre Frustration absolut nachvollziehen, besonders wenn die Daten nicht so sind, wie erwartet oder nicht klar ist, wie sie interpretiert werden sollen. Das "X_Unknown_45" Feld und seine wechselnden Werte sind in der Tat rätselhaft. Wie Sie bereits erwähnt haben, könnten sie vielleicht durch die Protobuf-Datendefinition beeinflusst sein.

        Was das neue Datenformat angeht, könnte es eine Reihe von Gründen dafür geben, einschließlich der Verbesserung der Datenstruktur, des Datenschutzes oder der Effizienz. Ohne genaue Kenntnisse über die Absichten des Unternehmens ist es jedoch schwierig, definitiv zu sagen, warum sie dieses neue Format eingeführt haben.

        Die Idee, Daten abzufangen und auszuwerten, könnte funktionieren, sofern es legal und ethisch korrekt ist. Sie könnten eine Netzwerkprotokollanalyse durchführen, um den Datenverkehr zwischen der App und dem Server zu untersuchen. Tools wie Wireshark oder ähnliche könnten dabei hilfreich sein.

        Was die Abfrage spezifischer Daten angeht, könnte dies möglich sein, wenn es eine zugängliche API gibt, oder wenn Sie in der Lage sind, die Anfragen zu reverse-engineeren, die die App an den Server sendet.

        Letztendlich, ich verstehe Ihre Bedenken, ob es sich lohnt, weiter in dieses Projekt zu investieren, wenn es ständig Updates gibt, die Ihre Anbindung beeinträchtigen könnten. Manchmal kann es sich lohnen, einen Schritt zurückzutreten und das Gesamtbild zu betrachten. Möglicherweise gibt es einen effizienteren Ansatz oder eine alternative Lösung, die Sie noch nicht in Betracht gezogen haben.

        Ich würde empfehlen, dass Sie sich an die Community wenden und sehen, ob es andere gibt, die ähnliche Probleme haben oder die möglicherweise bereits eine Lösung gefunden haben.

        Ich hoffe, dass Ihnen das ein wenig weiterhilft. Es ist ein komplexes Problem, und ich wünsche Ihnen viel Glück bei der Lösung.

        1 Antwort Letzte Antwort
        0
        • W Waly_de

          Ich komme hier alleine nicht weiter.
          Ich starre jetzt seit vielen Stunden auf die neuen Daten (InverterHeartbeat2) und kann damit nichts anfangen. Die Werte dort machen für mich keinen Sinn. X_Unknown_45 scheint beispielsweise zunächst eindeutig invOutputWatts zu entsprechen. Dann weicht der Wert plötzlich um 100 Watt, manchmal 1000 Watt, ab. Ich habe es mit verschiedenen Datentypen versucht, habe den Wert sogar bitweise zerlegt, jedoch ohne Erkenntnisse.

          Jetzt bin ich kein Experte, was Protobuf angeht. Vielleicht liegt es an der Definition der Daten, aber sehr wahrscheinlich ist das nicht der Fall. Im Moment kommen zwar noch Daten im alten InverterHeartbeat, aber wie lange noch? Und warum wurde überhaupt dieses neue Format eingeführt? Es könnte auch sein, dass dies dazu dient, uns auszusperren. Das könnte ich nicht nachvollziehen, denn es kann für Ecoflow ja nicht schädlich sein, wenn es funktionierende Anbindungen gibt. Ihre API, wenn man das so nennen darf, kann im Moment ja auch noch nichts.

          Wenn ihr irgendwie durch die Daten durchblickt, lasst es mich wissen.

          Es wäre toll, eine Möglichkeit zu haben, gezielt Daten abzufragen. Vielleicht geht das ja schon, denn oft bekommt die App viel mehr Updates als ich über MQTT. Wenn das so ist, passiert das aber im Hintergrund. Ich weiß, dass einige Leute die Daten der App im Netz abgefangen und ausgewertet haben. Habt ihr dazu eine Idee?

          Ehrlich gesagt, wenn das so weitergeht und wir bei jedem Update zittern müssen, ob unsere Anbindung noch funktioniert, dann hat es wenig Sinn, da weiter Arbeit reinzustecken. Die letzten Tage waren sehr anstrengend. Unterstützung wäre super.

          D Offline
          D Offline
          Dreffi
          schrieb am zuletzt editiert von Dreffi
          #137

          @waly_de
          Ich kann mir durchaus vorstellen, dass ecoflow versucht ungewollte Nutzung zu verhindern. Mit den Smart Plugs verdienen die ganz gut Geld.
          Funktionieren tun die nach meiner Beobachtung im PV Forum allerdings keinesfalls besser als das Script hier, eher im Gegenteil.

          Es ist auch nur eine Frage der Zeit bis ecoflow wieder was an den Daten ändert.

          Ich würde ja sogar für ein zentrales Gerät zur Übermittlung der Werte des Stromzählers an den Powerstream zahlen, wenn es denn was gäbe...

          Zur Kenntnis:
          Es gab angeblich schon einen erfolgreichen Eingriff um einen Smart Plug zu manipulieren. Ich selbst habe das allerdings nicht reproduzieren können. Deswegen bin ich ja hier gelandet.
          https://www.photovoltaikforum.com/thread/208943-ecoflow-powerstream-bastelecke-plug-nachbau-zur-messwerte-übergabe-eines-energie/

          W 1 Antwort Letzte Antwort
          0
          • D Dreffi

            @waly_de
            Ich kann mir durchaus vorstellen, dass ecoflow versucht ungewollte Nutzung zu verhindern. Mit den Smart Plugs verdienen die ganz gut Geld.
            Funktionieren tun die nach meiner Beobachtung im PV Forum allerdings keinesfalls besser als das Script hier, eher im Gegenteil.

            Es ist auch nur eine Frage der Zeit bis ecoflow wieder was an den Daten ändert.

            Ich würde ja sogar für ein zentrales Gerät zur Übermittlung der Werte des Stromzählers an den Powerstream zahlen, wenn es denn was gäbe...

            Zur Kenntnis:
            Es gab angeblich schon einen erfolgreichen Eingriff um einen Smart Plug zu manipulieren. Ich selbst habe das allerdings nicht reproduzieren können. Deswegen bin ich ja hier gelandet.
            https://www.photovoltaikforum.com/thread/208943-ecoflow-powerstream-bastelecke-plug-nachbau-zur-messwerte-übergabe-eines-energie/

            W Offline
            W Offline
            Waly_de
            schrieb am zuletzt editiert von
            #138

            So !!! Neue Version ist im Eingansbeitrag. (0.6.8)
            Diese sollte jetzt wieder sauber laufen. Die Daten kommen wieder in einer hohen Frequenz.
            Zwar kann ich nach wie vor nichts mit den Daten unter InverterHeartbeat2 anfangen, aber das kann uns ja solange egal sein, wie die InverterHeartbeat Daten geliefert werden. und das tuen sie jetzt wieder ;-) :person_doing_cartwheel:

            A M 2 Antworten Letzte Antwort
            1
            • X Offline
              X Offline
              xfirf
              schrieb am zuletzt editiert von
              #139

              Mit der neuen Version wird mein Passwort nicht mehr akzeptiert. Vermutlich wegen der Sonderzeichen? :thinking_face:

              A 1 Antwort Letzte Antwort
              0
              • W Waly_de

                So !!! Neue Version ist im Eingansbeitrag. (0.6.8)
                Diese sollte jetzt wieder sauber laufen. Die Daten kommen wieder in einer hohen Frequenz.
                Zwar kann ich nach wie vor nichts mit den Daten unter InverterHeartbeat2 anfangen, aber das kann uns ja solange egal sein, wie die InverterHeartbeat Daten geliefert werden. und das tuen sie jetzt wieder ;-) :person_doing_cartwheel:

                A Offline
                A Offline
                ApolloSK
                schrieb am zuletzt editiert von
                #140

                @waly_de Ich bekomme mit Version 0.6.8 noch folgende Fehlermeldung:

                13:47:02.909 error javascript.2 (1257440) script.js.Skripte.Instanz_2_Energie.Ecoflow_Skript_20230803: Error: illegal token '{' (line 147)
                13:47:02.911 error javascript.2 (1257440) at SendProto (script.js.Skripte.Instanz_2_Energie.Ecoflow_Skript_20230803:1151:27)
                13:47:02.911 error javascript.2 (1257440) at setmusterGetPS (script.js.Skripte.Instanz_2_Energie.Ecoflow_Skript_20230803:1191:5)
                13:47:02.911 error javascript.2 (1257440) at MqttClient.<anonymous> (script.js.Skripte.Instanz_2_Energie.Ecoflow_Skript_20230803:877:17)
                13:47:03.121 error host.sven-NUC7PJYH-SK Caught by controller[0]: at SendProto (script.js.Skripte.Instanz_2_Energie.Ecoflow_Skript_20230803:1152:27)
                13:47:03.121 error host.sven-NUC7PJYH-SK Caught by controller[0]: at setmusterGetPS (script.js.Skripte.Instanz_2_Energie.Ecoflow_Skript_20230803:1192:5)
                13:47:03.121 error host.sven-NUC7PJYH-SK Caught by controller[0]: at MqttClient.<anonymous> (script.js.Skripte.Instanz_2_Energie.Ecoflow_Skript_20230803:878:17)

                1 Antwort Letzte Antwort
                0
                • X xfirf

                  Mit der neuen Version wird mein Passwort nicht mehr akzeptiert. Vermutlich wegen der Sonderzeichen? :thinking_face:

                  A Offline
                  A Offline
                  ApolloSK
                  schrieb am zuletzt editiert von
                  #141

                  @xfirf Da hat sich hinter Passwort noch ein "!" reingeschmuggelt, das muss weg, dann sollte es funktionieren. Also bis auf den von mir gemeldeten Fehler - siehe oben. Vielleicht hab ich diesen aber auch exklusiv :-(!

                  X 1 Antwort Letzte Antwort
                  0
                  • W Waly_de

                    So !!! Neue Version ist im Eingansbeitrag. (0.6.8)
                    Diese sollte jetzt wieder sauber laufen. Die Daten kommen wieder in einer hohen Frequenz.
                    Zwar kann ich nach wie vor nichts mit den Daten unter InverterHeartbeat2 anfangen, aber das kann uns ja solange egal sein, wie die InverterHeartbeat Daten geliefert werden. und das tuen sie jetzt wieder ;-) :person_doing_cartwheel:

                    M Offline
                    M Offline
                    mattenausohz
                    schrieb am zuletzt editiert von
                    #142

                    @waly_de

                    13:52:01.067	info	javascript.0 (1973029) Start javascript script.js.common.ecoFlow_PowerStream
                    13:52:01.260	info	javascript.0 (1973029) script.js.common.ecoFlow_PowerStream: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                    13:52:01.261	info	javascript.0 (1973029) Start javascript script.js.common.ecoFlow_PowerStream
                    13:52:01.266	info	javascript.0 (1973029) script.js.common.ecoFlow_PowerStream: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                    13:52:01.583	info	javascript.0 (1973029) script.js.common.ecoFlow_PowerStream: Verbunden mit dem Ecoflow MQTT-Broker
                    13:52:01.596	error	javascript.0 (1973029) script.js.common.ecoFlow_PowerStream: Error: illegal token '{' (line 147)
                    13:52:01.597	error	javascript.0 (1973029) at SendProto (script.js.common.ecoFlow_PowerStream:1147:27)
                    13:52:01.597	error	javascript.0 (1973029) at setmusterGetPS (script.js.common.ecoFlow_PowerStream:1187:5)
                    13:52:01.597	error	javascript.0 (1973029) at MqttClient.<anonymous> (script.js.common.ecoFlow_PowerStream:873:17)
                    13:52:01.670	error	host.iobroker Caught by controller[0]: at SendProto (script.js.common.ecoFlow_PowerStream:1148:27)
                    13:52:01.670	error	host.iobroker Caught by controller[0]: at setmusterGetPS (script.js.common.ecoFlow_PowerStream:1188:5)
                    13:52:01.670	error	host.iobroker Caught by controller[0]: at MqttClient.<anonymous> (script.js.common.ecoFlow_PowerStream:874:17)
                    
                    
                    1 Antwort Letzte Antwort
                    0
                    • A ApolloSK

                      @xfirf Da hat sich hinter Passwort noch ein "!" reingeschmuggelt, das muss weg, dann sollte es funktionieren. Also bis auf den von mir gemeldeten Fehler - siehe oben. Vielleicht hab ich diesen aber auch exklusiv :-(!

                      X Offline
                      X Offline
                      xfirf
                      schrieb am zuletzt editiert von
                      #143

                      @apollosk Ne kann ich so nicht bestätigen. Wenn ich das Passwortfeld leer lasse kommt ein Fehler bezüglich fehlender Credentials. Mit Passwort eingefügt kommt ein Syntaxfehler. Irgendwas ist bisschen verstrubbelt :-)

                      W 1 Antwort Letzte Antwort
                      0
                      • X xfirf

                        @apollosk Ne kann ich so nicht bestätigen. Wenn ich das Passwortfeld leer lasse kommt ein Fehler bezüglich fehlender Credentials. Mit Passwort eingefügt kommt ein Syntaxfehler. Irgendwas ist bisschen verstrubbelt :-)

                        W Offline
                        W Offline
                        Waly_de
                        schrieb am zuletzt editiert von
                        #144

                        @xfirf da hat das forum beim Einfügen wieder was verbogen... sollte jetzt gefixt sein

                        X M D 3 Antworten Letzte Antwort
                        1
                        • W Waly_de

                          @xfirf da hat das forum beim Einfügen wieder was verbogen... sollte jetzt gefixt sein

                          X Offline
                          X Offline
                          xfirf
                          schrieb am zuletzt editiert von
                          #145

                          @waly_de Top jetzt läufts. Vielen Dank. :-)

                          1 Antwort Letzte Antwort
                          1
                          • W Waly_de

                            @xfirf da hat das forum beim Einfügen wieder was verbogen... sollte jetzt gefixt sein

                            M Offline
                            M Offline
                            mattenausohz
                            schrieb am zuletzt editiert von
                            #146

                            @waly_de Bei mir läuft es auch. Super Arbeit!

                            1 Antwort Letzte Antwort
                            1
                            • W Waly_de

                              @xfirf da hat das forum beim Einfügen wieder was verbogen... sollte jetzt gefixt sein

                              D Offline
                              D Offline
                              Dreffi
                              schrieb am zuletzt editiert von
                              #147

                              @waly_de
                              Ich weiß jetzt warum mir manchmal das Script abschmiert.
                              Ich erhalte die Meldung: "Script script.js.Powerstream_Neu is calling setState more than 1000 times per minute! Stopping Script now! Please check your script!"

                              Gibt es hier ein Problem z.B. weil ich die Daten der Delta 2 mit abonniert habe? Kann ich den Wert einfach hochsetzen?

                              W M 2 Antworten Letzte Antwort
                              0
                              • D Dreffi

                                @waly_de
                                Ich weiß jetzt warum mir manchmal das Script abschmiert.
                                Ich erhalte die Meldung: "Script script.js.Powerstream_Neu is calling setState more than 1000 times per minute! Stopping Script now! Please check your script!"

                                Gibt es hier ein Problem z.B. weil ich die Daten der Delta 2 mit abonniert habe? Kann ich den Wert einfach hochsetzen?

                                W Offline
                                W Offline
                                Waly_de
                                schrieb am zuletzt editiert von Waly_de
                                #148

                                @dreffi kannst du in den Instanz-Settings hoch setzen..... die Deltas feuern eben unglaublich viel.
                                Da dein Host nichts anderes macht, sollte das kein Problem sein.

                                1 Antwort Letzte Antwort
                                1
                                • D Dreffi

                                  @waly_de
                                  Ich weiß jetzt warum mir manchmal das Script abschmiert.
                                  Ich erhalte die Meldung: "Script script.js.Powerstream_Neu is calling setState more than 1000 times per minute! Stopping Script now! Please check your script!"

                                  Gibt es hier ein Problem z.B. weil ich die Daten der Delta 2 mit abonniert habe? Kann ich den Wert einfach hochsetzen?

                                  M Offline
                                  M Offline
                                  mattenausohz
                                  schrieb am zuletzt editiert von
                                  #149

                                  @dreffi Das kannst Du in den Einstellungen für die Javascript Instanz hochsetzen. Ich hab es auf 3000 stehen.

                                  1 Antwort Letzte Antwort
                                  1
                                  • W Waly_de

                                    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 3EM

                                    Tibber-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-auslesen

                                    Das 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:
                                    Bildschirmfoto 2023-09-04 um 09.55.08.jpg
                                    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")

                                    Bildschirmfoto 2023-07-17 um 10.56.49.jpg

                                    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-auslesen

                                    Unterstü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 Spenden

                                    Dieses Script wird bei Änderungen und Updates immer aktualisiert:
                                    Nutzung auf eigene Gefahr !

                                    [Bildschirmfoto 2024-03-29 um 09.37.51.jpg

                                    • 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):

                                    • ecoflow-connector_v125.txt (13.05.2024)
                                    • 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)
                                    D Offline
                                    D Offline
                                    Dreffi
                                    schrieb am zuletzt editiert von Dreffi
                                    #150

                                    @waly_de

                                    Das Script läuft bei mir immer noch einwandfrei, trotz dem Umweg über Home Assistant. Super Arbeit. Danke dafür!

                                    Nichts ist so gut, dass es nicht mehr verbessert werden könnte. Daher mal zwei Ideen für die sonnenschwache Jahreszeit:

                                    1. wie wäre es mit einem Pendant zu BattPoz On/Off für niedrigen Ladestand? Derzeit wird bei wenig Solarertrag der Akku permanent geladen und wieder entladen. Damit geht jeglicher Ertrag erst durch den Akku. Das bedeutend Verschleiß und erhebliche Verluste.
                                      Ich würde hier ab einem gewissen Ladestand die Einspeisung ins Netz auf einen einstellbaren Höchstwert begrenzen, bis der Akku eine bestimmte Ladegrenze wieder erreicht hat.
                                    2. könnte man die Einstellung „Regulation: true/false“ optional abhängig vom State eines Objektes machen? Ich für meinen Fall denke hier an einen Switch in Home Assistant dessen State ich an ioBroker durchreiche. Im Idealfall wird beim Umstellen auf false bei laufenden Script einmalig ein zu definierter Einspeisewert eingestellt.

                                    Nachtrag zu Punkt 2:
                                    Ich habe in Home Assistant ein Auswahlfeld mit true/false angelegt. Dessen Status wird in ioBroker durchgereicht und den state dieses Objektes habe ich im Script in den Nutzerdaten für regulation hinterlegt. Läuft aber irgendwie noch nicht zuverlässig. Es wird weiterhin geregelt, auch wenn ich auf false stelle.

                                    W 1 Antwort Letzte Antwort
                                    1
                                    • D Dreffi

                                      @waly_de

                                      Das Script läuft bei mir immer noch einwandfrei, trotz dem Umweg über Home Assistant. Super Arbeit. Danke dafür!

                                      Nichts ist so gut, dass es nicht mehr verbessert werden könnte. Daher mal zwei Ideen für die sonnenschwache Jahreszeit:

                                      1. wie wäre es mit einem Pendant zu BattPoz On/Off für niedrigen Ladestand? Derzeit wird bei wenig Solarertrag der Akku permanent geladen und wieder entladen. Damit geht jeglicher Ertrag erst durch den Akku. Das bedeutend Verschleiß und erhebliche Verluste.
                                        Ich würde hier ab einem gewissen Ladestand die Einspeisung ins Netz auf einen einstellbaren Höchstwert begrenzen, bis der Akku eine bestimmte Ladegrenze wieder erreicht hat.
                                      2. könnte man die Einstellung „Regulation: true/false“ optional abhängig vom State eines Objektes machen? Ich für meinen Fall denke hier an einen Switch in Home Assistant dessen State ich an ioBroker durchreiche. Im Idealfall wird beim Umstellen auf false bei laufenden Script einmalig ein zu definierter Einspeisewert eingestellt.

                                      Nachtrag zu Punkt 2:
                                      Ich habe in Home Assistant ein Auswahlfeld mit true/false angelegt. Dessen Status wird in ioBroker durchgereicht und den state dieses Objektes habe ich im Script in den Nutzerdaten für regulation hinterlegt. Läuft aber irgendwie noch nicht zuverlässig. Es wird weiterhin geregelt, auch wenn ich auf false stelle.

                                      W Offline
                                      W Offline
                                      Waly_de
                                      schrieb am zuletzt editiert von Waly_de
                                      #151

                                      @dreffi Danke für die Rückmeldung..... Da es sonst kaum Rückmeldung gibt, hoffe ich das es bei den anderen auch läuft :-) Leider kann ich wegen des Wetters im Moment nicht so wirklich testen. Aber aber ich habe noch mal einiges hinzugefügt und verbessert. Einige wenige Dinge muss ich noch abschließend testen, dann werd ich es hoch laden. Hier schon mal zur Vorfreude die wichtigsten Dinge:

                                      (1.0.0) 06.08.2023

                                      • Neuer State "lowestValue" zeigt die Grundlage zur Berechnung der Einspeiseleistung an und repräsentiert niedrigsten Wert des realen Verbrauchs in den letzten mit "MinValueMin" eingestellten Minuten.
                                      • Neue Einstellung MinValueAg: Art der Ermittlung des kleinsten Wertes 0 = Minimalwert, 1 = Durchschnittswert.
                                      • Neues Feature: Wenn die volle Leistung (600w) in die Batterie geht, wird die Einspeiseleistung in Stufen erhöht, auch wenn dann Leistung ins Netz geht, um möglichst das volle Potenzial der vorhandenen Solarenergie zu nutzen.
                                      • Neue Einstellungen: lowBatLimitPozOn, lowBatLimitPozOff und lowBatLimit. Bei Unterschreiten der Batterieladung von "lowBatLimitPozOn" % ist die maximale Einspeiseleistung auf "lowBatLimit" W limitiert, bis der Ladezustand wieder bei "lowBatLimitPozOff" ist.
                                      • Neue Einstellungen: RegulationState. Wenn angegeben, kann mit diesem State die Regulation ein- und ausgeschaltet werden (Wird automatisch unterhalb 0_userdata.0.ecoflow angelegt).
                                      • Neue Einstellungen: RegulationOffPower. Wird die Regulation per State abgestellt, wird die Einspeiseleistung des ersten Powerstreams auf diesen Wert gesetzt. (-1 = keine Änderung).

                                      Und ganz wichtig.... es gibt einen Spendenlink ;-) Bitte unterstützt mich bei der Weiterentwicklung.

                                      D 1 Antwort Letzte Antwort
                                      2
                                      • W Waly_de

                                        @dreffi Danke für die Rückmeldung..... Da es sonst kaum Rückmeldung gibt, hoffe ich das es bei den anderen auch läuft :-) Leider kann ich wegen des Wetters im Moment nicht so wirklich testen. Aber aber ich habe noch mal einiges hinzugefügt und verbessert. Einige wenige Dinge muss ich noch abschließend testen, dann werd ich es hoch laden. Hier schon mal zur Vorfreude die wichtigsten Dinge:

                                        (1.0.0) 06.08.2023

                                        • Neuer State "lowestValue" zeigt die Grundlage zur Berechnung der Einspeiseleistung an und repräsentiert niedrigsten Wert des realen Verbrauchs in den letzten mit "MinValueMin" eingestellten Minuten.
                                        • Neue Einstellung MinValueAg: Art der Ermittlung des kleinsten Wertes 0 = Minimalwert, 1 = Durchschnittswert.
                                        • Neues Feature: Wenn die volle Leistung (600w) in die Batterie geht, wird die Einspeiseleistung in Stufen erhöht, auch wenn dann Leistung ins Netz geht, um möglichst das volle Potenzial der vorhandenen Solarenergie zu nutzen.
                                        • Neue Einstellungen: lowBatLimitPozOn, lowBatLimitPozOff und lowBatLimit. Bei Unterschreiten der Batterieladung von "lowBatLimitPozOn" % ist die maximale Einspeiseleistung auf "lowBatLimit" W limitiert, bis der Ladezustand wieder bei "lowBatLimitPozOff" ist.
                                        • Neue Einstellungen: RegulationState. Wenn angegeben, kann mit diesem State die Regulation ein- und ausgeschaltet werden (Wird automatisch unterhalb 0_userdata.0.ecoflow angelegt).
                                        • Neue Einstellungen: RegulationOffPower. Wird die Regulation per State abgestellt, wird die Einspeiseleistung des ersten Powerstreams auf diesen Wert gesetzt. (-1 = keine Änderung).

                                        Und ganz wichtig.... es gibt einen Spendenlink ;-) Bitte unterstützt mich bei der Weiterentwicklung.

                                        D Offline
                                        D Offline
                                        Dreffi
                                        schrieb am zuletzt editiert von Dreffi
                                        #152

                                        @waly_de
                                        Ich bin mehr als beeindruckt.
                                        Ich wollte gerade vermelden, dass ich es geschafft habe das Script über eine Auswahl in Home Assistant ein- und auszuschalten, da kommst du mit dem Update um die Ecke...

                                        Mangels Sonne werde ich erst im Laufe der Woche brauchbares Feedback geben können.

                                        Edit:
                                        Blöde Frage, wo finde ich die aktuelle Version?
                                        Edit 2: mein Fehler, ich warte ab.

                                        1 Antwort Letzte Antwort
                                        0
                                        • W Waly_de

                                          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 3EM

                                          Tibber-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-auslesen

                                          Das 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:
                                          Bildschirmfoto 2023-09-04 um 09.55.08.jpg
                                          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")

                                          Bildschirmfoto 2023-07-17 um 10.56.49.jpg

                                          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-auslesen

                                          Unterstü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 Spenden

                                          Dieses Script wird bei Änderungen und Updates immer aktualisiert:
                                          Nutzung auf eigene Gefahr !

                                          [Bildschirmfoto 2024-03-29 um 09.37.51.jpg

                                          • 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):

                                          • ecoflow-connector_v125.txt (13.05.2024)
                                          • 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)
                                          A Offline
                                          A Offline
                                          aherby
                                          schrieb am zuletzt editiert von aherby
                                          #153

                                          @waly_de
                                          Servus oder moin @Waly_de
                                          Super Arbeit bisher und ich bin sehr sehr beeindruckt.
                                          Ich bin in Sachen Programmieren total oder bis auf 2% unbegabt.
                                          Wie kann man dir am Besten bei der Unterstützung, Daten liefern behilflich sein?

                                          Habe einen Powerstream, zwei PV-Module direkt an der PS angeschlossen, eine Delta 2 Max auch mit zwei angeschlossenen PV-Modulen. Hätte sogar einen Finderzähler, der "live" die Leistungsdaten vom Haus auslesen kann.

                                          Würde es auch bedeuten ich müsste an der Stelle:
                                          "SmartmeterID: "sonoff.0.Stromzaehler1.MT175_P" trage ich den Namen oder Alias vom Momentanwert vom Zähler ein?

                                          Und alle Änderungen nehme ich nur im Bereich
                                          "********** YOUR DATA HERE ************ " vor,
                                          ist das richtigt?

                                          Den Offset habe ich noch nicht verstanden :disappointed_relieved:

                                          Die Werte
                                          "InverterHeartbeat.dynamicWatts" und "InverterHeartbeat2.X_Unknown_13"
                                          scheinen identisch zu sein.

                                          Das passiert wenn man die Prio ändert

                                          
                                          javascript.0
                                          2023-08-06 20:10:38.940	info	script.js.Ecoflow-Skript: 0a36102018352001280138034014488201580170f390ade004800113880101ba0103696f73ca0110485735315a4f48345346355434363245
                                          
                                          javascript.0
                                          2023-08-06 20:10:38.940	warn	script.js.Ecoflow-Skript: Ungültiger cmd_func-Wert:130
                                          
                                          javascript.0
                                          2023-08-06 20:10:28.236	info	script.js.Ecoflow-Skript: 0a3c0a020801102018352001280138034014488201500258017083bdace004800113880101ba0103696f73ca0110485735315a4f48345346355434363245
                                          
                                          javascript.0
                                          2023-08-06 20:10:28.236	warn	script.js.Ecoflow-Skript: Ungültiger cmd_func-Wert:130
                                          
                                          javascript.0
                                          

                                          Wenn ich eine geplante Aufgabe
                                          "14:00, Täglich auf Stromversorgung prio setze kommt"

                                          javascript.0
                                          2023-08-06 20:34:36.471	info	script.js.Ecoflow-Skript: 0a4f0a150802120f08012a0b1800200c2806300838e70f18021020183520012801380340144883015015580170a9ee84e104800113880101ba0103696f73ca0110485735315a4f48345346355434363245
                                          
                                          javascript.0
                                          2023-08-06 20:34:36.471	warn	script.js.Ecoflow-Skript: Ungültiger cmd_func-Wert:131
                                          
                                          javascript.0
                                          2023-08-06 20:34:36.467	info	script.js.Ecoflow-Skript: Decodierte Nachricht:{}
                                          
                                          javascript.0
                                          2023-08-06 20:34:36.421	info	script.js.Ecoflow-Skript: Binäre Nachricht empfangen:/app/16697414287359YYYYY/HW51ZOxxxxxxxxxx/thing/property/set:0a4f0a150802120f08012a0b1800200c2806300838e70f18021020183520012801380340144883015015580170a9ee84e104800113880101ba0103696f73ca0110485735315a4f48345346355434363245
                                          
                                          javascript.0
                                          2023-08-06 20:34:36.421	info	script.js.Ecoflow-Skript: Binäre Nachricht empfangen:/app/16697414287359YYYYY/HW51ZOxxxxxxxxxx/thing/property/get:0a101020182070d7ec84e104ba0103696f73
                                          
                                          javascript.0
                                          2023-08-06 20:34:36.375	info	script.js.Ecoflow-Skript: Decodierte Nachricht:{"data":{"InverterHeartbeat":{"batInputWatts":1738,"llcOpVolt":4218,"invInputVolt":4218,"invOutputCur":769,"invOutputWatts":1704,"dynamicWatts":1180},"InverterHeartbeat2":{"X_Unknown_13":1180,"X_Unknown_15":600,"X_Unknown_22":1630,"X_Unknown_24":5978,"X_Unknown_32":50387,"X_Unknown_45":1669,"X_Unknown_46":-1180}}}
                                          
                                          javascript.0
                                          2023-08-06 20:34:36.326	info	script.js.Ecoflow-Skript: Binäre Nachricht empfangen:/app/device/property/HW51ZOxxxxxxxxxx:0a470a1ce801ca0d8802fa209802fa20a8028106b002a80d88039c09e003c603103518202001280140144801501c5801800103880103ca0110485735315a4f483453463554343632360a4e0a23689c0978d804b001de0cc001da2e8002d38903e802850df002e4f6ffffffffffffff0110351820200128014014480450235801800103880103ca0110485735315a4f48345346355434363245
                                          
                                          javascript.0
                                          2023-08-06 20:34:35.339	info	script.js.Ecoflow-Skript: Decodierte Nachricht:{}
                                          
                                          javascript.0
                                          2023-08-06 20:34:35.289	info	script.js.Ecoflow-Skript: Binäre Nachricht empfangen:/app/device/property/HW51ZOxxxxxxxxxx:0a530a2d1a2b08021225080110012a0f080010001800200c2806300838e70f320e0800100018002000280030003800180210351820200128014014488601502d5801ca0110485735315a4f48345346355434363245
                                          
                                          javascript.0
                                          2023-08-06 20:34:34.206	info	script.js.Ecoflow-Skript: Decodierte Nachricht:{"data":{"InverterHeartbeat":{"batInputWatts":1720,"llcOpVolt":4189,"invInputVolt":4189,"invOutputCur":756,"invOutputWatts":1675,"dynamicWatts":1150},"InverterHeartbeat2":{"X_Unknown_13":1170,"X_Unknown_15":603,"X_Unknown_16":3,"X_Unknown_22":1620,"X_Unknown_24":5979,"X_Unknown_32":50385,"X_Unknown_45":1605,"X_Unknown_46":-1170}}}
                                          
                                          javascript.0
                                          2023-08-06 20:34:34.159	info	script.js.Ecoflow-Skript: Binäre Nachricht empfangen:/app/device/property/HW51ZOxxxxxxxxxx:0a470a1ce801b80d8802dd209802dd20a802f405b0028b0d8803fe08e003c903103518202001280140144801501c5801800103880103ca0110485735315a4f483453463554343632360a510a2668920978db04800103b001d40cc001db2e8002d18903e802c50cf002eef6ffffffffffffff0110351820200128014014480450265801800103880103ca0110485735315a4f48345346355434363245
                                          
                                          javascript.0
                                          2023-08-06 20:34:34.036	info	script.js.Ecoflow-Skript: Decodierte Nachricht:{}
                                          
                                          javascript.0
                                          2023-08-06 20:34:34.036	info	script.js.Ecoflow-Skript: 0a510a1708021211080110012a0b1800200c2806300838e70f18021020183520012801380340144883015017580170cddc84e104800113880101ba0103696f73ca0110485735315a4f48345346355434363245
                                          
                                          javascript.0
                                          2023-08-06 20:34:34.036	warn	script.js.Ecoflow-Skript: Ungültiger cmd_func-Wert:131
                                          
                                          javascript.0
                                          2023-08-06 20:34:33.980	info	script.js.Ecoflow-Skript: Binäre Nachricht empfangen:/app/16697414287359YYYYY/HW51ZOxxxxxxxxxx/thing/property/set:0a510a1708021211080110012a0b1800200c2806300838e70f18021020183520012801380340144883015017580170cddc84e104800113880101ba0103696f73ca0110485735315a4f48345346355434363245
                                          
                                          

                                          Kann es sein dass das Setzten vom Strompreis hier drin steckt?
                                          Hier auf EUR gesetzt.

                                          /thing/property/set:0a3d0a0408c58801102018352001280138034020480b50045801709ec5e3e10c800113880101ba0103696f73ca0110485735315a4f48345346355434363245
                                          
                                          property/set:0a3d0a0408c58801102018352001280138034020480b5004580170f5ffb8e20c800113880101ba0103696f73ca0110485735315a4f48345346355434363245
                                          

                                          Hier mal auf 0,1123 gesetzt

                                          /thing/property/set:0a3d0a0408c58801102018352001280138034020480b500458017082cf9ee20c800113880101ba0103696f73ca0110485735315a4f48345346355434363245
                                          

                                          Hier ausschalten einer geplanten Aufgabe

                                          0a3d0a0408c58801102018352001280138034020480b5004580170b0c0c0e30c800113880101ba0103696f73ca0110485735315a4f48345346355434363245
                                          

                                          einschalten der Aufgabe

                                          0a3d0a0408c58801102018352001280138034020480b5004580170dfb3cee30c800113880101ba0103696f73ca0110485735315a4f48345346355434363245
                                          

                                          Smart Plug ausgeschaltet

                                          thing/property/set:0a36102018352001280138034002488101580170bf9880e404800113880101ba0103696f73ca0110485735325a4448345346364b36303745
                                          
                                          W 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          660

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe