Hinweis:
Die neueren Wechselrichter besitzen eine Modbus-Schnittstelle. Diese Software funktioniert damit nicht! Sie basiert auf dem SMA Speedwire/Webconnect Modul.
Version | Adjustments |
---|---|
1.0 (2016-09-05) | Initiale Version |
1.1 (2020-03-25) | Fehlerbehandlung beim LogOn überarbeitet |
Seit nunmehr fast zwei Jahren versorge ich mich zumindest teilweise mit Solar-Energie. Der eingebaute Wechselrichter ist ein STP 5000TL-20 von der Firma SMA. Die Mär war: "Dieses Gerät besitzt einen Bluetooth- und einen Internet-Anschluss und lässt sich auslesen". Super! Da kann man dann die Großverbraucher, wie die Waschmaschine, zu Zeitpunkten einschalten, an denen ausreichend Solarenergie zur Verfügung steht. Das ganze dann noch kombiniert mit einer Wetterprognose für die nächsten Stunden, unter Berücksichtigung der Jahreszeit und der Tageszeit... Ein tolles Thema für ein interessantes und außerdem nutzbringendes Projekt.
Dann kam die Ernüchterung. SMA stellt PC-Software, ein Internet-Portal und ein Handy-App zur Verfügung, die aktuelle Anlagendaten und eine Historie der erzeugten Energien anzeigen oder als CSV-Dateien exportieren. Nur ist es so, dass das Protokoll nicht offengelegt ist. Eigener oder Open-Source-Software, z.B. openHAB, können die Daten nicht online zur Verfügung gestellt werden. SMA bietet eigene Lösungen an (z.B. Sunny Home Manager), mit denen man z.B. Funksteckdosen steuern kann. Es gibt auch eine Lösung die Daten per Modbus Application Protocol (MBAP) zur Verfügung stellt. Alles in allem ist dies a) unflexibel (meine Waschmaschine lässt sich nicht mit einer Funksteckdose steuern) b) nicht einfach erweiterbar c) teuer!
Also schauen, ob es eine Alternative gibt! Schaut man sich im Netz um, findet man eine Reihe von Leuten, die das gleiche Problem haben. Es gibt auch eine Reihe von Lösungsvarianten. Schaut man genauer hin, basieren viele auf dem Programm SBFSpot, ein in C++ geschriebenes Programm, mit dem man die verfügbaren Daten sowohl per Bluetooth als auch per LAN abrufen kann. Es bietet viele Möglichkeiten, wie Export als CSV, Speichern der Daten in einer Datenbank (MySQL, SQLite). Dieses Programm habe ich als Basis genommen, nach VB.Net transferiert, ein wenig Objektorientierung hinzugefügt und die Dinge hinausgeworfen, die für mich nicht relevant sind und das Ganze in eine Bibliothek gepackt. Das Ergebnis ist noch nicht perfekt, man könnte noch einiges verbessern. Aber es funktioniert und erfüllt so seinen Zweck. Hinzu kommt ein kleines Demo-Programm, dass die ausgelesenen Daten in einem Fenster anzeigt.
Die zentrale Klasse ist SmaInverter. Sie stellt Methoden bereit, mit denen die Daten des Wechselrichters ausgelesen werden können, nimmt die ausgelesen Daten und veröffentlicht sie als Eigenschaften.
Methode | Funktion |
---|---|
new(PlantIPAddress, UserGroup, Password) | Initialisiert eine neue Instanz der SmaInverter-Klasse. Diese Methode meldet sich unter der angegebenen IP beim Wechselrichter an und erfragt die Anlagen-Stammdaten, den Betriebszustand, Input und Output. Das Standard-Anmeldepasswort ist "0000" für Benutzer und "1111" für Installateure. |
Refresh() | Aktualisiert die Werte für Anlagedaten, Input, Output und Betrieb. |
GetArchiveDayData(ArchiveDate) | Ruft die Archivdaten für den angegebenen Tag ab (Bereitgestellte Energie in Fünf-Minuten-Abschnitten). |
GetArchiveMonthData(ArchiveDate) | Ruft die Archivdaten für den angegebenen Monat ab (bereitgestellte Energie pro Tag). |
GetArchiveYearData(Year) | Ruft die Archivdaten für das angegebene Jahr ab (bereitgestellte Energie pro Monat). |
Die bereitgestellten Anlagendaten sind:
Kategorie: Anlagendaten | Kategorie: Betrieb | |||
---|---|---|---|---|
Eigenschaft | Bedeutung | Eigenschaft | Bedeutung | |
PlantIPAddress | IP-Adresse der Anlage. | OperationTime | Gesamtbetriebszeit [h]. | |
SUSyID | SUSy-ID der Anlage. | FeedInTime | Einspeisezeit [h]. | |
DeviceName | Gerätebezeichnung. | EnergyToday | Die am lfd. Tag produzierte Energie [kWh]. | |
DeviceTypeName | Gerätetypenbezeichnung. | EnergyTotal | Insgesamt produzierte Energie [kWh]. | |
DeviceClassName | Geräteklasse. | Temperature | Aktuelle Temperatur des Geräts [°C]. | |
DevClass | Gerätetypenklasse. | DeviceState | Aktueller Betriebszustand. | |
SWVersion | Aktuelle Software-Version. | GridRelayState | Aktuelle Einstellung des Netz-Relais. | |
Serial | Seriennummer. | InverterDatetime | aktuell eingestellte Uhrzeit (lokale Zeit). | |
Pmax1 | Maximalleistung [W]. | WakeupTime | Aktueller Einschaltzeitpunkt. | |
SleepTime | Aktueller Ausschaltzeitpunkt des Geräts (im lfd. Betrieb ist dies die aktuelle Uhrzeit). | |||
Kategorie: Input | Kategorie: Output | |||
Eigenschaft | Bedeutung | Eigenschaft | Bedeutung | |
Pdc1 | Aktuell von Solar-Panel-Block A gelieferte Leistung [W]. | Pac1 | Aktuell bereitgestellte Leistung für Phase L1 [W]. | |
Pdc2 | Aktuell von Solar-Panel-Block B gelieferte Leistung [W]. | Pac2 | Aktuell bereitgestellte Leistung für Phase L2 [W]. | |
Udc1 | Aktuell von Solar-Panel-Block A gelieferte Spannung [V]. | Pac3 | Aktuell bereitgestellte Leistung für Phase L3 [W]. | |
Udc2 | Aktuell von Solar-Panel-Block B gelieferte Spannung [V]. | TotalPac | Aktuell bereitgestellte Gesamtleistung [W]. | |
Idc1 | Aktuell von Solar-Panel-Block A gelieferte Stromstärke [A]. | Uac1 | Aktuelle Ausgangsspannung für Phase L1 [V]. | |
Idc2 | Aktuell von Solar-Panel-Block B gelieferte Stromstärke [A]. | Uac2 | Aktuelle Ausgangsspannung für Phase L2 [V]. | |
Uac3 | Aktuelle Ausgangsspannung für Phase L3 [V]. | |||
Iac1 | Aktuell abgegebene Stromstärke für Phase L1 [A]. | |||
Iac2 | Aktuell abgegebene Stromstärke für Phase L2 [A]. | |||
Iac3 | Aktuell abgegebene Stromstärke für Phase L2 [A]. | |||
GridFreq | Netzfrequenz [Hz]. |
Hinzu kommen die Klassen SmaArchiveDayData mit den archivierten Tagesdaten, SmaArchiveMonthData mit den archivierten Monatsdaten und SmaArchiveYearData mit den archivierten Jahresdaten.
SmaArchiveDayData | SmaArchiveMonthData | |||
---|---|---|---|---|
Eigenschaft | Bedeutung | Eigenschaft | Bedeutung | |
UnixTimeStamp | Zeitstempel UTC im Unix-Format. | UnixTimeStamp | Zeitstempel UTC im Unix-Format. | |
TimeStamp | Datum im Standard-dotNet-Format. | TimeStamp | Datum im Standard-dotNet-Format. | |
TotalHarvest | Bis zum Zeitpunkt erzeugte Energie [kWh]. | TotalHarvest | Bis zum Zeitpunkt erzeugte Energie [kWh]. | |
AvgPower | Durchschnittliche Leistung im Zeitraum (5 Minuten). | DaylyHarvest | Tagesertrag [kWh]. |
Das zugehörige Klassendiagramm:
Für die einzelnen Eigenschaften habe ich eigenständige Klassen angelegt bei denen die ToString()-Methode überschrieben wurde. Dies ermöglicht die Ausgabe mit Einheiten in einem PropertyGrid.
Zu Debug-Zwecken wird der Datenverkehr mit dem Wechselrichter protokolliert. Das Protokoll kann über die Klasse SmaHistorie abgerufen werden. Einzelheiten kann man der Dokumentation im Source-Code oder der Hilfe-Datei entnehmen.
Ein kleines Testprogramm ruft die Daten vom Wechselrichter ab und zeigt sie an:
Anlagendaten | Tagesdaten | Monatsdaten | Jahresdaten |
Wer es ausprobieren möchte: Die IP-Adresse des Wechselrichters ist in der Datei SBFspotDisplay.vb im Projekt SBFspotVB gelich zu Beginn hintelegt.
Zeile 8: Dim IpAdresse As
String = "192.168.178.33"
Zeile 9: Dim
Password As String = "0000"
VS-Projekt |
James Ball: SMA Bluetooth Protocol
volkerrichert/org.openhab.binding.sma
SMA Energy Meter Auslese Software
groups.google.com: Forum sma-spot
PV-Wechselrichter (SMA) über Bluetooth auslesen und via Webinterface darstellen