Samstag, 16. Mai 2020

Fachartikel: SMA Energy Meter / Home Manager 2.0 Messwerte auslesen

[2021: Bitte den Node-Red Flow nehmen]

Seit dem letzten Firmwareupdate des SMA Home Manager´s funktionieren die Auslese-Programme nicht mehr korrekt*, da SMA das Datagramm geändert hat, Erklärung siehe: Link 

Da die Autoren kein Update ihrer Programme liefern, habe ich mich auf die Suche nach einer Möglichkeit begeben die Live Werte auszulesen und bin auf folgendes Projekt gestoßen: Link

Die Anleitung ist nicht ganz korrekt bzw. für nicht Linux-Profis schwierig umzusetzen.
Daher habe ich die Anleitung sowie ein paar Fehler im Skript korrigiert.

Das ganze läuft im Shell auf Linux (bei mir auf dem Raspberry, außerdem getestet auf Ubuntu20) und sieht nachher so aus:

Die Werte werden jede Sekunde aktualisiert



















Nun zur korrigierten Anleitung (ich nutze Windows 10 Powershell):

(vorher sudo -i)

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


Konfig Datei erstellen:
- touch /etc/smaemd/config  
- nano /etc/smaemd/config


Inhalt von Github kopieren und eure Serien Nr. des EM eintragen und ipbind=0.0.0.0
(die Serien Nr. findet ihr z.B. im Sunny Portal unter Geräteübersicht)











Den Feature Teil könnt ihr weg lassen.

Mit Strg+O speichern & mit Strg+X beenden

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


Nun kann das "Programm" schon getestet werden:

- python3 /opt/smaemd/SMA-EM/sma-em-measurement.py

beenden mit Strg+C und "exit" um vom root zum normalen user zu wechseln.

Leider ist das ganze auf englisch und ein paar Messwerte fehlerhaft.
Ich habe die beiden Dateien korrigiert [Update 8/2020]:
sma-em-measurement.py
speedwiredecoder.py

Die Dateien könnt ihr runterladen und z.B. ins Dokumente Verzeichnis kopieren.
Anschließend mit:

bei Ubuntu z.B.:
- sudo cp /home/user/Dokumente/speedwiredecoder.py /opt/smaemd/SMA-EM/speedwiredecoder.py
- sudo cp /home/user/Dokumente/sma-em-measurement.py /opt/smaemd/SMA-EM/sma-em-measurement.py  

bei Raspian 10 (Buster) z.B.:
- sudo cp /home/pi/Documents/speedwiredecoder.py /opt/smaemd/SMA-EM/speedwiredecoder.py
- sudo cp /home/pi/Documents/sma-em-measurement.py /opt/smaemd/SMA-EM/sma-em-measurement.py
 
die neuen Dateien über die Alten kopieren, anschließend wieder starten:
- sudo python3 /opt/smaemd/SMA-EM/sma-em-measurement.py 
nun solltet ihr die Werte korrekt angezeigt bekommen.

Das ganze kann man auch auf Android mit der App "Termux" nutzen.
Einfach mit "ssh pi@raspberrypi" einloggen und dann mit dem kleinen Pfeil nach oben zum letzten Befehl springen "python3 /..." und schon kann man durch´s Haus laufen und testen welches Gerät wieviel Leistung benötigt.

17 Kommentare:

  1. hallo,
    funktioniert sehr gut, danke für die gute Arbeit.
    Liest das Programm die Daten direkt aus dem Home Manager aus, oder aus der "Cloud" von SMA?

    Gruß,
    Dirk Tersteegen

    AntwortenLöschen
  2. Danke für die Info !
    Ich möchte mir auch einen Speicher selber bauen.
    Zuerst habe ich daran gedacht mir zusätzlich zu meinem SMA Tripower 7000 einen Sunny-Island dazu zu bauen, an den man ja handelsübliche (12/24?)48V LiFePO Akkus anschliessen kann. Das bei SMA mit eingerichtet -> sollte laufen.

    Mit der SOftware auf dem PI möchte ich es aber jetzt anders machen:
    Ein Laderegler, der möglichst flexibel vom PI gesteuert, gerade meinen Überschuss in den Akku lädt.
    Ein Grid-Inverter, der auf Befehl vom PI einspeisst.

    Gibt es sowas schon, bzw. kennst du dafür geeignete Geräte?

    AntwortenLöschen
  3. nein sowas kenne ich nicht, wäre mir auch zu gefährlich wenn was passiert !

    AntwortenLöschen
  4. Hallo, vielen Dank für diese ausführliche Anleitung, jedoch sind die beiden Scripte sma-em-measurement.py &
    speedwiredecoder.py nicht mehr zum Download verfügbar, wäre es möglich, diese erneut hochzuladen? Lieben Gruß Tom

    AntwortenLöschen
  5. hallo,

    seit heute bekomme ich immer die Ausgabe:

    unknown datatype: measurement 29697 datatype unknown raw_type 229
    unknown datatype: measurement 0 datatype unknown raw_type 0
    unknown datatype: measurement 0 datatype unknown raw_type 0
    unknown datatype: measurement 0 datatype unknown raw_type 0


    SMA-EM Serial:4294967295
    -------Gesamt-------
    Traceback (most recent call last):
    File "sma-em-measurement.py", line 84, in
    print ('P: Verbrauch: {}W Einspeisung: {}W '.format(emparts['pconsume'],emparts['psupply']))
    KeyError: 'pconsume'

    und das Programm wird beendet.

    jemand eine Idee?

    AntwortenLöschen
  6. Nachtrag zu dem Fehler:
    Irgendwoher scheint auch eine andere Serial-ID generiert zu werden, als ob ein zweiter Modbus Teilnehmer Daten überträgt. Oder es besteht nur ein "Versatz" der Daten in der Übertragung, was zur Fehlinterpretation führt.
    Ich habe erstmal mit einer if Serial=='MeineSerial' die Fehlermeldung abgefangen...

    AntwortenLöschen
    Antworten
    1. Ich habe auch den selben Fehler wie du Dirk. Ich bin gerade auch, dabei diesen genauer zu verstehen, da ich die Daten gerne in Grafana darstellen möchte. In der Tat habe ich mehrere SMA Geräte im Netzwerk, jedoch nicht mit der oben genannten Serial Nummer, ich vermute beim Parsen kommt der Fehler zustande. Ich habe auf meinem SMA SHM20 die Firmware 2.7.5R, ich vermute da wurde einiges geändert....

      Löschen
    2. Ich habe den Fehler gefunden. Dieser Bytecode(58Bytes) wird als Stream über den UDP Port 9522 verschickt an das Netzwerk in einem ~10-30 Sekunden takt. Das führt wohl dazu, dass das Program trotz festgelegter Multicast IP die Daten abgreift und ein Fehler wirft. ffffffffffff00d09356b7970800450000562f414000401188a2c0a80064c0a800ff25322532004297b9534d4100000402a00000000100260010606509a0ffffffffffff00007401e41195b3000000000000aba100020000000000000000000000000000

      Löschen
    3. PS.: Der Bytecode variiert jedesmal das mal eine Seriennummer, mal Measurements oder Typ als Unknown Datentype abgegriffen wird.

      Löschen
    4. Hallo Renix, könntest du mir etwas mehr Informationen geben was genau das Thema und die Lösung ist? Einer der Benutzer meines smahub Projektes hat genau dieses Problem (https://github.com/AnotherDaniel/smahub/issues/25), und ich würde gerne helfen, kann das aber in meinem Setup nicht nachvollziehen.

      Löschen
  7. Darf ich auch fragen, wo ich die sma-em-measurement.py und speedwiredecoder.py finden kann?
    Danke! Josef

    AntwortenLöschen
  8. Dieser Kommentar wurde vom Autor entfernt.

    AntwortenLöschen
  9. Nutzt lieber den NodeRed Flow zur Abfrage / Visualisierung

    AntwortenLöschen
    Antworten
    1. Ich schau mir das noch an, weil es kein schlechtes Script ist. Mich würde aber ein Link über dein Verweis auf NodeRed Flow freuen, dass ich mir dass auch mal parallel anschauen kann.

      Löschen
  10. Hi,
    danke erst mal für Deine Mühe, aber der Link zu den beiden geänderten Dateien läuft in einen Google Drive Fehler, könntest Du die Links aktualisieren, ich würde mir die Dateien gerne runter laden. Vielen Dank. Gruß RWo

    AntwortenLöschen
  11. Darf ich fragen ob jemand eine Lösung hat um den HM in Windows auszulesen?

    AntwortenLöschen