NEWS
Test Adapter Zendure Solarflow
-
@freaknet
Für meinen Hyper mit 2 AB2000 sind 14 Tage zwischen dem Kalibrieren zu lang.
Nach 3 bis 4 Tagen ohne 100% sehe ich schon dass der SOC sich „verschiebt“.
Mit jedem Tag ohne 100% dauert es von 99 auf 100 länger.
Nach spätestens 7 Tagen lade ich auf 100 %. -
@freaknet
Für meinen Hyper mit 2 AB2000 sind 14 Tage zwischen dem Kalibrieren zu lang.
Nach 3 bis 4 Tagen ohne 100% sehe ich schon dass der SOC sich „verschiebt“.
Mit jedem Tag ohne 100% dauert es von 99 auf 100 länger.
Nach spätestens 7 Tagen lade ich auf 100 %.@Murphy-0 sagte in Test Adapter Zendure Solarflow:
Nach spätestens 7 Tagen lade ich auf 100 %.
Hey, danke für den Tip.
Vielleicht teste ich auch mal mit verkürzten Abständen.
In der App steht zwar was von wöchentlich oder monatliche automatische Batteriekalibrierung, aber ich möchte den Zeitpunkt gerne selbst bestimmen, daher mal der Versuch alle 14 Tage.Bisher hat der Akku aber noch nie eine solche Kalibrierung durchgeführt von sich aus. Liegt es vielleicht daran, da der Akku nicht im HEMS integriert ist?
In der Regel wird der Akku nie wirklich voll und pendelt immer so zwischen 10-45%.
Vielleicht tracke ich auch mal die Spannungen um das früher zu erkennen.
-
Ja das macht das HEMS bzw. der "Abgleichsmodus", sprich wenn Zendure alles über die Cloud steuert.
@nograx sagte in Test Adapter Zendure Solarflow:
Ja das macht das HEMS bzw. der "Abgleichsmodus", sprich wenn Zendure alles über die Cloud steuert.
Heisst, wenn ich über MQTT den Akku steuere wird das nicht durchgeführt?
Ich habe die Cloud nicht explizit deaktiviert und kann noch weiter auch über die App den Akku manuell steuern. HEMS ist aber nicht aktiv.
Sollte dies dann dennoch funktionieren? Gemacht hat der Akku bisher nix und ich habe ihn mittlerweile doch schon 4 Wochen im Betrieb. -
Hallo, ich bräuchte noch mal euer Wissen.
Ich steuere meinen Solarflow 800 Pro via Blockly.
Aktuell speist mein Akku ein und mein Blockly sendet frühesten nach 20 Sek einen neuen Wert für setDeviceAutomationInOutLimit und der kommt im Datenpunkt auch an.
Außerdem ändert sich auch der DP outputLimit. Was sich aber nicht ändert sind die Datenpunkte packInputPower und packPower.
Jetzt ist mir gerade noch aufgegallen dass wenn ich den Zendure Adapter neu starte dann kommt in dem Moment wenn der Adapter grün wird ein neuer Wert für packInputPower und packPower an. Danach aber nicht mehr.
Hat jemand ne Idee woran das liegen könnte? -
Hallo, ich bräuchte noch mal euer Wissen.
Ich steuere meinen Solarflow 800 Pro via Blockly.
Aktuell speist mein Akku ein und mein Blockly sendet frühesten nach 20 Sek einen neuen Wert für setDeviceAutomationInOutLimit und der kommt im Datenpunkt auch an.
Außerdem ändert sich auch der DP outputLimit. Was sich aber nicht ändert sind die Datenpunkte packInputPower und packPower.
Jetzt ist mir gerade noch aufgegallen dass wenn ich den Zendure Adapter neu starte dann kommt in dem Moment wenn der Adapter grün wird ein neuer Wert für packInputPower und packPower an. Danach aber nicht mehr.
Hat jemand ne Idee woran das liegen könnte?@Berny-K sagte in Test Adapter Zendure Solarflow:
Hallo, ich bräuchte noch mal euer Wissen.
Ich steuere meinen Solarflow 800 Pro via Blockly.
Aktuell speist mein Akku ein und mein Blockly sendet frühesten nach 20 Sek einen neuen Wert für setDeviceAutomationInOutLimit und der kommt im Datenpunkt auch an.
Außerdem ändert sich auch der DP outputLimit. Was sich aber nicht ändert sind die Datenpunkte packInputPower und packPower.
Jetzt ist mir gerade noch aufgegallen dass wenn ich den Zendure Adapter neu starte dann kommt in dem Moment wenn der Adapter grün wird ein neuer Wert für packInputPower und packPower an. Danach aber nicht mehr.
Hat jemand ne Idee woran das liegen könnte?Stell mal dein Blockly ein.
Ich würde dir empfehlen von Blockly auf javascript umzusteigen. Ist zwar am Anfang etwas schwieriger zu verstehen und man muss sich erstmal einarbeiten. Der große Vorteil dabei ist aber, das du deine Scripte bequem über eine KI wie ChatGPT erstellen lassen kannst und man hat auch viel mehr Möglichkeiten Dinge umzusetzen die mit Blockly nicht so einfach gehen.
Ich bin vor einiger Zeit auch den Schritt gegangen und nutze für meine Hyper nur noch javascript. Man sollte jedoch verstehen was die Scripte machen. -
@Berny-K sagte in Test Adapter Zendure Solarflow:
Hallo, ich bräuchte noch mal euer Wissen.
Ich steuere meinen Solarflow 800 Pro via Blockly.
Aktuell speist mein Akku ein und mein Blockly sendet frühesten nach 20 Sek einen neuen Wert für setDeviceAutomationInOutLimit und der kommt im Datenpunkt auch an.
Außerdem ändert sich auch der DP outputLimit. Was sich aber nicht ändert sind die Datenpunkte packInputPower und packPower.
Jetzt ist mir gerade noch aufgegallen dass wenn ich den Zendure Adapter neu starte dann kommt in dem Moment wenn der Adapter grün wird ein neuer Wert für packInputPower und packPower an. Danach aber nicht mehr.
Hat jemand ne Idee woran das liegen könnte?Stell mal dein Blockly ein.
Ich würde dir empfehlen von Blockly auf javascript umzusteigen. Ist zwar am Anfang etwas schwieriger zu verstehen und man muss sich erstmal einarbeiten. Der große Vorteil dabei ist aber, das du deine Scripte bequem über eine KI wie ChatGPT erstellen lassen kannst und man hat auch viel mehr Möglichkeiten Dinge umzusetzen die mit Blockly nicht so einfach gehen.
Ich bin vor einiger Zeit auch den Schritt gegangen und nutze für meine Hyper nur noch javascript. Man sollte jedoch verstehen was die Scripte machen. -
@bob-der-1. Wenn du bisher kein Gerät in der App eingetragen hast ist vermutlich noch kein MQTT Server bei Zendure hinterlegt. Da würde ich mal abwarten bis du das Gerät in der App registriert hast.
@nograx sagte in Test Adapter Zendure Solarflow:
@bob-der-1. Wenn du bisher kein Gerät in der App eingetragen hast ist vermutlich noch kein MQTT Server bei Zendure hinterlegt. Da würde ich mal abwarten bis du das Gerät in der App registriert hast.
Morgen soll der Speicher kommen, da bin ich mal gespannt.
Werde aber wohl erst am WE dazu kommen denn zu installieren, leider ruft die Arbeit. -
Speicher da....Auth.Key nochmal frisch eingetragen....läuft.
Alles weiter muss ich erstmal sehen was der Kerl an Daten bringt.Danke schonmal🤘
-
Ich hätte nicht gedacht, dass es so schwer ist nen 800 Plus zu integrieren. Habe ich mich wohl geirrt.
Nehme ich die Auswahl Lokal MQTT Server gebe ich den 800 Plus nebst Key aus der App ein.
Kommt leider das:zendure-solarflow.0 2026-03-29 18:03:31.577 error [getZenSdkProperties] IP address is not defined for device XXX zendure-solarflow.0 2026-03-29 18:03:31.573 error [onReady] Could not connect to MQTT local server! zendure-solarflow.0 2026-03-29 18:03:31.572 error [LocalMqttService] local MQTT url missing!Es gibt bei der Auswahl kein MQTT URL Feld.

Nehme ich die andere Anmeldemöglichkeit
zendure-solarflow.0 2026-03-29 18:09:10.558 error Converting circular structure to JSON --> starting at object with constructor 'Agent' | property 'sockets' -> object with constructor 'Object' | property 'app.zendure:443:::::::::::::::::::::' -> object with constructor 'Array' | ... | property '_httpMessage' -> object with constructor 'ClientRequest' --- property 'agent' closes the circle zendure-solarflow.0 2026-03-29 18:09:10.557 error TypeError: Converting circular structure to JSON --> starting at object with constructor 'Agent' | property 'sockets' -> object with constructor 'Object' | property 'app.zendure:443:::::::::::::::::::::' -> object with constructor 'Array' | ... | property '_httpMessage' -> object with constructor 'ClientRequest' --- property 'agent' closes the circle at JSON.stringify (<anonymous>) at /opt/iobroker/node_modules/iobroker.zendure-solarflow/build/services/zenWebService.js:87:42 at process.processTicksAndRejections (node:internal/process/task_queues:105:5) at async ZendureSolarflow.onReady (/opt/iobroker/node_modules/iobroker.zendure-solarflow/build/main.js:117:22) zendure-solarflow.0 2026-03-29 18:09:10.556 error unhandled promise rejection: Converting circular structure to JSON --> starting at object with constructor 'Agent' | property 'sockets' -> object with constructor 'Object' | property 'app.zendure:443:::::::::::::::::::::' -> object with constructor 'Array' | ... | property '_httpMessage' -> object with constructor 'ClientRequest' --- property 'agent' closes the circle zendure-solarflow.0 2026-03-29 18:09:10.554 error Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
-
Ich hätte nicht gedacht, dass es so schwer ist nen 800 Plus zu integrieren. Habe ich mich wohl geirrt.
Nehme ich die Auswahl Lokal MQTT Server gebe ich den 800 Plus nebst Key aus der App ein.
Kommt leider das:zendure-solarflow.0 2026-03-29 18:03:31.577 error [getZenSdkProperties] IP address is not defined for device XXX zendure-solarflow.0 2026-03-29 18:03:31.573 error [onReady] Could not connect to MQTT local server! zendure-solarflow.0 2026-03-29 18:03:31.572 error [LocalMqttService] local MQTT url missing!Es gibt bei der Auswahl kein MQTT URL Feld.

Nehme ich die andere Anmeldemöglichkeit
zendure-solarflow.0 2026-03-29 18:09:10.558 error Converting circular structure to JSON --> starting at object with constructor 'Agent' | property 'sockets' -> object with constructor 'Object' | property 'app.zendure:443:::::::::::::::::::::' -> object with constructor 'Array' | ... | property '_httpMessage' -> object with constructor 'ClientRequest' --- property 'agent' closes the circle zendure-solarflow.0 2026-03-29 18:09:10.557 error TypeError: Converting circular structure to JSON --> starting at object with constructor 'Agent' | property 'sockets' -> object with constructor 'Object' | property 'app.zendure:443:::::::::::::::::::::' -> object with constructor 'Array' | ... | property '_httpMessage' -> object with constructor 'ClientRequest' --- property 'agent' closes the circle at JSON.stringify (<anonymous>) at /opt/iobroker/node_modules/iobroker.zendure-solarflow/build/services/zenWebService.js:87:42 at process.processTicksAndRejections (node:internal/process/task_queues:105:5) at async ZendureSolarflow.onReady (/opt/iobroker/node_modules/iobroker.zendure-solarflow/build/main.js:117:22) zendure-solarflow.0 2026-03-29 18:09:10.556 error unhandled promise rejection: Converting circular structure to JSON --> starting at object with constructor 'Agent' | property 'sockets' -> object with constructor 'Object' | property 'app.zendure:443:::::::::::::::::::::' -> object with constructor 'Array' | ... | property '_httpMessage' -> object with constructor 'ClientRequest' --- property 'agent' closes the circle zendure-solarflow.0 2026-03-29 18:09:10.554 error Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
@haselchen warum unbedingt mit einem lokalen MQTT Server? Gehe davon aus das der SF800 ZenSDK hat? Dann einfach diesen Weg. Also per Cloud connecten und den Haken setzen bei ZenSDK im Adapter. Dann bekommt er aus der Cloud die lokale IP und verbindet sich lokal per API. Läuft bei meinem SF1600 tadellos mit der neusten Version des Adapters.
-
@haselchen warum unbedingt mit einem lokalen MQTT Server? Gehe davon aus das der SF800 ZenSDK hat? Dann einfach diesen Weg. Also per Cloud connecten und den Haken setzen bei ZenSDK im Adapter. Dann bekommt er aus der Cloud die lokale IP und verbindet sich lokal per API. Läuft bei meinem SF1600 tadellos mit der neusten Version des Adapters.
Komme von der Hoymiles Insel :)
Das war etwas einfacher alles.
Ich habs mal gemacht, wie Du gesagt hast.
Jetzt ist der verbunden.
Wie gesagt, erstmall alles Neuland.
Aktuell gibt es ja auch die Möglichkeit in der App einen MQTT Server einzugeben.
Was sind die Vor -und Nachteile dabei zu dem Adapter?Edit : noch eine Frage hinterher. Bei Hoymiles wars ja easy mit AhoyDTU etc. die Panels und alles weitere auszulesen. Hier lese ich immer was von Skripten und Blocklys. Listet der Zendure WR keine expliziten Werte für die Panels und die erbrachten kWh?
-
Komme von der Hoymiles Insel :)
Das war etwas einfacher alles.
Ich habs mal gemacht, wie Du gesagt hast.
Jetzt ist der verbunden.
Wie gesagt, erstmall alles Neuland.
Aktuell gibt es ja auch die Möglichkeit in der App einen MQTT Server einzugeben.
Was sind die Vor -und Nachteile dabei zu dem Adapter?Edit : noch eine Frage hinterher. Bei Hoymiles wars ja easy mit AhoyDTU etc. die Panels und alles weitere auszulesen. Hier lese ich immer was von Skripten und Blocklys. Listet der Zendure WR keine expliziten Werte für die Panels und die erbrachten kWh?
@haselchen der lokale MQTT Server bringt meiner Meinung nach keinen Vorteil mehr, wenn man ZenSDK nutzt. ZenSDK redet direkt mit dem Gerät via lokaler API, MQTT ist wieder nur ein Broker der zwischen Gerät und Adapter geschaltet wird. Also eine Fehlerquelle mehr. Ich habe das zwar definiert aber im Gerät deaktiviert.
Im Objektbaum des Adapters, gibt es einen Datenpunkt der dir zeigt, auf welchem Wege dein SF800 eingebunden ist. Sollte er ZenSDK unterstützen, müsste das nun da stehen. Falls ja, bist du lokal unterwegs.
-
Da hier ja vermutlich die meisten ioBroker/Zendure User beisammen sind, wollte ich was mit euch teilen. Habe seit knapp einer Woche einen SF1600AC+ und habe mir daher was ausgedacht, diesen über Peters Adapter zu regeln. Dazu habe ich einen eigenen kleinen Adapter gebaut, der eine Nulleinspeisung inkl. Überschussladen aus bestehender PV realisiert. Dabei wird der Datenpunkt: zendure-solarflow.0.XXX.XXX.control.setDeviceAutomationInOutLimit angesprochen.
Da mein SF1600 beim umschalten von laden zu einspeisen klackt, habe ich mir hier auch Gedanken gemacht, wie man das Relais sinnvoll schützen kann. Dazu ist ein Tick Timer eingebaut, der über das UI eingestellt werden kann. Standard ist 3 Clicks zum einspeisen und 5 Clicks zum laden. Also bei 5 sek. Tick wären das 15 oder 25 Sekunden, in denen dann ein Schwellwert (ebenfalls einstellbar) anliegen muss, bevor er schaltet. Zusätzlich, wird noch packPower gecheckt und nur dann geschaltet, wenn dieser kleiner 10W ist. Damit sollte sichergestellt sein, dass das Relais nur ohne Last umschaltet. Vermute Zendure hat daran gedacht, wollte aber auf Nummer sicher gehen :D
Den Entladeschluss kann man auf zwei Arten definieren. Entweder klassisch via SOC oder per minVol. Dazu scannt der Adapter alle Packs in Peters Integration nach minVol und wertet hier den kleinsten aus. Dieser wird dann auch berücksichtigt fürs Notladen, sollte mal ein Pack bei schlechtem Wetter abschmieren.
Wenn Notladen aktiv, wird bis zu einem Exit SOC geladen (Standard 20%). Danach bleibt die Reglung in einem Recovery Modus und dessen Exit SOC ist bei 30%. Damit wollte ich unnötige Loops vermeiden. All diese Schwellwerte sind bequem zu steuern per UI und im Objektbaum unter Control, kann man mit einem Schalter die Reglung einfach ausschalten, falls man händisch was machen will per App oder was weiß ich.
Das läuft nun seit einer Woche erstaunlich gut und stabil muss ich sagen. Werde den Adapter nicht offiziell ins Repo bringen, also müsst Ihr den wenn per Custom-Link manuell direkt via Github installieren bei Interesse. Denke für die neuen Geräte ist das eine tolle Sache und die regeln wirklich traumhaft schnell und weich die Last weg.
@nograx falls Du Interesse an dem Werk hast und wenn es nur Teile sind, lass es mich wissen. Glaube sowas wäre eine tolle Ergänzung zu Deinem genialen Adapter, den ich seit Anfang an nutze!
Hier der Link: https://github.com/Felliglanz/ioBroker.zendure-automation
Viel Spaß beim probieren und gebt gerne eine Rückmeldung.
LG
Sven