Was ist SMA-EM Daemon
Als meine PV -Anlage installiert wurde, suchte ich ein Messgerät (mit Netzwerkanschluss), dass Überschuss oder Verbrauch recht zeitnah zur Verfügung stellt. So installierte ich mir einen SMA-Energy-Meter. Das Nachfolgeprodukt trägt den Namen SMA-Home-Manager 2. Da der SMA-Energymeter jede Sekunde die aktuellen Messwerte und Zählerstände ins Netz sendet, diese aber nicht einfach irgendwo abzulesen sind, wurde dieses Projekt ins Leben gerufen.
Reverse Engineering
Da ich zum Zeitpunkt des Projekt-Startes kaum Infos zum Datenprotokoll gefunden habe, habe ich mir einige Testaufbauten erstellt, mit definierten Verbrauchern und dann die Messdaten, die der SMA-EM jede Sekunde ins Netz via Multicast – Paket versendet, zu analysieren. Nach dem die ersten direkt-Verbrauchswerte gefunden wurden, konnte ich auch weitere Details der Datenpakete auf http://www.eb-systeme.de (diese Informationen sind leider nicht mehr verfügbar) finden.
Mit diesen Informationen versuchte ich meinen ersten Client zu programmieren, der die Messdaten anzeigt hat (eine meiner wenigen versuche C zu programmieren). Die ersten User wurden auf meine Infos aufmerksam und bestärkten mich weiter zu machen. Da ich zu diesem Zeitpunkt Python näher ansehen wollte, versuchte ich die gleichen Funktionen auch mit Python nach zu bauen und veröffentlichte diese Teile auf Github.
Nach und Nach wurden die Programmteile alle überarbeitet und verbessert (daher werden auch verschiedene Firmware-Versionen unterstützt, die ich gar nicht selber verwenden kann, weil ich z.B. keinen HomeManager habe)
Mittlerweile hat SMA auch Informationen und Details zu dem Datagram (Datenpaket mit den Messdaten) veröffentlicht. Infos gibt es z.B. hier. (leider auch nicht mehr verfügbar) Bei Google findet man aber z.B. in Foren verlinkte PDF-Informationen mit dem Titel: Technische-Information-sma-energy-meter-zählerprotokoll-pdf.
Module
Es war recht schnell klar, dass die Kernaufgabe des Projektes der Empfang der Messdaten sein soll und für die Weiterverarbeitung ein modularer Aufbau benötigt wird. (Jeder hat andere Dinge, die er/sie steuern und beeinflussen möchte.)
Da ich dieses Projekt als Hobby in meiner Freizeit betreibe kann ich kaum Support bei Problemen oder Unterstützung für Spezielle Anfragen leisten. Verbesserungen und neue Funktionen werden gerne als Github pull-requests angenommen. Einige Features kann ich nicht mal testen, denn die entsprechende Hardware besitze ich gar nicht.
Falls mir jemand einen funktionierenden Batterie-Wechselrichter von SMA schenkten möchte – würde ich natürlich auch nicht „Nein“ sagen 😉 .
Ich habe die Features, die ich selbst nicht (mehr) testen kann, in den Ordner „features-outdated“ verschoben. So bleiben Sie erhalten, aber es sollte klar sein, dass ich dazu keine zusätzlichen Infos oder Updates liefern kann.
Detaillierte Installations-Anleitung
Ich versuche hier eine detaillierte Installationsanleitung zur Verfügung zu stellen, damit möglichst viele Usern das System erfolgreich betreiben können.
Das System soll auf fast jedem Linux-System mit Python3 funktionieren. (Ich habe auch schon davon gehört, dass jemand es erfolgreich unter Windows starten konnte.) Der SMA-EM-Daemon funktioniert unter Raspbian (Debian auf Raspberry 2,3,4,400, Debian 9,10,11 auf Standard-Rechnern. Bei mir läuft das System derzeit als KVM virtuelle Maschine mit Debian 10. Da ich sehr gerne Debian GNU/Linux verwende, ist das das System auf dem die Komponenten entwickelt und getestet werden.
Voraussetzungen
Der SMA – Energymeter (oder deren Nachfolger) arbeiten mit einem Protokoll, das in den SMA-Betriebsanleitungen als Seepdwire – Protokoll bezeichnet wird. Netzwerktechnisch handelt es sich dabei um Multicast Ethernet-Pakete die in der Default-Konfiguration an die IPv4 Adresse 239.12.255.254 an den Port 9522/udp gesendet werden. Wenn im Netzwerk keine speziellen Konfigurationen getroffen wurden, muss daher der SMA-EM in dem gleichen Netzwerksegment betrieben werden, in dem auch der Client betrieben wird, der Messdaten empfangen soll. (gleiche Broadcast-Domain)
Installation unter Debian
Die Folgenden Schritte beschreiben, wie die Software unter Debian eingerichtet werden kann.
Melden Sie sich mit einem User (mit sudo-Rechten) am System an. Wenn sie mit einer grafischen Oberfläche arbeiten, öffnen Sie eine Konsole/Terminal/Xterminal oder irgend eine Bash-Shell.
Die folgenden Befehle aktualisieren die Paketquellen, aktualisieren das System, installieren python3 und pip sowie die Versionsverwaltung git.
sudo apt update
sudo apt full-upgrade
sudo apt install python3 python3-pip python3 cl-py-configparser git
Die Konfiguration wird in /etc/smaemd und das Programm wird in /opt/smaemd abgelegt.
Die folgenden Befehle erzeugen diese Verzeichnisse.
sudo mkdir /opt/smaemd/
sudo mkdir /etc/smaemd/
Nun kann die aktuelle Version der Software von Github heruntergeladen werden
cd /opt/smaemd/
sudo git clone https://github.com/datenschuft/SMA-EM.git .
Erster Test:
Nun kann mit dem folgenden Befehl bereits getestet werden, ob die Messwert-Datenpakete am Client ankommen. (Das funktioniert nur, wenn der Client die Multicast-Datenpakete des SMA-EM empfangen kann und die Konfiguration am SMA-EM nicht geändert wurde)
/opt/smaemd/sma-em-measurement.py
Sollte nun die Datenpakete vom SMA-EM empfangen und die Messwerte in der Konsole ausgeben.
Die Tastenkombination STRG + C bricht das Programm wieder ab.
Hier sind nun die Messwerte und die Serinenummer des EM oder Homemanagers zu sehen. Die Seriennummer wird für die weitere Konfiguration benötigt.
Konfiguration
Der SMA-EM-Daemon soll später diese Messwerte empfangen und zur weiteren Verarbeitung an Plugins (hier Features genannt) übergeben.
Da jeder etwas anderes steuern, regeln oder beeinflussen will, muss der Daemon wissen welche Features ausgeführt werden sollen.
Die Konfiguration des SMA-EM-Daemon erfolgt über die Datei /etc/smaemd/config.
Sie können nun diese Datei mit einem Text-Editor ihrer Wahl anlegen
sudo nano /etc/smaemd/config
oder die mitgelieferte Beispiel-Konfigurationsdatei kopieren
sudo cp /opt/smaemd/config.sample /etc/smaemd/config
Die Konfigurationsdatei unterteilt sich in einzelne Abschnitte die durch [ABSCHNITT] eingeleitet werden.
[SMA-EM]
[SMA-EM]
# serials of sma-ems the daemon should take notice
# separated by space
serials=1900204523
# features could filter serials to, but wouldn't see serials if these serials was not defines in SMA-EM serials
# list of features to load/run
#features=simplefswriter sample pvdata ediplugs mqtt remotedebug symcon influxdb
features=simplefswriter
Unter „serials“ werden die Seriennummern der SMA-EM/Homemanager angegeben, von welchen die Daten verarbeitet werden sollen.
Damit die empfangenen Daten auch verarbeitet werden, müssen Features verwendet werden.
Das einfachste Feature ist der simple-filesystem-writer (simplefswriter) der die gewünschten Messdaten in einfache Text-Dateien schreibt. (siehe weiter unten)
Im Abschnitt [Daemon] muss im Normalfall nichts geändert werden.
Hier könnte aber die IP-Adresse und der Port der Multicast-Kommunikation angepasst werden, falls diese auch am SMA-EM geändert wurde.
Sollte der PC, auf dem der SMA-EM-Daemon läuft mehrere Netzwerkkarten besitzen und die Kommunikation des SMA-EM-Daemon auf ein Interface beschränt werden, so kann die IP-Adresse des Interfaces, auf dem der SMA-EM-Daemon lauschen soll unter ipbind angegeben werden
Konfiguration der Features simplefswriter
Jedes Feature hat ihren eigenen Konfigurationsabschnitt. Diese werden mit [FEATURE-<featurename>] eingeleitet.
Für das Feature simplefswriter lautet daher der Konfigurationsabschnitt [FEATURE-simplefswriter].
[FEATURE-simplefswriter]
# list serials simplefswriter notice
serials=1900204523
# measurement vars simplefswriter should write to filesystem (only from smas with serial in serials)
values=pconsume psupply qsupply ssupply
Die meisten Features erlauben eine weitere Selektion der zu verarbeitenden Daten anhand der Seriennummer des SMA-EM. Somit ist es möglich, dass ein SMA-EM-Daemon die Daten von 2 SMA-EM empfängt, aber die Messdaten des ersten SMA-EM an das Feature 1 weiter gibt, die Messdaten des zweiten SMA an ein anderes Ferature zur Verarbeitung weiter gibt.
Die Namen der Messwerte, die in values angegeben werden schreibt das Feature simplefswriter in die entsprechenden Textdateien. Die Dateien werden im folgenden Schema angelegt und mit den aktuell empfangenen Messwerten befüllt.
/run/shm/em-<serial>-value
ls -l /run/shm/
-rw-r--r-- 1 root root 8 Mai 26 21:51 em-1900204523-pconsume
-rw-r--r-- 1 root root 6 Mai 26 21:51 em-1900204523-psupply
-rw-r--r-- 1 root root 8 Mai 26 21:51 em-1900204523-qsupply
-rw-r--r-- 1 root root 6 Mai 26 21:51 em-1900204523-ssupply
Automatischer Start (systemd)
Das Unit-File für Systemd (das sich später um den automatischen Start im Hintergrund kümmert) kann nun auch bereits kopiert werden.
sudo cp systemd-settings /etc/systemd/system/smaemd.service
Die folgende Befehle laden Systemd neu und aktivieren den automatischen Start des Daemons (und starten das Ding auch gleich noch)
sudo systemctl daemon-reload
sudo systemctl enable smaemd.service
sudo systemctl start smaemd.service
Damit sollte die Installation und Konfiguration abgeschlossen sein.
Die Messwerte können z.B. mit cat /run/shm/em-1900204523-pconsume abgerufen werden.
Verfügbare Messgrößen
(einige Features erweitern die verfügbaren Messungen, die folgenden Messwerte liefert aber der SMA-EM-Daemon ohne weitere Features)
saldierende aktuelle Werte
P (in W),
Q (in VA)
S (in VAr)
Saldierende Zählerstände
P (in kWh)
Q (in kVAh)
S (in kVArh)
Diese Werte sind für den Energiebezug (consume) und die Energieeinspeisung (supply) separat abgebildet.
Zusätzlich wird noch der gesamt cos φ angegeben.
Für jede einzelne Phase werden die selben Messungen angegeben.
zusätzlich gibt es hier auch noch die aktuelle Spannung (U un V) und den aktuellen Strom (I in A).
Details zu P,Q und S gibt es auf Wikipedia
Die Messwerte werden im SMA-EM-Daemon daher wie folgt benannt:
- pconsume
- psupply
- qconsume
- qsupply
- sconsume
- ssupply
- cosphi
- frequency *
- p1consume
- p1supply
- q1consume
- q1supply
- s1consume
- s1supply
- i1
- u1
- cosphi1
Bei der Phase 2 und 3 sind die Bezeichnungen gleich aufgebaut.
p3supply = Leistung an Phase 3 im Messbereich der Einspeisevergütung.
Damit sollte die grundlegende Funktion der Software erklärt sein.
Einige Systeme verwenden diese Software (oder Teile davon) um die Messdaten auch in andere Systeme (smart home systeme) zu integrieren. Leider kann ich hier meist nicht support leisten und kenne mich auch in den meisten Systmen zu wenig aus. Viele Systme können aber mit einem oder dem anderen Feature bereits integriert werden.
Eventuell kann man die Dateien, die simplefswriter schreibt automatisch regelmäßig auslesen. Eine Andere Möglichkeit könnte MQTT bieten.
Ich hoffe, mit dieser Anleitung zumindest einigen Anwenden geholfen zu haben und bitte um Verständnis, dass ich nicht jede SupportAnfrage bedienen kann.