Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. ecoflow-connector-Script zur dynamischen Leistungsanpassung

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    207

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

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

ecoflow-connector-Script zur dynamischen Leistungsanpassung

ecoflow-connector-Script zur dynamischen Leistungsanpassung

Scheduled Pinned Locked Moved JavaScript
1.6k Posts 127 Posters 741.2k Views 127 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • W Waly_de

    Da ich ich oft gehört habe, dass die Lösung mit dem Script nichts für jeden ist, weil es zu kompliziert einzurichten ist, habe ich mir Gedanken gemacht wie ich das ändern könnte.

    Wie wäre es, wenn ich ein Paket mit allen benötigten Teilen und einem vorkonfigurierten Raspsberry Pi anbieten würde. Es gäbe dann noch ein Video mit den wichtigsten Schritten der Einrichtung und natürlich persönlichen Support.

    Alternativ könnte ich auch eine SD-Karte mit vorinstalliertem Iobroker und Skript erstellen, die nur noch in einen Raspsberry Pi eingesetzt werden muss.

    Ich finde das auch deswegen spannend, weil es ein prima Einstieg in die SmartHome Welt sein kann, denn mit IoBroker kann man natürlich viel mehr machen als nur ECOFLOW- Geräte steuern. Bei mir wird die gesamte Haustechnik von verschiedensten Hersteller damit gesteuert und überwacht inclusive Alexa als Ausgabe- und Eingabewerkzeug.

    Was denkt Ihr?

    T Offline
    T Offline
    tom7657
    wrote on last edited by
    #403

    @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
    0
    • W Waly_de

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

      Funktioniert dieses Skript auch, wenn man keine Powerstation hat, sondern mit der Delta 2 max extra Batterie als Pufferspeicher arbeitet? Ich hatte mich für dieses Setting entschieden, weil die Batterie nur passiv gekühlt wird und weniger Eigenverbrauch hat. Und weil sie natürlich auch kostengünstiger ist, als die Delta 2 max.

      Willkommen in der wunderbaren Welt des IOBroker-Universums 😉
      Ja, das funktioniert. Der PowerStream ist hier die wichtigste Komponente und regelt die Speicherung alleine.

      T Offline
      T Offline
      tom7657
      wrote on last edited by
      #404

      @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
      0
      • T tom7657

        @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 Offline
        W Offline
        Waly_de
        wrote on last edited by Waly_de
        #405

        @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
        0
        • G Offline
          G Offline
          GerdSo
          wrote on last edited by GerdSo
          #406

          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
          0
          • G 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 Offline
            W Offline
            Waly_de
            wrote on last edited by Waly_de
            #407

            @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
            0
            • W 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 Offline
              G Offline
              GerdSo
              wrote on last edited by GerdSo
              #408

              @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
              0
              • W 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 Offline
                T Offline
                tom7657
                wrote on last edited by
                #409

                @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
                0
                • G 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 Offline
                  W Offline
                  Waly_de
                  wrote on last edited by Waly_de
                  #410

                  @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
                  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
                    wrote on last edited by
                    #411

                    @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
                    0
                    • W 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 Offline
                      P Offline
                      Ponti92
                      wrote on last edited by Ponti92
                      #412

                      @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
                      0
                      • A Offline
                        A Offline
                        Accu
                        wrote on last edited by
                        #413

                        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
                        0
                        • A Accu

                          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 Offline
                          P Offline
                          Ponti92
                          wrote on last edited by
                          #414

                          @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
                          0
                          • P Ponti92

                            @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 Offline
                            A Offline
                            Accu
                            wrote on last edited by
                            #415

                            @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
                            0
                            • A Accu

                              @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 Offline
                              P Offline
                              Ponti92
                              wrote on last edited by
                              #416

                              @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
                              0
                              • P Ponti92

                                @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 Offline
                                A Offline
                                Accu
                                wrote on last edited by Accu
                                #417

                                @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
                                0
                                • A 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 Offline
                                  P Offline
                                  Ponti92
                                  wrote on last edited by
                                  #418

                                  @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
                                  0
                                  • A 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
                                            },```
                                    G Offline
                                    G Offline
                                    GerdSo
                                    wrote on last edited by
                                    #419

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

                                    1 Reply Last reply
                                    0
                                    • W 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 Offline
                                      G Offline
                                      GerdSo
                                      wrote on last edited by
                                      #420

                                      @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
                                      0
                                      • B Offline
                                        B Offline
                                        BlackEagleBE
                                        wrote on last edited by
                                        #421

                                        Hallo und vielen lieben Dank für das tolle Script.

                                        Durch dieses Script wurden bekanntlich viele Ecoflow Smartplugs arbeitslos,... man könnte diesen jedoch eine zweite Chance geben und in iobroker als "gewöhnlichen" Smartplug (wie Tasmota, Shelly,...) weiterbeschäftigen.
                                        Dazu kann man diese in einem zweiten ecoflow-Account verwenden und mit einer zweiten Instanz des Scripts in den iobroker einbinden (also zweiter Account nur mit den Plugs), z.B. nach 0_userdata.0.ecoflow2 ... So melden die Plugs bei mir auch keinen Verbrauch an die PowerStream.

                                        Nun mein Problem:
                                        Leider liefert der Heartbeat für die Smart Plugs nur den aktuellen Verbrauch und offenbar keinen Wh Zähler, weder "seit dem Einstecken", noch pro Tag, Woche, Monat, etc. Übersehe ich etwas? So sind sie für mich leider wertlos. In der App sehe ich diese Werte (also nicht nur im Graphen, auch in der UI) und zweifelsohne muss der Plug einen solchen Zähler in irgendeiner Form mitschreiben... Besteht die Möglichkeit diesen Wert irgendwie als Objekte abzufragen? Ist hier nicht alles Subscribed? (Meine MQTT Kenntnisse sind leider zu gering um selbst zu stochern.)

                                        LG

                                        W 1 Reply Last reply
                                        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
                                          wrote on last edited by
                                          #422

                                          @waly_de So heute wurde für die Delta 2 Max ein bzw zwei neue Updates ausgerollt. Einmal WLAN und Firmware.
                                          Einige meinten nun würde das duale Laden also über Powerstream und Solar-Module an der Delta 2 Max funktionieren.
                                          Habe auch die Updates eingespielt und bin gespannt was ab morgen passiert oder in den Logs zu finden ist.

                                          B 1 Reply Last reply
                                          1
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          114

                                          Online

                                          32.4k

                                          Users

                                          81.3k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe