Seit ich ein kleines Balkonkraftwerk (ich berichtete) betreibe, war für mich schnell klar: nicht nur den erzeugten Strom verbrauchen, sondern auch speichern. Denn sonst läuft das meiste der gewonnenen Power direkt ins Netz zurück - verschenkte Energie, keinen Cent wert, nutzlos.
Also musste ein Batteriespeicher her, der sich nahtlos in mein Smart Home-Ökosystem mit Home Assistant integrieren lässt. Voraussetzung dafür war, dass die Messdaten jederzeit lokal zur Verfügung stehen und stets den aktuellen Status aufweisen. Gibt es in Zeiten von IoT und Smart Home ja ganz bestimmt endlos am Markt 😉 - /sarcasm.
Ich nehme dich nun also mit auf die Reise, von der Entscheidung für eine Speicherlösung bis hin zur Integration in Home Assistant.
Die Suche nach einer Speicherlösung#
So begann Anfang 2024 mein absoluter Albtraum: Recherche hier, Ratlosigkeit da, Fassungslosigkeit dort. Zum Glück mit einem positiven Erwachen im Juni 2025.
Überall Cloudzwang#
Bin ich eigentlich der einzige Mensch auf der Welt, der überhaupt nicht darauf steht, von allen Herstellern mit ihren Apps überschwemmt zu werden? Natürlich alles absolut sicher in ihren Hochsicherheits-Clouds gespeichert, Privatsphäre wird geschützt, etc.pp. Das ist so sicher, wie dass Facebook ernsthaft daran interessiert ist, deine Privatsphäre zu schützen. Du merkst schon, worauf das hinausläuft 🤨.
Außerdem möchte ich nicht in eine App gucken müssen, wie viel Solarstrom gerade gewonnen, gespeichert und selbst verbraucht werden kann. Davon habe ich nichts außer der Erkenntnis, die Informationen zwar sehen, aber nicht damit arbeiten zu können. Mein Smart Home muss in die Lage versetzt werden, mit diesen Messwerten intelligente Entscheidungen zu treffen. Und da es keine App bedienen kann, habe ich also nichts davon.
Last but not least sprechen wir hier von kritischen Messwerten, die ich auf keinen Fall nur über das Internet im Zugriff haben möchte. Denn das würde bedeuten: bei einem Internetausfall ist mein Balkonkraftwerk – direkt vor meiner Nase – nicht mehr steuerbar. Das ist absolut nicht erstrebenswert, will man einfach nicht, Red Flag 🚩.
Anforderungen#
Meine Wünsche an eine Speicherlösung sind doch eigentlich gar nicht so speziell:
- 2 kWh Kapazität, denn mehr fällt bei meiner Anlage derzeit nicht an Überschuss ab
- Kapazität jedoch skalierbar, denn…
- Solarmodule bis 2400wp aufrüstbar
- Lokale Datenverfügbarkeit über REST, MQTT, etc.
- Integration somit in Home Assistant möglich
Wenn du im Internet nach Batteriespeichern für Balkonkraftwerke suchst, wirst du sehr schnell von Anker SOLIX, Growatt NOAH, Marstek B2500, Zendure SolarFlow und einigen anderen Produkten lesen. Und alle kommen sie mit Cloudzwang ohne lokale Steuerung daher, oder aber auf irgendeine Weise nervtötend eingeschränkt.
Fazit#
Insgesamt habe ich mich ein Jahr mit der Suche nach einer Lösung beschäftigt und mich sehr lange mit den Ergebnissen auseinander gesetzt. Ich wollte einfach unbedingt direkt zu dem für mich passenden Produkt greifen.
Die Recherche ist allerdings gar nicht so einfach gewesen, da häufig die Informationen nicht so zur Verfügung standen, wie ich es mir wünschte. Bei so einer Investition möchte man im Vorfeld schließlich genau wissen, worauf man sich einlässt. Deshalb passte ich meine Strategie an. Ich kontaktierte den Balkonkraftwerk Content Creator Mario Makowski , der die Lösungen diverser Hersteller bereits selbst in der Hand hatte und ausprobieren konnte.
Er riet mir, mich mit Zendure SolarFlow zu beschäftigen 🤔.
Zendure SolarFlow#
Zendure SolarFlow besteht in der Regel aus einer Hub-Einheit und den daran angeschlossenen Speichereinheiten. Ich habe mich für den Hub 2000 entschieden, den ich dann bequem an meinen vorhandenen Wechselrichter anschließen konnte.
Sehen wir uns nun gemeinsam an, wie ich diese Speicherlösung erfolgreich in mein Smart Home integrieren konnte.
Vorbereitungen#
Eigentlich hatte ich SolarFlow bereits ausgeschlossen, da die Messwerte über MQTT lediglich aus der Herstellercloud abgerufen werden können. Einige Smart Home Nutzer klagten außerdem über die Tatsache, dass die Datenübertragung häufig mit hohen Latenzen verbunden sei und viele Messwerte erst mit einer Verzögerung mehrerer Minuten zur Verfügung stehen.
Dann entdeckte ich den SolarFlow Bluetooth Manager von Reinhard Weber auf GitHub.
Das Tool verspricht, diverse Modellreihen von Zendure aus der Cloud befreien zu können. Hierbei wird per Bluetooth eine Verbindungskonfiguration an das Gerät übertragen, darunter deine WLAN Einstellungen und Verbindungsoptionen für einen MQTT Broker. Dass die Zendure App fürs Smartphone dann nicht mehr korrekt arbeiten kann, ist mir sogar mehr als recht 😄.
Nachdem ich meine Solarmodule und den Wechselrichter mit Zendure SolarFlow Hub 2000 verbunden hatte und das System betriebsbereit war, habe ich das Gerät mit der Zendure App verbunden und initial eingerichtet: klasse, alles funktioniert einwandfrei und erste Solar-Leistungsdaten flatterten über mich herein.
Das angebotene Firmware-Update habe ich vorerst ausgelassen, da ich befürchtete, dass die weiteren Schritte danach nicht mehr funktionieren könnten. Die Version v3.0.21 der MASTER Firmware kannst du jedoch bedenkenlos installieren - die habe ich ebenfalls im Einsatz.
Danach schnappte ich mir direkt mein MacBook. Hier hatte ich bereits alles für die Ausführung des SolarFlow Bluetooth Managers vorbereitet.
Sprengen der Ketten#
Auf der GitHub Seite vom SolarFlow Bluetooth Manager sind alle Befehle sehr gut beschrieben, sodass du sie einfach nach der Reihe ausführen kannst.
1. Infos parat halten#
Für den lokalen Betrieb von Zendure SolarFlow benötigst du:
- WLAN Verbindungsdaten (SSID und Passwort).
- MQTT Broker Verbindungsdaten (Host und Port), ohne Authentifizierung.
Das war schon alles. SolarFlow verwendet mutmaßlich ein hardcoded Passwort zur Authentifizierung am MQTT Broker, welches wir nicht kennen. Daher benötigst du einen MQTT Broker mit erlaubter anonymer Anmeldung.
2. Umgebung scannen#
Ziel ist, die Device ID des Zendure Geräts herauszufinden. Öffne dein Terminal, definiere deine SF_PRODUCT_ID
und starte das Python Skript.
export SF_PRODUCT_ID=A8yh63 # Zendure SolarFlow Hub 2000
python3 solarflow-bt-manager.py -i
Schon nach einem kurzen Augenblick werden dir die Infos präsentiert und du kannst die Ausführung des Programms unterbrechen. Notiere dir die Device ID.
Sollte das Skript in einen Timeout laufen und keine Geräte finden, stelle sicher, dass die Zendure App auf deinem Smartphone geschlossen und nicht mehr mit SolarFlow über Bluetooth verbunden ist. Das Skript hat mein SolarFlow erst 3 Minuten nach Beenden der App gefunden. Lass dich nicht aus der Ruhe bringen 😎.
3. Lokal verbinden#
Jetzt wird es auch schon richtig ernst, denn die Verbindung zur Zendure Cloud (und damit zur App) wird getrennt. Das Gerät ist im Anschluss nur noch lokal über MQTT steuerbar. Der SolarFlow Bluetooth Manager bietet noch einen Proxy-Mode an, über den die Messwerte lokal bereitstehen und gleichzeitig eine Cloud-Verbindung erhalten bleibt. Das kam für mich persönlich jedoch nicht in Frage.
Zuerst werden im Terminal wieder ein paar Umgebungsvariablen definiert. Die SF_PRODUCT_ID
hast du in Schritt 2 bereits definiert, der Vollständigkeit halber liste ich sie aber noch einmal auf:
export SF_PRODUCT_ID=A8yh63 # Zendure SolarFlow Hub 2000
export SF_DEVICE_ID="V77..." # die Device ID aus Schritt 2
export WIFI_PWD="1234567890" # dein WLAN Passwort
export MQTT_USER="mqtt" # habe hier nur einen Dummy-Wert gesetzt
export MQTT_PWD="mqtt_pwd" # habe hier nur einen Dummy-Wert gesetzt
Vergewissere dich, dass alle Werte korrekt sind, und führe danach den Disconnect-Befehl aus. Hierbei musst du deinen WLAN-Netzwerknamen und die IP-Adresse deines lokalen MQTT Brokers angeben.
python3 solarflow-bt-manager.py -d -w "WLAN_SSID" -b "MQTT_HOST"
Das war es auch schon. Bei mir hat es direkt funktioniert, Troubleshooting war nicht notwendig.
4. Erfolgsprüfung#
Kurz darauf erreichen deinen MQTT Broker bereits die ersten Nachrichten von Zendure SolarFlow, denn das Gerät berichtet beinahe sekündlich über seinen aktuellen Zustand und übermittelt Telemetrie-Daten.
Ich verwende für solche Zwecke gern das Tool MQTT Explorer von Thomas Nordquist. Es ist schlank, übersichtlich und Open Source. Falls du es noch nicht installiert hast: du wirst es im weiteren Verlauf dieses Beitrags noch benötigen 😁.
Herzlichen Glückwunsch, dein Zendure SolarFlow ist nun von der Cloud befreit und kann nur noch lokal gesteuert und ausgelesen werden. Du wirst es nicht bereuen!
Smart Home Integration#
Wäre ja zu schön gewesen, wenn nun schon direkt alle Sensoren in Home Assistant (oder der Smart Home Lösung deiner Wahl) zur Verfügung stehen würden. Allerdings folgt jetzt der Teil der Arbeit, der mir persönlich immer am meisten Spaß macht.
1. Daten analysieren#
Zendure SolarFlow sendet haufenweise Nachrichten an die folgenden Topics. Diese solltest du dir im MQTT Explorer näher ansehen und entscheiden, ob du mit den Informationen im Smart Home arbeiten kannst, oder nicht.
Die aus meiner Sicht wichtigsten wären:
Topic | Beschreibung |
---|---|
/+/+/event/device | Enthält allgemeine Infos zu Laderichtung und Power. |
/+/+/log | Enthält sämtliche Gerätedaten als Telemetrie-Array. |
/+/+/properties/report | Wichtigstes Topic! Hierüber kommen detaillierte Zustandsänderungen. |
iot/+/+/properties/write | Hierüber können Befehle an SolarFlow gesendet werden, z.B. Änderung des Output Limits. |
Sehen wir uns das Report-Topic einmal näher an. Es enthält sehr viele Zustandsmitteilungen zum SolarFlow Hub selbst (properties
), aber auch zu den angeschlossenen Batterien (packData
):
{
"messageId": "123",
"product": "solarFlow",
"deviceId": "V77xxx",
"timestamp": 847111,
"properties": {
"solarInputPower": 37,
"packInputPower": 59,
"solarPower2": 11
},
"packData": [
{
"socLevel": 38,
"sn": "CO4xxxxxxxxxx"
}
]
}
2. MQTT Topics mappen#
Die Herausforderung beim Bau von Sensoren für Home Assistant ist, dass lediglich veränderte Datenpunkte in den Payloads enthalten sind. Unveränderte Datenpunkte werden solange nicht erneut gesendet, bis sie einen anderen Wert angenommen haben.
Beim SolarFlow Bluetooth Manager ist zwar auf GitHub ein möglicher Lösungsweg dokumentiert , ich habe es jedoch anders gelöst. Wie oben erwähnt, verwende ich einen separaten MQTT Broker ohne Authentifizierung, an den Zendure SolarFlow nun alle Daten sendet. In Node-RED habe ich dann einen Flow aufgebaut, der die Topics umbaut und an meinen Home Assistant MQTT Broker weiterleitet.
Als kleinen Bonus gibt es noch ein zusätzliches Topic von mir, welches den Verbindungsstatus von SolarFlow darstellen kann und einen Binary Sensor in Home Assistant, der diesen Status direkt visualisiert. Das löse ich mit einem Trigger-Node.
Im Wesentlichen habe ich die Logik vom SolarFlow Topic Mapper , der beim SolarFlow Bluetooth Manager dabei ist, in Node-RED nachgebaut und das gesamte Ergebnis an meine Bedürfnisse angepasst. Deshalb kann ich den Flow gegenwärtig noch nicht öffentlich teilen, kontaktiere mich aber gern, wenn du Fragen dazu hast.
Nachdem der Flow deployed wurde und seine Arbeit aufgenommen hat, kommen auch schon direkt die Messwerte auf meinem Home Assistant MQTT Broker an.
Sicher kannst du auf einen Blick erkennen, welches Wetter hier gerade ist, während ich diesen Beitrag schreibe 😎.
3. Sensoren definieren#
Im letzten Schritt steht die eigentliche Integration der Messwerte in Home Assistant an, nachdem sie nun sauber über MQTT transportiert werden. Ich habe ein paar Stunden Arbeit in die eigene Gestaltung der Sensoren gesteckt, da die im Internet zur Verfügung stehenden Konfigurationen mir schlichtweg nicht gefallen haben, unvollständig waren oder sogar Fehler hatten.
Die beiden folgenden YAML-Dateien werden von Home Assistant geladen, da ich folgenden Eintrag in meiner configuration.yaml
angelegt habe:
mqtt: !include_dir_merge_list includes/mqtt/
homeassistant_mqtt_zendure_hub.yaml
homeassistant_mqtt_zendure_pack.yaml
Dir ist sicher aufgefallen, dass die Sensoren das in Punkt 2 erwähnte MQTT Topic zum Verbindungsstatus verwenden. Sollte mein Zendure SolarFlow einmal länger als drei Minuten keine Daten senden, stellen sich die Sensoren alle auf den Status nicht verfügbar um.
4. Ergebnis#
Nach der ganzen Theorie wird es nun Zeit, das Ergebnis zu sehen - bzw. einen kleinen Ausschnitt davon. Ich möchte dich ja nicht spoilern und dir die Möglichkeit geben, diesen Moment des Erfolgs in deinem eigenen Smart Home genießen zu können 😄.
Nächste Schritte#
Nachdem Zendure SolarFlow in dein Smart Home integriert wurde und die Sensorik sowie grundlegende Steuerung jetzt funktioniert, liegt es nun an dir, für Intelligenz im Lade-/Entlade-Verhalten zu sorgen.
Ich möchte dir an dieser Stelle ein paar Konfigurations-Entitäten für den Anfang mit auf den Weg geben, über die sich bereits viel erreichen lässt:
Einstellung | Bedeutung/Auswirkung |
---|---|
Output Limit | Legt fest, wie viel Leistung an deinen Haushalt abgegeben wird. SolarFlow versucht immer, diesen Wert zu erreichen - mit direktem Verbrauch deiner aktuellen Solarpower oder vorhandener Batterieladung, oder einem Mix aus beidem. Wenn mehr Solarstrom produziert wird als abgegeben werden soll, wird in der Folge die Batterie aufgeladen. |
SoC Min | Die Schwelle für die Mindestladung der Batterie, ich verwende hier in der Regel 20%. SolarFlow wird die Batterie mindestens bis zu diesem Wert aufladen und nichts an den Haushalt abgeben, während Solarstrom produziert wird. Beim Entladen wird dieser Wert niemals unterschritten. Du kannst das System zwingen, die Aufladung der Batterie zu priorisieren, wenn du den Wert bspw. auf 80% einstellst. Da gibt es interessante Möglichkeiten. |
SoC Set | Die Schwelle für die Maximalladung der Batterie, ich verwende hier einen Wert >=80%. SolarFlow wird die Batterie bis zu diesem Wert aufladen und anschließend den Battery Bypass aktivieren. Ab hier wird sämtliche produzierte Solarpower direkt an den Haushalt abgegeben, ohne die Batterie zu laden. |
Battery Bypass | Kann drei Zustände annehmen. Immer ein klemmt die Batterie vom Kreislauf immer ab. Immer aus lädt und entlädt die Batterie in Abhängigkeit der anderen Einstellungen. Automatisch lässt SolarFlow selbst entscheiden, ob die Batterie am Kreislauf teilnimmt, oder nicht. Ich verwende in der Regel Automatisch. |
Mein Ziel ist, immer den aktuellen Leistungsbedarf im Haushalt mit Sonnenkraft zu decken, die Überkapazitäten zu speichern und nach Möglichkeit niemals Strom an das öffentliche Netz abzugeben. Nach Sonnenuntergang wird die Batterie anschließend in der Höhe meiner Grundlast entladen. So verbrauche ich die meiste Solarpower direkt und schaffe mir zusätzlich eine kleine Ersparnis für die Nacht.
Da ich einen Stromtarif mit fixem Arbeitspreis verwende, spielt es keine Rolle, wann ich Energie verbrauchen oder speichern muss - sie kostet immer dasselbe. Sparen kann ich also nur, wenn ich das Maximum an selbstproduziertem Strom selbst verbrauchen kann. Und genau das ist meine Strategie.
Hätte ich einen dynamischen Stromtarif, sähe das Ganze wiederum komplett anders aus. Hier kann das Ziel nur sein, Strom immer dann aus dem Netz zu beziehen, wenn er günstig ist und teure Zeitintervalle mit Eigenproduktion zu decken. Diese Tarife sprechen mich zwar aufgrund ihrer Möglichkeiten an, sind mir gegenwärtig allerdings zu risikobehaftet.
Als nächstes werde ich darüber berichten, wie ich die ganzen Messwerte für das Home Assistant Energie-Dashboard passend gemacht habe.
Empfehlung#
Und noch etwas in eigener Sache:
Seit kurz nach dem Marktstart in Deutschland bin ich überzeugter Kunde bei Octopus Energy , mittlerweile in einem noch günstigeren Treuetarif.
Während der Energiekrise 2022 hatten wir gegenseitig ein einmonatiges Kündigungsrecht, im Gegensatz zu vielen schwarzen Schafen am Markt haben sie weder davon, noch einer Preisanpassung mir gegenüber, Gebrauch gemacht. Im Gegenteil: sie haben den Preis nach dem Wegfall der EEG-Umlage sogar noch gesenkt. So bin ich mit knapp unter 30 Cent Arbeitspreis durch die Krise gekommen, mit mir haben sie definitiv kein Geld verdient.
Aber sie waren mir treu und im Gegenzug erzähle ich jedem davon 😁.
Falls dich die Preisgestaltung von Octopus Energy anspricht, scanne einfach den QR Code und sichere dir 100 EUR Guthaben auf den Jahresbeitrag. Ich erhalte dann 50 EUR auf meinen Jahresbeitrag - oder mit anderen Worten: 175 kWh frei 😎!
Das Titel-/Hintergrundbild stammt von Zendure .
Ich lege dir nahe, in der App unbedingt direkt das Output Limit herabzusetzen. Das ist die Leistung, mit der SolarFlow Strom an deinen Wechselrichter abgibt. In meinem Fall waren 800 Watt voreingestellt.
Allerdings habe ich das nicht bemerkt und bis zum Abschluss der Einbindung von SolarFlow in mein Smart Home die volle Power direkt aus der Batterie raus zum Netzbetreiber gejagt 😄.