76_SolarForecast - Informationen/Ideen zu Weiterentwicklung und Support

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

Vorheriges Thema - Nächstes Thema

Gisbert

Zitat von: DS_Starter am 09 März 2025, 08:59:53Moin Peter,

vielen Dank für die Daten.

ZitatDie Wetter-Zeile zeigt zwar leichte Bewölkung (zwischen 38 und 50), bei WetterOnline ist davon nichts zu sehen.
Solche Unterschiede gibt es. Auch DWD_OpenData (API) und die ICON Modelle des DWD (OpenMeteoDWD) liefern u.U. andere Prognosedaten für die gleiche Umgebung.
Auch werden z.B. eine WetterID "0" (=wolkenloser Himmel) geliefert und Neff (die Bewölkung) hat einen Wert von ungleich "0", was ja eigentlich nicht zusammenpasst. Hier versuche ich aktuell ein Schema zu finden wie DWD an dieser Stelle agiert.

Wenn du tiefer einsteigen möchtest, ist diese Seite des DWD ein guter Startpunkt um zu weiteren Dokumenten zu verzweigen.

LG,
Heiko

Hallo Heiko,

heute hab ich die Situation, dass im SolarForecast-Modul mit dem MODEL OpenMeteoDWDEnsembleAPI nur 4.2 kWh (kWp 15 kW) prognostiziert werden, wohingegen WetterOnline fast durchgängig einen wolkenlosen Himmel (bis auf nachmittags leichte Schleier-Bewölkung) vorhersagt - vermutlich werden es 20 kWh, vielleicht mehr.

Kann ich irgendetwas an dieser Situation verbessern?

Viele Grüße Gisbert
Proxmox | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome | Panasonic Heishamon

Parallix

Zitat von: DS_Starter am 14 Dezember 2025, 19:31:20...
ZitatNoch eine Frage: Kannst Du den Leistungswert, auf dessen Basis  remainingSurplsHrsMinPwrBat_XX bestimmt wird, zugänglich machen?
Nein, es gibt nicht den "einen" Leistungswert, es sei denn du meinst <MinPwr> aus dem Schlüssel:

ctrlBatSocManagementXX->loadAbort=<SoC1>:<MinPwr>:<SoC2>
Ansonsten muß man sich durch den Code wühlen ab Zeile 16129 der contrib Version.
Aus welchem Anlass fragst du danach?

Nein, den von Dir oben genannten Attributwert meine ich nicht. Es geht mir schlicht darum, für die jeweilige Bat ein special Reading zu haben, in dem der aktuelle Leistungswert steht, auf den sich remainingSurplsHrsMinPwrBat_XX bezieht.

Der Anlass ist zum einen der, dass ich derzeit noch einem EV-ChargingController arbeite und diesen Wert gut gebrauchen könnte. Zum anderen habe sehe ich aktuell sehr kleine Werte bei remainingSurplsHrsMinPwrBat_XX, die ich nicht nachvollziehen kann.
FHEM: Debian/Testing BananaPro - AVM: 7490 (7.60) und 7591 (8.20) - Goodwe: GW25K-ET (DSP V10 / ARM V12) - Trina TSM 405: (#East, #South, #West) = (12,16,12) - BYD: 2 x HVS 7.7 (BMS V3.31-B, BMU V3.26-B) - EnOcean - Z-Wave - FS20/HMS

DS_Starter

#4637
Hallo Gisbert,
Zitatheute hab ich die Situation, dass im SolarForecast-Modul mit dem MODEL OpenMeteoDWDEnsembleAPI nur 4.2 kWh (kWp 15 kW) prognostiziert werden, wohingegen WetterOnline fast durchgängig einen wolkenlosen Himmel (bis auf nachmittags leichte Schleier-Bewölkung) vorhersagt - vermutlich werden es 20 kWh, vielleicht mehr.

Kann ich irgendetwas an dieser Situation verbessern?
An den Input-Daten der Wetterdienste können wir nichts ändern. Sie sind entweder zutreffend oder nicht.
Du kannst nur einen Dienst auswählen der für deinen Standort die passendsten Werte liefert, z.B. alternativ OpenMeteoDWD_D2-API oder OpenMeteoDWD-API. Eine 100%ige Treffsicherheit gibt es leider nicht, gerade in der aktuellen Jahreszeit.

LG,
Heiko
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

@Parallix,

ZitatNein, den von Dir oben genannten Attributwert meine ich nicht. Es geht mir schlicht darum, für die jeweilige Bat ein special Reading zu haben, in dem der aktuelle Leistungswert steht, auf den sich remainingSurplsHrsMinPwrBat_XX bezieht
Neben dem Attributwert sind die NextHours-Werte pvfc, confc, today, hourofday relevant. Abfragen kann man sie wie hier beschrieben.
Weiterhin noch sunsetTodayTs, der mit CurrentVal (<name>, 'sunsetTodayTs', 0) abgefragt werden kann (wie im obigen Link beschrieben).

Die wenigen remainingSurplsHrsMinPwrBat_XX werden sicherlich von dem aktuell wenigen Überschußstunden herrühren in denen zusätzlich auch noch die minimalen Ladeleistung <MinPwr> zu erwarten ist.

LG,
Heiko
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

#4639
Frohe Weihnachten an Alle !


-->>Bild nach Weihnachten entfernt - jetzt nur noch siehe unten


Viele die auf einen sonnigen Weihnachtstag mit großen Ertrag als Geschenk gehofft haben....
...sie haben ihn bekommen - aber mit viel Kälte. ;D
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

Den Wünschen schließe ich mich an. Bleibt alle gesund!

Als kleinen Ausblick habe ich vorbereitend einen Artikel zur KI-Verbrauchsprognose erstellt. In der Zwischenzeit ist schon sehr viel passiert. Die Modellierung ist vorangeschritten. Es wird diverse Einstellmöglichkeiten zur Modellanpassung geben.

Es sind noch ein paar Schwierigkeiten zu lösen, aber die Fortschritte/Ergebnisse stimmen mich außerordentlich zuversichtlich, auch im Hinblick auf die beabsichtigte Ersetzung der aktuellen AI:Decitiontree mit einem echten neuronalen Netz für die PV-Prognose.

Dann schauen wir mal zuversichtlich in die Zukunft :-)

LG,
Heiko 
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 25 Dezember 2025, 17:21:10Als kleinen Ausblick habe ich vorbereitend einen Artikel zur KI-Verbrauchsprognose erstellt. In der Zwischenzeit ist schon sehr viel passiert. Die Modellierung ist vorangeschritten. Es wird diverse Einstellmöglichkeiten zur Modellanpassung geben.


Hallo Heiko,

bin wieder aus der Sonne zurück und versuche mich bei den Einstellungen gemäß des obigen Artikels.
Meist schreibe ich mir am Anfang von neuen Sachen alle Parameter - egal ob ich Standart nutze oder nicht -  zur Übersicht mit in die jeweiligen Attribute hinein um dann den einen deren evtl. mal dann auszuprobieren.

Bislang habe ich folgendes hinterlegt:
aiTrainStart=3
aiStorageDuration=3600
aiTreesPV=30
aiConActivate=1
aiConLearnRate=0.001
aiConMomentum=0.7
aiConShuffleMode=1
aiConShufflePeriod=10
aiConSteepness=0.9
aiConTrainAlgo=RPROP


Jetzt meine Frage (frei nach dem heiteren Beruferaten "Was bin ich" ->> Hans Sachs)  ;)  ;D  O:-)

Gehe ich (z.Z. noch) recht in der Annahme das:
- aiConHiddenLayers=80‑40‑20
- aiConTrainStart=3:1
- aiConActFunc=GAUSSIAN

noch nicht als Parameter eintragbar und als Parameter mit dieser u.s. aktuellen Version 2.0.0 im Contrib vom 10,12,2025 noch nicht genutzt werden kann?

# Versions History intern
164 my %vNotesIntern = (
165   "2.0.0"  => "10.12.2025  initial implementation of neural network for consumption forecasting with AI::FANN ".
166                            "aiControl: more keys for aiCon... ".
167                            "edit commandRef, remove __batSaveSocKeyFigures ",
168   "1.60.7" => "21.11.2025  new special Reading BatRatio, minor code changes ",

Aus dem Code geht dies n.m.A. so hervor.
Danke für eine kurze Info dazu
Gruß
Günter
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

#4642
Hier (unten) die aktuellen Ergebnisse vorher <==> nachher bei mir zu den obigen vorgenommenen Einstellungen:
(Anlage mit 7kW-WP / 14.5 kWp PV / 26 kW Akku)


Informationen zum neuronalen Netz der Verbrauchsvorhersage

letztes KI-Training: 27.12.2025 16:36:49 / Laufzeit in Sekunden: 589.53
letzte KI-Ergebnis Generierungsdauer: 0.13 ms

=== Modellparameter ===

Trainingsdaten: 6649 Datensätze (Training=5319, Validierung=1330)
Architektur: Inputs=18, Hidden Layers=64-32-16, Outputs=1
Hyperparameter: Learning Rate=0.001, Momentum=0.7, BitFail-Limit=0.35
Aktivierungen: Hidden=SIGMOID, Steilheit=0.9, Output=LINEAR
Zufallsgenerator: Mode=1, Periode=10

=== Trainingsmetriken ===

bestes Modell bei Epoche: 154 (von max. 15000)
Training MSE: 0.004
Validation MSE: 0.002
Validation Bit_Fail: 0
bester Trainingslauf: 0
Trainingsbewertung: ok (Val MSE Standard Deviation=0.000123, Val MSE Avg=0.002798)

=== Fehlermaße der Prognosen ===

MAE: 679.94 Wh
MedAE: 637.03 Wh
RMSE: 0.045
MAPE: 41.330 %
MdAPE: 33.187 %
R²: 0.014

 Erläuterung der Kennzahlen

Train MSE / Validation MSE → wie gut das Netz trainiert und generalisiert. Daumenregel:
   MSE < 0.01 → sehr gut
   MSE 0.01–0.05 → gut
   MSE > 0.1 → schwach
   Interpretation Verhältnis Train MSE zu Validation MSE:
      Validation ≈ Train → gute Generalisierung
      Validation deutlich größer → Überfitting
      Validation kleiner → Validierungsdaten sind einfacher oder Split begünstigt

Validation Bit_Fail → Anzahl der Ausreißer

MAE (Mean Absolute Error) → mittlere absolute Abweichung in Wh. Richtwerte bei typischem Verbrauch 500–1500 Wh:
   < 100 Wh → sehr gut
   100–300 Wh → gut
   > 300 Wh → schwach

MedAE (Median Absolute Error) → Median der absoluten Fehler in Wh (toleriert einzelne Ausreißer besser)
   < 100 Wh → sehr gut
   100–200 Wh → gut
   200–300 Wh → mittelmäßig
   > 300 Wh → schwach

RMSE (Root Mean Squared Error) → mittlere quadratische Abweichung in Wh
   Interpretation: wie groß Fehler im Mittel sind, mit Betonung auf Ausreißer
   Richtwerte:
   < 0.01 → sehr gut
   0.01–0.03 → gut
   0.03–0.05 → mittelmäßig / akzeptabel
   > 0.05 → schwach

MAPE (Mean Absolute Percentage Error) → relative Abweichung in %
   Richtwerte:
   < 10 % → sehr gut - Modell liegt fast immer sehr nah an den echten Werten
   10–20 % → gut - Prognosen sind solide, kleine Abweichungen sind normal
   20–30 % → mittelmäßig / akzeptabel - Modell ist brauchbar, aber nicht präzise – für grobe Trends ok
   > 30 % → schwach - Modell verfehlt die Werte deutlich, oft durch Ausreißer oder fehlende Features
   ⚠️ Vorsicht: bei kleinen Werten (<200 Wh) kann MAPE stark verzerren → MdAPE heranziehen

MdAPE (Median Absolute Percentage Error) → Median der prozentualen Fehler in % (robuster gegenüber kleinen Werten)
   Richtwerte:
   < 10 % → sehr gut
   10–20 % → gut
   20–30 % → mittelmäßig
   > 30 % → schwach

R² (Bestimmtheitsmaß) → Maß für die Erklärungskraft des Modells. Je näher R² an 1 liegt, desto besser.
   R² = 1.0 → perfekte Vorhersage, alle Punkte liegen exakt auf der Regressionslinie
   R² > 0.8 → sehr gut - Modell erfasst den Großteil der Streuung → sehr zuverlässige Prognosen
   R² = 0.6 – 0.8 → gut - Modell erklärt einen soliden Teil der Varianz → brauchbar für viele Anwendungen
   R² = 0.5–0.6 → mäßig / grenzwertig - Modell liegt knapp über ,,zufällig" → Muster erkannt, Prognosen nur eingeschränkt nützlich
   R² < 0.5 → schwach - Modell erklärt weniger als die Hälfte der Varianz → deutlicher Verbesserungsbedarf
   R² = 0.0 → Modell erklärt gar nichts, es ist nicht besser als der Mittelwert der Daten
   R² < 0.0 → Modell ist schlechter als einfach immer den Mittelwert vorherzusagen
   ⚠️ R² ist sehr empfindlich gegenüber Ausreißern und Varianz in den Daten.

                                                                                                                                           

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

Hallo 300P,

welcome back  :)

ZitatGehe ich (z.Z. noch) recht in der Annahme das:
Code Auswählen
- aiConHiddenLayers=80‑40‑20
- aiConTrainStart=3:1
- aiConActFunc=GAUSSIAN

noch nicht als Parameter eintragbar und als Parameter mit dieser u.s. aktuellen Version 2.0.0 im Contrib vom 10,12,2025 noch nicht genutzt werden kann?
Absolut. Den Artikel habe ich vorbereitend geschrieben (...in Entwicklung).
Die Version im contrib ist noch die du bereits hast mit der initialen FANN-Logik.
Jetzt ist die Entwicklung bereits viel weiter, aber noch nicht im contrib weil ich noch ein paar Problemchen lösen muß.

Sobald es soweit ist, update ich das contrib und gebe auch Bescheid dass es upgedated wurde.

LG,
Heiko
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