Seit einigen Jahren betreibe ich eine Heimautomatisierung auf Basis von openHab. Meine neueste Errungenschaft ist ein Balkonkraftwerk: 2 Solarpanele mit je 395W sind verbunden mit einem Wechselrichter von Deye (SUN600). Dieser kann ins WLAN eingebunden werden und verbindet sich mit der „China-Cloud“, um dann in der Solarman-App die Daten der eigenen Solaranlage abrufen zu können.
Natürlich liegt die Idee nahe, diese Daten auch in openHab weiterverarbeiten zu können. Und die „China-Cloud“ (SOLARMAN) möchte ich am liebsten ebenfalls abschalten. Das kann ja nicht so schwer sein, dachte ich mir…
Auf der Suche nach einer passenden Lösung bin ich auf viele Projekte gestoßen, die entweder auf der Cloud von Deye bzw. Solarman basieren (das soll ja nicht sein) oder per Modbus (ein Kommunikationsprotokoll und de-facto-Standard in der Industrie) mit dem Wechselrichter kommunizieren. ModBus ist natürlich grundsätzlich eine gute Lösung, aber sehr aufwendig. Für den Betrieb auf einem Raspi wären doch viele Abhängigkeiten nötig – und ich halte es gerne einfach.
Bei der Recherche bin ich dann auf ein Skript im Forum von openhabforum.de gestoßen. Die Idee war denkbar einfach: Regelmäßig die Weboberfläche des Wechselrichters auslesen, auf der die Werte ebenfalls zu finden sind. Auf dieser Basis habe ich dann ein Skript entwickelt: https://github.com/thonhaus/deye2mqtt.
Aber was genau macht das Skript eigentlich? Kurz gesagt: Es lädt die Daten meiner Solaranlage von der Webseite des Deye-Wechselrichters herunter (sollte auch mit den baugleichen Modellen von Bosswerk und Revolt funktionieren) und schickt sie per MQTT (ein offenes Netzwerkprotokoll für Machine-to-Machine-Kommunikation) an meinen openHab-Server. Ich habe MQTT gewählt, weil damit bereits viele meiner Geräte in der Heimautomatisierung kommunizieren.
Das Skript kann die aktuelle Produktion des Balkonkraftwerkes, die gesamte Produktion des aktuellen Tages und die Stromproduktion insgesamt abrufen – Werte, die für mich reichen. Per ModBus wären auch Daten wie z. B. die Spannung der einzelnen Module abrufbar, aber das brauche ich nicht. Wer sich dafür interessiert, wäre hier besser aufgehoben: https://github.com/s10l/deye-logger-at-cmd.
Im Rahmen der Entwicklung musste ich leider feststellen, dass der Wechselrichter (bzw. der Logger im Inverter) nur ungefähr alle 6 Minuten neue Daten liefert. Warum „ungefähr“? Mal ist es etwas mehr, Mal etwas weniger. Keine Ahnung, woran das liegt und was der Hersteller sich dabei gedacht hat. Es macht auch keinen Unterschied, auf welchem Weg die Daten abgefragt werden: Auch per ModBus gibt es nur alle paar Minuten neue Werte. Damit müssen wir also leben.
Zur Installation und Konfiguration des Dienstes verweise ich auf die README auf github. Da steht eigentlich alles drin: https://github.com/thonhaus/deye2mqtt.
In openHab muss dann nur noch ein „Generic MQTT thing“ angelegt werden (Voraussetzung dafür ist ein fertig eingerichteter MQTT-Broker). Das Thing bekommt als „Availibility Topic“ dann deye/LWT
und als Payload Online
und Offline
. Anschließend drei Channels einrichten:
1. „Current Power“ mit dem State Topic deye/current_power
. Dies liefert eine Zahl mit der aktuellen Leistung in Watt.
2. „Total Today“ mit dem State Topic deye/total_today
. Dies liefert eine Zahl mit dem produzierten Strom des aktuellen Tages in kWh.
3. „Total Lifetime“ mit dem State Topic deye/total_lifetime
. Dies liefert eine Zahl mit dem insgesamt produzierten Strom in kWh.
China-Cloud abschalten
Das Abschalten der China-Cloud (Solarman-App) kann der Deye-Wechselrichter nicht von Haus aus. Sobald er eine Online-Verbindung hat, verbindet er sich auch zu den Servern (unabhängig davon, ob man den Dienst nutzt oder nicht). Das „Abschalten“ der Cloud-Verbindung habe ich daher in meinem Router erledigt. Hier kommt eine Fritzbox zum Einsatz, und darin kann die Internetverbindung für einzelne Geräte ganz einfach gesperrt werden. Voilà – das Gerät kann nicht mehr nach Hause telefonieren.
Einen Nachteil hat das allerdings: Das Zurücksetzen des Zählers des täglich produzierten Stroms scheint aus der Cloud zu kommen und nicht vom Gerät selbst (warum tut man sowas?). Daher ist dieser Wert anschließend unbrauchbar. Wer den Wert trotzdem haben möchte, kann sich natürlich im openHab immer nachts um 0 Uhr den Wert aus total_lifetime
speichern und den täglich erzeugten Strom selbst errechnen 😉
Übrigens: Das Auslesen sollte auch mit allen baugleichen Wechselrichtern funktionieren. Ein Discounter verkauft sie unter dem Namen Bosswerk, ein großer Internethändler als Revolt.