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

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

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

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

ecoflow-connector-Script zur dynamischen Leistungsanpassung

Scheduled Pinned Locked Moved JavaScript
1.6k Posts 127 Posters 741.4k 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

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

    Mein Smart Meter ist der Shelly em3 und eigentlich recht schnell. Mir ist aber aufgefallen, dass der lowestValue ziemlich hoch war und nicht regelmäßig in iobroker history aktualisiere wurde.

    ok, guck dir bitte mal an, in welchen abständen Realpower und LowestValue bei Dir aktualisiert werden?

    Wenn ich aber den balanced mode Stelle, gibt es da eine priorisierung der PS wie viel Prozent die jeweilige Batterie noch hat?

    nein noch nicht...

    Falls ich den sequenziellen Modus einstelle, welche powerstream wird zuerst bedient? Ich tippe mal auf die erste, die im Skript konfiguriert wird oder?

    richtig

    P Offline
    P Offline
    Ponti92
    wrote on last edited by
    #392

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

    ok, guck dir bitte mal an, in welchen abständen Realpower und LowestValue bei Dir aktualisiert werden?

    Die Abstände in Realpower sind bei solchen Ausfällen bei ca 1min und 35s und solche Sachen sehe ich dann im log file:

    21:20:08.477	info	javascript.0 (1240) script.js.Ecoflow3: getLowestValue-Duration: 1.893s
    21:22:57.713	info	javascript.0 (1240) script.js.Ecoflow3: getLowestValue-Duration: 6.129s
    21:24:23.680	info	javascript.0 (1240) script.js.Ecoflow3: getLowestValue-Duration: 2.095s
    21:28:11.644	info	javascript.0 (1240) script.js.Ecoflow3: getLowestValue-Duration: 5.046s
    21:28:53.406	info	javascript.0 (1240) script.js.Ecoflow3: getLowestValue-Duration: 1.818s
    

    Woran kann das liegen, dass die Abstände so groß sind? Wenn ich das Skript neu starte, dann läuft es erst mal wieder. Ich vermute mal die MQTT Verbindung zu Ecoflow das Problem hier ist.

    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)
      T Offline
      T Offline
      tom7657
      wrote on last edited by
      #393

      @waly_de Hallo, ich bin ganz neu hier und finde die Idee dieses Scripts faszinierend, weil es natürlich Sinn macht, möglichst viel Solarenergie selbst zu verbrauchen und deshalb eine Regelung benötigt wird, die sich am aktuellen Leistungsbedarf aller Verbraucher orientiert. Deshalb beschäftige ich mich nun mit ioBroker und habe schließlich alle Komponenten zum Laufen gebracht. Daten vom Stromzähler liegen inzwischen auch an.
      Aber ich habe eine grundsätzliche Frage: 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.

      W 1 Reply Last reply
      0
      • P Ponti92

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

        Im Moment ist es so, das bei jedem Messintervall jeder einzelne Powerstream versucht die Gesamtlast zu decken... Im laufenden Betrieb sollte sich das dann einpendeln.
        Solche Ausschläge wie bei dir sollte es nicht geben.

        Wie meinst du das mit jede PS versucht die Gesamtlast zu decken? D.h. Dass bei einer Last von 300W die erste anfängt mit 300W und dann die zweite den Rest, bzw. 0w nimmt?
        Wäre im balanced Modus nicht einfach die halbe Last für jede PS sinnvoll, denn sonst hat man ja wieder eine kaskadierung der PS?

        Wird für eine Messung die Einspeisung für beide PS ermittelt, oder läuft das Nacheinander mit zwei Messungen?

        LG

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

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

        Wie meinst du das mit jede PS versucht die Gesamtlast zu decken? D.h. Dass bei einer Last von 300W die erste anfängt mit 300W und dann die zweite den Rest, bzw. 0w nimmt?
        Wäre im balanced Modus nicht einfach die halbe Last für jede PS sinnvoll, denn sonst hat man ja wieder eine kaskadierung der PS?
        Wird für eine Messung die Einspeisung für beide PS ermittelt, oder läuft das Nacheinander mit zwei Messungen?

        Im Moment ist das so. Die Messungen erfolgen nacheinander. Jeder PS für sich. Bei Serial wird einmal gemessen und alle PS angesteuert. Nach einiger Laufzeit sollte sich das mehr oder weniger gleichmäßig auf beide Verteilen. Halbieren ist nicht so praktikabel, weil man nie weiss, zu welcher Leistung ein PS gerade in der Lage ist. Ausserdem ist die aktuelle Solarleistung meiner Meinung nach wichtiger als der Batteriestand.
        Das ist ein ziemlich komplexes Thema. Ich schieb das etwas vor mir her 😉 Wird aber noch weiter optimiert... irgendwann, versprochen 😉

        1 Reply Last reply
        0
        • B bombastikde

          @waly_de Danke erstmal für die Mühe und die Dankesmail für die Spende - eigentlich sollten wir Dir danken für die geleistete Arbeit. Ich verfolge die Diskussionen hier schon seit geraumer Zeit und nutze das Skript aktiv.

          Nun zu meiner Frage. Ich denke, für Neulinge könnte die Option mit der SD-Karte eine Möglichkeit sein. Allerdings bin ich der Meinung, dass dies eventuell noch mehr Fragen generieren wird. Wer sich für die Installation eines IOBrokers entscheidet, sollte sich vorher gründlich mit dem Thema befassen. Ohne eine gewisse Wartung wird man mit dem System nicht lange Freude haben. Ich habe bereits mehrfach gelesen und auch in YouTube Shorts gehört, dass viele Nutzer sich eine solche vorkonfigurierte Lösung wünschen.

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

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

          Nun zu meiner Frage. Ich denke, für Neulinge könnte die Option mit der SD-Karte eine Möglichkeit sein. Allerdings bin ich der Meinung, dass dies eventuell noch mehr Fragen generieren wird. Wer sich für die Installation eines IOBrokers entscheidet, sollte sich vorher gründlich mit dem Thema befassen. Ohne eine gewisse Wartung wird man mit dem System nicht lange Freude haben. Ich habe bereits mehrfach gelesen und auch in YouTube Shorts gehört, dass viele Nutzer sich eine solche vorkonfigurierte Lösung wünschen.

          Danke für Deine Meinung. Stimmt, es bleibt komplex. Aber in der Grauzone zwischen denen die einfach etwas in die Steckdose stecken wollen, und den 200% Kontroll-Tekkies kann man glaube ich noch einige abholen. Oft weiß man ja nur einfach nicht wo man anfangen soll. Ich glaube ich teste das mal in ganz kleinem Umfang. Supporten kann ich das für 100'te Anwender vermutlich nicht alleine.

          Zum Thema Wartung muss ich sagen.... ich nutze seit vielen Jahren IOBroker. Und ich möchte behaupten, dass ich wenn ich es am Anfang einmal eingerichtet und dann nie wieder angefasst hätte, es heute noch immer ohne Probleme laufen würde 😉 Natürlich hab ich ständig Updates gemacht... Aber nötig waren die Wenigsten.

          1 Reply Last reply
          0
          • A Accu

            Hi Leute,

            ich nutze das Skript dazu um an die Werte meiner EF Delta Pro zukommen, um dann den Solarladeeingang der DP dynamisch steuern zu können, was für mich das Killer-Feature wäre 🙂

            Dh. ich habe Solarüberschuss von 300W (oder mehr) bei mir im Hausnetz, dann soll der Solarladeeingang der Delta Pro (an der die Solarpanels hängen) von 200 auf 300 hochgesetzt werden usw.

            Der Solarladeeingang der EF DP ist im Datenpunkt: 0_userdata.0.ecoflow.app_device_property_DCEBZ8ZE7041280.data.params.inv.cfgSlowChgWatts
            hinterlegt (sie wie ich das ermitteln konnte).

            Aber irgendwie klappt es nicht das Teil umzustellen via Skript. Hat das schon jemand geschafft? Hier mal mein Blockly dazu:

            Bildschirmfoto 2023-09-09 um 09.08.41.png

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

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

            Der Solarladeeingang der EF DP ist im Datenpunkt: 0_userdata.0.ecoflow.app_device_property_DCEBZ8ZE7041280.data.params.inv.cfgSlowChgWatts
            hinterlegt (sie wie ich das ermitteln konnte).
            Aber irgendwie klappt es nicht das Teil umzustellen via Skript. Hat das schon jemand geschafft? Hier mal mein Blockly dazu:

            diese Datenpunkte sind ALLE read only. Nur Datenpunkte unter dem Objekt "writeables" sind schreibbar. Diese Datenpunkte werden angelegt, wenn das Script läuft und Du den entsprechenden Wert in der App änderst.

            1 Reply Last reply
            0
            • M Marcus_D

              @Waly_de Vielen Dank für deine großartige Arbeit und deine Bemühungen mit dem Script!

              Habe mittlerweile drei PowerStreams mit je einer Delta2 und insgesamt 2,5 kWp PV-Leistung eingebunden, funktioniert hervorragend 😎 👍
              Leistungs- / Energiemessung mache ich mit einem Shelly Pro 3EM.

              Wenn man sich mal ein bisschen mit dem Script beschäftigt hat und etwas damit experimentiert hat, ist es eigentlich kein Problem.

              Hast du vielleicht noch vor, einen ioBroker-Adapter daraus zu entwickeln? Würde die Einrichtung eventuell für diejenigen erleichtern, die noch ziemlich neu auf dem Gebiet sind.

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

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

              Hast du vielleicht noch vor, einen ioBroker-Adapter daraus zu entwickeln? Würde die Einrichtung eventuell für diejenigen erleichtern, die noch ziemlich neu auf dem Gebiet sind.

              Erst mal vielen Dank für Deine Unterstützung in Form einer großzügigen Spende! Das hat mich sehr gefreut und motiviert natürlich 😉
              Bisher hab ich mich immer vor einer Adapterentwicklung gedrückt. Das ist mit viel Einarbeiten und Beschäftigung mit Git und, was das Schrecklichste ist, der Entwicklung eines Frontends verbunden 😉 Aber es macht natürlich Sinn. Ich setzte es mal auf die Liste mit Aufgaben für sehr schlechtes Wetter 😉

              1 Reply Last reply
              0
              • P Ponti92

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

                ok, guck dir bitte mal an, in welchen abständen Realpower und LowestValue bei Dir aktualisiert werden?

                Die Abstände in Realpower sind bei solchen Ausfällen bei ca 1min und 35s und solche Sachen sehe ich dann im log file:

                21:20:08.477	info	javascript.0 (1240) script.js.Ecoflow3: getLowestValue-Duration: 1.893s
                21:22:57.713	info	javascript.0 (1240) script.js.Ecoflow3: getLowestValue-Duration: 6.129s
                21:24:23.680	info	javascript.0 (1240) script.js.Ecoflow3: getLowestValue-Duration: 2.095s
                21:28:11.644	info	javascript.0 (1240) script.js.Ecoflow3: getLowestValue-Duration: 5.046s
                21:28:53.406	info	javascript.0 (1240) script.js.Ecoflow3: getLowestValue-Duration: 1.818s
                

                Woran kann das liegen, dass die Abstände so groß sind? Wenn ich das Skript neu starte, dann läuft es erst mal wieder. Ich vermute mal die MQTT Verbindung zu Ecoflow das Problem hier ist.

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

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

                Woran kann das liegen, dass die Abstände so groß sind? Wenn ich das Skript neu starte, dann läuft es erst mal wieder. Ich vermute mal die MQTT Verbindung zu Ecoflow das Problem hier ist.

                Das deutet eigentlich eher darauf hin das Dein System überlastet ist. Wieviele Deltas hast du abonniert? Vielleicht versuchst Du mal "subscribe: false" wenn es wieder Probleme macht. Oder macht dein IOBroker noch andere aufwendigere Dinge?

                P 1 Reply Last reply
                0
                • T tom7657

                  @waly_de Hallo, ich bin ganz neu hier und finde die Idee dieses Scripts faszinierend, weil es natürlich Sinn macht, möglichst viel Solarenergie selbst zu verbrauchen und deshalb eine Regelung benötigt wird, die sich am aktuellen Leistungsbedarf aller Verbraucher orientiert. Deshalb beschäftige ich mich nun mit ioBroker und habe schließlich alle Komponenten zum Laufen gebracht. Daten vom Stromzähler liegen inzwischen auch an.
                  Aber ich habe eine grundsätzliche Frage: 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.

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

                  @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 1 Reply Last reply
                  0
                  • M MarcXX

                    Hallo Forum-Gemeinde...

                    Was möchte mir mein Script sagen???
                    Hab 1x mit Android auf meinen Ecoflow Account zugegriffen, seitdem die Meldung...

                    Danke!

                    08:24:32.581	info	javascript.0 (168) script.js.Ecoflow: Unbekannter Delta2Max Set Befehl: {"from":"Android","id":"147001304","moduleType":2,"operateType":"setRtcTime","params":{"sec":4,"min":13,"week":3,"month":9,"hour":11,"year":2023,"day":6},"version":"1.0"}
                    
                    W Offline
                    W Offline
                    Waly_de
                    wrote on last edited by
                    #400

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

                    Hallo Forum-Gemeinde...

                    Was möchte mir mein Script sagen???
                    Hab 1x mit Android auf meinen Ecoflow Account zugegriffen, seitdem die Meldung...

                    Danke!

                    08:24:32.581	info	javascript.0 (168) script.js.Ecoflow: Unbekannter Delta2Max Set Befehl: {"from":"Android","id":"147001304","moduleType":2,"operateType":"setRtcTime","params":{"sec":4,"min":13,"week":3,"month":9,"hour":11,"year":2023,"day":6},"version":"1.0"}
                    

                    Da versucht etwas die Uhr deines D2M zu stellen. Kannst Du ignorieren. Das Script wird es in der nächsten Version auch tun 😉

                    1 Reply Last reply
                    0
                    • W Waly_de

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

                      Woran kann das liegen, dass die Abstände so groß sind? Wenn ich das Skript neu starte, dann läuft es erst mal wieder. Ich vermute mal die MQTT Verbindung zu Ecoflow das Problem hier ist.

                      Das deutet eigentlich eher darauf hin das Dein System überlastet ist. Wieviele Deltas hast du abonniert? Vielleicht versuchst Du mal "subscribe: false" wenn es wieder Probleme macht. Oder macht dein IOBroker noch andere aufwendigere Dinge?

                      P Offline
                      P Offline
                      Ponti92
                      wrote on last edited by
                      #401

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

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

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

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

                      W 1 Reply Last reply
                      0
                      • P Ponti92

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

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

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

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

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

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

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

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

                        P 1 Reply Last reply
                        0
                        • 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
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          529

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          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