Zendure Batteriespeicher mit Node-Red abfragen

Neben den großen Batteriespeichern für fertige PV-Anlagen setzen sich zunehmend modulare Hybridsysteme mit AC/DC- und DC/AC-Wandlern durch. Diese ermöglichen das Laden mit Gleichstrom aus den Solarpanels sowie das Laden mit überschüssigem Wechselstrom aus dem Hausnetz. Damit kann der Strom aus alten Solaranlagen, die aus der Förderung fallen, ebenso wie der Strom aus Balkonkraftwerken, der sonst meist kostenlos ins Netz geht, einfach für den Eigenverbrauch genutzt werden.

Ein großer und seit Jahren aktiver Hersteller ist die Firma Zendure aus dem Silicon Valley.

Für viele Speichermodelle bietet Zendure eine API an, mit der über die Hersteller-Cloud auf Daten des Speichers zugegriffen werden kann. Nach Aussagen des Herstellers funktioniert das für die folgenden Speichertypen

  • SuperBase V (6400, 4600)
  • Satellite Battery (6400, 4600) und
  • SolarFlow (800, 800 Pro, 2400 AC, Hyper 2000) und
  • SuperBase V (6400, 4600).

Wer möchte, kann die Cloud auch komplett aussperren. Dies ist beispielsweise in folgendem Beitrag von Tobias Schulz beschrieben. Dann hat man jedoch keinen Zugang zur gut gemachten App sowie zur KI-basierten Speicherverwaltung. In diesem Beitrag zeige ich wie ich einen Zendure Hyper 2000 mit Speicher über die Hersteller Cloud mit Node-Red abfrage. Zendure stellt hierzu eine kleine Dokumentation unter github zur Verfügung.

Cloud Verbindung herstellen

Für die Inbetriebnahme eines Geräts (Wechselrichter und Batteriespeicher) ist das Anlegen eines Accounts in der Cloud des Herstellers und die Registrierung der Geräte erforderlich (Link). Ebenso muss die Zendure-App installiert werden, um die Geräte anzumelden und notwendige Firmware-Updates auf Speicher und Wechselrichter einzuspielen. Darüber hinaus ermöglicht der Zugang über die App den Abruf sämtlicher Statusdaten und Statistiken der registrierten Geräte. Die App hat mittlerweile einen sehr guten Entwicklungsstand erreicht, der eine komfortable Steuerung und Auswertung der Leistungsdaten ermöglicht. Für weitere Informationen verweise ich auf die Webseite des Herstellers.

Nach der Registrierung und Inbetriebnahme des Hyper2000-Wechselrichters über die App kann durch Klicken auf das Zahnradsymbol oben rechts die Seriennummer des Geräts aufgerufen werden. Diese steht sowohl unter dem Gerätenamen als auch unter dem Menüpunkt „Gerätedaten“.

Grundsätzlich kommunizieren die Zendure Geräte über einen MQTT-Broker, der in meinem Fall in der Zendure-Cloud liegt. Für diesen brauche ich Zugangsdaten, damit ich Daten von meinen Geräten abfragen kann.  Mit der Seriennummer und dem Accountnamen kann nun ein Request an die Zendure-Cloud gesendet werden, um die Zugangsinformationen für eine sichere Abfrage aus Node-Red zu erhalten.

Die Abfrage kann beispielsweise mit einem cURL-Befehl durchgeführt werden. Ich verwende stattdessen eine Abfrage mit Node-Red.Hierzu benötige ich nur 3 Nodes.

Im inject-Node gebe ich als JSON-Objekt die Seriennummer sowie den Accountnamen wie folgt an:

Copy to Clipboard

Diesen Inhalt schicke ich nun an einen HTTP-Request-Node, und zwar als POST-Befehl an die Adresse https://app.zendure.tech/eu/developer/api/apply.
Für den Output verwende ich einen Debug-Node.

Nun erhälte ich im Node-Red Debug-Fenster einen String zurück, der wie folgt aussieht:

Hiervon sind folgende Teile wichtig:

  • appKey: Der Accountname für die Anmeldung in der Cloud
  • secret: Das Passwort für die Anmeldung  in der Cloud
  • mqttUrl: Die URL des MQTT-Servers für die Datanabfrage

Nun sind alle Daten vorhanden, die man für eine weitere Abfrage benötigt.

von dem folgende Daten wichtig sind:

Daten abfragen

Um die Daten für das Gerät aus der Zendure-Cloud empfangen zu können, muss eine Abfrage beim MQTT-Server von Zendure erfolgen.

Dazu verwendet man einen MQTT-In-Node, für den man zunächst eine Verbindung mit den folgenden Daten einrichtet:

  • Name: beliebig
  • Server: mqtt-eu.zen-iot.com
  • Port: 1883
  • Connect automatically
  • Protokoll: MQTT V3.1.1
  • Bereinigte Sitzung verwenden

Unter dem Reiter „Sicherheit” werden folgende Daten angegeben:

  • Benutzername: appkey (Der Accountname, den man von Zendure erhalten hat
  • Passwort: secret (Das Passwort, was man von Zendure erhalten hat)

Im MQTT-IN Node werden folgende Eigenschaften eingetragen:

  • Action: Subscribe to single topic
  • Topic: <&lt;>appkey/#
  • QoS: 2
  • Ausgang: Auto-Erkennung (parsed JSON Objekt, string oder buffer)

Nun sollte der Empfang funktionieren und die ersten Wert per payload-Objekt geliefert werden.

Daten auswerten

Beim Auswerten der empfangenen Daten stellt man schnell fest, dass immer nur Daten empfangen werden, die sich seit dem letzten Mal verändert haben. Damit enthält die payload immer eine unbestimmte Zahl von Einträgen mit jeweils unterschiedlichen Attributen.  Ebenso kann es durch die Cloudabfrage auch einen Zeitverzug ergeben (der für mich aber irrelevant ist). Ich habe festgestellt, dass für eine Hyper2000 neben der Seriennummer folgende Daten übertragen werden:

  • remainOutTime ( Remaining discharge time in min = verbleibende Entladezeit)
  • packInputPower (pack input power)
  • electricLevel (Device battery percentage = Ladezustand der Batterie)
  • solarPower1 (Solar1 Input Power in Watt = Leistung aus erstem Wechselrichter)
  • solarPower2 (Solar2 Input Power in Watt = Leistung aus zweiten Wechselrichter)
  • outputHomePower (output to home power in Watt = abgebene Leistung ins Hausnetz)
  • hyperTmp (hyperTmp
  • solarInputPower (solarInputPower = Leistung die gerade durch solarPanels in Speicher geladen wird)
  • packState (packState = Gibt an, ob in Batterie gerade nichts passiert (0), geladen(1) oder entladen(2) wird)

Das sind weniger Informationen, als in der App angeboten werden, so dass man ansonsten auf die Cloud-freie Lösung umschwenken muss.

Um die Daten auszuwerten kann man nun mit einer ganz einfache Lösung starten:

Für jeden Datentyp extrahiert jeweils ein Function Node die Daten aus der payload. Die kann wie folgt aussehen:

Copy to Clipboard

Da es möglich ist, dass der Wert gar nicht geliefert wurde, muss man in einem anschließenden Switch-Node prüfen, ob das Ergebnis NULL ist. Anschließend kann der Wert weiterverarbeitet werden (z. B. in InfluxDB etc.)

Dies ist eine sehr einfache Lösung für die Auswertung, die natürlich durch eine effizientere Lösung mit weniger Redundanz ersetzt werden kann.

Interessant ist, dass Zendure keinen Zähler übergibt, der die Menge des von einer direkt angeschlossenen Photovoltaikanlage erzeugten Stroms in kWh misst. In der App ist ein solcher Zähler allerdings vorhanden. Zendure liefert stattdessen die jeweilige Leistung der PV-Module. In einem nächsten Beitrag zeige ich, wie sich aus der Leistung trotzdem Zählerstände berechnen lassen.