Lohnt sich ein Batteriespeicher

Die Nutzung von Solaranlagen und Balkonkraftwerken führt ja immer wieder zu der Frage, ob und wenn ja ab wann sich ein Batteriespeicher lohnt und in welcher Größe dieser sinnvoll ist. Im Netz und auf Youtube bekommt man dazu bereits eine Vielzahl von Informationen, aber manche Aussagen scheinen mir dann doch zu weit hergeholt. Auch die viele Formeln zur Berechnung lösen bei mir teilweise Misstrauen aus. In meinem Beitrag zeige ich, wie man mit InfluxDB und Grafana interaktiv verschiedene Szenarien durchspielen kann.

Aufgabenstellung

Für meine Berechnungsgrundlage verwende ich die protokollierten Ertragsdaten einer PV-Anlage (ohne Batteriespeicher) mit einer Größe von ca. 3,2 kWp. Diese Daten liegen in einer InfluxDB 2.x-Datenbank vor und die folgenden Auswertungen mache ich ausschließlich mit Grafana. Eine wesentliche, aber mir unbekannte Größe ist der nächtliche Verbrauch, denn den möchte ich natürlich mit einem Überschuss tagsüber abdecken. Der Gedanke, über mehrere Tage mit einem Speicher "überleben" zu können, ist zwar nett, erfordert aber einen sehr großen Speicher (mehrfacher Tagesbedarf) und somit einer großen Anzahl von PV-Modulen, die aus meiner Sicht auf privaten Hausdächern kaum unterzubringen ist.

Für meine Berechnungen möchte ich die Größe des Speichers und den Strompreis interaktiv verändern können, ebenso wie die Größe der Anlage, die den Strom produziert.

Als Ergebnisse meines Beispiels sollen

  • der durchschnittlichen Nachtverbrauch
  • die Menge des gesparten Stroms
  • der ersparte Wert in Euro

ermittelt werden und der Betrachtungszeitraum variabel sein.

Grafana Variabeln nutzen

Für jede Größe eines Stromspeichern könnte ich eine eigene Visualisierung erstellen, aber das ist mir zu umständlich. Ich möchte gerne per Dropdown-Menü die Größe eines möglichen Stromspeichern auswählen und Grafana soll mir anzeigen, was das bringt.

Variabeln werden immer für ein Dashboard angelegt, so dass man diese auch für mehrere Visualisierungen auf dem Dashboard nutzen kann.

Um Variabeln nutzen zu können, muss man das Konfigurationsmenü für das Dashboard auswählen. Dies befindet sich in der oberen Leiste mit dem Dashboard-Name auf der rechten Seite hinter dem Zahnradsymbol.

Unter "Settings" findet man nun auf der linken Seite den Menüpunkt "Variables".

Nach dem Drücken auf "New Variable" kann man die Variableneigenschaften näher definieren. Da ich eigene Werte zur Auswahl vorgeben möchte wähle ich unter "Variable type" "Custom" aus. Die Variable möchte ich unter dem Name "sinterval" in Grafana-Abfragen benutzen. Auf dem Dashboard soll als Label  "Speichergröße" erscheinen. Und unter Custom options trage ich durch Komma getrennt die Werte ein, die in meiner Dropdownliste erscheinen sollen. Sobald man diese Werte eingetragen hat sieht man die Ergebnisse bereits am untern Bildschirmrand.

Auf diese Weise lege ich drei Variablen an, die Erste für die Größe eines möglichen Batteriespeichers ("sbattery"), die Zweite zur Skalierung der Anlagengröße (und damit des Überschusses ("sscaler") und eine Dritte für den aktuellen Strompreis ("sprice").

Nach dem Anlegen der Variabeln sollte man nicht vergessen, das Dashboard zu speichern.

Durchschnittlichen Nachtverbrauch bestimmen

Ein Batteriespeicher dient primär dazu, Überschuss zu speichern und den Strom dann zu liefern, wenn die Sonne keinen Strom produziert (z.B. nachts). Daher verwendet man häufig die in der Dunkelheit benötigte Menge Strom als Maßstab, um die Mindestgröße eines Batteriespeichers zu bestimmen.

Ich schaue mir also für einen bestimmten Zeitraum an, welche Menge an Strom ich nachts benötige und ermittele hieraus den Mittelwert. Dabei gehe ich davon aus, dass der Zeitraum von Frühjahr (März) bis Herbst (November) ideal für eine Betrachtung ist, da eine Photovoltaikanlage zwischen November und März kaum soviel Leistung erzeugt, dass man Überschüsse erwirtschaftet, die man speichern kann. Als Uhrzeit für den nächtlichen Zeitraum habe ich 21:00 Uhr abends bis 5:00 Uhr morgen definiert.

Die Abfrage für diese Mittelwert sieht wie folgt aus:

Copy to Clipboard

Die "date"-Bibliothek braucht man für die hourSelection()-Funktion. Mittels der "timezone"-Bibliothek und der "location"-option löst man die Übersetzung der  UTC-Zeitangabe in die deutsche Zeit auf (im Winter UTC+1 sonst UTC+2 Stunden)

Den Verbrauch ermittele ich aus der Differenz der nächtlichen Zählerstände des Smartmeters. Wie man das macht findet ihr in folgendem Beitrag: SmartMeter mit Tasmota auslesen

Nun schränke ich die ermittelten Differenzen auf die von mir ausgewählte tägliche Zeitspannen mittels der hourSelection()-Funktion ein. Dies erfolgt vor der Aggregat()-Funktion, mit der ich die Summe für die Zählerdifferenzen für jeweils einen Tag bilde.

Und abschließend wird mit der Mean()-Funktion der Mittelwert über alle Nachtverbräuche gebildet. Aus der Auswertung ergibt sich, dass im von mir gewählten Zeitraum (vom März bis Ende Oktober) durchschnittliche 4,1 kWh in der Uhrzeit von 21:00 Uhr bis 5:00 Uhr morgens verbraucht wurden.

Einsparung eines Batteriespeichers berechnen

Im nächsten Schritt berechne ich mittels Grafana, wieviel kWh ich durch einen Batteriespeicher einsparen würde.  Die Werte kann man ebenfalls an einem Smartmeter auslesen, wenn dieser auch die ausgehende Leistung messen kann, die an den Netzbetreiber geliefert wird. Diese Zweirichtungsmessung bieten mittlerweile fast alle Geräte an, wenn man diese Daten für eine Protokollierung freigeschaltet hat.

Der Code hierzu lautet wie folgt:

Copy to Clipboard

Wie bei der Ermittlung der Verbräuche bilde ich die Differenzen der Zählerstände und addiere diese für jeden Tag mit der Aggregat()-Funktion.

Anschließend bearbeite ich die Werte mit der map()-Funktion und modifiziere die ermittelten Werte wie folgt:

Die Größe des Batteriespeichers gebe ich (wie oben beschrieben) durch den Wert in der Variabeln  "sinteraval" vor. Daraus ergibt sich, dass ich für alle Tage

  • an denen der Überschuss größer als die Größe des Batteriespeichers in der Variabeln "sinterval" ist nur die Größe des Batteriespeichers
  • an denen der Überschuss kleiner der Größe des Batteriespeichers in der Variabeln "sinterval" ist den Überschuss des Tages

weiterverwenden kann.

Bei der Berechnung muss ich den Wert in der Variabeln "sinterval" in einen float()-Typ umwandeln, da die Multiplikation sonst zum Typkonflikt führt.

Und mit der folgenden map()-Funktion baue ich noch einen Skalierungsfaktor ein, der "simuliert", wie groß mein Ertrag sein könnte, wenn die Anlage (und damit auch der Ertrag) um den Faktor "sscaler" größer wäre. Auch hier erfolgt eine Typumwandlung.

Ich habe noch ein zweites Panel erstellt, mit dem ich den Wert der Ersparnis in Euro ermittele. Dazu benutze ich die dritte Variable "sprice". Durch Austauschen der letzten Zeile in der vorigen Abfrage kann man diesen Wert in einem neuen Panel wie folgt ermitteln:

Copy to Clipboard

Meine Auswertung

Das Ergebnis der drei Panels sieht wie folgt aus:

Diese Daten liefern mit nun Anhaltspunkte für ein Kosten-/Nutzenverhältnis eines Batteriespeichers.  Dabei erhalte ich zuerst die Angabe, dass mein  Batteriespeicher größer ca. 5 kWh groß sein sollte, um den nächtlichen Verbrauch durch den Speicher abdecken zu können. Bei einem Preis von 40  Cent pro kWh würde ich ca. 228 € pro Jahr sparen. Gehe ich davon aus, dass ein Batteriespeicher mind. 2500 Euro kostet würde sich dieser rechnerich nach ca. 11 Jahren amortisieren. Ich gehe bei der Lebensdauer eines Batteriespeichers pessimistisch von 10 Jahren aus, so dass sich dies für den vorliegenden Fall wirtschaftlich nicht lohnen würde, sofern die Strompreise nicht durch die Decke gehen.

Würde ich die Anlage um 1,6 kWp erweitern, dann würde sich ein Batteriespeicher bereits nach 7,5 Jahren lohnen. Den passenden Wechslerichter habe ich hier noch nicht berücksichtigt.

Auch wenn das Modell  Faktoren außen vor lässt, bekommt man ein Gefühlt für die Wirtschaftlichkeit und ich kann die Angebote für diesen Fall jetzt deutlich besser einordnen. Viel Spaß bei den eigenen Berechnungen und Erweiterungen.