Die Idee

Nach der Installation einer PV-Anlage wollte ich die Leistung und Energiebilanz selbst erfassen und berechnen. Die Werte von SMA-Wechselrichter und SMA-HomeManager werden zwar auf dem Sunny-Portal sehr übersichtlich dargestellt, aber ich wollte diese Werte auch in meiner MySQL-Datenbank ablegen. Dazu musste ich die Werte vom SMA-Homemanager direkt auslesen. Das geht über TCP-Modbus relativ einfach, zum Beispiel über ein Python- oder PHP-Script (siehe unten).

Außerden wollte ich auch eine einfache optische Anzeige der aktuellen Leistung der PV-Anlage inklusive Einspeisung und Netzbezug. Hierzu verwende ich einen LED-Ring mit 16 RGB-LEDs:

NeoPixel-Rad mit 16 LEDs NeoPixel-Rad mit 16 LEDs leuchtend

 

Die aktuelle PV-Leistung wird über die Anzahl gelber LEDs im Uhrzeigersinne dargestellt. Überlagert werden diese durch grüne LEDs, die Anzahl entspricht der Leistung der Einspeiseleistung. Der aktuelle Netzbezug wird mit roten LEDs dargestellt. Gesteuert wird derr LED-Ring von einem ESP8266-ESP01. Die aktuellen Daten bezieht der ESP8266 alle zwei Sekunden über ein PHP-Script auf einem Raspberry Pi. Das PHP-Script fragt den Modbus des SMA-HomeManagers ab.


Python-Script

Zur Erfassung der Parameter des SMA-HomeManagers via Modbus-TCP verwende ich die Python-Bibliothek SMA.py, die wiederum auf pyModbusTCP aufbaut. Das dortige Beispiel-Programm habe ich an meine Bedürfnisse angepasst.

Die Modbus-Register des SMA-HomeManagers sind auf der Seite MODBUS PROTOKOLL-SCHNITTSTELLE dokumentiert.

Ich verwende folgenden Python-Code auf einem Raspberry Pi, um die für mich interessanten Parameter auszulesen und in der MySQL-Datenbank abzuspeichern:


PHP-Scripte

Zur Erfassung der Parameter des SMA-HomeManagers via Modbus-TCP verwende ich die PHP-Bibliothek Phpmodbus. Der folgende PHP-Code läuft auf einem Raspberry Pi, um die aktuellen Leistungswerte PV-Erzeugung, Einspeisung und Netzbezug auszulesen und auf einer HTML-Seite darzustellen:

Um die aktuellen Leistungsparameter der PV-Anlage mit einem ESP8266 weiterverarbeiten zu können nutze ich folgendes PHP-Script GetPV.php, das ebenfalls auf diesem Raspberry Pi läuft.


Leistungsindikator via ESP8266 mit LED-Ring

Ein ESP8266-ESP01 fragt über den Aufruf des PHP-Scripts GetPV.php alle zwei Sekunden die Leistungsparameter der PV-Anlage ab. Diese werden dann mit einem LED-Ring quasi in Echtzeit visualisiert. Der LED-Ring ist hinter eine Plexiglas-Scheibe geklebt.

Die LEDs sind wie bei einer Uhr angeordnet. Die erste LED ist auf 12 Uhr, je mehr Leistung desto mehr LEDs leuchten im Uhrzeigersinn. 16 leichtende LEDs (Vollkreis) entsprechen der maximalen Einspeiseleistung (70% der maximalen PV-Leistung). Aktuell sieht mein PV-Leistungsindikator von vorne und von hinten wie unten dargetellt aus.

gelbe LEDs = aktuelle PV-Leistung
grüne LEDs = aktuelle Einspeise-Leistung
rote LEDs = aktueller Netzbezug

Zum Zeitpunkt des Fotos war die PV-Leistung nur ca. 1/4 der Maximalleistung (4 der 16 LEDs leuchten, die vierte gelbe LED zeigt die aktuelle PV-Leistung). Von der erzeugten PV-Leistung wurde 3/4 ins Nezt eingespeist, dargestellt durch die drei grünen LEDs.

PV-Leistungsindikator von vorne PV-Leistungsindikator von hinten

 

Das folgende Video zeigt den PV-Leistungsindikator in Aktion. Die erste LED ist oben (auf 12 Uhr). Am Anfang des Videos ist die PV-Einspeisung maximal, angezeigt durch einen Ring komplett grüner LEDs.

Dann werden schrittweise Test-Verbraucher (Wasserkocher und Herdplatten) zugeschaltet, die Einspeisung sinkt (weniger grüne LEDs). Die PV-Leistung bleibt konstant, angezeigt durch die gelben LEDs. Bei der Zuschaltung von weiteren Verbrauchern sinkt die Einspeisung auf Null (grüne LEDs verschwinden) und es wird (über die PV-Leistung hinaus) Leistung aus dem Netz bezogen (rote LEDs nehmen zu).

Zum Ende des Videos sind wieder alle Test-Verbraucher ausgeschaltet. Wie zu Beginn des Videos ist die Einspeisung wiedeer maximal (alle LEDs sind grün).


Beispieldaten

Das folgende Diagramm stellt die Daten von einer Woche im April grafisch dar: