Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Zendure SolarFlow2400 AC (EVCC, Tibber und PV-Forecast)

    NEWS

    • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    Zendure SolarFlow2400 AC (EVCC, Tibber und PV-Forecast)

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Mabbi @Schimi last edited by Mabbi

      @schimi

      Ah ok, da bin ich auf der neusten Version, letztes Update kam vor ca. 2 Wochen.
      Hat Dein AC2400 irgendwo einen Hinweis auf die Hardwarerevision ?
      Meine sind vom Juni und von Oktober, nicht das sich da was geändert hat, weil die evtl. neuer sind als Deiner ?

      Btw...für alle Interessierten, Zendure verkauft den AC2400 plus 1x AB3000X (2.88 KWh) aktuell für 3 stellig.
      Ich war kurz geneigt den 3. zu kaufen, was ich eigentlich erst in 2026 machen wollte.

      S 1 Reply Last reply Reply Quote 0
      • S
        Schimi @Mabbi last edited by

        @mabbi nicht das ich wüsste...Falls ich dazu komme, schaue ich mal am we ob ich was am Gerät, direkt finde...

        hmmmmm

        M 1 Reply Last reply Reply Quote 0
        • M
          Mabbi @Schimi last edited by Mabbi

          Die Dämpfung, die ich eingebaut habe (fast ein Integral 🙂 ) führt im Wechselbetrieb der beiden AC2400 zu einem pumpen, und das nur bei der Enspeisung. Wenn ich die AC2400 synchron laufen lasse, dann ist es weg ... ?
          7c41d697-162e-442b-b58f-28b2742b13ac-grafik.png

          Das wechselseitig ansteuern der AC2400 ist komplexer als ich dachte, vor allem in dem dynamischen Bereich, wenn es gerade um die PV-Ertragsschwelle wo das Haus versorgt ist zwischen Laden und Entladen schwankt.
          Dafür war eigentlich die Dämpfung drin.... am WE nochmal an die Tastatur 🙂

          Nicht das ich schon 3 Loadbalancing/Dämpfungs-Funktionen in den letzten Wochen durch hätte...
          cd12e593-4509-4bcb-be34-60614fe1d6e4-grafik.png

          Nach dem check der Daten von heute habe ich die Nachts-Nicht-Laden Logik erweitert:
          f45d74ee-3369-45c5-b91b-99c002799376-grafik.png

          Wenn der durchschnittliche PV-Ertrag der letzten 5 Minuten unter 250 W fällt wird Akku-Laden nun auch verhindert.
          Diese Abfrage versetzt beide Akkus strikt in den output-Modus(Entladen) solange mindestens eines der beiden Argumente erfüllt ist.

          S 1 Reply Last reply Reply Quote 0
          • S
            Schimi @Mabbi last edited by

            @mabbi mal ne schnelle Überlegung am Handy...

            was ist, wenn du den wert nimmst und durch 2 teilst und jeweils an die beiden 2400AC schickst....

            theoretisch sollten die sich gleich ent bzw. beladen

            M 1 Reply Last reply Reply Quote 0
            • M
              Mabbi @Schimi last edited by Mabbi

              @schimi
              45b59511-e8cb-4742-b1c8-daa897113185-grafik.png

              genau das mache ich auch.
              Aber wenn die Akkus nicht synchron sondern im Wechsel angesteuert werden, fängt der 'Regelkreis' manchmal an zu pumpen (nur bei Einspeisung), und das obwohl ich sowohl die Gesamtleistung plus/minus der Akkus heranziehe und auch die Einzelleistung pro Akku vergleiche und Loadbalancing zwischen den beiden mache, und das optional mit IST-Werten oder einem Delta über den Regelzeitraum der Akkus.

              Die Problematik ist wohl, dass bei niedrigem PV-Ertrag, wo die Akkus theoretisch zwischen Laden und Entladen schalten würden, je nachdem welcher Verbraucher sich gerade zu oder abschaltet, die ganze Regellung in eine Schwingung versetzt wird, aus der Sie nicht mehr rauskommt.
              Rein technisch habe ich die Regelung in .net mit simulierten Daten laufen lassen (ist halt viel einfacher zu debuggen), da bekomme ich ein relativ sauberes Verhalten, Schwingungen werden im Load-Balancing wieder eingefangen.
              Aber ich habe hier gerade einen klassischen 'Theorie und Realität' Fall.
              Im Augenblick habe ich die Trägheit der Steuerung im Verdacht, ich regel ja nur alle 15 Sekunden und genau an der PV-Ertrags Grenze können in dem Zeitraum auch in den Delta/Zeit Werten schon wilde Sachen passieren.
              Ich will das aber nicht mit einer übermässig grossen Totzone erschlagen.

              Wenn ich mit exakt der gleichen Steuerung auf die abwechselnde Ansterung der Akkus verzichte
              6023692f-9852-40f2-be4b-fe2407282368-grafik.png

              ist alle scool und ich kann ohne Totzone sauber regeln.

              Ich werde mal alle relevanten Regel-Daten in Datenpunkte schreiben, die Historie aktivieren und mir das dann per Diagramm anschauen... im zeilenweisen Textdebugging komme ich hier aktuell nicht mehr wirklich weiter.

              S 1 Reply Last reply Reply Quote 0
              • S
                Schimi @Mabbi last edited by

                @mabbi was wäre wenn du entweder das regeln erst bei z.B. +-50 watt unterschied zum vorherigen wert erlaubst...

                oder im bereich bis -+200 Watt nur kleine sprünge erlaubst (z.B. 20 Watt)... würe die Regelung in dem Bereich langsam machen....

                hmm, sonst habe ich keine idee gerade..

                1 Reply Last reply Reply Quote 0
                • L
                  lesiflo Most Active last edited by

                  Hallo @Mabbi
                  ich habe hier mal mitgelesen und einen ähnlichen Aufbau, allerdings mit 2 Hyper und habe das mit Java-Script gelöst.
                  Die Akkus werden bei mir über die angeschlossenen PV-Panels und externer PV geladen. Ich steuere beide Hyper zusammen. Hier mal ein Auszug wie ich die Leistung ermittle. Bin aber in der Cloud.

                  const hyper1 = {
                      name:           'Hyper1',
                      inputLimitDP:   'zendure-solarflow.0.xxxxxx.yyyyyyyy.control.setInputLimit',
                      outputLimitDP:  'zendure-solarflow.0.xxxxxx.yyyyyyyy.control.setOutputLimit',
                      inputDP:        'zendure-solarflow.0.xxxxxx.yyyyyyyy.gridInputPower',
                      outputDP:       'zendure-solarflow.0.xxxxxx.yyyyyyyy.outputHomePower',
                      acModeDP:       'zendure-solarflow.0.xxxxxx.yyyyyyyy.control.acMode',
                      pvLeistungDP:   'zendure-solarflow.0.xxxxxx.yyyyyyyy.solarInputPower',
                      chargePowerDP:  'zendure-solarflow.0.xxxxxx.yyyyyyyy.outputPackPower',
                      socDP:          'zendure-solarflow.0.xxxxxx.yyyyyyyy.electricLevel',
                      setsocDP:       'zendure-solarflow.0.xxxxxx.yyyyyyyy.control.dischargeLimit',
                      ladenGesamtDP:  'zendure-solarflow.0.xxxxxx.yyyyyyyy.calculations.outputPackEnergyTodaykWh',
                  };
                  
                  const hyper2 = {
                      name:           'Hyper2',
                      inputLimitDP:   'zendure-solarflow.0.xxxxxx.zzzzzzzz.control.setInputLimit',
                      outputLimitDP:  'zendure-solarflow.0.xxxxxx.zzzzzzzz.control.setOutputLimit',
                      inputDP:        'zendure-solarflow.0.xxxxxx.zzzzzzzz.gridInputPower',
                      outputDP:       'zendure-solarflow.0.xxxxxx.zzzzzzzz.outputHomePower',
                      acModeDP:       'zendure-solarflow.0.xxxxxx.zzzzzzzz.control.acMode',
                      pvLeistungDP:   'zendure-solarflow.0.xxxxxx.zzzzzzzz.solarInputPower',
                      chargePowerDP:  'zendure-solarflow.0.xxxxxx.zzzzzzzz.outputPackPower',
                      socDP:          'zendure-solarflow.0.xxxxxx.zzzzzzzz.electricLevel',
                      setsocDP:       'zendure-solarflow.0.xxxxxx.zzzzzzzz.control.dischargeLimit',
                      ladenGesamtDP:  'zendure-solarflow.0.xxxxxx.zzzzzzzz.calculations.outputPackEnergyTodaykWh',
                  };
                  
                  const evuLeistungDP         = 'mqtt.0.openWB.evu.W';
                  const aktuelleEinspeisung   = Number(getStateVal(evuLeistungDP, 0));
                  
                  const hyper1Leistung = Number(getStateVal(hyper1.inputDP, 0)) - Number(getStateVal(hyper1.outputDP, 0));
                  const hyper2Leistung = Number(getStateVal(hyper2.inputDP, 0)) - Number(getStateVal(hyper2.outputDP, 0));
                  
                  const leistungAusAkkus = aktuelleEinspeisung - hyper1Leistung - hyper2Leistung; // wie im Original
                  
                  // PV-Überschuss-Erkennung: negative leistungAusAkkus = Überschuss? (behalte dein Vorzeichenmodell)
                  if (leistungAusAkkus < -ladenStartSchwelle && speicherMinSOC < zielSOC) {
                       ladenErlaubt = true;                
                       visLog('☀️ PV-Überschuss → Laden erlaubt', 'ok');
                  }
                  

                  Kann gerne mal das gesamte Script posten, ist aber sehr an meine Bedingungen angepasst.

                  1 Reply Last reply Reply Quote 0
                  • U
                    Unterums last edited by

                    Hallo,
                    ich suche jemanden der mir (auch gerne gegen Bezahlung) hilft,

                    einen Flow einzurichten in IO-Broker. Habe die Zendure Batterie mittels MQTT zum Luafen gebracht und würde nun gerne folgende Werte schreiben können:
                    1.) Laden über AC Ein / Aus
                    2.) Entladen über AC Ein / Aus
                    3.) Die Leistung für 1 oder 2

                    Ist hier jemand der Lust darauf hat ?

                    1 Reply Last reply Reply Quote 0
                    • S
                      Schimi last edited by

                      @unterums wenn ich aus das richtig verstehe, macht mein Javascript genau das... Du musst nur Tibber und evcc auf "false" setzen und deinen Stromzähler angeben (z.B. shelly oder Tibber Pulse.. es gehen auch alle anderen die ein + für bezug und - für einspeisung liefern)

                      U 1 Reply Last reply Reply Quote 0
                      • U
                        Uberga @Schimi last edited by

                        @schimi Danke, aber wo "baue" ich das Java Script ein ?
                        Sorry, aber ich bin da absolut unbewandert 🙂

                        M 1 Reply Last reply Reply Quote 0
                        • M
                          Mabbi @Uberga last edited by Mabbi

                          @uberga

                          Hi,
                          das script von @Schimi kommt im Iobroker hier hin, einfach anclicken:
                          7bd0e407-5adb-4d08-a5ff-3dd3e535a135-grafik.png

                          Dann clickst du hier auf das PLUS:
                          0b2149f3-0f2b-40d1-90d4-63e6b90e7075-grafik.png

                          Wählst das hier aus:
                          0946d761-da16-42a9-926b-1a694a9930a3-grafik.png

                          Vergibst einen Namen (Verzeichnis würde ich erstmal nicht ändern):
                          528fe866-598d-4f9a-8511-1ff4736e7eab-grafik.png

                          Und fügst den kopierten Text aus dem ersten Post in den Editor ein, dann SPEICHERN

                          Sollte dann so aussehen (Name kann abweichen)
                          7e7e7982-230d-42ea-b2a5-25deeca43722-grafik.png

                          Mit dem Play/Pause startet das script bzw stoppt.

                          ABER.... ich würde Dir nicht empfehlen als Anfänger gleich mit Javascripten zu arbeiten.
                          Ehrlich, schreib ein paar kleine Blocklys, verstehe wie Datenpunkte angelegt, angesprochen und manipuliert werden und dann kannst du auch Deinen Akku selber steuern mit einem kleinen script und Erfahrung.
                          Die Akkus sind keine Spielzeuge. Du solltest wirklich verstehen wie du die scripte überwachst und dann reagierst.

                          Schau mal, ich arbeite seit Wochen an einem Akku-Script... es gibt idz. X-Versionen und ganz glücklich bin ich aktuell immer noch nicht mit dem Ergebnis (wobei das nun eher Schönbauerei ist als reale technische Verbesserung idZ.)
                          13464734-e50a-4776-8d4a-d0c982e6c69d-grafik.png

                          1 Reply Last reply Reply Quote 1
                          • S
                            Schimi last edited by

                            es kann definitiv nicht schaden sich mal mit blockly auseinander zu setzen...

                            Mein Skript braucht zwar nur konfiguriert werden und sollte funktionieren... aber ein grundverständnis schadet nie 🙂

                            PS: es gab wieder ein Update (siehe ersten post)

                            1 Reply Last reply Reply Quote 0
                            • First post
                              Last post

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            546
                            Online

                            32.4k
                            Users

                            81.3k
                            Topics

                            1.3m
                            Posts

                            5
                            24
                            483
                            Loading More Posts
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes
                            Reply
                            • Reply as topic
                            Log in to reply
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                            The ioBroker Community 2014-2023
                            logo