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
    196

  • 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.1k 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.
  • A Audiofreak

    Hi Zusammen

    Hab 2 Panel am Powerstream & 2 Panel am Delta Pro.
    Wenn der Akku voll ist, wird max eingespeist was toll ist, der Überschuss wird mir von der Gemeinde abgekauft.
    Leider wird nur die Leistung des PS verwendet, wenn da nur 300W ankommen, ist das max. was eingespeist wird, obwohl ich noch 300W hätte die am Delta anliegen.
    Gibt es irgendwo die Möglichkeit diese Leistung "heraus zu kitzeln"?

    W Offline
    W Offline
    Waly_de
    wrote on last edited by
    #1210

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

    Hi Zusammen

    Hab 2 Panel am Powerstream & 2 Panel am Delta Pro.
    Wenn der Akku voll ist, wird max eingespeist was toll ist, der Überschuss wird mir von der Gemeinde abgekauft.
    Leider wird nur die Leistung des PS verwendet, wenn da nur 300W ankommen, ist das max. was eingespeist wird, obwohl ich noch 300W hätte die am Delta anliegen.
    Gibt es irgendwo die Möglichkeit diese Leistung "heraus zu kitzeln"?

    Ich nehme an du hast die Standardkonfiguration in der bei vollem Akku in den Priorität Modus geschaltet wird. Für das, was du willst, würde ich den Parameter battOnSwitchPrio auf false stellen. Bei der Einstellung:
    battPozOn: 100, battPozOff: 97
    Wird dann bei erreichen von 100 % mit der vollen Leistung auch aus der Batterie eingespeist bis die Batterie wieder auf 97 % gefallen ist.

    1 Reply Last reply
    0
    • SpotimatzS Spotimatz

      Hallo zusammen,

      ich hätte eine Frage:

      ich habe eine Ps mit Delta Max - Stromverbrauch und Stromerzeugung kann ich über Openknx in das Skript einbinden.

      Stromverbrauch klappt. Für Stromerzeugung finde ich keinen Platz im Skript, wo man es einträgt. Sehe ich das richtig, dass das Skript so aufgebaut ist, dass es mit nur einer Variable arbeitet?

      Gibts eine Idee, wie ich das bei mir mit 2 Variablen lösen kann?

      Herzlichen Dank und schöne Grüße
      Matz

      W Offline
      W Offline
      Waly_de
      wrote on last edited by
      #1211

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

      Hallo zusammen,

      ich hätte eine Frage:

      ich habe eine Ps mit Delta Max - Stromverbrauch und Stromerzeugung kann ich über Openknx in das Skript einbinden.

      Stromverbrauch klappt. Für Stromerzeugung finde ich keinen Platz im Skript, wo man es einträgt. Sehe ich das richtig, dass das Skript so aufgebaut ist, dass es mit nur einer Variable arbeitet?

      Gibts eine Idee, wie ich das bei mir mit 2 Variablen lösen kann?

      Herzlichen Dank und schöne Grüße
      Matz

      Was meinst du mit Stromerzeugung? Meinst du damit eine weitere PV Anlage?
      Solche Sachen werden unter: AdditionalPower angelegt.

      SpotimatzS 1 Reply Last reply
      0
      • W Waly_de

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

        Hallo zusammen,

        ich hätte eine Frage:

        ich habe eine Ps mit Delta Max - Stromverbrauch und Stromerzeugung kann ich über Openknx in das Skript einbinden.

        Stromverbrauch klappt. Für Stromerzeugung finde ich keinen Platz im Skript, wo man es einträgt. Sehe ich das richtig, dass das Skript so aufgebaut ist, dass es mit nur einer Variable arbeitet?

        Gibts eine Idee, wie ich das bei mir mit 2 Variablen lösen kann?

        Herzlichen Dank und schöne Grüße
        Matz

        Was meinst du mit Stromerzeugung? Meinst du damit eine weitere PV Anlage?
        Solche Sachen werden unter: AdditionalPower angelegt.

        SpotimatzS Offline
        SpotimatzS Offline
        Spotimatz
        wrote on last edited by
        #1212

        @waly_de

        am PS habe ich keine PV-Platten angeschlossen.

        Die laufen extern über Wechselrichter die bei mir ins Netz einspeisen.

        Ich habe einen KNX Smart Meter vor dem Strommesser und der gibt mir getrennt Erzeugung und Verbrauch aus.

        Wenn ich PV-Überschuss habe, ist Verbrauch=0 und Erzeugung zB 400W.

        Wenn ich mehr Verbrauche als die PVs erzeugen habe ich bswp. Verbrauch 200W und Erzeugung=0.

        W 1 Reply Last reply
        0
        • SpotimatzS Spotimatz

          @waly_de

          am PS habe ich keine PV-Platten angeschlossen.

          Die laufen extern über Wechselrichter die bei mir ins Netz einspeisen.

          Ich habe einen KNX Smart Meter vor dem Strommesser und der gibt mir getrennt Erzeugung und Verbrauch aus.

          Wenn ich PV-Überschuss habe, ist Verbrauch=0 und Erzeugung zB 400W.

          Wenn ich mehr Verbrauche als die PVs erzeugen habe ich bswp. Verbrauch 200W und Erzeugung=0.

          W Offline
          W Offline
          Waly_de
          wrote on last edited by
          #1213

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

          @waly_de

          am PS habe ich keine PV-Platten angeschlossen.

          Die laufen extern über Wechselrichter die bei mir ins Netz einspeisen.

          Ich habe einen KNX Smart Meter vor dem Strommesser und der gibt mir getrennt Erzeugung und Verbrauch aus.

          Wenn ich PV-Überschuss habe, ist Verbrauch=0 und Erzeugung zB 400W.

          Wenn ich mehr Verbrauche als die PVs erzeugen habe ich bswp. Verbrauch 200W und Erzeugung=0.

          Ahh, verstehe.
          Das machst du am besten mit einem externen Skript, das dir aus den beiden Objekten ein Objekt macht, bei dem die Stromerzeugung negativ angezeigt wird. Dieses neu erzeugte Objekt trägst du dann als SmartmeterID im Skript ein.
          Ich hab da mal was für dich vorbereitet:
          Im Grunde musst du hier nur noch deine ID einsetzen 😉

          const StrombezugID = '0_userdata.0.ecoflow.Strombezug'
          const StromverkaufID = '0_userdata.0.ecoflow.Stromverkauf'
          const StromBilanzID = '0_userdata.0.ecoflow.Strom'
          
          // Erstelle das neue Objekt StromBilanzID'
          createState(StromBilanzID, 0, {
              name: 'Stromnetz Bilanz',
              type: 'number',
              role: 'value',
              unit: 'kWh'
          }, () => {
              //console.log('Stromnetz Bilanz Objekt wurde erstellt.');
          });
          
          // Funktion, um den Stromnetzwert zu aktualisieren
          function updateStromNetzBilanz() {
              // Abrufen der aktuellen Werte für Strombezug und Stromverkauf
              const strombezug = getState(StrombezugID).val;
              const stromverkauf = getState(StromverkaufID).val;
          
              // Berechnung der Bilanz
              const bilanz = strombezug - stromverkauf;
          
              // Aktualisiere das '0_userdata.0.ecoflow.Strom' Objekt mit der berechneten Bilanz
              setState(StromBilanzID, bilanz);
              //console.log('Stromnetz Bilanz aktualisiert:'+ bilanz);
          }
          
          // Registriere Listener für die Werte von Strombezug und Stromverkauf
          on({ id: StrombezugID, change: "ne" }, updateStromNetzBilanz);
          on({ id: StromverkaufID, change: "ne" }, updateStromNetzBilanz);
          
          // Initialisiere die Bilanz beim Start des Skripts
          updateStromNetzBilanz();
          
          
          SpotimatzS 1 Reply Last reply
          0
          • W Waly_de

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

            @waly_de

            am PS habe ich keine PV-Platten angeschlossen.

            Die laufen extern über Wechselrichter die bei mir ins Netz einspeisen.

            Ich habe einen KNX Smart Meter vor dem Strommesser und der gibt mir getrennt Erzeugung und Verbrauch aus.

            Wenn ich PV-Überschuss habe, ist Verbrauch=0 und Erzeugung zB 400W.

            Wenn ich mehr Verbrauche als die PVs erzeugen habe ich bswp. Verbrauch 200W und Erzeugung=0.

            Ahh, verstehe.
            Das machst du am besten mit einem externen Skript, das dir aus den beiden Objekten ein Objekt macht, bei dem die Stromerzeugung negativ angezeigt wird. Dieses neu erzeugte Objekt trägst du dann als SmartmeterID im Skript ein.
            Ich hab da mal was für dich vorbereitet:
            Im Grunde musst du hier nur noch deine ID einsetzen 😉

            const StrombezugID = '0_userdata.0.ecoflow.Strombezug'
            const StromverkaufID = '0_userdata.0.ecoflow.Stromverkauf'
            const StromBilanzID = '0_userdata.0.ecoflow.Strom'
            
            // Erstelle das neue Objekt StromBilanzID'
            createState(StromBilanzID, 0, {
                name: 'Stromnetz Bilanz',
                type: 'number',
                role: 'value',
                unit: 'kWh'
            }, () => {
                //console.log('Stromnetz Bilanz Objekt wurde erstellt.');
            });
            
            // Funktion, um den Stromnetzwert zu aktualisieren
            function updateStromNetzBilanz() {
                // Abrufen der aktuellen Werte für Strombezug und Stromverkauf
                const strombezug = getState(StrombezugID).val;
                const stromverkauf = getState(StromverkaufID).val;
            
                // Berechnung der Bilanz
                const bilanz = strombezug - stromverkauf;
            
                // Aktualisiere das '0_userdata.0.ecoflow.Strom' Objekt mit der berechneten Bilanz
                setState(StromBilanzID, bilanz);
                //console.log('Stromnetz Bilanz aktualisiert:'+ bilanz);
            }
            
            // Registriere Listener für die Werte von Strombezug und Stromverkauf
            on({ id: StrombezugID, change: "ne" }, updateStromNetzBilanz);
            on({ id: StromverkaufID, change: "ne" }, updateStromNetzBilanz);
            
            // Initialisiere die Bilanz beim Start des Skripts
            updateStromNetzBilanz();
            
            
            SpotimatzS Offline
            SpotimatzS Offline
            Spotimatz
            wrote on last edited by
            #1214

            @waly_de

            Wow vielen Dank. Ich hoffe ich habe dich richtig verstanden.

            Ich habe eine eigenes Skript unter dem Ecoflow im Java erzeugt, deinen Code reinkopiert und in:

            const StrombezugID = '0_userdata.0.ecoflow.Strombezug'

            mit meiner Variable KNX- Verbrauch ersetzt

            const StromverkaufID = '0_userdata.0.ecoflow.Stromverkauf'

            mit meiner Variable KNX- Erzeugung ersetzt

            und deiine Variable '0_userdata.0.ecoflow.Strom' im Ecoflow Skript bei " SmartmeterID: "0_userdata.0.ecoflow.Strom"," übernommen.

            Jetzt hoffe ich morgen auf Sonne um es testen zu können=) 1000 Dank

            1 Reply Last reply
            0
            • SpotimatzS Offline
              SpotimatzS Offline
              Spotimatz
              wrote on last edited by
              #1215

              Guten Abend,
              ich habe noch ein anderes Thema:

              mir zieht es meinen Speicher leer - bis er ausgeht.
              Netzkabel zum Nachspeisen habe ich angeschlossen, und dazwischen einen Shelly Plus Plug S gesteckt.

              Beispiel für Nutzung einer Schlaltersteckdose:
              //----------------------------------------
              //ID mit dem Messwert der aktuellen Leistungsaufnahme des Speichers in Watt:
              ExcessActualPowerID: "shelly.0.shellyplusplugs#xxx#1.Relay0.Power",
              //ID des Schalters, der den Speicher aktiviert:
              ExcessChargeSwitchID: "shelly.0.shellyplusplugs#xxx#1.Relay0.Switch",
              ExcessChargeSwitchOn: true, //Wert, der zum Aktivieren des Schalters gesetzt werden muss (1/0, true/false, "ON"/"OFF"...)
              ExcessChargeSwitchOff: false, //Wert, der zum Deaktivieren des Schalters gesetzt werden muss (1/0, true/false, "ON"/"OFF"...)
              //----------------------------------------
              //****************************************

              rweiterte Einstellungen:
              //****************************************
              SmartmeterTimeoutMin: 4, // Wenn der letzte Wert vom Smartmeter älter als "SmartmeterTimeoutMin" ist, wird das Script mit...
              SmartmeterFallbackPower: 150, // SmartmeterFallbackPower als aktuellem Realpowerwert weiter arbeiten, bis wieder aktuelle Daten geliefert werden.
              RegulationIntervalSec: 15, // Intervall in Sekunden in denen gemessen und reguliert wird
              Regulation: true, // 'false' stellt das Setzen der Einspeiseleistung ab
              RegulationState: "Regulate", // Wenn angegeben, kann mit diesem State die Regulation ein- und ausgeschaltet werden (Wird automatisch unter 0_userdata.0.ecoflow angelegt)
              RegulationMultiPsMode: 0, // Wenn mehrere PS reguliert werden sollen. "balance" = 0 oder "serial" = 1
              BasePowerOffset: 10, // Wird vom aktuellen Verbrauch abgezogen, um die Einspeiseleistung zu berechnen
              Zusatzpower_Offset: 10, // Zusatzpower startet ab einer Batterieladeleistung von MaxPower - Zusatzpower_Offset
              MinValueMin: 2, // Der Zeitraum in Minuten, aus dem der niedrigste Gesamtverbrauchswert geholt werden soll. 0 für Echtzeitwert
              MinValueAg: 0, // Art der Ermittlung des kleinsten Wertes: 0 = Minimalwert, 1 = Durchschnittswert
              ReconnectMin: 30, // Zeit in Minuten, nach der die Anwendung neu gestartet wird, wenn keine neuen Daten eintreffen
              statesPrefix: "0_userdata.0.ecoflow", // Hier werden die ecoFlow States angelegt
              latitude: latitude, // Breitengrad des Standortes (wird automatisch eingesetzt)
              longitude: longitude, // Längengrad des Standortes (wird automatisch eingesetzt)
              //****************************************

              // Überschussladung:
              //****************************************
              ExcessCharge: true, //Überschussladung AN/AUS (true/false)
              //ID zum Einstellen der Ladeleistung des Speichers in Watt:
              ExcessChargePowerID: "0_userdata.0.ecoflow.app_1781270647322333186_xxx_thing_property_set.writeables.slowChgPower",
              //ID des aktuellen Ladestandes des Speichers in %:
              ExcessChargePowerBatSocID: "0_userdata.0.ecoflow.app_device_property_xxx.data.params.bmsMaster.f32ShowSoc",
              ExcessChargeSwitchMin: 5, //Zeit in Minuten die der Schalter mindestens in der letzten geschalteten Position verbleiben muss.
              ExcessChargeMaxPower: 1500, //Maximale Ladeleistung des Speichers in Watt
              ExcessChargeOffsetPower: 0, //Wird der Leistungsanforderung hinzugerechnet um Messabweichungen auszugleichen.
              ExcessChargeStartPower: 50, //Mindest-Überschussleistung zum Einschalten des Speichers
              ExcessChargeStopPower: 0, //Überschussleistung bei der der Speicher abgeschaltet werden soll.
              ExcessChargeStartPowerDurationMin: 1, //Mindestdauer in Minuten, die ExcessChargeStartPower nicht unterschritten werden darf, bevor der Speicher eingeschaltet wird.
              ExcessChargeMinRegulatePause: 1, //Mindestpause in Minuten zwischen einzelnen Regelbefehlen (EEPROM-Schutz)
              ExcessChargeRegulateSteps: 100, //Stufen in Watt, in denen die Werte geändert werden sollen

              findet jemand meinen Fehler? Oder liegt es an einem anderen Teil vom Skript?

              Vielen Dank für die Hilfe.

              1 Reply Last reply
              0
              • P Offline
                P Offline
                Ponti92
                wrote on last edited by Ponti92
                #1216

                Hi @Waly_de
                Leider funktioniert das noch nicht so ganz mit der zusatzpower, wenn anschließend die Grundlast wieder höher wird.
                Ich habe hier zwei Powerstreams und einer ist in die zusatzpower gegangen bevor die Hauslast hoch ging.
                Dann ging der hausverbrauch hoch, jedoch hat der zweite PS die zusatzpower nicht verlassen.

                Der erste PS war nicht im Zusatzpower Modus und konnte deshalb mehr einspeisen:

                IMG_4055.png

                P 1 Reply Last reply
                0
                • W Waly_de

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

                  Jedoch hatte ich gerade folgenden Fall:
                  Hausverbrauch lag bei 200W, welches durch meine kleine PV Anlage schon abgedeckt war. Die PV Leistung meines Powerstreams lag bei rund 700W (600W Batterie und 100W Zusatzpower).
                  Das ganze funktioniert soweit gut, dass es bei Änderung der PV Leistung auch den Zusatzpower Modus wieder verlässt.
                  Aber sobald der Hausverbrauch steigt, z.b. durch Kochen auf 2-3kW, regelt das SKript munter im Zusatzpower Modus weiter und versucht die 600W in die Batterie zu speichern und nur den Überschuss davon ins Hausnetz zu leiten.
                  Das kann man auch gut im logfile erkennen (PS habe zwei Powerstreams..) :

                  ok, ich denke ich habe das fixen können. Ich kann es aber nicht testen im Moment. Kannst Du das bitte für mich machen und mir eine Rückmeldung geben?

                  Hier ist die neue Version:
                  Es gibt auch noch einige weitere Neue Funktionen:

                  (1.2.4) 22.04.2024

                  • AdditionalPowerAvgPeriod: Zeitraum in Millisekunden, in dem ein Durchschnittswert der Summe von AdditionalPower berechnet wird.
                  • ExcessChargeBatSocMax: Batterieladestand, der kleiner oder gleich diesem Wert sein muss, damit die Überschussladung gestartet wird.
                  • ExcessChargeBatSocOff: Batterieladestand, bei dem die Überschussladung abgeschaltet wird. Wert: 100.
                  • SerialReverse: Wenn true, werden im Serial Mode (RegulationMultiPsMode: 1) die Power Sources in umgekehrter Reihenfolge durchlaufen.
                  • externConfig neuer Parameter: create: Wenn true, wird das Objekt unterhalb von statesPrefix angelegt.
                    Ist der Wert false, muss das Objekt bereits existieren oder manuell angelegt werden.
                  • Verschiedene Optimierungen und Bugfixes

                  ecoflow-connector_v124.txt (22.04.2024)

                  A Offline
                  A Offline
                  Accu
                  wrote on last edited by Accu
                  #1217

                  @waly_de hatte gehofft bei der neuen Skriptversion, dass der AC Ladeshelly bei der Überschussladung abgeschaltet wird, wenn die DP voll geladen ist - wäre bei den Änderungen mit dabei 😞

                  Meine DP hat mit 99% die obere Ladegrenze erreicht und der Shelly DP Load bleibt weiterhin eingeschaltet. Wäre schön, wenn der dann ausginge, um nicht weiter Strom auf der Leitung bzw. am DP AC Ladeeingang permanent zu haben.

                  Bildschirmfoto 2024-04-25 um 14.50.44.png

                  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)
                    M Offline
                    M Offline
                    matz75
                    wrote on last edited by matz75
                    #1218

                    @waly_de Hi - hab folgende Überlegung angestellt?
                    Tagsüber, wenn die Sonne bräzelt, möchte ich das er entsprechend direkt einspeist und nur den Überschuss in die Batterie schickt. Bei Wölkchen etc. soll er weiterhin einspeisen was Modul kommt jedoch nichts aus der Batterie holen. Die Batterie soll erst nach Sonnenuntergang aktiv werden und entsprechend einspeisen.
                    Sprich: Tagsüber reines Überschussladen und wenn am Modul nichts mehr kommt regulieren.

                    Edit: Ich denke zu sehr "in bewölkteren" Tagen...;-). Ein wenig Akkukunde und die Frage hat sich im Grunde erledigt. Alles andere bekomme ich mit entsrpechenden "Side-Kicks" hin.

                    1 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      Accu
                      wrote on last edited by
                      #1219

                      ich würde das Skript gerne via Button AUS / AN stellen. Dazu kann man ja glaube ich den Regulate State auf false setzen beim Ausschalten. Hat das hier schon einer irgendwie realisiert? Wenn ja wie?

                      M 1 Reply Last reply
                      0
                      • A Accu

                        ich würde das Skript gerne via Button AUS / AN stellen. Dazu kann man ja glaube ich den Regulate State auf false setzen beim Ausschalten. Hat das hier schon einer irgendwie realisiert? Wenn ja wie?

                        M Offline
                        M Offline
                        matz75
                        wrote on last edited by
                        #1220

                        @accu Hi - ich hab mir dazu ein kleines Scriptchen erstellt, dass mir den State eines Objektes, welches bei mir aus FHEM kommt, überwacht, und dementsprechend den Regulate auf true bzw. false setzt. Somit hab ich die Möglichkeit das Ganze via Tablet UI aus FHEM heraus Adhoc zu beeinflussen. Darüber hinaus kann der State aus entsprechenden FHEM Logiken heraus gesteuert werden. FHEM stellt bei mir die zentrale der gesamten Gebäudesteuerung dar und sollte somit das EcoFlow Script entsprechend beeinflussen können.

                        05de8c79-ea35-4b3e-9f14-c452a2dc8b75-image.png

                        In diesem Zusammenhang sollte man dann aber die ensprechenden Parameter im EcoFlow Script im Hinterkopf haben. "Was soll er machen, wenn manuell reguliert wird" etc..

                        A 1 Reply Last reply
                        0
                        • M Offline
                          M Offline
                          McCrypto
                          wrote on last edited by
                          #1221

                          Hallo zusammen und vielen Dank für das großartige Script!

                          Ich plane, zwei Powerstream-Geräte mit jeweils 800 Watt an unterschiedlichen Phasen anzuschließen. An einem Powerstream ist ein Delta 2 Max angeschlossen und am anderen ein Delta 2 Max Zusatzakku. Beide Wechselrichter befinden sich im gleichen WLAN und im gleichen Hausnetz, sodass eine maximale Einspeisung von 1600 Watt möglich ist. Ein befreundeter Elektriker wird die Installation fachgerecht anmelden, und es wird eventuell auch ein Ausbau auf eine dritte Powerstream in Betracht gezogen.

                          Meine Frage: Ist bei dieser Konfiguration eine Nulleinspeisung möglich? Ich konnte keine entsprechenden Einstellungen dafür finden. Hat jemand Erfahrungen oder Tipps dazu?

                          Auch eine Konfigurationsmöglichkeit für eine Nulleinspeisung mit 1. Powerstream konnte ich nicht finden 😞

                          Vielen Dank im Voraus für eure Unterstützung!

                          G 1 Reply Last reply
                          0
                          • M McCrypto

                            Hallo zusammen und vielen Dank für das großartige Script!

                            Ich plane, zwei Powerstream-Geräte mit jeweils 800 Watt an unterschiedlichen Phasen anzuschließen. An einem Powerstream ist ein Delta 2 Max angeschlossen und am anderen ein Delta 2 Max Zusatzakku. Beide Wechselrichter befinden sich im gleichen WLAN und im gleichen Hausnetz, sodass eine maximale Einspeisung von 1600 Watt möglich ist. Ein befreundeter Elektriker wird die Installation fachgerecht anmelden, und es wird eventuell auch ein Ausbau auf eine dritte Powerstream in Betracht gezogen.

                            Meine Frage: Ist bei dieser Konfiguration eine Nulleinspeisung möglich? Ich konnte keine entsprechenden Einstellungen dafür finden. Hat jemand Erfahrungen oder Tipps dazu?

                            Auch eine Konfigurationsmöglichkeit für eine Nulleinspeisung mit 1. Powerstream konnte ich nicht finden 😞

                            Vielen Dank im Voraus für eure Unterstützung!

                            G Offline
                            G Offline
                            gooflo
                            wrote on last edited by gooflo
                            #1222

                            @mccrypto

                            1. ja Nulleinspeisung mit mehreren PowerStreams geht, man kann mehrere PowerStreams im Skript eintragen und es gibt sogar eine Option, wie die Regelung dann gemacht wird "balanced" = aufgeteilt unter Berücksichtigung des Batteriestands oder "serial" = der Reihe nach wird versucht den Bedarf abzudecken. Finde ich ziemlich gut gelöst. Und natürlich geht das auch mit einem PowerStream (sofern nicht mehr als 600W / 800W benötigt werden).
                            2. habe ähnliche Pläne und vor allem noch Fragen bezüglich "fachgerechte Anmeldung", könnten wir uns da mal austauschen?
                            M 1 Reply Last reply
                            0
                            • G gooflo

                              @mccrypto

                              1. ja Nulleinspeisung mit mehreren PowerStreams geht, man kann mehrere PowerStreams im Skript eintragen und es gibt sogar eine Option, wie die Regelung dann gemacht wird "balanced" = aufgeteilt unter Berücksichtigung des Batteriestands oder "serial" = der Reihe nach wird versucht den Bedarf abzudecken. Finde ich ziemlich gut gelöst. Und natürlich geht das auch mit einem PowerStream (sofern nicht mehr als 600W / 800W benötigt werden).
                              2. habe ähnliche Pläne und vor allem noch Fragen bezüglich "fachgerechte Anmeldung", könnten wir uns da mal austauschen?
                              M Offline
                              M Offline
                              McCrypto
                              wrote on last edited by
                              #1223

                              @gooflo Hallo und danke für die Rückmeldung.

                              Leider ist es bei mir so (aktuell mit einer Powerstream), dass wenn der Akku voll ist, die maximal mögliche PV-Leistung ins Stromnetz eingespeist wird. Das würde ich gerne verhindern und da sehe ich keine Möglichkeit für 😞

                              W 1 Reply Last reply
                              0
                              • M matz75

                                @accu Hi - ich hab mir dazu ein kleines Scriptchen erstellt, dass mir den State eines Objektes, welches bei mir aus FHEM kommt, überwacht, und dementsprechend den Regulate auf true bzw. false setzt. Somit hab ich die Möglichkeit das Ganze via Tablet UI aus FHEM heraus Adhoc zu beeinflussen. Darüber hinaus kann der State aus entsprechenden FHEM Logiken heraus gesteuert werden. FHEM stellt bei mir die zentrale der gesamten Gebäudesteuerung dar und sollte somit das EcoFlow Script entsprechend beeinflussen können.

                                05de8c79-ea35-4b3e-9f14-c452a2dc8b75-image.png

                                In diesem Zusammenhang sollte man dann aber die ensprechenden Parameter im EcoFlow Script im Hinterkopf haben. "Was soll er machen, wenn manuell reguliert wird" etc..

                                A Offline
                                A Offline
                                Accu
                                wrote on last edited by
                                #1224

                                @matz75 schaltet er bei REGULATE = FALSE auch alle vom Skript etwaig eingeschalteten Schalter wieder aus?

                                M W 2 Replies Last reply
                                0
                                • D Offline
                                  D Offline
                                  Dreffi
                                  wrote on last edited by Dreffi
                                  #1225

                                  Ich habe aktuell ein kleineres Problem. Ich habe für LowBatLimit externe States angelegt. Wenn diese geändert werden wird das auch vom Script protokolliert, aber die Regelung wird nicht immer daran angepasst. Es wird weiter mit dem bisherigen Wert gearbeitet.
                                  Der aktuelle wird z.B. berücksichtigt wenn ich das Script über RegulationState = false/true neu starte oder der jeweilige Akku neu unter LowBatLimitPozOn fällt.

                                  Hintergrund: ich wollte damit morgens bei ausreichender Sonnenenergie die Leistung kontrolliert schon früher freigeben.

                                  W 1 Reply Last reply
                                  0
                                  • A Accu

                                    @matz75 schaltet er bei REGULATE = FALSE auch alle vom Skript etwaig eingeschalteten Schalter wieder aus?

                                    M Offline
                                    M Offline
                                    matz75
                                    wrote on last edited by
                                    #1226

                                    @accu Gute Frage. Würd ich entsprechend testen. Behaupte aber mal nein. Kannst das "Zusatz"-Script aber entsprechend erweitern und die gewünschten Schaltlogiken umsetzen.

                                    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)
                                      K Offline
                                      K Offline
                                      Kay Wurl
                                      wrote on last edited by
                                      #1227

                                      @waly_de
                                      Vielen Dank erstmal für Deine Arbeit^^.
                                      Script läuft mit ein paar Änderungen sehr gut.

                                      Ich habe battPozOn auf 0 und battPozOff auf 100 gesetzt, so dass als erstes immer die Delta 2 geladen wird (sind bei Tibber, das ist es mittags am billigsten).

                                      Die D2 kann ja nur 600W am Eingang. Heute zB. waren per Solar 740W möglich. Der PS schickt 600W zur D2 und der Rest verpufft. Kann man dem PS irgendwie sagen, wenn Solar mehr als 600W, dann schicke die Differenz stur ins Netz?

                                      Noch eine Frage. Kann man das zeitlich steuern? Für mich wäre perfekt, bis 10:00 Uhr Einspeisepriorisierung, von 10:00 Uhr bis 18:00 Uhr Prio aufs Akku laden und ab 18:00 Uhr, bis der PS aus geht, wieder Prio auf die Einspeisung ins Netz.

                                      Danke Danke Danke^^

                                      LG

                                      W 1 Reply Last reply
                                      0
                                      • T Offline
                                        T Offline
                                        Thomas 6
                                        wrote on last edited by Thomas 6
                                        #1228

                                        Hallo,

                                        ich habe nun auch seit ein paar Tagen ein PowerStream mit dem 2kW wetterfestem Speicher. Das Script läuft seit dem ersten Tag und Regelt die Einspeisung ganz ordentlich.
                                        Nun habe ich etwas festgestellt was wahrscheinlich nichts mit dem Script zu tun hat, aber vielleicht hat ja jemand einen Rat.

                                        Je höher ich oder das Script die Einspeiseleistung einstelle, um so niedriger wird mein Solarertrag. Die Screenshots sind innerhalb weniger Minuten entstanden und die Panels wahren immer voll in der Sonne. Das Verhalten lässt sich auch Reproduzieren.
                                        IMG_1550.PNG IMG_1547.PNG IMG_1548.PNG IMG_1549.PNG

                                        Hat jemand eine Idee was da los ist?

                                        1 Reply Last reply
                                        0
                                        • A Accu

                                          @waly_de hatte gehofft bei der neuen Skriptversion, dass der AC Ladeshelly bei der Überschussladung abgeschaltet wird, wenn die DP voll geladen ist - wäre bei den Änderungen mit dabei 😞

                                          Meine DP hat mit 99% die obere Ladegrenze erreicht und der Shelly DP Load bleibt weiterhin eingeschaltet. Wäre schön, wenn der dann ausginge, um nicht weiter Strom auf der Leitung bzw. am DP AC Ladeeingang permanent zu haben.

                                          Bildschirmfoto 2024-04-25 um 14.50.44.png

                                          W Offline
                                          W Offline
                                          Waly_de
                                          wrote on last edited by
                                          #1229

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

                                          @waly_de hatte gehofft bei der neuen Skriptversion, dass der AC Ladeshelly bei der Überschussladung abgeschaltet wird, wenn die DP voll geladen ist - wäre bei den Änderungen mit dabei 😞

                                          Meine DP hat mit 99% die obere Ladegrenze erreicht und der Shelly DP Load bleibt weiterhin eingeschaltet. Wäre schön, wenn der dann ausginge, um nicht weiter Strom auf der Leitung bzw. am DP AC Ladeeingang permanent zu haben.

                                          Bildschirmfoto 2024-04-25 um 14.50.44.png

                                          ExcessChargeBatSocMax: 95, // Batterieladestand muss <= sein damit die Überschussladung gestartet wird
                                          ExcessChargeBatSocOff: 100, // Batterieladestand bei dem die Überschussladung abgeschaltet wird

                                          hast du das angepasst? wenn 100 % nicht erreicht wird, wird das Skript auch nicht abschalten. Stell es also auf 99.

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          169

                                          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