NEWS
Simulation PV-Speicher
-
Hallo in die Runde,
mit meinem ersten größeren Projekt das ich mit Blockly im ioBroker umgesetzt habe simuliere ich die Auswirkungen eines derzeit noch nicht vorhandenen Batterie-Speichers für die vorhandene PV-Anlage.
Ich will wissen, wie sich ein Batterie-Speicher auf- die Einspeisung und die Erträge aus der Einspeisung
- den Bezug und die Bezugskosten
- den Eigenverbrauch und die ersparten Kosten
auswirken würde.
Die Berechnungen und die zu Grunde liegenden Annahmen habe ich durch Berater des C.A.R.M.E.N e.V. prüfen lassen. Nicht dass ich mir da was "schönrechne"
Die Rahmenbedingungen:
Die PV - Anlage wurde 2011 mit 11,2 kW/p installiert und ist eine Anlage mit EEG-Vergütung. Produzierter Strom der im Haus verbraucht wird, wird zusätzlich zur Einspeisevergütung separat vergütet.
Durch die EEG - Regelung, die steigenden Strompreise und die zwischenzeitlich auf unter 1.000,-- EUR gesunkenen Kosten je kW Batterie - Speicher wird es zunehmend interessant. Bevor ich aber auf die Aussagen vertraue, wollte ich das einfach mal selbst an Hand der vorhandenen Echt-Daten prüfen und "nachrechnen" ob der Speicher zumindest kostendeckend währe.
Der Speicher würde sich so in das System integrieren:
Wie bin ich vorgegangen:
Die aktuellen Zählerstände des PV-Zählers und des 2-Wege Zählers für Bezug und Einspeisung lese ich mittels optischem Lesekopf und des Smartmeter-Adapters aus und speichere die Daten 2x. Den ersten Datensatz verwende ich zur Berechnung der Echt-Daten, den zweiten Datensatz verwende ich für die Simulation des Speichers.
Aus den Echt-Daten ermittle ich die tatsächlich angefallenen Beträge für die tägliche Einspeisevergütung / Bezugskosten / Ersparte Kosten (Ersparter Bezug) / Vergütung Eigenverbrauch.Zu Simulation des PV-Speichers verwende ich den zweiten Datensatz.
Jedes mal wenn produzierter Strom an den Netzbetreiber geliefert wird (Einspeisezähler zählt hoch) prüfe ich ob im PV-Speicher noch platz ist. Wenn ja, wird in der Simulation nicht an den Netzbetreiber geliefert sondern in den PV-Speicher geladen. Erst wenn der Speicher voll ist, wird eingespeist.
Wird Strom bezogen, läuft es umgekehrt. Bei jedem Bezug prüfe ich in der Simulation ob der Speicher noch nicht leer ist. Trifft das zu, dann wird der Bezug aus dem Speicher genommen. Erst wenn der Speicher leer ist wird auch in der Simulation der Strom aus dem Netz bezogen.Die Beträge werden jeweils aktuell gerechnet und am Ende des Tages summiert.
Die Visualisierung habe mit Jarvis umgesetzt. Vielen Dank an dieser Stelle an @Zefau für seine tolle Arbeit
Das ganze sieht aktuell so aus:
Die Blockly, die ich mir gebastelt habe.
Blockly_Kostenrechnung.xml Blockly_Speicher_Laden_Entladen.xml Blockly_TagesSummen.xml Blockly_Zaehler_PVSpeicher.xml -
@datzerf Sehr interessant.
Kannst du mir die Begriffe in dem Kurvendiagramm erklären?
Gehts du von einem 20KWh Speicher aus oder wie erklärt sich das Maximum der Grünen Linie?
Wurde dir ein 20KWh Speicher bei 11,2KWp Anlagenleistung empfohlen?
Hast du auch die Abgaben (Umsatzsteuer etc.) Für den Eigenverbrauchten Strom berücksichtigt?
Wie ist denn dein Fazit jetzt? Lohnt sich der Speicher oder nicht und nach welcher Zeit hat er sich gerechnet?Danke für dein Feedback
-
Hi, @wendy2702
die Speichergröße habe ich konfigurierbar gemacht und mit 19,9 kW festgelegt, das war keine Empfehlung.
Die nach dem Gespräch mit den Beratern von carmen e.V. in die noch weitere Themen (Tausch der Heizung von Gas auf Wärmepumpe) eingeflossen sind, war die Empfehlung, zuerst Heizung erneuern und den PV-Überschuss in einen größer dimensionierten Pufferspeicher über die Wärmepumpe zu laden. Erst in einem zweiten Schritt dann eine PV-Speicher Batterie mit einer Kapazität von bis zu 6 kW anzuschaffen.Die Preise sind rein netto, Abgaben usw. habe ich nicht berücksichtigt. Ich rechne derzeit noch nur mit den Netto Bezogs- / Einspeise- / EEG-Preisen.
Zum Diagramm:
Grüne Linie: Der Speicherinhalt. Konfigurierbares Maximum momentan 19,9 kW
Rote Linie: Direktverbrauch = PV-Produktion - PV-Einspeisung. Strom den ich direkt verbrauche lade ich nicht in den Speicher. Für den Speicher wird nur berücksichtigt, was eingespeist werden kann.
Blaue Linie: Eigenverbrauch. Strom den ich im Speicher habe und der dann verbraucht wird, wenn eigentlich Strom bezogen wird weil die Anlage nicht produziert (Nachts) bzw. die Produktion nicht ausreicht um den Verbrauch zu decken. Den Eigenverbrauch berechne ich erst dann wen Strom aus dem Speicher entladen wird. Also der Verbrauch tatsächlich anfällt.
Violette Linie: Speicher wird aus PV-Einspeisung geladen
Orange Linie: Speicher wird durch Stromverbrauch entladen. Ist Deckungsgleich mit der Blauen Linie = Eigenverbrauch.
Gelbe Linie: Strombezug bei simuliertem PV-Speicher. -
@datzerf OK.
WP habe ich auch und Speicher auch aktuell im Warmwasser.
Wie lange hast du das schon laufen bezüglich meiner Frage ob du schon ein Fazit ziehen kannst.
Mir wurde bisher immer vom Speicher abgeraten aus Wirtschaftlicher Sicht. Lediglich die Solarteure verkaufen die gerne könnte man meinen.
-
@wendy2702
Die Simulation läuft seit dem 01.03. für ein Fazit ist es zu früh.
Aber der Tenor aus dem Beratungsgespräch war auch eindeutig, eine Speicherlösung größer 10kW ist überdimensioniert. Preislich interessant werden die Speicher aber erst ab 20kW --> Nettokosten je kW dann im Mittel um die 800,-- bis 900,-- EUR.
Daher dann eben die Empfehlung für meine Situation, erst Heizung erneuern mit größerem Pufferspeicher und den PV-Überschuss in Heizenergie wandeln. -
@datzerf OK.
Werde das mal bei mir einrichten und beobachten.
Bin mal auf dein Feedback nach einem oder 2 Monaten gespannt.
-
@wendy2702
gerne, ich entschuldige mich auch gleich für die chaotischen Blockly. Bin absoluter Anfänger und überzeugt, dass es einfacher und eleganter funktioniert. Die Scripte sind nach und nach entstanden...... -
@datzerf Musst dich bei mir ganz bestimmt nicht entschuldigen. Bin auch Javascript legastheniker.
-
Hallo in die Runde,
ich habe die Simulation noch etwas erweitert.
Neben dem Vergleich der Echtesten mit einem simulierten Speicher habe ich noch die Daten für eine Finanzierung über ein Darlehen eingefügt. Weil es einfacher ist, wird das Darlehen linear (kein Annuitäten-Darlehen) zurückgeführt. Summe Tilgung + Zins über die Laufzeit von 10 Jahren x Zinstage p.A.
Weiterhin habe ich die Ermittlung des EEG - Ertrages angepasst. Die Ermittlung läuft nun Analog der Berechnung des Netzbetreibers. -
@datzerf Da wollte ich grad ein total cooles, inovatives Projekt umsetzen und da hast Du es schon fertig Danke schon mal fürs teilen!
Ich hab mir die Scripte auch schon mal rein geladen. Bevore ich sie scharf schalte noch nen kurze Frage: Es werden drei Werte benötigt bzw. sind auf das eingene Setup anzupassen:
smartmeter.0.1_8_0.value: Bezug aus dem Netz in kWh
smartmeter.0.2_8_0.value: Abgabe ans Netz in kWh
smartmeter.1.1_8_0.value: Produktion der PV Anlage in kWhLiege ich damit richtig?
Ansonsten muss ich dann noch die ganzen Datenpunkte anlegen. Da werde ich mich mal an einem Script versuchen.
-
@dominic151617,
sorry, hab Deine Frage leider erst heute gesehen....
Ja, damit liegst Du richtig. Wie Du aus der Benennung der Datenpunkte ersiehst habe ich 2 Smartmeter-Instanzen eingerichtet, die über das D0 - Protokoll die Daten von 2 Stromzählern mit IR-Schnittstelle abgreifen.
Da meine PV mit Eigenverbrauchsregelung läuft musste ich bei Inbetriebnahme für die PV-Anlage selbst einen separaten Zähler installieren. Der wird über die "smartmeter.1" - Instanz abgefragt. Die "smartmeter.0" - Instanz holt die Daten eines 2-Wege Stromzählers der den Bezug bzw. die Lieferung an den Netzbetreiber zählt.
Sofern Du also keinen Stromzähler für die PV-Anlage hast wirst Du Daten aus Deinem Wechselrichter verwenden müssen.Viele Grüße
Franz
-
@datzerf
Danke! Wie Du merkst bin ich auch nicht schnell mit antworten. Leider laufen solche Sachen eher unter der Prio 10.Genrell scheint es auch bei mir zu laufen. Ich muss mich aber noch mal um eine ordnetliche Visualisierung in Grafana oder so kummern, damit ich die plausibilität prüfen kann.
Aber falls noch jemand das Script bei sich nutzen möchete, hier das "Script" zum anlegen der Datenpunkte.
createState('0_userdata.0.PVSpeicher.Eigenverbrauch.Direktverbrauch', true, {type: 'number',name: 'Direktverbrauch',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Eigenverbrauch.DirektverbrauchEEG', true, {type: 'number',name: 'DirektverbrauchEEG',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Eigenverbrauch.DVEinspeisung', true, {type: 'number',name: 'DVEinspeisung',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Eigenverbrauch.DVPVProuktion', true, {type: 'number',name: 'DVPVProuktion',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Eigenverbrauch.EigenverbrauchSpeicher', true, {type: 'number',name: 'EigenverbrauchSpeicher',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Eigenverbrauch.EigenverbrauchSpeicherEEG', true, {type: 'number',name: 'EigenverbrauchSpeicherEEG',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Eigenverbrauch.EigenverbrauchSumme', true, {type: 'number',name: 'EigenverbrauchSumme',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Eigenverbrauch.EigenverbrauchSummeEEG', true, {type: 'number',name: 'EigenverbrauchSummeEEG',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.Preise.Bezug', true, {type: 'number',name: 'Bezug',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.Preise.EEG', true, {type: 'number',name: 'EEG',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.Preise.Einspeisung', true, {type: 'number',name: 'Einspeisung',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.PVSpeicher.PVSpeicherBezug', true, {type: 'number',name: 'PVSpeicherBezug',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.PVSpeicher.PVSpeicherEEG', true, {type: 'number',name: 'PVSpeicherEEG',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.PVSpeicher.PVSpeicherEinspeisung', true, {type: 'number',name: 'PVSpeicherEinspeisung',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.PVSpeicher.PVSpeicherErsparterBezug', true, {type: 'number',name: 'PVSpeicherErsparterBezug',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.PVSpeicher.PVSpeicherErtrag', true, {type: 'number',name: 'PVSpeicherErtrag',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.PVSpeicher.PVSpeicherKosten', true, {type: 'number',name: 'PVSpeicherKosten',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.PVSpeicher.PVSpeicherSumme', true, {type: 'number',name: 'PVSpeicherSumme',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.Real.RealBezug', true, {type: 'number',name: 'RealBezug',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.Real.RealEEG', true, {type: 'number',name: 'RealEEG',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.Real.RealEinspeisung', true, {type: 'number',name: 'RealEinspeisung',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.Real.RealErsparterBezug', true, {type: 'number',name: 'RealErsparterBezug',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.Real.RealErtrag', true, {type: 'number',name: 'RealErtrag',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.Real.RealKosten', true, {type: 'number',name: 'RealKosten',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Kostenrechnung.Real.RealSumme', true, {type: 'number',name: 'RealSumme',read: true,write: true,unit: '€',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.PVSpeicher.BezugSpeicher', true, {type: 'number',name: 'BezugSpeicher',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.PVSpeicher.EinspeisungSpeicher', true, {type: 'number',name: 'EinspeisungSpeicher',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.PVSpeicher.Entladezähler', true, {type: 'number',name: 'Entladezähler',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.PVSpeicher.Ladezähler', true, {type: 'number',name: 'Ladezähler',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.PVSpeicher.Speicherinhalt', true, {type: 'number',name: 'Speicherinhalt',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.PVSpeicher.SpeicherNutzinhalt', true, {type: 'number',name: 'SpeicherNutzinhalt',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.PVSpeicher.PVProduktionSpeicher', true, {type: 'number',name: 'PVProduktionSpeicher',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.StromZaehler.PVZaehlerDiff', true, {type: 'number',name: 'PVZaehlerDiff',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.StromZaehler.Bezug', true, {type: 'number',name: 'Bezug',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.StromZaehler.BezugsZaehlerDiff', true, {type: 'number',name: 'BezugsZaehlerDiff',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.StromZaehler.EinspeiseZaehlerDiff', true, {type: 'number',name: 'EinspeiseZaehlerDiff',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.StromZaehler.Einspeisung', true, {type: 'number',name: 'Einspeisung',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.StromZaehler.BezugsZaehler', true, {type: 'number',name: 'BezugsZaehler',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.StromZaehler.EinspeiseZaehler', true, {type: 'number',name: 'EinspeiseZaehler',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.StromZaehler.PVZaehler', true, {type: 'number',name: 'PVZaehler',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.StromZaehler.PVProduktion', true, {type: 'number',name: 'PVProduktion',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Summenbildung.Strom-Mengen.PVSpeicherBezug', true, {type: 'number',name: 'PVSpeicherBezug',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Summenbildung.Strom-Mengen.PVSpeicherEigenverbrauchSpeicher', true, {type: 'number',name: 'PVSpeicherEigenverbrauchSpeicher',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Summenbildung.Strom-Mengen.PVSpeicherEigenverbrauchSpeicherEEG', true, {type: 'number',name: 'PVSpeicherEigenverbrauchSpeicherEEG',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Summenbildung.Strom-Mengen.PVSpeicherEigenverbrauchSumme', true, {type: 'number',name: 'PVSpeicherEigenverbrauchSumme',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Summenbildung.Strom-Mengen.PVSpeicherEigenverbrauchSummeEEG', true, {type: 'number',name: 'PVSpeicherEigenverbrauchSummeEEG',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Summenbildung.Strom-Mengen.PVSpeicherEinspeisung', true, {type: 'number',name: 'PVSpeicherEinspeisung',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Summenbildung.Strom-Mengen.RealBezug', true, {type: 'number',name: 'RealBezug',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Summenbildung.Strom-Mengen.RealDirektverbrauch', true, {type: 'number',name: 'RealDirektverbrauch',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Summenbildung.Strom-Mengen.RealDirektverbrauchEEG', true, {type: 'number',name: 'RealDirektverbrauchEEG',read: true,write: true,unit: 'kWh',role: 'per Script'}); createState('0_userdata.0.PVSpeicher.Summenbildung.Strom-Mengen.RealEinspeisung', true, {type: 'number',name: 'RealEinspeisung',read: true,write: true,unit: 'kWh',role: 'per Script'});
-
Hallo @DatzerF . Kannst du mir evtl sagen wie ich die .xml in Blockly importiert bekomme. Bin noch nicht solange dabei und suche nach genau so einen Ansatz, wie du ihn beschreibst.
-
Hallo zusammen,
ich muss mich der Frage von TomTom 0 leider anschließen.
Die Daten aus den .xml Files entsprechen ja nicht der typischen, exportieren, Blockly Struktur...Irgend wie stehe ich gerade auf dem Schlauch...
Danke euch!
Gruß Christian
-
@DatzerF : Kannst du die Scripte bitte nochmal zur Verfügung stellen. Die Forensoftware hat da scheinbar was kaputt gemacht.