Hendrich.org

SMA Wechselrichter und Home Manager auslesen

Veröffentlicht: 19.12.2019

Seit Anfang 2020 bin ich in Besitz einer PV Anlage (7,36 kWp) mit zwei Sunnyboy-Wechselrichtern (SMA-SB 4.0-1AV-41). Das Einspeisemangagement wird mit dem Sunny Home Manager (SMA-SHM-2.0) realsiert. Alle Geräte sind über Ethernet mit dem Heimnetzwerk verbunden.

Leider musste ich feststellen, dasss beide Geräte keine einfach zu erlernenden API zur Verfügung stellen. Daher habe ich etwas im Internet recherchieren müssen.

Sunny Home Manager auslesen

Das Tool SMA-EM (findet man auf Github) ist geeignet, um die Werte des Home Managers auszulesen. Der Home Manager gibt Informationen über die eingespeiste und entnommene Energiemenge ins/aus dem Netz aus.

Die Installation erfolgte gemäß der Anleitung auf der Webseite:

apt install git
apt install python3 cl-py-configparser
mkdir /opt/smaemd/
mkdir /etc/smaemd/
cd /opt/smaemd/
git clone https://github.com/datenschuft/SMA-EM.git .
cp systemd-settings /etc/systemd/system/smaemd.service

Konfiguration erzeugen/anpassen: /etc/smaemd/config

update systemd

systemctl daemon-reload
systemctl enable smaemd.service
systemctl start smaemd.service

Anschließend läuft der Daemon und man findet die letzten Daten im Verzeichnis /run/shm/ in verschiedenen Dateien. Dabei werden die Kürzel p, q, s verwendet (q ist die Blindleistung und s die Scheinleistung, siehe Wikipedia).

Mit folgendem Python-Code lese ich die Daten aus (xxxx ist die Seriennummer meines Home-Managers):

with open('/run/shm/em-xxxx-pconsumecounter','r') as f:
        pconsumecounter = f.read()
    with open('/run/shm/em-xxxx-psupplycounter','r') as f:
        psupplycounter = f.read()

Wechselrichter auslesen

Das Tool SBFspot (findet man auf Github) liest alle Werte der Wechselrichter aus und speichert diese auf Wunsch in einer Datenbank. Die Installation erfolgte gemäß der geführten Anleitung:

curl -s https://raw.githubusercontent.com/sbfspot/sbfspot-config/master/sbfspot-config | sudo bash

Da ich zwei Wechselrichter besitze habe ich zwei Konfigurationsdateien anleget. Ich habe jedoch kein Bedarf die Werte in eine Datenbank auf dem Raspberry zu speichern. Daher rufe ich die Daten wie folgt ab:

/usr/local/bin/sbfspot.3/SBFspot -v -nosql -nocsv -finq -cfgSBFspot2.cfg
/usr/local/bin/sbfspot.3/SBFspot -v -nosql -nocsv -finq -cfgSBFspot.cfg

Die Wechselrichter geben die erzeugte Energiemenge aus, welche ich mit folgender Python-Funktion auslese (die anderen Daten interessieren mich nicht):

sunnyboy1 = subprocess.Popen('/usr/local/bin/sbfspot.3/SBFspot -v -nosql -nocsv -finq -cfgSBFspot.cfg', shell=True, stdout=subprocess.PIPE).stdout.read()
sunnyboy2 = subprocess.Popen('/usr/local/bin/sbfspot.3/SBFspot -v -nosql -nocsv -finq -cfgSBFspot2.cfg', shell=True, stdout=subprocess.PIPE).stdout.read()

sunnyboy1_production = re.findall('.*ETotal:\s([0-9\.]*)kWh', sunnyboy1, re.MULTILINE)
sunnyboy2_production = re.findall('.*ETotal:\s([0-9\.]*)kWh', sunnyboy2, re.MULTILINE)