76_SolarForecast - Informationen/Ideen zu Weiterentwicklung und Support

Begonnen von DS_Starter, 11 Februar 2024, 14:11:00

Vorheriges Thema - Nächstes Thema

300P

True Outliers above p99.5 (5845): 5933

2026.01.10 15:28:27 1: Forecast DEBUG> AI FANN Training for Consumption Forecast BlockingCall PID "2259608" with Timeout 86400 s started
2026.01.10 15:28:33 1: Forecast DEBUG> AI FANN - There are 30 Records skipped due to incomplete or invalid data. Index:
2025032507, 2025032610, 2025033003, 2025033021, 2025040211, 2025041017, 2025041020, 2025041022, 2025041024, 2025041101, 2025041102, 2025041103, 2025041104, 2025041105, 2025041106, 2025041108, 2025041203, 2025041204, 2025041309, 2025041314, 2025052209, 2025052511, 2025052518, 2025052519, 2025060214, 2025061109, 2025061414, 2025062914, 2025082315, 2025122414
2026.01.10 15:28:33 1: Forecast DEBUG> AI FANN - Target-Norm: raw_max=5933, p99=4542, p99.5=5845, targmaxval=7598
2026.01.10 15:28:33 1: Forecast DEBUG> AI FANN - True Outliers above p99.5 (5845): 5933
2026.01.10 15:28:36 1: Forecast - DBG F[6940]: lag1=0.281 hppf=0.154 lag24=0.378 d1p=0.026
Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_Edge|ESP32CAM usw.

300P

Ergebnis 2:
Registry Version=v1_heatpump


Informationen zum neuronalen Netz der Verbrauchsvorhersage  ->> v1_heatpump
letztes KI-Training: 10.01.2026 20:35:21 / Laufzeit in Sekunden: 1842
KI Abfragestatus: ok
letzte KI-Ergebnis Generierungsdauer: 45.13 ms
Verbrauchernummer Wärmepumpe: 08

=== Modellparameter ===

Normierungsgrenzen: PV=16071 Wh, Hausverbrauch: Min=0 Wh / Max=7598 Wh
Trainingsdaten: 6959 Datensätze (Training=5567, Validierung=1392)
Architektur: Inputs=61, Hidden Layers=40-20, Outputs=1
Hyperparameter: Learning Rate=0.001, Momentum=0.6, BitFail-Limit=0.35
Aktivierungen: Hidden=SIGMOID, Steilheit=1.2, Output=LINEAR
Trainingsalgorithmus: INCREMENTAL, Registry Version=v1_heatpump
Zufallsgenerator: Mode=1, Periode=10

=== Trainingsmetriken ===

bestes Modell bei Epoche: 3309 (von max. 15000)
Training MSE: 0.004007
Validation MSE: 0.011083
Validation MSE Average: 0.013604
Validation MSE Standard Deviation: 0.001097
Validation Bit_Fail: 1
Model Bias: 719 Wh
Model Slope: 0.5
Trainingsbewertung: Retrain

=== Fehlermaße der Prognosen ===

MAE: 607.23 Wh
MedAE: 447.92 Wh
RMSE: 759.39 Wh
RMSE relative: 34 %
RMSE Rating: weak
MAPE: 26.54 %
MdAPE: 22.60 %
R²: 0.15

Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_Edge|ESP32CAM usw.

DS_Starter

Auch hier gibt den hohen Wert Model

Bias: 719 Wh

Und mich stört auch der sehr niedrige R²: 0.15. Das ist nicht schön.

Ich habe inzwischen die Profile intensiv neu gebaut und strukturiert. Werde die neue V sicherlich nachher noch hochladen.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Update ist ins Contrib gestellt. Die Profile sind intern umstrukturiert.
Dadurch gibt es auch ein weiteres Profil:

 v1_heatpump_active_pv

Die Bias-Korrektur greift nur Werte im unteren Quantil 30. Das sollte die Peaks unangetastet lassen und nur dort korrigierend eingreifen wo es richtig ist.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

300P

Training mit dem neuen Profil rennt 🏃- Ergebnis kommt dann nach dem Frühstück 😴💤🥱🛏�☕️🥯🍞
Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_Edge|ESP32CAM usw.

DS_Starter

Du gehst aber auch gleich mit den maximalen Features ins Rennen  ;)
Naja, mal schauen ...
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

300P

Zitat von: DS_Starter am 10 Januar 2026, 23:40:57Du gehst aber auch gleich mit den maximalen Features ins Rennen  ;)

Muss doch irgendwann mal nach vorne gehen... ;D ....und siehe da .... es ward endlich einmal wieder 'gelb' in der Anzeige bei 'Trainingsbewertung'


Informationen zum neuronalen Netz der Verbrauchsvorhersage ->> mit 'v1_heatpump_active_pv'

letztes KI-Training: 11.01.2026 00:19:49 / Laufzeit in Sekunden: 3770
KI Abfragestatus: ok
letzte KI-Ergebnis Generierungsdauer: 73.72 ms
Verbrauchernummer Wärmepumpe: 08

=== Modellparameter ===

Normierungsgrenzen: PV=16071 Wh, Hausverbrauch: Min=0 Wh / Max=7598 Wh
Trainingsdaten: 6962 Datensätze (Training=5569, Validierung=1393)
Architektur: Inputs=108, Hidden Layers=40-20, Outputs=1
Hyperparameter: Learning Rate=0.001, Momentum=0.4, BitFail-Limit=0.35
Aktivierungen: Hidden=SIGMOID, Steilheit=1.2, Output=LINEAR
Trainingsalgorithmus: INCREMENTAL, Registry Version=v1_heatpump_active_pv
Zufallsgenerator: Mode=1, Periode=10

=== Trainingsmetriken ===

bestes Modell bei Epoche: 5878 (von max. 15000)
Training MSE: 0.003058
Validation MSE: 0.007529
Validation MSE Average: 0.008555
Validation MSE Standard Deviation: 0.000334
Validation Bit_Fail: 0
Model Bias: 645 Wh
Model Slope: 0.6
Trainingsbewertung: Retrain

=== Fehlermaße der Prognosen ===

MAE: 493.06 Wh
MedAE: 357.72 Wh
RMSE: 590.23 Wh
RMSE relative: 27 %
RMSE Rating: weak
MAPE: 22.86 %
MdAPE: 18.75 %
R²: 0.42

=== Drift-Kennzahlen ===

Drift Score: 2.95
Drift RMSE relative: 55.07
Drift Bias: 16.41
Drift Slope: 0.315
Drift Bewertung: severe




->> Screenshot
Zeitraum 21-22 Uhr 'alte Version' Version  'v1_standart von 21:25 - 22:01 Uhr trainiert.
->> Vergleich erfolgt in der Zeit 21/22 Uhr augenscheinlich mit 'legacy'

Zeitraum 23-00 Uhr 'gestrigen neue Version 'v1_heatpump_active_pv' von 23:16 - 00:19 trainiert.
->> Vergleich erfolgt in der Zeit 23/23 Uhr augenscheinlich mit 'legacy'
Zeitraum 03 Uhr  neues Training 'automatisch' nach Plan - kein Einfluss sichtbar
Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_Edge|ESP32CAM usw.

DS_Starter

Moin,

wenn ich mir dein Bild so anschaue, ist dein Haushalt nicht sehr volatil sondern eher gleichmäßig. Es gibt im Verbrauch wenig Höhen und Tiefen. Weiß natürlich nicht ob es immer so ist.

Deswegen würde ich meinen, dass die *active*-Profile bei dir nicht passend sind.
Wenn du hast, kannst du ein Trainingslog nach mit posten. R²: 0.42 hat sich auf jeden Fall um Faktor 3 verbessert. Slope und Bias ebenfalls, wenn auch minimal.

Was die Bias-Korrektur betriftt, kann man die Einwirkung mit ctrlDebug=aiData sehen:

....
2026.01.11 11:03:03.480 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-11 11:00:00, hod: 12 -> AI=830, legacy=532, final: 830 Wh (alpha=1, BC=0 Wh, zone=3)
2026.01.11 11:03:03.481 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-11 12:00:00, hod: 13 -> AI=655, legacy=1103, final: 655 Wh (alpha=1, BC=0 Wh, zone=3)
2026.01.11 11:03:03.482 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-11 13:00:00, hod: 14 -> AI=656, legacy=603, final: 656 Wh (alpha=1, BC=0 Wh, zone=3)
2026.01.11 11:03:03.482 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-11 14:00:00, hod: 15 -> AI=613, legacy=538, final: 613 Wh (alpha=1, BC=0 Wh, zone=3)
2026.01.11 11:03:03.483 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-11 15:00:00, hod: 16 -> AI=601, legacy=508, final: 586 Wh (alpha=1, BC=15 Wh, zone=2)
2026.01.11 11:03:03.483 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-11 16:00:00, hod: 17 -> AI=587, legacy=579, final: 572 Wh (alpha=1, BC=15 Wh, zone=2)
...
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

300P

Kurz und knapp - der Schnee lockt zum Schlittenfahren mit den Enkelkindern.

Hier Ergebnisse / Grafikscreenshot und das Log:
Informationen zum neuronalen Netz der Verbrauchsvorhersage

letztes KI-Training: 11.01.2026 00:19:49 / Laufzeit in Sekunden: 3770
KI Abfragestatus: ok
letzte KI-Ergebnis Generierungsdauer: 86.64 ms
Verbrauchernummer Wärmepumpe: 08

=== Modellparameter ===

Normierungsgrenzen: PV=16071 Wh, Hausverbrauch: Min=0 Wh / Max=7598 Wh
Trainingsdaten: 6962 Datensätze (Training=5569, Validierung=1393)
Architektur: Inputs=108, Hidden Layers=40-20, Outputs=1
Hyperparameter: Learning Rate=0.001, Momentum=0.4, BitFail-Limit=0.35
Aktivierungen: Hidden=SIGMOID, Steilheit=1.2, Output=LINEAR
Trainingsalgorithmus: INCREMENTAL, Registry Version=v1_heatpump_active_pv
Zufallsgenerator: Mode=1, Periode=10

=== Trainingsmetriken ===

bestes Modell bei Epoche: 5878 (von max. 15000)
Training MSE: 0.003058
Validation MSE: 0.007529
Validation MSE Average: 0.008555
Validation MSE Standard Deviation: 0.000334
Validation Bit_Fail: 0
Model Bias: 645 Wh
Model Slope: 0.6
Trainingsbewertung: Retrain

=== Fehlermaße der Prognosen ===

MAE: 493.06 Wh
MedAE: 357.72 Wh
RMSE: 590.23 Wh
RMSE relative: 27 %
RMSE Rating: weak
MAPE: 22.86 %
MdAPE: 18.75 %
R²: 0.42

=== Drift-Kennzahlen ===

Drift Score: 2.95
Drift RMSE relative: 55.07
Drift Bias: 16.41
Drift Slope: 0.315
Drift Bewertung: severe



Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_Edge|ESP32CAM usw.

lorisurfen

Hallo,
wieso wird consumer06 nicht ausgeschaltet, obwohl kein surplus vorhanden ist ?
consumer06: Shelly_EG_2 type=heater power=1000 icon=sani_heating_boost@orange pcurr=power:W etotal=energy:Wh mode=can mintime=SunPath on=on off=off interruptable=1 swoncond=calcEnergieManager:calc_surplus:{$VALUE>200?1:0;} pvshare=902026.01.11 14:42:42 1: SF01 DEBUG> ############### consumerSwitching consumer "06" ###############
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - ConsumptionRecommended calc method: default, surplus: 0
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - additional consumption after switching on (if currently 'off'): 0 W
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - current planning state: started
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - physical Switchstate before switching: on
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - logical Switchstate before switching: on
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - general switching parameters => auto mode: 1, Current household consumption: 3683 W, nompower: 1000, surplus: 0 W, planstate: switched on: 2026-01-11 14:20:06 - 2026-01-11 16:50:00, starttime: 11.01.2026 14:20:06
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - isInLocktime: 0
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - Check Context 'switch on' => swoncond: 0, on-command: on
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - isAddSwitchOnCond Info: The return value "0" resulted in 'false' after exec "{$VALUE>200?1:0;}"

2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - device 'Shelly_EG_2' is used as switching device
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - Interrupt Characteristic value: 1 -> simple true
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - Check Context 'switch off' => swoffcond: 0, off-command: off
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - is Consumption recommended: 1
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - current planning state: started
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - physical Switchstate after switching: on
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - logical Switchstate after switching: on
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - cycleDayNum: 2
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - last cycle start time: 2026-01-11 14:20:06
2026.01.11 14:42:42 1: SF01 DEBUG> consumer "06" - last cycle end time: still running

DS_Starter

Zitatwieso wird consumer06 nicht ausgeschaltet, obwohl kein surplus vorhanden ist ?
Du hast dem Consumer erlaubt mit 10% Netzstrom zu laufen -> pvshare=90, d.h. er kann bis 100W unter surplus gehen ohne auszuschalten.
die Folge ist -> is Consumption recommended: 1

Ich sollte das Debug noch erweitern um den aktuellen Grid Bezug zu sehen damit es eindeutiger zu identifizieren ist.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

lorisurfen

#4871
Zitat von: DS_Starter am 11 Januar 2026, 15:52:06
Zitatwieso wird consumer06 nicht ausgeschaltet, obwohl kein surplus vorhanden ist ?
Du hast dem Consumer erlaubt mit 10% Netzstrom zu laufen -> pvshare=90, d.h. er kann bis 100W unter surplus gehen ohne auszuschalten.
die Folge ist -> is Consumption recommended: 1

Ich sollte das Debug noch erweitern um den aktuellen Grid Bezug zu sehen damit es eindeutiger zu identifizieren ist.
Ok, das heißt wenn 1700W von der Batterie kommen, und deswegen kein Netzbezug erforderlich ist schaltet der consumer nicht aus bis meine Batterie leer ist (Meine Prio1 ist dass die Batterie bei Sonnenuntergang voll ist) ?
Wenn ich nicht möchte dass der consumer meine Batterie leer macht, müsste ich zusätzlich über den Schlüssel interrupt eine eigene Bedingung für das Ausschalten/unterbrechen definieren?
Ich dachte surplus ist Current_PV - Current_Consumption? Wird Current_PowerBatOut_01 da auch noch aufaddiert ?

DS_Starter

#4872
ZitatOk, das heißt wenn 1700W von der Batterie kommen, und deswegen kein Netzbezug erforderlich ist schaltet der consumer nicht aus bis meine Batterie leer ist
Ja, richtig. Allerdings kann man mit plantControl->batteryPreferredCharge erst die Batterie auf einen SoC X laden lassen. Das schützt aber nicht davor, dass einmal gestartete Consumer von der Bat versorgt werden und dadurch der SoC wieder sinkt was ja eigentlich der Sinn der Sache ist.
Ich muß mich korrigieren. In den PV Überschuß geht der Batterie Output an das Hausnetz nicht ein.

ZitatWenn ich nicht möchte dass der consumer meine Batterie leer macht, müsste ich zusätzlich über den Schlüssel interrupt eine eigene Bedingung für das Ausschalten/unterbrechen definieren?
Korrektur. So wie oben geschrieben sollte das nicht nötig sein.

Edit:
ZitatIch dachte surplus ist Current_PV - Current_Consumption? Wird Current_PowerBatOut_01 da auch noch aufaddiert ?
Nein, siehe meine Korrektur. Das war ein falsche Aussage meinerseits.
Der PV Überschuß ergibt sich aus:

PV zum Hausknoten + PV In Batterie + Power andere Producer (z.B. Windrad) - Einspeisung Grid - Hausverbrauch
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter