zurück zur Startseite

zurück zur Übersicht der Heimautomatisierung

48. Der Energiespeicher (Stand 24.05.2019)

Ich habe eine Photovoltaik-Anlage und einen Energiespeicher. Da wäre es doch naheliegend, wenn die energiehungrigen Geräte wie z.B. Waschmaschine und Geschirrspülmaschine nur laufen, wenn genügend Energie im Speicher verfügbar ist. Mein Varta Engion Home stellt ein paar Daten zur Verfügung, die man mit FHEM leicht abgreifen kann. Gibt man "http://192.168.178.29/cgi/ems_data.xml" als Adresse in irgendeinen Browser ein, so bekommt man eine Auflistung der Daten, die wie folgt aussieht:

<root Timestamp="944006724" id="110000015" ChargerCount="15" Description="Reimann">
  <inverter id="M041616">
    <var name="P" value="2466"/>
    <var name="SOC" value="33"/>
    <var name="Capacity" value="6912"/>
    <var name="State" value="2"/>
  </inverter>
</root>

In FHEM gibt es ein Modul HTTPMOD, welches sozusagen wie ein Browser wirkt und die Information dann zur Verfügung hat. Man muss sie nur noch passend auswerten.

define pw_engion HTTPMOD http://192.168.178.29/cgi/ems_data.xml 60

Die letzte Zahl (hier 60) gibt an, alle wie viele Sekunden der Aufruf wiederholt wird. Mir genügt eine Aktualisierung jede Minute. Damit steht genau die o.g. Information in einem internen Speicher des Moduls, den man sich durch Setzen eines Attributs auch anzeigen kann.

attr pw_engion showBody 1

Damit sieht man dann in den Internals auch ein "httpbody", was fast genau wie oben aussieht.

<root Timestamp="944006724" id="110000015" ChargerCount="15" Description="Reimann">
<inverter id="M041616">
<var name="P" value="2466"/>
<var name="SOC" value="33"/>
<var name="Capacity" value="6912"/>
<var name="State" value="2"/>
</inverter>
</root>

Als nächstes muss man die gewünschten Daten definieren - zum einen muss man ihnen einen Namen geben und danach noch über eine perl Regex festlegen, wie dieses Datum aus dem httpbody herausgefiltert werden soll. In meinem Fall sieht das so aus:

attr pw_engion reading01Name Timestamp
attr pw_engion reading02Name P
attr pw_engion reading03Name SOC
attr pw_engion reading04Name Capacity
attr pw_engion reading05Name State

attr pw_engion reading01Regex root Timestamp='([\d\.]+)
attr pw_engion reading02Regex var name='P' value='(.[\d\.]+)
attr pw_engion reading03Regex var name='SOC' value='([\d\.]+)
attr pw_engion reading04Regex var name='Capacity' value='([\d\.]+)
attr pw_engion reading05Regex var name='State' value='([\d\.]+)

Und schon gibt ses 5 Readings, die die gewünschten Werte erhalten. Leider liefert die Schnittstelle eine wichtige Größe nicht mit, die man sich aber leicht errechnen kann. "Wie groß ist die verfügbare Energie?" Diese ist die nominale Kapazität ("Capacity") multipliziert mit dem Ladezustand ("SOC" = state of charge) in %. Das Ergebnis lege ich dann in dem Status des Moduls ab, der ansonsten undefiniert ist. Das erfolgt über ein weiteres Attribut.

attr pw_engion stateFormat {sprintf("%d", ReadingsVal($name,"Capacity",0) * ReadingsVal($name,"SOC",0) / 100)}

Der eigentliche Nutzen ergibt sich erst, wenn ich auch noch ein paar Informationen von der PV-Anlage und den o.g. Geräten in FHEM verfügbar habe. Für's erste begnüge ich mich mal mit einer einfachen grafischen Anzeige von SOC und P. Letzteres gibt an, mit welcher Leistung der Speicher aktuell geladen, bzw. entladen wird. Dazu müssen die Werte in eine Log-Datei abgelegt werden, so dass daraus eine Grafik erstellt werden kann.

define pw_engion_log FileLog /media/usb0/log/pw_engion-%Y-%m.log pw_engion:P:.*|pw_engion:SOC:.*

Es soll für jeden Monat eine Datei erstellt werden (pw_engion-%Y-%m.log), diese soll in einem bestimmten Verzeichnis abgelegt werden (/media/usb0/log) und es sollen alle Wert P, bzw. SOC gelogt werden (pw_engion:P:.*|pw_engion:SOC:.*). So sieht dann die Datei aus.

Mittels des Moduls SVG kann man daraus recht einfach eine erste Grafik erstellen. FHEM bietet bei der log-Datei gleich einen Aufruf zum erstellen des Grundgerüsts an, welches man dann ergänzen muss. Abschließend den Knopf "Write .gplot file" klicken nicht vergessen!

Wenn man dann noch ein Attribut "captionPos" mit dem Wert "auto" definiert, dann bekommt man kurz vor 11 Uhr folgende Grafik für diesen Tag:

weiter zu: 49. Die PV-Anlage