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

@all,

bezüglich des neuronalen Netzes für die Verbrauchsprognose habe ich einige Erweiterungen vorgenommen um die Einstellmöglichkeiten für das Training zu erweitern. Es gibt immer Fälle wo die bisherigen Möglichkeiten nicht ausreichen oder zumindest für einen Test gut wäre sie zu haben.

So gibt es jetzt:

- neuen Schlüssel aiConTrainLimit: Damit kann man die Trainingsdaten z.B. auf die neuesten 4000 Datensätze (ca. 5 Monate) begrenzen. Dadurch kann man saisonale Effekte oder Daten durch veränderte Consumer im Haushalt die es früher nicht gab (oder erst neu gibt) im dem Training berücksichtigen.

- man kann jetzt mehr Neuronenlayer, z.B. 32-16-8-8 einsetzen. D.h. die Tiefe des Netzes kann größer werden
- die Lernrate (aiConLearnRate) kann weiter runtergeregelt werden um ein langsameres Lernen bzw. eine spätere Konvergenz zu erreichen. Der Einstellbereich geht nun von 0.0001-0.05.

Neben den erweiterten Einstellmöglichkeiten gibt es nun einen eingebauten Architekturberater der die Architektur des Netzes auf Grundlage der verfügbaren (oder eingestellen) Trainingsdatenmenge zusammen mit den Trainingsergebnissen prüft und Vorschläge zur Einstellung macht, z.B.:

* Architektur möglicherweise zu klein für die Datenmenge: Verhältnis Trainingsdaten zu Netzparametern ist 1.0 (Zielwert: 8–20) - größere Architektur wie z.B. 16-9-8 versuchen (aiControl->aiConHiddenLayers)
* Empfohlene Lernrate für die vorgeschlagene Architektur 16-9-8 mit 61 Inputs: 0.0030 (aiControl->aiConLearnRate)

Natürlich ist das keine 100%ige Erfolgsgarantie, aber es hilft die richtigen Schritte zu gehen, Einstellungen zu testen und mit etwas Erfahrung und Gefühl optimale Ergebnisse zu erzielen.

Besonders auch der Einsatz von aiConTrainLimit kann sehr hilfreich sein. Man muß bei weniger Daten auch die Größe des Netzes verringern, also z.B. auf aiConHiddenLayers=32-16 zu gehen statt aiConHiddenLayers=80-40-20. Der Berater hilft dabei.

Update liegt im Contrib.

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

Hallo Heiko,

ich bekomme nach dem shutdown/restart mit der letzten Version

->> V2.6.10 "# $Id: 76_SolarForecast.pm 31273 2026-05-24 15:11:25Z DS_Starter $"

nach dem Start alle ca. 15 Sekunden ein Perlwarning jeweils mit dem SF-Interval:
026.05.24 20:58:26 0: Featurelevel: 6.4
2026.05.24 20:58:26 0: Server started with 442 defined entities (fhem.pl:30992/2026-03-21 perl:5.036000 os:linux user:fhem pid:465525)
2026.05.24 20:58:31 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 2330) line 73.
2026.05.24 20:58:46 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 4295) line 73.
2026.05.24 20:59:01 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 5874) line 73.
2026.05.24 20:59:16 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 6588) line 73.
2026.05.24 20:59:31 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 7200) line 73.
2026.05.24 20:59:39 2: AttrTemplates: got 272 entries
2026.05.24 20:59:46 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 7958) line 73.
2026.05.24 20:59:50 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 8704) line 73.
2026.05.24 21:00:01 1: Forecast DEBUG> start add AI raw data for hour: 21
2026.05.24 21:00:01 1: Forecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.05.24 21:00:01 1: Forecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_Forecast
2026.05.24 21:00:02 1: Forecast DEBUG> DRIFT SAFETY [con]: block=none
  -- RMSE Analysis --
     rmse_rel_ratio=2.712 | dynamic_limit=4.932 | margin=2.219 ok
     Limit Composition: base=4.0 | peak_part=0.326 (peak_ratio=0.326) | sem_part=0.309 (sem_ratio=0.804) | var_part=0.297 (slope_var=0.59354)
  -- Slope Analysis --
     slope_live=0.700 | slope_drift=0.824 | slope_rel_drift=0.176 | slope_var=0.59354
     slope_var_limit=19.62200 | var_ratio=0.03 ok
  -- Bias Analysis --
     bias_live=825.7 | bias_limit=931.2 | bias_ratio=0.89 ok
     quant30=776.0 | quant90=2092.0 | median_load=990.0
  -- Context --
     drift_score=1.771 | bias_drift_norm=0.192 | bias_var_norm=0.313
     peak_ratio=0.326 | sem_ratio=0.804
2026.05.24 21:00:02 1: Forecast DEBUG> DRIFT [con]: Flag=mild | WindowSize=96 | Block=0 | SlopeLive=0.700 | DriftSlope=0.824 | BiasLive=825.65 | DriftBias=72.28 | RMSErelLive=89.5 | RMSErelRatio=2.71 | BiasVarNorm=0.31 | DriftIndex=1.58 | DriftScore=1.77 | Zone3Hours=6 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild] | Retrain=none (-)
2026.05.24 21:00:02 1: Forecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_Forecast
2026.05.24 21:00:02 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 9204) line 73.
2026.05.24 21:00:18 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 10272) line 73.
2026.05.24 21:00:19 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 10465) line 73.
2026.05.24 21:00:33 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 11977) line 73.
2026.05.24 21:00:48 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 12869) line 73.
2026.05.24 21:01:03 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 13593) line 73.
2026.05.24 21:01:18 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 14057) line 73.
2026.05.24 21:01:33 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 14745) line 73.
2026.05.24 21:01:48 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 15120) line 73.
2026.05.24 21:02:03 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 15774) line 73.
2026.05.24 21:02:18 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 16480) line 73.
2026.05.24 21:02:33 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 17296) line 73.
2026.05.24 21:02:48 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 17664) line 73.
2026.05.24 21:03:03 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 18298) line 73.
2026.05.24 21:03:18 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 18961) line 73.
2026.05.24 21:03:33 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 19624) line 73.
2026.05.24 21:03:48 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 20254) line 73.
2026.05.24 21:04:03 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 21581) line 73.
2026.05.24 21:04:18 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 22329) line 73.
2026.05.24 21:04:33 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 23344) line 73.
2026.05.24 21:04:48 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 23784) line 73.
2026.05.24 21:05:03 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 24298) line 73.



Ich lasse neu trainieren - mal sehen ob es den weg geht ?!


EDIT:

und das kommt auch
The key 'aiConLearnRate=0.0001' is not specified correctly. Please refer to the command reference.

Ich gehe wieder zurück ;)
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

#6242
Komisch ... vllt. hatte ich eine falsche V hochgeladen.
Habe es nochmal gemacht - bitte neu ziehen.

Aber
2026.05.24 20:58:31 1: PERL WARNING: Argument "24.05.2026 15:00:14" isn't numeric in sprintf at (eval 2330) line 73.
kommt wahrscheinlich nicht aus SF. Bei mir ist es jedenfalls sauber. global->stacktrace einschalten zeigt woher es kommt.
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

Alles wieder okay bei mir :)

Sorry ziehe nochmals


Ja - da sind noch Unterschiede zur vorherigen Version....
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

aiConLearnRate=0.0001 wird jetzt akzeptiert :)
aiConTrainLimit=4000 ebenfalls
Neuronenlayer evtl. später mal......


Dann schau ich mal, wenn die Blumen und der neue eingesäte Rasenteil gegossen sind, wieder drauf......
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.

Burny4600

Betreffend Wetterdaten.

Da für meinen Bereich nicht alle Wetterdaten zur Verfügung stehen und die nächstgelegene zu weit weg ist, habe ich meine lokale Wetterstation mit einer Davis-Wetterstation erweitert. Zudem habe ich vor die einzelnen Kollektorflächen mit Temperaturfühler auszustatten.
Meine Idee wäre, dass ich meine lokalen Wetterdaten und Messwerte mit bestehenden Wetterstationen kombiniere, um alles für die Prognosen zur Verfügung zu haben.
Dazu müsste ich eine eigene Zusammenfassung der Wetterdaten erstellen, dass ich dann unter SolarForcast einbinde.
Wie könnte ich das für SolarForcast definieren?
LG Chris

Raspberry Pi 2-5 => Jessie, Bullseye, Bookworm, Trixie
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

DS_Starter

Moin Chris,

das ist ein interessantes Thema, was bisher aber noch nicht betrachtet wurde. Momentan werden alle Wetterprognosen von API's bzw. einem DWD_OpenData Device in FHEM bezogen.

Die Quellen für lokale Ist-Daten Außentemperatur und Wind kann man bereits jetzt in setupEnvironment hinterlegen.
Hier könnte der Fühler für die Kollektorflächen auch eigehen, wobei ich in setupEnvironment einen eigenen Schlüssel vorsehen müsste, da dieser Wert nicht mit outsideTemp gleichzusetzen ist.
Das sind aber die gemessenen Ist-Daten einer Wetterstation oder anderem Sensor und keine Prognosedaten.

Jetzt stellt sich die Frage, ob du mit deiner Technik tatsächlich eine Prognose (Bewölkung, Niederschlag, Temp, Wind etc.) für die nächste Zeit - im Modul sind 3 Tage Standard - liefern kannst?

Wenn das tatsächlich gegeben ist, wäre eine Erweiterung im Modul notwendig um eine universelle Schnittstelle zu schaffen, die bereitgestellte Daten in einer streng vorgegebenen Struktur einliest.

Wie gesagt, Ist-Daten können bereits jetzt eingebunden (und erweitert) werden, eine Uni-Schnittstelle für Prognosdaten müsste erst geschaffen werden.
Ich kann mir ehrlich gesagt nicht vorstellen, dass eine Wetterstation Prognosedaten liefert, lasse mich da aber gerne aufklären wenn es soetwas doch geben sollte.

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

Hallo zusammen,

die Version 2.6.10 ist eingecheckt und wird morgen früh im Update erscheinen.

Ich habe das Nachrichtensystem noch etwas umgebaut. Gelesenen Nachrichten werden auch bei einem FHEM Restart nicht neu signalisiert, d.h. das Postsymbol erscheint zukünftig nur bei echten Änderungen.

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