SolarForecast - Solare Prognose (PV Erzeugung) und Verbrauchersteuerung: Unterschied zwischen den Versionen
K (syntaxhighlight korrigiert, Formatierung leicht überarbeitet) |
|||
Zeile 34: | Zeile 34: | ||
'''Abgrenzung:''' | '''Abgrenzung:''' Das Modul 76_SolarForecast ist nicht zu verwechseln mit der SQL-basierten (DbLog) Prognose-Lösung mit Kostal Plenticore Wechselrichtern, die auf der eigenen Seite '''[[Kostal_Plenticore_10_Plus]]''' behandelt wird. Diese Lösung beschreibt kein monolithisches Modul, sondern basiert auf einer orchestrierbaren Zusammenstellung individueller Perl Programmbausteine. | ||
Das Modul 76_SolarForecast ist nicht zu verwechseln mit der SQL-basierten (DbLog) Prognose-Lösung mit Kostal Plenticore Wechselrichtern die auf der eigenen Seite '''[[Kostal_Plenticore_10_Plus]]''' behandelt wird. Diese Lösung beschreibt kein monolithisches Modul, sondern basiert auf einer orchestrierbaren Zusammenstellung individueller Perl Programmbausteine. | |||
Im vorliegenden Wiki-Beitrag wird ausschließlich das Modul 76_SolarForecast behandelt. | Im vorliegenden Wiki-Beitrag wird ausschließlich das Modul 76_SolarForecast behandelt. | ||
== Rahmenbedingungen und Voraussetzungen == | == Rahmenbedingungen und Voraussetzungen == | ||
== Definition == | == Definition == | ||
Die Hilfe zu dem Modul ist über "help SolarForecast de" aufrufbar. | Die Hilfe zu dem Modul ist über "help SolarForecast de" aufrufbar. | ||
== Konfigurationsbeispiele == | == Konfigurationsbeispiele == | ||
=== Beispiel 1 === | === Beispiel 1 === | ||
Dies ist eine Konfiguration mit | Dies ist eine Konfiguration mit | ||
Zeile 64: | Zeile 55: | ||
und auch mit den notwendigen zugehörigen anderen Modul-Konfigs. | und auch mit den notwendigen zugehörigen anderen Modul-Konfigs. | ||
'''ACHTUNG:''' Zusätzlich enthalten ist bei dem Beispiel-Notify eine Sonderkonstellation für eine Brennstoffzelle "FCU" als weitere bzw. zusätzliche Stromerzeugungsquelle. Diese "FCU" wird dadurch mit in der Grafik mit deren Erzeugungsleistung Tag und Nacht in der Erzeugersumme (am Symbol = Sonne) berücksichtigt. | |||
ACHTUNG: | |||
Zusätzlich enthalten ist bei dem Beispiel-Notify eine Sonderkonstellation für eine Brennstoffzelle "FCU" als weitere bzw. zusätzliche Stromerzeugungsquelle. Diese "FCU" wird dadurch mit in der Grafik mit deren Erzeugungsleistung Tag und Nacht in der Erzeugersumme (am Symbol = Sonne) berücksichtigt | |||
''(ReadingsVal("FCU","FCU-Strom-aktuelle-Leistung",0)/1000)'' | ''(ReadingsVal("FCU","FCU-Strom-aktuelle-Leistung",0)/1000)'' | ||
==== DWD ==== | |||
<syntaxhighlight lang="Perl"> | |||
define DWD DWD_OpenData | define DWD DWD_OpenData | ||
attr DWD DbLogExclude .* | attr DWD DbLogExclude .* | ||
Zeile 87: | Zeile 75: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== InverterDummy ==== | |||
<syntaxhighlight lang="Perl"> | |||
define InverterDummy dummy | define InverterDummy dummy | ||
attr InverterDummy DbLogExclude .* | attr InverterDummy DbLogExclude .* | ||
Zeile 104: | Zeile 92: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== SMA_Energymeter ==== | |||
<syntaxhighlight lang="Perl"> | |||
define SMA_Energymeter SMAEM | define SMA_Energymeter SMAEM | ||
attr SMA_Energymeter DbLogExclude state | attr SMA_Energymeter DbLogExclude state | ||
Zeile 119: | Zeile 107: | ||
attr SMA_Energymeter stateFormat state W (IN -) P1: L1_Saldo_Wirkleistung P2: L2_Saldo_Wirkleistung P3:L3_Saldo_Wirkleistung | attr SMA_Energymeter stateFormat state W (IN -) P1: L1_Saldo_Wirkleistung P2: L2_Saldo_Wirkleistung P3:L3_Saldo_Wirkleistung | ||
attr SMA_Energymeter verbose 2 | attr SMA_Energymeter verbose 2 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== BatteryDummy ==== | |||
<syntaxhighlight lang="Perl"> | |||
define BatteryDummy dummy | define BatteryDummy dummy | ||
attr BatteryDummy DbLogExclude .* | attr BatteryDummy DbLogExclude .* | ||
Zeile 136: | Zeile 123: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== "Berechnungs"-Notify der Werte für Batterie- und InverterDummy ==== | |||
<syntaxhighlight lang="Perl"> | |||
define N.PV.TotalConsumption.Dum.Energy notify SMA_Energymeter:Saldo_Wirkleistung:.* {\ | define N.PV.TotalConsumption.Dum.Energy notify SMA_Energymeter:Saldo_Wirkleistung:.* {\ | ||
# Forecast Invertererzeugung InverterDummy \ | # Forecast Invertererzeugung InverterDummy \ | ||
Zeile 168: | Zeile 154: | ||
attr N.PV.TotalConsumption.Dum.Energy room Energie | attr N.PV.TotalConsumption.Dum.Energy room Energie | ||
attr N.PV.TotalConsumption.Dum.Energy verbose 2 | attr N.PV.TotalConsumption.Dum.Energy verbose 2 | ||
</syntaxhighlight> | |||
==== SolarForecast ==== | |||
<syntaxhighlight lang="Perl"> | |||
define Forecast SolarForecast | define Forecast SolarForecast | ||
attr Forecast DbLogExclude .* | attr Forecast DbLogExclude .* | ||
Zeile 206: | Zeile 194: | ||
setstate Forecast 2023-04-05 16:45:13 modulePeakString Garage_SE=2.75 Garage_NW=3.2 Haus_NW=2.230 Haus_SW=2.230 | setstate Forecast 2023-04-05 16:45:13 modulePeakString Garage_SE=2.75 Garage_NW=3.2 Haus_NW=2.230 Haus_SW=2.230 | ||
setstate Forecast 2023-04-05 16:45:39 moduleTiltAngle Garage_SE=35 Garage_NW=35 Haus_NW=45 Haus_SW=45 | setstate Forecast 2023-04-05 16:45:39 moduleTiltAngle Garage_SE=35 Garage_NW=35 Haus_NW=45 Haus_SW=45 | ||
</syntaxhighlight> | |||
</syntaxhighlight>So sollte es dann als Ergebnis aussehen: | So sollte es dann als Ergebnis aussehen: | ||
[[Datei:Solarforecast Beispiel Screenshot.png|zentriert|mini|Ergebnis nach dieser Konfiguration]] | [[Datei:Solarforecast Beispiel Screenshot.png|zentriert|mini|Ergebnis nach dieser Konfiguration]] | ||
== Verbraucherregistrierung und Verbrauchersteuerung == | == Verbraucherregistrierung und Verbrauchersteuerung == | ||
=== Praxisbeispiele und Lösungsansätze für Verbrauchersteuerungen === | === Praxisbeispiele und Lösungsansätze für Verbrauchersteuerungen === | ||
Version vom 12. April 2023, 14:53 Uhr
An dieser Seite wird momentan noch gearbeitet. |
76_SolarForecast | |
---|---|
Zweck / Funktion | |
Solarprognose | |
Allgemein | |
Typ | Inoffiziell |
Details | |
Dokumentation | Thema |
Support (Forum) | Solaranlagen |
Modulname | 76_SolarForecast.pm |
Ersteller | DS_Starter (Forum /Wiki) |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
SolarForecast ist ein integratives Modul zur Gewinnung solarer Vorhersagedaten, deren Verarbeitung und grafischen Darstellung. Desweiteren bietet es die Möglichkeit, in FHEM definierte Verbraucher in einem SolarForecast-Device zu registrieren und eine PV Prognose basierte Steuerung der Verbraucher vom Modul übernehmen zu lassen.
Das Modul ist insbesondere durch folgende Eigenschaften gekennzeichnet:
- zur Gewinnung solarer Strahlungswerte werden die SolCast API oder alternativ DWD Stahlungswerte-Stationen integriert
- es wird sowohl die Erzeugungsprognose als auch eine Verbrauchsprognose erstellt
- Wetterdaten werden über DWD Wetter-Stationen integriert
- Sprachensupport EN | DE
- die Prognosedaten, Wetterdaten, Verbraucherplanungen und die aktuellen Energieflüsse werden in umfangreich anpassbaren integrierten Grafiken dargestellt
- es wird keine externe SQL-Datenbank benötigt, die Datenhaltung erfolgt in einer Memory basierten Cachedatenbank inkl. einer Filesystempersistenz zur Datensicherung und Wiederherstellung beim Restart
- die Integration von Geräten wie Wechselrichter, Energy Meter, Batterien, Wetterstationen oder Verbrauchern ist offen und universell gestaltet und bietet dem Anwender maximale Freiheiten bei der Einrichtung seines individuellen Solardatensystems.
- eine integrierte und umfangreich anpassbare Verbrauchersteuerung vereint die PV Prognose basierte Einplanung der Verbraucher mit der Möglichkeit die Verbraucher durch das Modul schalten zu lassen und dadurch auf PV Erzeugungsschwankungen automatisch dynamisch zu reagieren
- trotz der hohen Komplexität wird dem Anwender durch eine "Guided Procedure" bei der Gerätedefinition der Einstieg erleichtert und damit ein optimales Benutzerlebnis geboten
Abgrenzung: Das Modul 76_SolarForecast ist nicht zu verwechseln mit der SQL-basierten (DbLog) Prognose-Lösung mit Kostal Plenticore Wechselrichtern, die auf der eigenen Seite Kostal_Plenticore_10_Plus behandelt wird. Diese Lösung beschreibt kein monolithisches Modul, sondern basiert auf einer orchestrierbaren Zusammenstellung individueller Perl Programmbausteine.
Im vorliegenden Wiki-Beitrag wird ausschließlich das Modul 76_SolarForecast behandelt.
Rahmenbedingungen und Voraussetzungen
Definition
Die Hilfe zu dem Modul ist über "help SolarForecast de" aufrufbar.
Konfigurationsbeispiele
Beispiel 1
Dies ist eine Konfiguration mit
SummenDummy für 2 BatterieWR (Namen : SBS25 / SBS25_2)
SummenDummy für 3 PV-Wechselrichter (Namen : SB25 / SB30 / SB40)
mit verschiedenen InverterStrings / ModulDirection / ModulTiltAngle, ModulPeakString
und auch mit den notwendigen zugehörigen anderen Modul-Konfigs.
ACHTUNG: Zusätzlich enthalten ist bei dem Beispiel-Notify eine Sonderkonstellation für eine Brennstoffzelle "FCU" als weitere bzw. zusätzliche Stromerzeugungsquelle. Diese "FCU" wird dadurch mit in der Grafik mit deren Erzeugungsleistung Tag und Nacht in der Erzeugersumme (am Symbol = Sonne) berücksichtigt.
(ReadingsVal("FCU","FCU-Strom-aktuelle-Leistung",0)/1000)
DWD
define DWD DWD_OpenData
attr DWD DbLogExclude .*
attr DWD forecastDays 7
attr DWD forecastProperties SunUp, SunRise, SunSet, Rad1h, R101, TTT, Tx, Tn, Tg, DD, FX1, RR6c, R600, RRhc, Rh00, ww, wwd, Neff
attr DWD forecastResolution 1
attr DWD forecastStation H568
attr DWD forecastWW2Text 1
attr DWD group Umwelt
attr DWD icon rc_WEB
attr DWD room 021_DWD
attr DWD stateFormat Tomorrow Tmax fc1_Tx °C on fc1_date at Blintrop
attr DWD verbose 2
InverterDummy
define InverterDummy dummy
attr InverterDummy DbLogExclude .*
attr InverterDummy DbLogInclude Today_PVforecast,etoday
attr InverterDummy event-on-change-reading .*
attr InverterDummy group Energy Meter
attr InverterDummy icon measure_photovoltaic_inst@green
attr InverterDummy room 020_PV,Energie
attr InverterDummy stateFormat {sprintf("current %9.3f kW Today_PVforecast %9.3f kWh Today_PV %9.3f kWh Total_PV %9.3f kWh",\
ReadingsVal($name,"total_pac",0)/1,\
ReadingsNum("Forecast","Today_PVforecast",0)/1000,\
ReadingsVal($name,"etoday",0)/1,\
ReadingsVal($name,"etotal",0)/1,)}
attr InverterDummy verbose 2
SMA_Energymeter
define SMA_Energymeter SMAEM
attr SMA_Energymeter DbLogExclude state
attr SMA_Energymeter diffAccept 50
attr SMA_Energymeter disable 0
attr SMA_Energymeter disableSernoInReading 1
attr SMA_Energymeter event-on-update-reading state,Saldo_Wirkleistung,Bezug_Wirkleistung,Einspeisung_Wirkleistung,Bezug_Wirkleistung_Zaehler,Einspeisung_Wirkleistung_Zaehler
attr SMA_Energymeter group Energy Meter
attr SMA_Energymeter icon measure_power@green
attr SMA_Energymeter interval 15
attr SMA_Energymeter room 020_PV,Energie
attr SMA_Energymeter serialNumber XXXXXXXXXX
attr SMA_Energymeter stateFormat state W (IN -) P1: L1_Saldo_Wirkleistung P2: L2_Saldo_Wirkleistung P3:L3_Saldo_Wirkleistung
attr SMA_Energymeter verbose 2
BatteryDummy
define BatteryDummy dummy
attr BatteryDummy DbLogExclude .*
attr BatteryDummy event-on-change-reading .*
attr BatteryDummy group Energy Meter
attr BatteryDummy icon batterie@green
attr BatteryDummy room 020_PV,Energie
attr BatteryDummy stateFormat {ReadingsVal("$name","total_pac", undef)." kW ".\
" - total ".ReadingsVal("$name","bat_loadtotal", undef)." kWh (-in)".\
" - ".ReadingsVal("$name","bat_unloadtotal", undef)." kWh (out)".\
" - charged ".ReadingsVal("$name","chargestatus", undef)." %"}
"Berechnungs"-Notify der Werte für Batterie- und InverterDummy
define N.PV.TotalConsumption.Dum.Energy notify SMA_Energymeter:Saldo_Wirkleistung:.* {\
# Forecast Invertererzeugung InverterDummy \
fhem "setreading InverterDummy Today_PVforecast ".sprintf("%.3f",(ReadingsNum("Forecast","Today_PVforecast",0)));;\
# Invertererzeugung InverterDummy \
fhem "setreading InverterDummy etotal ".sprintf("%.3f",(ReadingsNum("SB25","etotal",0))+(ReadingsNum("SB30","etotal",0))+(ReadingsNum("SB40","etotal",0)));;\
# Invertererzeugung InverterDummy \
fhem "setreading InverterDummy total_pac ".sprintf("%.3f",(ReadingsVal("FCU","FCU-Strom-aktuelle-Leistung",0)/1000)+(ReadingsNum("SB25","total_pac",0))+(ReadingsNum("SB30","total_pac",0))+(ReadingsNum("SB40","total_pac",0)));;\
# Invertererzeugung InverterDummy \
my $wert1234 = "0" ;;\
$wert1234 = sprintf("%.3f",(ReadingsNum("SB25","etoday",0))+(ReadingsNum("SB30","etoday",0))+(ReadingsNum("SB40","etoday",0)));; \
fhem ("setreading InverterDummy etoday ".sprintf("%.3f",$wert1234));;\
# Batterie-Bezug -Batterieentnahme InverterDummy\
fhem "setreading BatteryDummy power_out ".sprintf("%.0f",(ReadingsNum("SBS25","power_out",0))+(ReadingsNum("SBS25_2","power_out",0)));;\
# Batterie-Beladung InverterDummyBatterie mit Strom füllen\
fhem "setreading BatteryDummy power_in ".sprintf("%.0f",(ReadingsNum("SBS25","power_in",0))+(ReadingsNum("SBS25_2","power_in",0)));;\
# Batterie-Bezug -bat_loadtotal Batterieentnahme InverterDummy\
fhem "setreading BatteryDummy bat_unloadtotal ".sprintf("%.3f",(ReadingsNum("SBS25","bat_unloadtotal",0))+(ReadingsNum("SBS25_2","bat_unloadtotal",0)));;\
# Batterie-Beladung bat_loadtotal InverterDummyBatterie mit Strom füllen\
fhem "setreading BatteryDummy bat_loadtotal ".sprintf("%.3f",(ReadingsNum("SBS25","bat_loadtotal",0))+(ReadingsNum("SBS25_2","bat_loadtotal",0)));;\
# Batteriestatus InverterDummy\
my $wert5 = sprintf("%.2f",(((ReadingsNum("SBS25","chargestatus",0))/2) + ((ReadingsNum("SBS25_2","chargestatus",0))/2)));; \
fhem ("setreading BatteryDummy chargestatus ".sprintf("%.2f",$wert5));;\
# Batterie-total_pac InverterDummy\
my $wert6 = sprintf("%.3f",((ReadingsNum("SBS25","total_pac",0))+(ReadingsNum("SBS25_2","total_pac",0))));; \
fhem ("setreading BatteryDummy total_pac ".sprintf("%.3f",$wert6));;\
}
attr N.PV.TotalConsumption.Dum.Energy DbLogExclude .*
attr N.PV.TotalConsumption.Dum.Energy room Energie
attr N.PV.TotalConsumption.Dum.Energy verbose 2
SolarForecast
define Forecast SolarForecast
attr Forecast DbLogExclude .*
attr Forecast affect70percentRule 0
attr Forecast comment update per "wget -qO /opt/fhem/FHEM/76_SolarForecast.pm https://svn.fhem.de/fhem/trunk/fhem/contrib/DS_Starter/76_SolarForecast.pm"
attr Forecast ctrlInterval 10
attr Forecast disable 0
attr Forecast event-on-change-reading .*
attr Forecast flowGraphicAnimate 1
attr Forecast flowGraphicShowConsumer 1
attr Forecast flowGraphicShowConsumerDummy 1
attr Forecast flowGraphicShowConsumerPower 1
attr Forecast flowGraphicShowConsumerRemainTime 1
attr Forecast flowGraphicSize 400
attr Forecast graphicBeam1Color 3C14FF
attr Forecast graphicBeam1Content pvForecast
attr Forecast graphicBeam2Color 19FF29
attr Forecast graphicBeam2Content pvReal
attr Forecast graphicHeaderDetail all
attr Forecast graphicHistoryHour 4
attr Forecast graphicLayoutType double
attr Forecast graphicShowDiff top
attr Forecast graphicShowNight 0
attr Forecast group Energy Meter
attr Forecast room 020_PV,Energie
attr Forecast stateFormat Current_PV
attr Forecast verbose 2
setstate Forecast 2023-03-03 19:35:46 currentBatteryDev BatteryDummy pin=-pout:kW pout=total_pac:kW intotal=bat_loadtotal:kWh outtotal=bat_unloadtotal:kWh charge=chargestatus
setstate Forecast 2023-02-27 19:53:12 currentForecastDev DWD
setstate Forecast 2023-02-27 22:42:02 currentInverterDev InverterDummy pv=total_pac:kW etotal=etotal:kWh capacity=9500
setstate Forecast 2022-03-29 08:44:11 currentMeterDev SMA_Energymeter gcon=Bezug_Wirkleistung:W contotal=Bezug_Wirkleistung_Zaehler:kWh gfeedin=Einspeisung_Wirkleistung:W feedtotal=Einspeisung_Wirkleistung_Zaehler:kWh
setstate Forecast 2022-03-06 20:12:10 currentRadiationDev DWD
setstate Forecast 2023-04-05 16:44:50 inverterStrings Garage_SE,Garage_NW,Haus_NW,Haus_SW
setstate Forecast 2023-04-05 16:44:32 moduleDirection Garage_SE=SE Garage_NW=NW Haus_NW=NW Haus_SW=SW
setstate Forecast 2023-04-05 16:45:13 modulePeakString Garage_SE=2.75 Garage_NW=3.2 Haus_NW=2.230 Haus_SW=2.230
setstate Forecast 2023-04-05 16:45:39 moduleTiltAngle Garage_SE=35 Garage_NW=35 Haus_NW=45 Haus_SW=45
So sollte es dann als Ergebnis aussehen:
Verbraucherregistrierung und Verbrauchersteuerung
Praxisbeispiele und Lösungsansätze für Verbrauchersteuerungen
weiterführende Links
- Forenthema zum Modul
- Forenthema "Leistungsprognose für Wechselrichter"
- Solcast API Toolkit: https://toolkit.solcast.com.au
- Kostal Plenticore 10 Plus mit SQL-Datenbank Integration (Kostal Plenticore 10 Plus)