Background

Preisoptimierte Speicherbeladung aus dem Netz

  • #senec
  • #tibber
von Georg Ledermann
Charger

Dynamische Stromtarife erfreuen sich immer größerer Beliebtheit. Wenn der Strompreis stündlich an den aktuellen Großhandelspreis angepasst wird, ergibt sich für den Endkunden eine interessante Möglichkeiten zur Reduzierung der Stromkosten, indem der Verbrauch in die kostengünstige Zeit verschoben wird.

Für den Besitzer einer Photovoltaik-Anlage mit Stromspeicher eröffnet sich eine zusätzliche Option: Wenn die Ausbeute der eigenen PV-Anlage gering ist, zum Beispiel im Winter, lädt man den Speicher zu günstigen Zeiten aus dem Stromnetz. Davon profitiert man dann einige Stunden später, wenn der Strompreis wieder deutlich gestiegen ist.

Das könnte sich lohnen, auch wenn natürlich Ladeverluste und die Degradation des Speichers berücksichtigt werden müssen. Darüber hinaus gibt es rechtliche Aspekte zu beachten, die weiter unten skizziert werden.

Vorstellung der Beladungsautomatik

Wenn dein Stromanbieter Tibber heißt und du einen Stromspeicher von SENEC hast (v2.1 oder V3), dann gibt es hierfür ein neues OpenSource-Tool, das die kosten-optimierte Beladung des Speichers aus dem Netz automatisiert. Es ist als Docker-Container verfügbar, läuft auch auf einem Raspberry Pi und lässt sich einfach in deine bestehende SOLECTRUS-Installation integrieren. Es kann aber auch ganz ohne SOLECTRUS verwendet werden.

Wie arbeitet die Automatik?

Die Automatik des Tools besteht aus vier Komponenten:

  1. Die aktuellen Strompreise werden regelmäßig über die Tibber-API abgefragt. Jeder Tibber-Kunde kann sich ein kostenloses API-Token erstellen, über den die individuellen Strompreise der nächsten 12-36 Stunden abgerufen werden können.
  1. Die erwartete Stromerzeugung für die eigene PV-Anlage der nächsten 24 Stunden wird ebenso regelmäßig abgefragt. Hierfür wird die PV-Ertragsvorhersage von forecast.solar verwendet, die bereits in SOLECTRUS integriert ist.

  2. Der aktuelle Status und Füllstand des Speichers wird ebenfalls regelmäßig abgefragt. Hierfür wird die lokale Schnittstelle des SENEC-Speichers verwendet.

  3. Eine Logik entscheidet nun jeweils, ob der Speicher voll beladen, eine Beladung freigegeben oder ob gar nichts getan werden soll. Die Logik ist konfigurierbar und kann an die eigenen Bedürfnisse angepasst werden. Verwendet wird die Funktion “Notbeladung”, die auch über die lokale Web-Oberfläche des Speichers verfügbar ist (im Menü Setup > Wartung > Vollladung).

Wie wird über die Beladung entschieden?

Die Logik ist das Kernstück des Tools und überraschend komplex. Sie berücksichtigt verschiedene Kriterien:

  • Eine Beladung aus dem Netz wird nur dann durchgeführt, wenn der Speicher vollkommen leer ist. Ermittelt wird dies über den Status des Speichers, der über die lokale Schnittstelle abgefragt wird. Der Status muss Akku leer lauten. Das bedeutet auch: Wenn der Speicherfüllstand 0% ist, aber gerade eine Batteriediagnose durchgeführt wird oder ein sonstiges Problem vorliegt, dann wird nicht geladen.

  • Eine Beladung erfolgt außerdem nur dann, wenn in den nächsten 24 Stunden wenig PV-Strom erwartet wird. Was genau “wenig” bedeutet, kann konfiguriert werden. Es kann ein Schwellenwert in kWh angegeben werden. Gibt man beispielsweise 5 kWh an, dann wird der Speicher nur dann beladen, wenn in den nächsten 24 Stunden weniger als 5 kWh PV-Strom erwartet werden.

  • Das letzte, aber wichtigste Kriterium ist natürlich der Strompreis. Eine Beladung aus dem Netz erfolgt nur bei günstigem Preis. Nur, was genau heißt “günstig”? Es hat einige Fehlversuche benötigt, um den passenden Algorithmus zu finden:

    • Es wird zunächst ermittelt, wie hoch der durchschnittliche Strompreis in den nächsten 24 Stunden ist. Da Tibber die Preise für den nächsten Tag aber erst gegen Mittag des Vortages bereitstellt, kann es sein, dass man (im ungünstigsten Fall) nur die nächsten 12 Stunden betrachten kann. Falls also weniger als 24 Stunden zur Verfügung stehen, wird der durchschnittliche Strompreis für die verfügbare Zeit ermittelt.

    • Anschließend wird das günstigste Zeitfenster in den nächsten 24 Stunden ermittelt. Wie lang ein Zeitfenster ist, kann konfiguriert werden. Es sollte so lang sein, wie eine volle Ladung etwa dauern wird, hängt also von Kapazität des Speichers und der Ladeleistung ab. Für einen Speicher mit 10 kWh Kapazität und einer Ladeleistung von 2,5 kW sollte das Zeitfenster also 4 Stunden betragen. Es wird also ermittelt, welcher 4-Stunden-Zeitraum den geringsten Durchschnittspreis hat.

    • Wenn das günstigste Zeitfenster einen deutlich geringeren Preis hat als der bevorstehende 24-Stunden-Durchschnitt, dann wird der Speicher beladen. Was genau “deutlich geringer” heißt, kann über einen Schwellenwert konfiguriert werden. Ein Beispiel wäre 70%, das bedeutet: Das günstigste Zeitfenster muss 70% der Kosten des 24-Stunden-Durchschnitts unterschreiten.

  • Der SENEC-Speicher hat die Besonderheit, dass eine durchgeführte Netzbeladung auch explizit freigegeben werden muss. Ansonsten würde zwar geladen, danach aber der Verbrauch weiterhin aus dem Netz gedeckt. Die Logik prüft also, ob eine Beladung das Maximum erreicht hat. Maximum bedeutet, dass sich der Füllstand nicht weiter erhöht. Es wird also nicht einfach auf 100% Ladestand gewartet, weil es ja auch gedrosselte Geräte gibt, die maximal 70% Ladestand erreichen. Ist das Maximum erreicht, wird die Beladung freigegeben.

Wie die Logik sich jeweils entscheidet, wird im Log ausgegeben. Es empfiehlt sich, gerade in der ersten Zeit nach Installation das Docker-Log genau im Auge zu behalten.

Wer unsicher ist, kann das Tool auch in einem “Dry-Run-Modus” laufen lassen, der fast alle Schritte durchführt - nur nicht die tatsächliche Beladung oder Beladungsfreigabe.

Einschränkungen, Fallstricke und Pferdefüße

Der rote Kasten ist etwas größer geworden. Bitte in Ruhe lesen, bevor du das Tool installierst!

Installation und Dokumentation

Die Installation auf einem lokalen Server (wie z.B. einem Raspberry oder NAS) erfordert Linux- und Docker-Kenntnisse. Wer SOLECTRUS installiert bekommen hat, wird das aber auch schaffen. Es geht letztendlich um zwei weitere Docker-Container, die über Umgebungsvariablen konfiguriert werden. Dokumentation gibt es bislang kaum, aber das wird sich vielleicht noch ändern.

Auf GitHub steht alles bereit: