76_SolarForecast - Informationen/Ideen zu Weiterentwicklung und Support

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

Vorheriges Thema - Nächstes Thema

DS_Starter

Moin,

das sieht weiterhin gut aus bei mir.

Ich habe das Popup und die Erläuterungen noch erweitert -> contrib.

Zitat=== Rauschen ===

Rauschen Bewertung: low
Empfehlung für Bit_Fail: 0.28 (Einstellung von aiControl->aiConBitFailLimit)

=== Drift-Kennzahlen ===

Drift Score: 1.64
Drift RMSE ratio: 2.17
Drift Slope: 0.081
Drift Bias: -56.23
Drift Bewertung: mild
Model Slope recalibrated: -
Model Bias recalibrated: -



Erläuterungen zu den Kennzahlen

Model Bias → zeigt, ob das Modell den Verbrauch im Durchschnitt zu niedrig oder zu hoch vorhersagt:
   Positiver Bias → das Modell unterschätzt den Verbrauch im Mittel
   Negativer Bias → das Modell überschätzt den Verbrauch im Mittel
   Interpretation:
      Der Wert wird in Wh angegeben und beschreibt die durchschnittliche Abweichung pro Stunde.
      Die interne Bias‑Korrektur hebt oder senkt die Vorhersage entsprechend, jedoch nur
      im Bereich der Grundlast, um Peaks nicht zu verfälschen.
      Wenn eine Drift‑Rekalibrierung stattgefunden hat, ersetzt Model Bias recalibrated den ursprünglichen Model Bias als neue Basislinie.
      Er repräsentiert den neu berechneten durchschnittlichen Modellfehler, nachdem längerfristige Drift erkannt und korrigiert wurde.

Model Slope → zeigt, ob das Modell zu flach oder zu steil reagiert.
   Der Wert beschreibt das Verhältnis zwischen:
      - Änderung im echten Verbrauch
      - Änderung in der Modellvorhersage
   und wird als dimensionsloser Faktor angegeben.
   Interpretation:
      Slope = 1.0 → Das Modell bildet die Verbrauchshöhen korrekt ab. Steigt der echte Verbrauch um X, steigt die Vorhersage ebenfalls um X
      Slope < 1.0 → Das Modell reagiert zu flach. Peaks werden abgeschwächt. Beispiel: Slope = 0.9 → Das Modell bildet 90% der realen Dynamik ab.
      Slope > 1.0 → Das Modell reagiert zu stark. Peaks werden überbetont, Schwankungen überzeichnet.
      Wenn eine Drift‑Rekalibrierung stattgefunden hat, ersetzt Model Slope recalibrated den ursprünglichen Model Slope als neue Steigungsbasis.
      Er repräsentiert die neu berechnete Modellreaktion, nachdem längerfristige Drift erkannt und korrigiert wurde.
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

peterboeckmann

Hallo Heiko,

ich habe die neueste Version aus dem contrib gezogen und das NN neu trainiert.
Sieht auf den ersten Blick mit meinen zwei Optimierungsschritten letzte Woche und Deinen Programmierungen schon sehr sehr gut aus, wenn man bedenkt, dass das BEV da noch nicht optimal berücksichtigt wird:
Du darfst diesen Dateianhang nicht ansehen.

Viele Grüße,
Peter

DS_Starter

Ja, das sieht wirklich gut aus.  8)
Die Driftkorrektur / Rekalibrierung schleife ich immer noch ein bisschen.
Kann man aktuell aus dem contrib updaten. Neutraining ist nicht erforderlich, wirkt nur auf die Rekal-logik.
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

denis.robel

Zitat von: seayak am 12 März 2026, 17:18:08Reading, welches z.B. bei mir die aktuelle Wattzahl liefert:

PV_DC_Coupled_power

Daraus baue ich mir dann dieses Userreading:

attr <PV_Inverter_Device> userReadings Solar_Summe_Wh:PV_DC_Coupled_power.* integral { ReadingsVal ($name, "PV_DC_Coupled_power", 0) / 3600 }

Und nutze dann das Userreading "Solar_Summe_Wh" für etotal bei der Definition.

Hi Peter,

danke für den Hinweis. Ich war die letzten Tage unterwegs und werde mir das morgen anschauen.

VG Denis
VG

Denis

DS_Starter

Ich habe in der contrib-Version noch ein Problem in der Drift-Logik beseitigt.
Bitte updaten wer die Contrib-Version mit testet.
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

grappa24

noch ohne das letzte Update:
CO Abweichung fortlaufend -2,7 % gestern -0,5 %
Gebäudesicherheit/-komfort, PV-Prognose/Verbrauchssteuerung, Heizungssteuerung, Multimedia, ...
KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200, Netatmo, Nuki, SolarForecast, HEOS, Alexa-FHEM, ...
FHEM 6.4, 2 x RasPi 3B+, Debian Bullseye

300P

#5376
Zitat von: DS_Starter am 13 März 2026, 23:32:58Ich habe in der contrib-Version noch ein Problem in der Drift-Logik beseitigt.
Bitte updaten wer die Contrib-Version mit testet.

Jetzt wurde "endlich" nach dem letzten kleinen Update (heute morgen um ca. 9 Uhr eingespielt)  auch bei mir (Annahme von mir ->> laut Anzeige) das erste mal seit dem letzten "retrain" jetzt "recalibrated": ;D

(Vermutung : ....weil ich einen negativen Model Bias von -138 hatte)
nformationen zum neuronalen Netz der Verbrauchsvorhersage

letztes KI-Training: 12.03.2026 21:02:18 / Laufzeit in Sekunden: 744
KI Abfragestatus: ok
letzte KI-Ergebnis Generierungsdauer: 96.95 ms
Verbrauchernummer Wärmepumpe: 08

=== Modellparameter ===

Normierungsgrenzen: PV=16071 Wh, Hausverbrauch: Min=0 Wh / Max=7598 Wh
Trainingsdaten: 7980 Datensätze (Training=6384, Validation=1596)
Architektur: Inputs=98, Hidden Layers=80-40, Outputs=1
Hyperparameter: Learning Rate=0.001, Momentum=0.6, BitFail-Limit=0.23
Aktivierungen: Hidden=GAUSSIAN_SYMMETRIC, Steepness=1.0, Output=LINEAR
Trainingsalgorithmus: INCREMENTAL, Registry Version=v1_heatpump_active_pv
Zufallsgenerator: Mode=1, Period=20
Modellalter: 37 h

=== Trainingsmetriken ===

bestes Modell bei Epoche: 380 (max. 15000)
Training MSE: 0.003393
Validation MSE: 0.004327
Validation MSE Average: 0.006963
Validation MSE Standard Deviation: 0.000369
Validation Bit_Fail: 3
Model Bias: -138 Wh
Model Slope: 1.0
Trainingsbewertung: ok

=== Fehlermaße der Prognosen ===

MAE: 392.48 Wh
MedAE: 336.74 Wh
RMSE: 444.72 Wh
RMSE relative: 20 %
RMSE Rating: good
MAPE: 20.78 %
MdAPE: 15.02 %
R²: 0.66

=== Rauschen ===

Rauschen Bewertung: low
Empfehlung für Bit_Fail: 0.28 (Einstellung von aiControl->aiConBitFailLimit)

=== Drift-Kennzahlen ===

Drift Score: 1.92
Drift RMSE ratio: 2.77
Drift Slope: 1
Drift Bias: 0
Drift Bewertung: recalibrated
Model Slope recalibrated: 0.85
Model Bias recalibrated: -1209.59659900003

Gruß
300P

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

300P

@DS_Starter:

Wo kann ich den PV-Wert der o.g. Normierungsgrenze von 16071 Wh finden / suchen / eingrenzen bzw. dann eliminieren ?
Mir ist eben bewußt geworden das meine 3 WR ja nicht mehr als 9.5 kWh produzieren können  :-[  :-X
Oder kommen da evtl. bei dem Wert die Batterieleistungen mit ins Spiel ?



Gruß
300P

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

DS_Starter

#5378
Moin,

ZitatWo kann ich den PV-Wert der o.g. Normierungsgrenze von 16071 Wh finden / suchen / eingrenzen bzw. dann eliminieren ?
Diese Grenzen werden automatisch über die vorhandenen Werte in aiRawData ermittelt.
Vllt. gab es mal Fehlkonfigurationen o.ä.
PV real steht in pvrl. Du kannst also zu große / störende Wert über " ... reset aiData delValue=pvrl>=...." löschen oder
vorher anschauen welche Werte es > xxx überhaupt gibt.


Kommando zurück. For "con" trifft die obige Aussage zu. Für PV nehme ich den Wert PV Anlage Peakleistung (W), was die Summe der Peaks aller Strings mit einem kleinen Sicherheitsaufschlag entspricht. (siehe valCurrent allstringspeak).
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

Ahhh daher weht der Wind.

Meine Stringleistung in Summe ist ( leider  ;D ) extra wegen meiner neuen WP im letzten Jahr auf den maximal zulässigen Anschlusswert je WR-Stringanschlussleistung ausgebaut worden. O:-)
Somit ist dieser Wert dann auch größer als die Summe der max. WR-Leistung.  ;)

attr Forecast setupInverterDev01 SB25 etotal=etotal:kWh asynchron=0 limit=100 strings=GarageSE pvIn=string_sum_pdc:kW pvOut=total_pac:kW capacity=2500
attr Forecast setupInverterDev02 SB30 capacity=3000 pvIn=string_sum_pdc:kW pvOut=total_pac:kW strings=GarageNW,HausNW limit=100 asynchron=0 etotal=etotal:kWh
attr Forecast setupInverterDev03 SB40 limit=100 asynchron=0 etotal=etotal:kWh capacity=4000 pvIn=string_sum_pdc:kW pvOut=total_pac:kW strings=HausSE1,HausSE2,HausSW
attr Forecast setupInverterStrings GarageSE,GarageNW,HausNW,HausSW,HausSE1,HausSE2
attr Forecast setupMeterDev SMA_Energymeter gcon=Bezug_Wirkleistung:W contotal=Bezug_Wirkleistung_Zaehler:kWh gfeedin=Einspeisung_Wirkleistung:W feedtotal=Einspeisung_Wirkleistung_Zaehler:kWh conprice=0.25:€ feedprice=0.08123:€
attr Forecast setupStringAzimuth GarageSE=-55 GarageNW=135 HausNW=135 HausSW=35 HausSE1=-55 HausSE2=-55
attr Forecast setupStringDeclination GarageSE=38 GarageNW=38 HausNW=48 HausSW=48 HausSE1=48 HausSE2=48
attr Forecast setupStringPeak GarageSE=2.75 GarageNW=3.200 HausNW=2.230 HausSW=2.230 HausSE1=2.100 HausSE2=2.100
Gruß
300P

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

DS_Starter

Guter Hinweis!
Es kommt garnicht so selten vor, dass die WR mit Modulpeak "überladen" werden. Schon um Alterung auszugleichen, werden ab einer bestimmter Nutzungsdauer u.U. Zellen hinzugenommen die den nominalen Peakwert erhöhen.
Ist aber kein Problem. Ich habe ja auch die maximale capacity jedes WR zur Verfügung. Der kleinere Wert von Peak oder WR-capa wird dann genommen.
Baue ich ein.
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