Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. gooflo

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    G
    • Profile
    • Following 2
    • Followers 1
    • Topics 1
    • Posts 57
    • Best 9
    • Groups 1

    gooflo

    @gooflo

    Starter

    9
    Reputation
    22
    Profile views
    57
    Posts
    1
    Followers
    2
    Following
    Joined Last Online

    gooflo Follow
    Starter

    Best posts made by gooflo

    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @gooflo hab es selbst gefunden, man muss sie als AdditionalPower anlegen

      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @waly_de danke für das Video - wie das letzte sehr gelungen und gut verständlich. Habe (noch) keine Überschussladung, allerdings die Sache mit den zusätzlichen Modulen an der Delta 2 Max und das ist mit dem neuen Parameter (NoFeedIn) gut erklärt.

      Temperaturparameter wird ab sofort nach influxdb geschrieben, mal sehen, was der so ausgibt.

      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @waly_de danke für den Tip. Falls jemand auch diesen Anwendungsfall hat, hier meine aktuelle Lösung mit einem zweiten Skript, wobei ich im Originalskript in der Konfiguration das hier setze:

      SmartmeterID: "0_userdata.0.ecoflow.TotalActivePowerPlusPlugs",     // State, der den aktuellen Gesamtverbrauch in Watt anzeigt
      

      und hier das neue Skript:

      // globale Konfiguration
      var ConfigData = {
          statesPrefix: "0_userdata.0.ecoflow",                                          // übernommen 
          TotalActivePower : ".TotalActivePower",                                        // Shelly total active power
          TotalActivePowerPlusPlugs : ".TotalActivePowerPlusPlugs",                      // Neuer State für Power mit Plugs in den Userdaten
          SmartmeterID: "shelly.0.shellypro3em#XXXXXXXXXXX.EM0.TotalActivePower",     // übernommen State, der den aktuellen Gesamtverbrauch in Watt anzeigt    
      }
      
      // state TotalActivePowerPlusPlugs anlegen
      if ( !existsState(ConfigData.statesPrefix + ConfigData.TotalActivePowerPlusPlugs)) {
        createState(ConfigData.statesPrefix + ConfigData.TotalActivePowerPlusPlugs,0,{name: "TotalActivePowerPlusPlugs",  type: 'number', role: 'value'}, function () {}); 
      } else {
        setState(ConfigData.statesPrefix + ConfigData.TotalActivePowerPlusPlugs,0);
      }
      
      // state TotalActivePower anlegen
      if ( !existsState(ConfigData.statesPrefix + ConfigData.TotalActivePower)) {
        createState(ConfigData.statesPrefix + ConfigData.TotalActivePower,0,{name: "TotalActivePower",  type: 'number', role: 'value'}, function () {}); 
      } else {
        setState(ConfigData.statesPrefix + ConfigData.TotalActivePower,0);
      }
      
      /**
      * @param {string} id
      */
      function getPlugWatts(id)
      {
          let watts = 0
      
          let age_min = (Date.now() - getState(id).ts) / (1000 * 60)
          let w = Number(getState(id).val)/10 
      
          // sanity check: nur wenn die Daten Daten jünger als 4 min sind oder nicht so hoch werden sie verwendet
          if (age_min < 4 ||  w < 50) { 
             watts += w 
          } 
         
          // log(id + " " + watts + " W, age (min) = " + age_min)
          return watts
      }
      
      // wenn der Smartmeter gesetzt wird, die Plugs Watt ermitteln und die states setzen
      on({id: ConfigData.SmartmeterID}, function (obj) {
       
         let smartMeterTotal = Math.floor(Number(getState(ConfigData.SmartmeterID).val))
         setState(ConfigData.statesPrefix + ConfigData.TotalActivePower, smartMeterTotal) // store initial TotalActivePower
      
         let plugsSum = 0
         plugsSum += getPlugWatts("0_userdata.0.ecoflow.app_device_property_XXXXXXXXXXX_1.data.plug_heartbeat_pack.watts")
         plugsSum += getPlugWatts("0_userdata.0.ecoflow.app_device_property_XXXXXXXXXXX_2.data.plug_heartbeat_pack.watts")
         plugsSum += getPlugWatts("0_userdata.0.ecoflow.app_device_property_XXXXXXXXXXX_3data.plug_heartbeat_pack.watts")
         plugsSum += getPlugWatts("0_userdata.0.ecoflow.app_device_property_XXXXXXXXXXX_4.data.plug_heartbeat_pack.watts")
      
         // log("Plugs Watts = " + plugsSum)
         setState(ConfigData.statesPrefix + ConfigData.TotalActivePowerPlusPlugs, Math.floor(smartMeterTotal + plugsSum))
      });
      

      Natürlich müssen für Shelly und Plugs die entsprechenden IDs gesetzt werden.

      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @ralf77 genau, es geht um die Entladung, da hast Du dann noch einen Fehler im Changelog gefunden @Waly_de . Bitte beobachte mal, wie gut das funktioniert. Soweit ich mich erinnere bin ich im Laufe der Zeit auf Fälle gestoßen, bei denen es nicht so gut funktioniert hat. Deswegen und weil ich auch das Laden (abhängig von PV (inklusive PV an der D2M) und Ladestand) regeln wollte, habe ich es nochmal weiterentwickelt.

      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @mario1995 die Fehlermeldung heißt, dass die Variable "asn", die im Code benutzt wird, nicht definiert ist. Dann hast Du den zweiten Teil vermutlich an der falschen Stelle eingebaut. Suche am besten nochmal die Stelle im Originalskript ab Zeile 2673, dort muss es eingefügt werden und ab Zeile 2676 im Originalskript ist es wieder der alte Code (im Codeschnipsel ab Zeile 16). Hoffe das hilft. Ansonsten schick mir gerne mal Dein Skript zu (Chat hier im Forum), dann schaue ich es mir an. Evtl. hast Du gar nicht die Version 125 als Basis? Dann müsstest Du die Stelle in Deiner Version suchen ...

      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @DJVanity kleines Update, die Verbindung mit dem lowBatLimit fand ich nicht so gut, sieht jetzt bei mir so aus, so kann man mit eigenen Parametern einstellen, wann das Verhalten greifen soll:

      LimitIsPVInput: true,                       // gooflo: wenn Batterie < LimitIsPVInputThresholdCapa und PV Input > LimitIsPVInputThresholdPVIn verwenden wir den PV Input als Output (minimiert Batterienutzung in diesem Bereich, vor allem im Winter sinnvoll)
      LimitIsPVInputThresholdCapa: 20,            // gooflo: Schwelle für Batteriekapazität in %
      LimitIsPVInputThresholdPVIn: 20,            // gooflo: Schwelle für PV Input in Watt
      

      und

       // gooflo: limitiere auf PV Input falls Bedingungen erfüllt sind
       let currentPVinput = GlobalObj[asn].sumPV
       if (ConfigData.seriennummern[i].LimitIsPVInput && 
           GlobalObj[asn].batstate < ConfigData.seriennummern[i].LimitIsPVInputThresholdCapa && 
           currentPVinput > ConfigData.seriennummern[i].LimitIsPVInputThresholdPVIn 
           && Setpower > currentPVinput) 
       {
           mlog("PS " + index + ": Limit AC output to PV input = " + currentPVinput + " (Capa: " + GlobalObj[asn].batstate + " < " + ConfigData.seriennummern[i].LimitIsPVInputThresholdCapa + " PVIn: " + currentPVinput + " > " + ConfigData.seriennummern[i].LimitIsPVInputThresholdPVIn + ")")
           cutoff = Math.floor((Setpower - currentPVinput ))
           Setpower = currentPVinput
           myMaxPower = Setpower
       } else if (Setpower > myMaxPower) {
           // Original code
           cutoff = Math.floor((Setpower - myMaxPower))
           Setpower = myMaxPower
       } else {
           Setpower = Setpower + cutoff
           cutoff = 0
           ....
      
      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @djvanity ggf. gerne PN, ansonsten hier mal (ungetestet, weil ich bei mir noch weitere Änderungen drin hab) die Modifikation, ausgehend von Version 125:

      ab Zeile 275

      lowBatLimitPozOn: 5, lowBatLimitPozOff: 15, // Bei Unterschreiten der Batterieladung von "lowBatLimitPozOn" % ist die maximale Einspeiseleistung auf 
      lowBatLimit: 150,                           // "lowBatLimit" limitiert, bis der Ladezustand wieder bei "lowBatLimitPozOff" ist
      lowBatLimitIsPVInput: true,                 // gooflo: falls unter lowBatLimit und >= 20W Input, auf Output = PV Input setzen
      

      die letzte Zeile mit dem Parameter "LowBatLimitIsPVInput" einfügen. Und dann ab Zeile 2674 folgende Änderung:

       if (Setpower > myMaxPower) {
           // Original Code: 
           // cutoff = Math.floor((Setpower - myMaxPower))
           // Setpower = myMaxPower
           // gooflo: falls unter lowBatLimit und >= 20W Input, auf Output = PV Input setzen
           let currentPVinput = GlobalObj[asn].sumPV
           if (GlobalObj[asn].batstate < ConfigData.seriennummern[i].lowBatLimitPozOn && currentPVinput >= 20 && ConfigData.seriennummern[i].lowBatLimitIsPVInput && Setpower > currentPVinput) {
               mlog("Limit output to PV Input = " + currentPVinput)
               cutoff = Math.floor((Setpower - currentPVinput ))
               Setpower = currentPVinput
               myMaxPower = Setpower
           } else {
           	cutoff = Math.floor((Setpower - myMaxPower))
              Setpower = myMaxPower
           }   
       } else {
           Setpower = Setpower + cutoff
           cutoff = 0
           ...
      

      Hier ggf. noch die Schwelle von 20W anpassen (dafür habe ich keinen Parameter spendiert, wäre natürlich auch möglich.

      Viel Spaß damit!

      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @mario1995 oh ja, sorry, da habe ich noch eine neue Variable "index" übersehen, die ich eingefügt habe und die es im Original nicht gibt. Tausche die Zeile

           mlog("PS " + index + ": Limit AC output to PV input = " + currentPVinput + " (Capa: " + GlobalObj[asn].batstate + " < " + ConfigData.seriennummern[i].LimitIsPVInputThresholdCapa + " PVIn: " + currentPVinput + " > " + ConfigData.seriennummern[i].LimitIsPVInputThresholdPVIn + ")")
      

      durch

           mlog("PS " + GlobalObj[asn].PsName + ": Limit AC output to PV input = " + currentPVinput + " (Capa: " + GlobalObj[asn].batstate + " < " + ConfigData.seriennummern[i].LimitIsPVInputThresholdCapa + " PVIn: " + currentPVinput + " > " + ConfigData.seriennummern[i].LimitIsPVInputThresholdPVIn + ")")
      
      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @mario1995 vermutlich hast Du die Entladegrenze der Batterie (war es eine D2M?) auf 15% eingestellt und die Batterie wurde über Nacht leer bis auf die 15%? Dann wird erst mal auf 20% geladen, bevor der Powerstream wieder regelt. Wenn dem so wäre könntest Du es testen, indem Du in so einem Fall kurzfristig die untere Grenze um mindestens 5 Prozentpunkt entfernt stellst, also z.B. mal auf 5%, dann sollte mit PV Input = Output geregelt werden.

      posted in JavaScript
      G
      gooflo

    Latest posts made by gooflo

    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @sradi @foxthefox @Waly_de ich zähle mich leider nicht zu den Profis. Da bei mir noch alles funktioniert, würde ich erst aktiv werden, wenn dem nicht so ist (3xPS + D2M/ZA). Ich könnte für ein neues Skript meine Verbesserungen mit einbringen (gewichtetes Laden und Entladen).

      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @foxthefox @sirdir ich habe offensichtlich bisher Glück, bei mir läuft nach wie vor alles mit dem 'alten' Skript.

      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @foxthefox und @MaxKann ich fände es auch toll, wenn das Skript umgestellt werden würde, nur wer hat dafür Zeit?

      Bei mir läuft zum Glück noch alles normal auch ohne geöffnete App (D2M + PS und D2M Zusatzakku + PS), d.h. ich würde wohl erst aktiv werden, wenn ich dazu gezwungen werde (und Zeit habe).

      Falls sich jemand findet (oder gar mehrere) unterstütze ich gerne.

      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @niklas-krol sieht so aus als würde die Batteriekapazität nicht korrekt ausgelesen, aber keine Ahnung warum. Wird es in der App richtig angezeigt?

      InverterHeartbeat.batSoc
      

      ist der Wert, der bei Dir 0 ist aber eigentlich 84 sein müsste.

      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @woogelstone ich glaube wir müssen zurück zum Anfang. Was willst Du mit Deinem Setup erreichen, welche Hardware hast Du außer Powerstream und D2M Zusatzakku? Erst dann kann ich Dir ggf. helfen. Für mich hört es sich so an als bräuchtest du das Skript gar nicht, nutzt es aber ohne passende Hardware. Andererseits sehe ich in der Config eine SmartmeterID konfiguriert, wenn dort der korrekte Verbrauch ermittelt wird, kannst Du das Skript nutzen, um am Einspeisepunkt einzuspeisen. Könnte sein, dass Du ein Verbindungsproblem hast, von dem auch manche Nutzern schon berichteten weil Ecoflow die API umstellt, umgestellt hat (siehe weiter unten ältere Beiträge). Um nur einen Kühlschrank zu betreiben und sonst nix würde ich einen Smartplug verwenden und nur die App.

      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @woogelstone was genau meinst Du? Der WR sollte das einspeisen, was benötigt wird, entweder über eine smarte Messung im Zähler- oder Sicherungskasten, oder über Smart Plugs oder/und über Grundlast.

      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @woogelstone tja, keine Ahnung. Hast Du mal probiert über das Logging noch mehr zu erfahren? Also hier:

      onst logpath = '/opt/iobroker/log/';
      const SERIAL_TO_LOG = "xxx"
      const LogAllOfSerial = false //false= nur Set-Anweisungen, true = alles von der Seriennummer
      

      mal die Seriennummer und LogAllOfSerial auf true letzten und dann im Logfile schauen, was da so steht

      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @djvanity das kann das Skript (ich habe z.B. 2 Stück), der Code ist so geschrieben, dass es beliebig viele sein können.

      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @woogelstone mir fällt leider nichts auf, sorry. Es scheint ja so als würde die MQTT Verbindung nicht klappen, was eigentlich nur daran liegen kann, dass email oder Passwort oder HW ID nicht stimmt. Wenn die drei stimmen weiß ich auch nicht weiter.

      posted in JavaScript
      G
      gooflo
    • RE: ecoflow-connector-Script zur dynamischen Leistungsanpassung

      @woogelstone das hier hast Du gemacht?

      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")

      posted in JavaScript
      G
      gooflo
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo