76_SolarForecast - Informationen/Ideen zu Weiterentwicklung und Support

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

Vorheriges Thema - Nächstes Thema

300P

Zitat von: TheTrumpeter am 05 August 2026, 07:14:02Hinzu kommt, dass Kühlbetrieb über die Fussbodenheizung stark vom Taupunkt abhängig ist, der mit steigenden Temperaturen typischerweise ebenfalls steigt und damit den Verbrauch damit nach unten drückt.)
Hast du den Parameter "cooling" 'richtig' konfiguriert ?

Aber hiernach müsste es grundsätzlich so sein das du dies gemacht hast - also nur sicherheitshalber gefragt :)
Architektur: Inputs=123
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.

TheTrumpeter

#6796
Zitat von: 300P am 05 August 2026, 14:38:18Hast du den Parameter "cooling" 'richtig' konfiguriert ?
Nachdem SF im Kühlbetrieb das dafür konfigurierte Icon anzeigt, würde ich mal mit breiter Brust "JA" sagen. Ich hätte gehofft, dass ich irgendwo auslesen kann welche Verbräuche oder Betriebszeiten den jeweiligen Modi zugeschlüsselt sind, finde aber grad nix außer:
03 => alias => Mythz
      aliasshort =>
      asynchron => 1
      auto => 1
      autoreading =>
      avgenergy => 3050.88
      currpower => 0
      currpowerpercent => 0.00
      cycleDayNum => 6
      cycleStarttime => 1785931751
      cycleTime => 7.80
      dspignorecond =>
      dswitch => Mythz
      dswoffcond =>
      dswoncond =>
      ehodpieces => 15=762.72
      energythreshold =>
      epiecAVG => 1=
      epiecAVG_hours => 1
      epiecActive => 5
      epiecHist_0 => 1=12000.00
      epiecHist_0_hours => 1
      epiecHist_1 => 1=0.00
      epiecHist_10 => 1=0.00
      epiecHist_10_hours => 0
      epiecHist_1_hours => 0
      epiecHist_2 => 1=0.00
      epiecHist_2_hours => 0
      epiecHist_3 => 1=0.00
      epiecHist_3_hours => 0
      epiecHist_4 => 1=0.00 2=0.00 3=0.00 4=0.00 5=0.00
      epiecHist_4_hours => 4
      epiecHist_5 => 1=0.00
      epiecHist_5_hours => 0
      epiecHist_6 => 1=0.00 2=0.00 3=0.00 4=0.00
      epiecHist_6_hours => 3
      epiecHist_7 => 1=0.00
      epiecHist_7_hours => 0
      epiecHist_8 => 1=0.00
      epiecHist_8_hours => 0
      epiecHist_9 => 1=0.00
      epiecHist_9_hours => 0
      epiecHour => -1
      epiecStartEtotal => 27302939.1998902
      epieces => 1=762.72
      exclgroup => 0
      exconfc => 0
      hysteresis => 0
      interruptable => 0
      isConsumptionRecommended => 1
      isIntimeframe => 1
      lastMinutesOn => 7.25
      lastOnTime => 1785932222
      lastReplanTs => 1785933328
      locktime => 0:0
      logoffon => off
      manualInterruptFlag => on
      mintime => 60
      minutesOn => 15.05
      mode => can
      modulation => 100
      name => Mythz
      noshow => 2
      notafter =>
      notbefore =>
      offcom =>
      offreg => 0
      oncom =>
      onoff => off
      onreg => 1
      opmode => Mythz:solarforecast_opmode
      opmodeActiveIcon => sani_heating@grey
      opmodeIcons => cooling=sani_heating@blue defrost=frost@red heating=sani_heating@red hotwater=sani_water_hot@red off=sani_heating@grey
      physoffon => off
      planSupplement =>
      plandelete => regular
      planstate => replanned: 2026-08-05 14:35:28 - 2026-08-05 15:35:28
      planswitchoff => 1785936928
      planswitchon => 1785933328
      power => 3300
      powerthreshold => 1
      pvshare => 100
      remainTime => 0
      retotal => solarforecast_etotal
      rigncond =>
      rpcurr => cur_power
      rswoffcond =>
      rswoncond =>
      rswstate => Compressor
      runtimeAvgDay => 241.37
      spignorecondition =>
      startTime => 1785931751
      state => off
      surpmeth => default
      surpmethResult => 9697
      swoffcondition =>
      swoncondition =>
      swprio => 0
      type => heatpump
      uetotal => kWh
      upcurr => kW

Nachtrag:
Hab' was gefunden, wenn ich "get pvHistory 5 con" aufrufe, erhalte ich irgendwelche Statistiken, in denen den unterschiedlichen Modi irgendwelche "Punkte" zugewiesen sind, z.B.:
      07 => pvapifcraw: 1218, pvfc: 1400, pvfcfeedlim: -, pvrl: 1060, pvrlvd: 1, plantderated: -, rad1h: 266
            etotali01: 66188250, etotali02: -, etotali03: -, etotali04: -, etotali05: -
            pvrl01: 1060, pvrl02: -, pvrl03: -, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            conlegfc: 360, conaifc: 91, confc: 91, conbiascorr: -218, con: 1392, gcons: 625, conprice: 0.24342
            gfeedin: 291, feedprice: 0.035
            DoN: 1, sunaz: 73.20, sunalt: 8.30
            batintotal01: -, batintotal02: -, batintotal03: -
            batouttotal01: -, batouttotal02: -, batouttotal03: -
            batprogsoc01: -, batprogsoc02: -, batprogsoc03: -, socprogwhsum: -
            batsoc01: -, batsoc02: -, batsoc03: -, socwhsum: -
            lcintimebat01: -, lcintimebat02: -, lcintimebat03: -
            strategybat01: -, strategybat02: -, strategybat03: -
            batin01: -, batin02: -, batin03: -
            batout01: -, batout02: -, batout03: -
            weatherid: 0, wcc: 0, windspeed: 0.95, windspeed_fast: 0.20, rr1c: 0.00, pvcorrf: 0.93/0.96, temp: 24.5, comforttemp: 22, presence: 0
            hpcsm: 03, bevcsm: -
            csmt01: 65651.27, csme01: 0.00, minutescsm01: 0, rcmdcsm01: 0:100, exconfc01: 0
            csmt02: 88136, csme02: 0.00, minutescsm02: 0, rcmdcsm02: 0:100, exconfc02: 0
            csmt03: 27302939.1998902, csme03: 0.00, minutescsm03: 19, rcmdcsm03: 0:100, exconfc03: 0
            csm03_off_points: 30.1, csm03_heating_points: 0, csm03_defrost_points: 0, csm03_hotwater_points: 0
            csm03_cooling_points: 29.9, csm03_pool_points: 0, csm03_poolheating_points: 0, csm03_eco_points: 0
            minutescsm04: 0, rcmdcsm04: 0:100
            minutescsm05: 30, rcmdcsm05: 0:100
            csmt06: 5914255305.02561, csme06: 0.00, minutescsm06: 0, rcmdcsm06: 0:100, exconfc06: 0
            csmt07: 3430575.79799575, csme07: 35.00, minutescsm07: 60, rcmdcsm07: 0:100, exconfc07: 0
            csmt08: 218826, csme08: 25.00, minutescsm08: 54, rcmdcsm08: 0:0, exconfc08: 0
            minutescsm09: 0, rcmdcsm09: 0:100
            minutescsm10: 0, rcmdcsm10: 0:100
            csmt11: 632841, csme11: 321.00, minutescsm11: 24, rcmdcsm11: 0:100, exconfc11: 0
            csmt12: 1583783, csme12: 0.00, minutescsm12: 0, rcmdcsm12: 0:100, exconfc12: 0
Das dürfte für die 7. Stunde heute sein. Tatsächlich habe ich heute den Kühlbetrieb schon kurz vor 6:30 aktiviert, um noch kühlen zu können bevor die Außentemperatur zu hoch wird. Das deckt sich mit:
csm03_off_points: 30.1,  csm03_cooling_points: 29.9.

In der 8. Stunde habe ich dann:
csmt03: 27302939.1998902, csme03: 0.00, minutescsm03: 60, rcmdcsm03: 0:100, exconfc03: 0
            csm03_off_points: 0, csm03_heating_points: 0, csm03_defrost_points: 0, csm03_hotwater_points: 0
            csm03_cooling_points: 59.9, csm03_pool_points: 0, csm03_poolheating_points: 0, csm03_eco_points: 0
Das passt also.

Komischerweise ändert sich aber csmt03 und csme03 aber nicht. Hier scheint's noch irgendein Problem zu geben.
Das liegt daran, dass ich die Energiezähler bisher immer nur kurz vor Mitternacht auslese, um da Tagesdifferenzen zu bilden... da muss ich mir noch was überlegen, wie ich das löse. VERDAMMT, das erklärt wohl, warum mein Modell nicht besser wird.
Der MOMENTANverbrauch wird richtig zugewiesen, aber vermutlich wird der nur für die Anzeige verwendet. die Stundenverbräuchen werden damit wohl als "nicht vorhersehbarer Hausverbrauch" abgespeichert und die KI tappt natürlich komplett im dunkeln.
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

300P

Zitat von: TheTrumpeter am 05 August 2026, 14:48:07Das passt also.

sieht m.E. doch gut aus ;D  ;D


Zitat von: TheTrumpeter am 05 August 2026, 14:48:07csmt03: 27302939.1998902, csme03: 0.00, minutescsm03: 19, rcmdcsm03: 0:100, exconfc03: 0
            csm03_off_points: 30.1, csm03_heating_points: 0, csm03_defrost_points: 0, csm03_hotwater_points: 0
            csm03_cooling_points: 29.9, csm03_pool_points: 0, csm03_poolheating_points: 0, csm03_eco_points: 0

csme03: 0.00 - da fehlen evtl. aber die verbrauchten kWh oder wH wenn ich mir meine Daten ansehe. (Screenshot)
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.

TheTrumpeter

Zitat von: 300P am 05 August 2026, 15:19:34csme03: 0.00 - da fehlen evtl. aber die verbrauchten kWh oder wH wenn ich mir meine Daten ansehe. (Screenshot)
Ja, da bin ich auch schon draufgekommen und habe den Beitrag oben bearbeitet. (Eigentlich vor Deiner Antwort, aber möglicherweise hast Du da schon an Deinem Beitrag geschrieben...)
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

300P

Ja - wird so sein - ich bin mit dem einbinden / download von Grafiken immer seeeeeeeehhhhhhrrrrr laaaaannnngsam  O:-)
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.

TheTrumpeter

So, ich hab' das Problem jetzt mal behoben. Welche Nebeneffekt es hat, wird sich die nächsten Tage zeigen.

Der gesamte Verbrauch vom August ist nun natürlich der laufenden Stunde zugeschlüsselt worden:
            csmt03: 27302939.1998902, csme03: 61928.62, minutescsm03: 0, rcmdcsm03: 1:100, exconfc03: 0
            csm03_off_points: 53.3, csm03_heating_points: 0, csm03_defrost_points: 0, csm03_hotwater_points: 0
            csm03_cooling_points: 0, csm03_pool_points: 0, csm03_poolheating_points: 0, csm03_eco_points: 0
Die zugrunde liegenden Gesamtzähler habe ich bisher immer nur am Monatsersten um 00:01:00 ausgelesen. Damit ist wohl der Monatsverbrauch des Vormonats immer der 1. Stunde des aktuellen Monats zugewiesen worden, was die Ausgabe von "get pvHistory 01 con" auch bestätigt:
csmt03: 26979287.5681156, csme03: 321651.63, minutescsm03: 0, rcmdcsm03: 0:100, exconfc03: 0
            csm03_off_points: 59.9, csm03_heating_points: 0, csm03_defrost_points: 0, csm03_hotwater_points: 0
            csm03_cooling_points: 0, csm03_pool_points: 0, csm03_poolheating_points: 0, csm03_eco_points: 0

Daher meine Folgefrage an DS_Starter:
Diese Werte sind natürlich alle kompletter Schwachsinn. Ignoriert die SF, weil ganz offensichtlicher Schwachsinn, oder kann/soll ich die irgendwie löschen?
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

DS_Starter

ZitatDiese Werte sind natürlich alle kompletter Schwachsinn. Ignoriert die SF, weil ganz offensichtlicher Schwachsinn, oder kann/soll ich die irgendwie löschen?
Es gibt eine Schutzfunktion die derartige Ausreißer beim Training ignoriert.
Du kannst sie aber im Sinne der Datenhygiene besser löschen sonst sucht man ggf. wieder ewig nach Ursachen.
Das get mit "set ... reset delValue csme03>=xxxxx". Für xxxxx nimmst du einen für deinen Haushalt noch plausiblen maximalen Stundenverbrauch. Alles darüber wird gelöscht.

Wenn es nur wenige Datensätze sind, kannst du auch diese ganzen Datensätze löschen (delIndex=<Index>,<Index>,...).

Wenn ich richtig gelesen habe, gab es keine stündliche Aufzeichnung der Energieverbräuche. Wenn das stimmt, kann nur Unfug rauskommen. Ist das Problem gelöst, wird das am schnellsten bei der kurzfristigen Legacy Prognose sichtbar werden. Allerdings müsstest du dazu auch die pvCircular/pvHistory säubern. Wobei die pvHistory nach spätestens 31 Tagen sich selbst gereinigt hat.
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

@all,

zu später Stunde noch eine kurze Info.
Ich habe heute bei mir das Steuerungskonzept von Parallix für meine Victron/Pylontechs implementiert, d.h. die im Wiki beschriebene Batteriesteuerung konzeptionell + Code angereichert.
Morgen ist der erste produktive Lauf. Wenn alles klappt, überarbeite ich den Wiki-Abschnitt und ersetze das Codebespiel mit Erläuterungen zur Arbeitsweise und der dahinter liegenden Theorie.
Würde mich freuen wenn weitere User es dann nachbauen/adaptieren und hoffe auch dass Parallix mitleist und seine Expertise einbringt.

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

TheTrumpeter

Zitat von: DS_Starter am 05 August 2026, 19:41:02Es gibt eine Schutzfunktion die derartige Ausreißer beim Training ignoriert.
Du kannst sie aber im Sinne der Datenhygiene besser löschen sonst sucht man ggf. wieder ewig nach Ursachen.
Hab' ich erledigt, es waren aber nur ein paar Daten. Der Fehler müsste mit der Zusammenfassung meiner unterschiedlichen WP-Geräte in ein Sammel-Gerät reingekommen sein.
2026.08.06 06:12:47 1: mySolarForecast - AI Raw data deleted - idx: 2026040709 -> key=csme03, val=12000
2026.08.06 06:12:47 1: mySolarForecast - AI Raw data deleted - idx: 2026070308 -> key=csme03, val=10530288
2026.08.06 06:12:47 1: mySolarForecast - AI Raw data deleted - idx: 2026071111 -> key=csme03, val=5000
2026.08.06 06:12:47 1: mySolarForecast - AI Raw data deleted - idx: 2026072014 -> key=csme03, val=5000
2026.08.06 06:12:47 1: mySolarForecast - AI Raw data deleted - idx: 2026072817 -> key=csme03, val=5000
2026.08.06 06:12:47 1: mySolarForecast - AI Raw data deleted - idx: 2026080101 -> key=csme03, val=321652
2026.08.06 06:12:47 1: mySolarForecast - AI Raw data deleted - idx: 2026080516 -> key=csme03, val=61929

Hier auch die gestern angefragte Debug-Ausgabe zum stündlichen AI-Prozess:
2026.08.05 08:00:01 1: mySolarForecast DEBUG> start add AI raw data for hour: 8
2026.08.05 08:00:01 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.05 08:00:02 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.05 08:00:04 1: mySolarForecast DEBUG> DRIFT [con]: Flag=recalibrated | WindowSize=96 | Block=0 | SlopeLive=0.098 | DriftSlope=0.116 | BiasLive=216.67 | DriftBias=-192.44 | RMSErelLive=348.7 | RMSErelRatio=2.04 | BiasVarNorm=0.43 | DriftIndex=1.93 | DriftScore=1.71 | Zone3Hours=0 | 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 (just_recalibrated)
2026.08.05 08:00:04 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.05 09:00:03 1: mySolarForecast DEBUG> start add AI raw data for hour: 9
2026.08.05 09:00:03 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.05 09:00:03 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.05 09:00:05 1: mySolarForecast DEBUG> DRIFT [con]: Flag=moderate | WindowSize=96 | Block=0 | SlopeLive=0.083 | DriftSlope=0.097 | BiasLive=224.75 | DriftBias=-197.38 | RMSErelLive=369.3 | RMSErelRatio=2.16 | BiasVarNorm=0.47 | DriftIndex=2.06 | DriftScore=1.91 | Zone3Hours=1 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,moderate] | Retrain=none (-)
2026.08.05 09:00:05 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.05 10:00:03 1: mySolarForecast DEBUG> start add AI raw data for hour: 10
2026.08.05 10:00:03 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.05 10:00:03 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.05 10:00:05 1: mySolarForecast DEBUG> DRIFT [con]: Flag=moderate | WindowSize=96 | Block=0 | SlopeLive=0.075 | DriftSlope=0.088 | BiasLive=228.18 | DriftBias=-193.96 | RMSErelLive=376.3 | RMSErelRatio=2.20 | BiasVarNorm=0.51 | DriftIndex=2.14 | DriftScore=2.07 | Zone3Hours=2 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,moderate,moderate] | Retrain=none (-)
2026.08.05 10:00:05 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.05 11:00:01 1: mySolarForecast DEBUG> start add AI raw data for hour: 11
2026.08.05 11:00:01 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.05 11:00:02 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.05 11:00:04 1: mySolarForecast DEBUG> DRIFT [con]: Flag=moderate | WindowSize=96 | Block=0 | SlopeLive=0.073 | DriftSlope=0.086 | BiasLive=228.34 | DriftBias=-193.79 | RMSErelLive=382.1 | RMSErelRatio=2.23 | BiasVarNorm=0.54 | DriftIndex=2.19 | DriftScore=2.17 | Zone3Hours=3 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,moderate,moderate,moderate] | Retrain=none (-)
2026.08.05 11:00:04 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.05 12:00:04 1: mySolarForecast DEBUG> start add AI raw data for hour: 12
2026.08.05 12:00:04 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.05 12:00:04 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.05 12:00:06 1: mySolarForecast DEBUG> DRIFT [con]: Flag=moderate | WindowSize=96 | Block=0 | SlopeLive=0.073 | DriftSlope=0.086 | BiasLive=228.94 | DriftBias=-193.19 | RMSErelLive=377.1 | RMSErelRatio=2.21 | BiasVarNorm=0.54 | DriftIndex=2.18 | DriftScore=2.16 | Zone3Hours=4 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,moderate,moderate,moderate,moderate] | Retrain=none (-)
2026.08.05 12:00:06 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.05 13:00:08 1: mySolarForecast DEBUG> start add AI raw data for hour: 13
2026.08.05 13:00:08 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.05 13:00:08 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.05 13:00:10 1: mySolarForecast DEBUG> DRIFT [con]: Flag=moderate | WindowSize=96 | Block=0 | SlopeLive=0.073 | DriftSlope=0.085 | BiasLive=229.83 | DriftBias=-192.31 | RMSErelLive=366.9 | RMSErelRatio=2.15 | BiasVarNorm=0.57 | DriftIndex=2.15 | DriftScore=2.14 | Zone3Hours=5 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,moderate,moderate,moderate,moderate,moderate] | Retrain=none (-)
2026.08.05 13:00:10 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.05 14:00:06 1: mySolarForecast DEBUG> start add AI raw data for hour: 14
2026.08.05 14:00:06 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.05 14:00:07 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.05 14:00:08 1: mySolarForecast DEBUG> DRIFT [con]: Flag=moderate | WindowSize=96 | Block=0 | SlopeLive=0.079 | DriftSlope=0.094 | BiasLive=258.24 | DriftBias=-163.90 | RMSErelLive=357.6 | RMSErelRatio=2.09 | BiasVarNorm=0.53 | DriftIndex=2.12 | DriftScore=2.13 | Zone3Hours=6 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,moderate,moderate,moderate,moderate,moderate,moderate] | Retrain=none (-)
2026.08.05 14:00:08 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.05 15:00:06 1: mySolarForecast DEBUG> start add AI raw data for hour: 15
2026.08.05 15:00:06 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.05 15:00:06 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.05 15:00:08 1: mySolarForecast DEBUG> DRIFT [con]: Flag=moderate | WindowSize=96 | Block=0 | SlopeLive=0.084 | DriftSlope=0.099 | BiasLive=284.09 | DriftBias=-138.04 | RMSErelLive=306.6 | RMSErelRatio=1.79 | BiasVarNorm=0.57 | DriftIndex=2.02 | DriftScore=2.12 | Zone3Hours=7 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,moderate,moderate,moderate,moderate,moderate,moderate,moderate] | Retrain=none (-)
2026.08.05 15:00:08 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.05 16:00:02 1: mySolarForecast DEBUG> start add AI raw data for hour: 16
2026.08.05 16:00:02 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.05 16:00:03 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.05 16:00:05 1: mySolarForecast DEBUG> DRIFT [con]: Flag=recalibrated | WindowSize=96 | Block=0 | SlopeLive=0.084 | DriftSlope=0.099 | BiasLive=283.79 | DriftBias=-138.35 | RMSErelLive=267.4 | RMSErelRatio=1.56 | BiasVarNorm=0.58 | DriftIndex=1.94 | DriftScore=2.09 | Zone3Hours=0 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,moderate,moderate,moderate,moderate,moderate,moderate,moderate,mild] | Retrain=none (just_recalibrated)
2026.08.05 16:00:05 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.05 17:00:04 1: mySolarForecast DEBUG> start add AI raw data for hour: 17
2026.08.05 17:00:04 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.05 17:00:04 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.05 17:00:06 1: mySolarForecast DEBUG> DRIFT [con]: Flag=mild | WindowSize=96 | Block=0 | SlopeLive=0.083 | DriftSlope=0.098 | BiasLive=282.81 | DriftBias=-190.57 | RMSErelLive=263.2 | RMSErelRatio=1.54 | BiasVarNorm=0.57 | DriftIndex=1.96 | DriftScore=2.13 | Zone3Hours=1 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,moderate,moderate,moderate,moderate,moderate,moderate,moderate,mild,mild] | Retrain=none (-)
2026.08.05 17:00:06 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.05 18:00:04 1: mySolarForecast DEBUG> start add AI raw data for hour: 18
2026.08.05 18:00:04 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.05 18:00:04 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.05 18:00:06 1: mySolarForecast DEBUG> DRIFT [con]: Flag=mild | WindowSize=96 | Block=0 | SlopeLive=0.082 | DriftSlope=0.097 | BiasLive=288.45 | DriftBias=-184.93 | RMSErelLive=256.3 | RMSErelRatio=1.50 | BiasVarNorm=0.57 | DriftIndex=1.93 | DriftScore=2.10 | Zone3Hours=2 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,moderate,moderate,moderate,moderate,moderate,moderate,moderate,mild,mild,mild] | Retrain=none (-)
2026.08.05 18:00:06 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.05 19:00:04 1: mySolarForecast DEBUG> start add AI raw data for hour: 19
2026.08.05 19:00:04 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.05 19:00:05 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.05 19:00:06 1: mySolarForecast DEBUG> DRIFT [con]: Flag=mild | WindowSize=96 | Block=0 | SlopeLive=0.082 | DriftSlope=0.096 | BiasLive=287.35 | DriftBias=-186.02 | RMSErelLive=235.6 | RMSErelRatio=1.38 | BiasVarNorm=0.57 | DriftIndex=1.91 | DriftScore=2.12 | Zone3Hours=3 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,mild,mild,mild,mild,moderate,moderate,moderate,moderate,moderate,moderate,moderate,mild,mild,mild,mild] | Retrain=none (-)
2026.08.05 19:00:06 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.05 20:00:04 1: mySolarForecast DEBUG> start add AI raw data for hour: 20
2026.08.05 20:00:04 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.05 20:00:04 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.05 20:00:06 1: mySolarForecast DEBUG> DRIFT [con]: Flag=mild | WindowSize=96 | Block=0 | SlopeLive=0.082 | DriftSlope=0.096 | BiasLive=287.73 | DriftBias=-185.65 | RMSErelLive=253.3 | RMSErelRatio=1.48 | BiasVarNorm=0.57 | DriftIndex=1.92 | DriftScore=2.08 | Zone3Hours=4 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,mild,mild,mild,moderate,moderate,moderate,moderate,moderate,moderate,moderate,mild,mild,mild,mild,mild] | Retrain=none (-)
2026.08.05 20:00:06 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.05 21:00:06 1: mySolarForecast DEBUG> start add AI raw data for hour: 21
2026.08.05 21:00:06 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.05 21:00:07 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.05 21:00:09 1: mySolarForecast DEBUG> DRIFT [con]: Flag=mild | WindowSize=96 | Block=0 | SlopeLive=0.082 | DriftSlope=0.096 | BiasLive=287.28 | DriftBias=-186.10 | RMSErelLive=231.3 | RMSErelRatio=1.35 | BiasVarNorm=0.57 | DriftIndex=1.88 | DriftScore=2.06 | Zone3Hours=5 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,mild,mild,moderate,moderate,moderate,moderate,moderate,moderate,moderate,mild,mild,mild,mild,mild,mild] | Retrain=none (-)
2026.08.05 21:00:09 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.05 22:00:04 1: mySolarForecast DEBUG> start add AI raw data for hour: 22
2026.08.05 22:00:04 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.05 22:00:04 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.05 22:00:06 1: mySolarForecast DEBUG> DRIFT [con]: Flag=mild | WindowSize=96 | Block=0 | SlopeLive=0.084 | DriftSlope=0.099 | BiasLive=280.97 | DriftBias=-192.41 | RMSErelLive=248.8 | RMSErelRatio=1.46 | BiasVarNorm=0.57 | DriftIndex=1.90 | DriftScore=2.03 | Zone3Hours=6 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,mild,moderate,moderate,moderate,moderate,moderate,moderate,moderate,mild,mild,mild,mild,mild,mild,mild] | Retrain=none (-)
2026.08.05 22:00:06 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.05 23:00:06 1: mySolarForecast DEBUG> start add AI raw data for hour: 23
2026.08.05 23:00:06 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.05 23:00:07 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.05 23:00:08 1: mySolarForecast DEBUG> DRIFT [con]: Flag=mild | WindowSize=96 | Block=0 | SlopeLive=0.087 | DriftSlope=0.103 | BiasLive=273.17 | DriftBias=-200.21 | RMSErelLive=250.9 | RMSErelRatio=1.47 | BiasVarNorm=0.56 | DriftIndex=1.89 | DriftScore=2.01 | Zone3Hours=7 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,mild,moderate,moderate,moderate,moderate,moderate,moderate,moderate,mild,mild,mild,mild,mild,mild,mild,mild] | Retrain=none (-)
2026.08.05 23:00:08 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.06 00:00:07 1: mySolarForecast DEBUG> start add AI raw data for hour: 24
2026.08.06 00:00:07 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.06 00:00:08 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.06 00:00:09 1: mySolarForecast DEBUG> DRIFT [con]: Flag=recalibrated | WindowSize=96 | Block=0 | SlopeLive=0.090 | DriftSlope=0.106 | BiasLive=265.59 | DriftBias=-207.79 | RMSErelLive=253.1 | RMSErelRatio=1.48 | BiasVarNorm=0.56 | DriftIndex=1.88 | DriftScore=1.98 | Zone3Hours=0 | Zone3Reset=0 | Hist=[mild,mild,mild,mild,moderate,moderate,moderate,moderate,moderate,moderate,moderate,mild,mild,mild,mild,mild,mild,mild,mild,mild] | Retrain=none (just_recalibrated)
2026.08.06 00:00:09 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.06 01:00:06 1: mySolarForecast DEBUG> start add AI raw data for hour: 1
2026.08.06 01:00:06 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.06 01:00:06 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.06 01:00:08 1: mySolarForecast DEBUG> DRIFT [con]: Flag=mild | WindowSize=96 | Block=0 | SlopeLive=0.091 | DriftSlope=0.107 | BiasLive=263.21 | DriftBias=-239.31 | RMSErelLive=284.8 | RMSErelRatio=1.67 | BiasVarNorm=0.56 | DriftIndex=1.93 | DriftScore=1.95 | Zone3Hours=1 | Zone3Reset=0 | Hist=[mild,mild,mild,moderate,moderate,moderate,moderate,moderate,moderate,moderate,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild] | Retrain=none (-)
2026.08.06 01:00:08 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.06 02:00:03 1: mySolarForecast DEBUG> start add AI raw data for hour: 2
2026.08.06 02:00:03 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.06 02:00:04 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.06 02:00:06 1: mySolarForecast DEBUG> DRIFT [con]: Flag=mild | WindowSize=96 | Block=0 | SlopeLive=0.091 | DriftSlope=0.107 | BiasLive=262.87 | DriftBias=-239.64 | RMSErelLive=326.5 | RMSErelRatio=1.91 | BiasVarNorm=0.57 | DriftIndex=1.99 | DriftScore=1.92 | Zone3Hours=2 | Zone3Reset=0 | Hist=[mild,mild,moderate,moderate,moderate,moderate,moderate,moderate,moderate,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild] | Retrain=none (-)
2026.08.06 02:00:06 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.06 02:15:04 1: mySolarForecast DEBUG> AI Raw delete data equal or less than index >2021080700<
2026.08.06 02:15:04 1: mySolarForecast DEBUG> AI AddInstance & Training BlockingCall PID "23807" with Timeout 7200 s started
2026.08.06 02:15:09 1: mySolarForecast DEBUG> AI Instance add - Tree: 1 -> 8672 entities added for training (set verbose 4 for output more detail)
2026.08.06 02:15:10 1: mySolarForecast DEBUG> AI Instance add - Tree: 2 -> 8672 entities added for training (set verbose 4 for output more detail)
2026.08.06 02:15:10 1: mySolarForecast DEBUG> AI Instance add - Tree: 3 -> 8672 entities added for training (set verbose 4 for output more detail)
2026.08.06 02:15:17 1: mySolarForecast DEBUG> AI trained Tree: 3, number of entities: 8672
2026.08.06 02:15:17 1: mySolarForecast DEBUG> AI trained Tree: 2, number of entities: 8672
2026.08.06 02:15:17 1: mySolarForecast DEBUG> AI trained Tree: 1, number of entities: 8672
2026.08.06 02:15:17 1: mySolarForecast DEBUG> Training instances and their associated information where purged from the AI object
2026.08.06 02:15:17 1: mySolarForecast DEBUG> AI trained and saved data into file: ./FHEM/FhemUtils/AItra_SolarForecast_mySolarForecast
2026.08.06 02:15:18 1: mySolarForecast DEBUG> AI Training BlockingCall PID "23807" finished, state: ok
2026.08.06 03:00:06 1: mySolarForecast DEBUG> start add AI raw data for hour: 3
2026.08.06 03:00:06 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.06 03:00:07 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.06 03:00:08 1: mySolarForecast DEBUG> DRIFT [con]: Flag=mild | WindowSize=96 | Block=0 | SlopeLive=0.092 | DriftSlope=0.108 | BiasLive=262.49 | DriftBias=-240.02 | RMSErelLive=329.6 | RMSErelRatio=1.93 | BiasVarNorm=0.57 | DriftIndex=1.99 | DriftScore=1.89 | Zone3Hours=3 | Zone3Reset=0 | Hist=[mild,moderate,moderate,moderate,moderate,moderate,moderate,moderate,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild] | Retrain=none (-)
2026.08.06 03:00:08 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.06 04:00:06 1: mySolarForecast DEBUG> start add AI raw data for hour: 4
2026.08.06 04:00:06 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.06 04:00:07 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.06 04:00:08 1: mySolarForecast DEBUG> DRIFT [con]: Flag=mild | WindowSize=96 | Block=0 | SlopeLive=0.092 | DriftSlope=0.108 | BiasLive=261.65 | DriftBias=-240.86 | RMSErelLive=332.8 | RMSErelRatio=1.95 | BiasVarNorm=0.58 | DriftIndex=1.98 | DriftScore=1.86 | Zone3Hours=4 | Zone3Reset=0 | Hist=[moderate,moderate,moderate,moderate,moderate,moderate,moderate,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild] | Retrain=none (-)
2026.08.06 04:00:08 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.06 05:00:06 1: mySolarForecast DEBUG> start add AI raw data for hour: 5
2026.08.06 05:00:06 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.06 05:00:06 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.06 05:00:08 1: mySolarForecast DEBUG> DRIFT [con]: Flag=mild | WindowSize=96 | Block=0 | SlopeLive=0.093 | DriftSlope=0.109 | BiasLive=259.91 | DriftBias=-242.60 | RMSErelLive=331.5 | RMSErelRatio=1.94 | BiasVarNorm=0.59 | DriftIndex=1.97 | DriftScore=1.83 | Zone3Hours=5 | Zone3Reset=0 | Hist=[moderate,moderate,moderate,moderate,moderate,moderate,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild] | Retrain=none (-)
2026.08.06 05:00:08 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.06 06:00:01 1: mySolarForecast DEBUG> start add AI raw data for hour: 6
2026.08.06 06:00:01 1: mySolarForecast DEBUG> AI raw add - 1 entities added to raw data pool (set verbose 4 for output more detail)
2026.08.06 06:00:01 1: mySolarForecast DEBUG> AI raw data saved into file: ./FHEM/FhemUtils/AIraw_SolarForecast_mySolarForecast
2026.08.06 06:00:03 1: mySolarForecast DEBUG> DRIFT [con]: Flag=mild | WindowSize=96 | Block=0 | SlopeLive=0.093 | DriftSlope=0.110 | BiasLive=257.95 | DriftBias=-244.57 | RMSErelLive=330.3 | RMSErelRatio=1.93 | BiasVarNorm=0.59 | DriftIndex=1.95 | DriftScore=1.80 | Zone3Hours=6 | Zone3Reset=0 | Hist=[moderate,moderate,moderate,moderate,moderate,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild,mild] | Retrain=none (-)
2026.08.06 06:00:03 1: mySolarForecast DEBUG> AI FANN drift data type 'con' successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

DS_Starter

#6804
Moin,

gut dass du die falschen Daten gelöscht hast.
Jetzt nach deinen Korrekturmaßnahmen ist es wichtig, dass die csmeXX, csmtXX und auch con, pvrl usw. sauber im stündlichen Raster aufgezeuchnet werden. Das ganze Modul arbeitet in diesem Raster. "Klumpenbildungen" auf eine Stunde mit den Zwischenstunden=0 sind für Auswertungen/Prognosen schlichtweg unbrauchbar und führen zu absurden Ergebnissen.

Zu deinem Log. Der auffälligste Befund ist das konstant extrem niedrige SlopeLive – Tag und Nacht.
Über den gesamten 22-Stunden-Zeitraum liegt SlopeLive durchgehend zwischen 0.073 und 0.098 – nie in der Nähe von 1.0 (was eine gute Übereinstimmung zwischen Vorhersage und Realität anzeigen würde). Das ist nicht auf die Abendstunden beschränkt, sondern über den ganzen Tag hinweg (auch mittags, 12:00–15:00 Uhr) strukturell gleich niedrig. Das spricht für die These, dass es sich um ein durchgehendes, globales Muster handelt. Mit den Erkenntnissen deiner letzten Postings würde ich die Ursachen in den unsauberen/falschen Trainingsdaten verorten.

Ich habe das Log auch mal durch den LLM-Knecht gejagt mit dem zusammenfassenden Ergebnis:

Die durchgehend niedrige SlopeLive über den ganzen Tag deutet eher auf ein strukturelles Problem (mögliche Zuordnungsungenauigkeit zwischen Real- und Prognosewert in den Rohdaten, oder eine grundsätzlich sehr schwache Modellkorrelation) hin als auf klassische, zeitlich begrenzte Drift. Die automatische Recalibrierung kann das nicht heilen, weil sie strukturell daran gehindert wird, sich dem realen Wert anzunähern – sie läuft im 8-Stunden-Takt, ohne das Grundproblem zu beheben bzw. beheben zu können. Ich würde empfehlen, die Rohdaten-Zuordnung (con vs. conaifc) stichprobenartig zu verifizieren.


Das deckt sich mit den Erkenntnissen und meinen Einschätzungen.
Es wäre gut wenn du ein nächstes Training mal manuell anstartest und ein Trainingslog erstellen lässt. Das kannst du dann zur Analyse posten.
Daraus ist dann meistens viel abzuleiten.
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,

mir kommt gerade eine neue Idee bzgl. des consumer-Types BEV.
Wäre es sinnvoll, der Verbrauchsprognose noch mitzugeben, wie das Auto gerade geladen wird?

Zum Hintergrund:
Ich habe mir in fhem, aber außerhalb von SF die Möglichkeit geschaffen, den PV-Überschuss ins Auto zu laden.
Dafür habe ich eine kleine Steuerung implementiert, die die folgenden Modi unterstützt:
- Aus -> keine Ladung
- Auto -> PV-Überschuss ins Auto laden, Hausspeicher wird ebenfalls geladen (Lädt das ins Auto, was sonst ins Netz ginge)
- Prio -> PV-Überschuss ins Auto laden, Priorität über Hausspeicher (Lädt den gesamten PV-Überschuss ins Auto)
- Manuell -> Feste Stromstärke angeben und ins Auto laden

Alles zusammen habe ich am folgenden DUMMY-device definiert:
Du darfst diesen Dateianhang nicht ansehen.
define WallboxModus dummy
attr WallboxModus event-on-change-reading .*
attr WallboxModus group Wallbox
attr WallboxModus readingList Modus Ladestrom
attr WallboxModus room Garten->Wallbox
attr WallboxModus setList Modus:Aus,Auto,Manuell,Prio Ladestrom:slider,6,0.1,16,1
attr WallboxModus sortby 10
attr WallboxModus stateFormat &nbsp;;
attr WallboxModus useSetExtensions 1
attr WallboxModus userReadings Modus
attr WallboxModus webCmd Modus:Ladestrom

Dazu noch ein notify und ein bisschen Perl-Code. Aber das führt für den Anwendungsfall der Verbrauchsprognose zu weit.

Wäre es möglich und sinnvoll, die Readings "Modus" und "Ladestrom" (SOLL) noch mit an den BEV-Consumer und das NN zu übermitteln?

Viele Grüße,
Peter
MQTT,Modbus,HTTPMod,DbLog,LaCrosse,SolarForecast,TelegramBot,Twilight,vitoconnect,withings
fhem,fhempy,debmatic
Debian
RaspberryPi5,HomeMatic,HomeMaticIP,Shelly,JeeLink,SignalDuino,ZWDongle,SONOS,alexa,Hue,tradfri,MobileAlerts,Siemens Home Connect,Roborock S50,Wallbox,Harmony,Tuya Smartlife

TheTrumpeter

Zitat von: DS_Starter am 06 August 2026, 11:12:25Jetzt nach deinen Korrekturmaßnahmen ist es wichtig, dass die csmeXX, csmtXX und auch con, pvrl usw. sauber im stündlichen Raster aufgezeuchnet werden. Das ganze Modul arbeitet in diesem Raster. "Klumpenbildungen" auf eine Stunde mit den Zwischenstunden=0 sind für Auswertungen/Prognosen schlichtweg unbrauchbar und führen zu absurden Ergebnissen.
Das sieht soweit gut aus, ich kann diesbezüglich keinen Fehler erkennen. Der Fehler war einfach, dass ich die Stromzähler der Wärmepumpe nicht regelmäßig ausgelesen habe.

Zitat von: DS_Starter am 06 August 2026, 11:12:25Es wäre gut wenn du ein nächstes Training mal manuell anstartest und ein Trainingslog erstellen lässt.
Kann ich gleich machen.
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

DS_Starter

Hallo Peter,

Grundsätzlich eine gute Idee – die Frage ist aber, wie ich das sauber ins bestehende Feature-Konzept einbauen könnte.

1. Analogie ist schon im Modul vorhanden
Das ist strukturell dasselbe Problem wie beim Wärmepumpen-Opmode-Tracking (Punkte-System mit gewichteter Sekundenakkumulation). Auch dort wird ein Betriebsmodus als Kategorie-Signal in eine Aggregation gegeben. Ich würde "Modus" der Wallbox genauso behandeln: nicht als rohen String, sondern als Punkte/Anteil pro Stunde (z.B. wie viele Sekunden der Stunde in Aus/Auto/Prio/Manuell verbracht wurden), analog zum HP-Muster. Das lässt sich vermutlich mit wenig Aufwand aus dem bestehenden Ansatz ableiten/kopieren.

2. Das eigentliche Problem: Training vs. Inferenz
Für die Trainingsdaten (Historie) ist das unproblematisch – dort hole ich den historischen Modus/Ladestrom-Wert zur jeweiligen Stunde.

Für die NextHours-Prognose ist das der Knackpunkt: Anders als PV- oder Wetterprognosen gibt es für "Modus in Stunde t+x" keine Vorhersagequelle – man kennt nur den aktuellen Live-Wert. Wenn ich den Wert einfach für alle Prognosestunden konstant fortschreibe, ist das für Nutzer, die selten manuell umschalten, eine brauchbare Näherung, für Nutzer mit häufigem Moduswechsel aber potenziell fehlerhaft – das NN lernt dann eine Abhängigkeit, die zur Prognosezeit oft nicht mehr stimmt.

Was natürlich dafür spricht - wenn der Modus auf Prio steht und sich damit eine Beziehung zum vergangenen/prognostizierten Überschuß ableiten lässt, wäre es ein echtes Signal für das NN.
Vllt. wird deutlich worauf ich hinaus will, der PV-Überschuß in Verknüpfung mit demm Modus "Prio" gibt ein echtes Feature, bei den anderen Status, z.B. "Manuell" -> "kann passieren oder auch nicht" gibt es keine solche Vorhersehbarkeit.

Aber danke für die Idee  :) , ich lasse das bei mir nochmal sacken.

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

TheTrumpeter

Hier das Log vom Training:
2026.08.06 11:35:34 1: mySolarForecast DEBUG> AI FANN Training for consumption Forecast BlockingCall PID "23128" with Timeout 86400 s started
2026.08.06 11:35:38 1: mySolarForecast DEBUG> AI FANN - There are 3875 Records skipped due to incomplete or invalid data.
2026.08.06 11:35:38 1: mySolarForecast DEBUG> AI FANN - dataset skipped - 2024040209 -> con=undef dayname=undef
(ausgeschnitten)
2026.08.06 11:35:38 1: mySolarForecast DEBUG> AI FANN - dataset skipped - 2026071915 -> con=undef
2026.08.06 11:35:38 1: mySolarForecast DEBUG> AI FANN - Target-Norm: raw_max=5012, p99=3576, p99.5=4923, targmaxval=5263
2026.08.06 11:35:38 1: mySolarForecast DEBUG> AI FANN - True Outliers above p99.5 (4923): 5012
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12912]: hppf=0.000 d1p=0.000 d1n=0.013 up=0 down=1 upS=0.000 downS=0.013 vol=1 pvX=0 break=0
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12912]: tmplag1=0.912 tmplag3=0.907 tmplag24=0.924 tmpd1p=0.000 tmpd1n=0.004 tmpd3p=0.001 tmpd3n=0.000 tmpTrdp=0.000 tmpTrdn=0.001
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12913]: hppf=0.000 d1p=0.000 d1n=0.170 up=0 down=1 upS=0.000 downS=0.170 vol=1 pvX=1 break=0
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12913]: tmplag1=0.909 tmplag3=0.931 tmplag24=0.926 tmpd1p=0.024 tmpd1n=0.000 tmpd3p=0.001 tmpd3n=0.000 tmpTrdp=0.012 tmpTrdn=0.000
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12914]: hppf=0.000 d1p=0.265 d1n=0.000 up=1 down=0 upS=0.265 downS=0.000 vol=1 pvX=0 break=1
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12914]: tmplag1=0.932 tmplag3=0.912 tmplag24=0.936 tmpd1p=0.000 tmpd1n=0.012 tmpd3p=0.007 tmpd3n=0.000 tmpTrdp=0.000 tmpTrdn=0.003
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12915]: hppf=0.000 d1p=0.000 d1n=0.222 up=0 down=1 upS=0.000 downS=0.222 vol=1 pvX=0 break=1
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12915]: tmplag1=0.920 tmplag3=0.909 tmplag24=0.925 tmpd1p=0.000 tmpd1n=0.007 tmpd3p=0.004 tmpd3n=0.000 tmpTrdp=0.000 tmpTrdn=0.002
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12916]: hppf=0.000 d1p=0.142 d1n=0.000 up=1 down=0 upS=0.142 downS=0.000 vol=1 pvX=0 break=1
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12916]: tmplag1=0.912 tmplag3=0.932 tmplag24=0.907 tmpd1p=0.000 tmpd1n=0.022 tmpd3p=0.000 tmpd3n=0.042 tmpTrdp=0.000 tmpTrdn=0.032
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12917]: hppf=0.000 d1p=0.000 d1n=0.291 up=0 down=1 upS=0.000 downS=0.291 vol=1 pvX=0 break=1
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12917]: tmplag1=0.890 tmplag3=0.920 tmplag24=0.894 tmpd1p=0.000 tmpd1n=0.030 tmpd3p=0.000 tmpd3n=0.060 tmpTrdp=0.000 tmpTrdn=0.045
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12918]: hppf=0.000 d1p=0.092 d1n=0.000 up=1 down=0 upS=0.092 downS=0.000 vol=1 pvX=0 break=1
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12918]: tmplag1=0.860 tmplag3=0.912 tmplag24=0.880 tmpd1p=0.000 tmpd1n=0.015 tmpd3p=0.000 tmpd3n=0.068 tmpTrdp=0.000 tmpTrdn=0.041
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12919]: hppf=0.000 d1p=0.000 d1n=0.091 up=0 down=1 upS=0.000 downS=0.091 vol=1 pvX=0 break=1
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12919]: tmplag1=0.845 tmplag3=0.890 tmplag24=0.868 tmpd1p=0.000 tmpd1n=0.015 tmpd3p=0.000 tmpd3n=0.060 tmpTrdp=0.000 tmpTrdn=0.037
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12920]: hppf=0.000 d1p=0.000 d1n=0.024 up=0 down=1 upS=0.000 downS=0.024 vol=1 pvX=0 break=0
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12920]: tmplag1=0.830 tmplag3=0.860 tmplag24=0.853 tmpd1p=0.000 tmpd1n=0.011 tmpd3p=0.000 tmpd3n=0.041 tmpTrdp=0.000 tmpTrdn=0.026
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12921]: hppf=0.000 d1p=0.003 d1n=0.000 up=0 down=0 upS=0.003 downS=0.000 vol=1 pvX=0 break=0
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12921]: tmplag1=0.819 tmplag3=0.845 tmplag24=0.841 tmpd1p=0.000 tmpd1n=0.011 tmpd3p=0.000 tmpd3n=0.038 tmpTrdp=0.000 tmpTrdn=0.024
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12922]: hppf=0.000 d1p=0.006 d1n=0.000 up=1 down=0 upS=0.006 downS=0.000 vol=1 pvX=0 break=0
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12922]: tmplag1=0.807 tmplag3=0.830 tmplag24=0.832 tmpd1p=0.000 tmpd1n=0.009 tmpd3p=0.000 tmpd3n=0.031 tmpTrdp=0.000 tmpTrdn=0.020
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12923]: hppf=0.000 d1p=0.004 d1n=0.000 up=0 down=0 upS=0.004 downS=0.000 vol=1 pvX=0 break=0
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12923]: tmplag1=0.799 tmplag3=0.819 tmplag24=0.820 tmpd1p=0.000 tmpd1n=0.009 tmpd3p=0.000 tmpd3n=0.029 tmpTrdp=0.000 tmpTrdn=0.019
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12924]: hppf=0.000 d1p=0.000 d1n=0.014 up=0 down=1 upS=0.000 downS=0.014 vol=0 pvX=0 break=0
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12924]: tmplag1=0.790 tmplag3=0.807 tmplag24=0.811 tmpd1p=0.000 tmpd1n=0.006 tmpd3p=0.000 tmpd3n=0.024 tmpTrdp=0.000 tmpTrdn=0.015
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12925]: hppf=0.000 d1p=0.000 d1n=0.007 up=0 down=1 upS=0.000 downS=0.007 vol=0 pvX=0 break=0
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12925]: tmplag1=0.784 tmplag3=0.799 tmplag24=0.804 tmpd1p=0.000 tmpd1n=0.006 tmpd3p=0.000 tmpd3n=0.021 tmpTrdp=0.000 tmpTrdn=0.014
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12926]: hppf=0.000 d1p=0.012 d1n=0.000 up=1 down=0 upS=0.012 downS=0.000 vol=0 pvX=0 break=0
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12926]: tmplag1=0.778 tmplag3=0.790 tmplag24=0.796 tmpd1p=0.031 tmpd1n=0.000 tmpd3p=0.019 tmpd3n=0.000 tmpTrdp=0.025 tmpTrdn=0.000
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12927]: hppf=0.000 d1p=0.000 d1n=0.000 up=0 down=0 upS=0.000 downS=0.000 vol=0 pvX=0 break=0
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12927]: tmplag1=0.809 tmplag3=0.784 tmplag24=0.806 tmpd1p=0.020 tmpd1n=0.000 tmpd3p=0.045 tmpd3n=0.000 tmpTrdp=0.032 tmpTrdn=0.000
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12928]: hppf=0.000 d1p=0.016 d1n=0.000 up=1 down=0 upS=0.016 downS=0.000 vol=0 pvX=0 break=0
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12928]: tmplag1=0.829 tmplag3=0.778 tmplag24=0.847 tmpd1p=0.029 tmpd1n=0.000 tmpd3p=0.080 tmpd3n=0.000 tmpTrdp=0.054 tmpTrdn=0.000
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12929]: hppf=0.000 d1p=0.313 d1n=0.000 up=1 down=0 upS=0.313 downS=0.000 vol=1 pvX=0 break=0
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12929]: tmplag1=0.857 tmplag3=0.809 tmplag24=0.890 tmpd1p=0.030 tmpd1n=0.000 tmpd3p=0.079 tmpd3n=0.000 tmpTrdp=0.054 tmpTrdn=0.000
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12930]: hppf=0.000 d1p=0.584 d1n=0.000 up=1 down=0 upS=0.584 downS=0.000 vol=1 pvX=0 break=0
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12930]: tmplag1=0.887 tmplag3=0.829 tmplag24=0.931 tmpd1p=0.020 tmpd1n=0.000 tmpd3p=0.079 tmpd3n=0.000 tmpTrdp=0.049 tmpTrdn=0.000
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12931]: hppf=0.000 d1p=0.000 d1n=0.060 up=0 down=1 upS=0.000 downS=0.060 vol=1 pvX=1 break=1
2026.08.06 11:35:50 1: mySolarForecast - DBG F[12931]: tmplag1=0.907 tmplag3=0.857 tmplag24=0.960 tmpd1p=0.024 tmpd1n=0.000 tmpd3p=0.074 tmpd3n=0.000 tmpTrdp=0.049 tmpTrdn=0.000
2026.08.06 11:35:50 1: mySolarForecast DEBUG> First attempt 0 with Seed=170392
2026.08.06 11:35:50 1: mySolarForecast DEBUG> AI FANN Training started with Params:
input datasets=12926,
input features=123,
hidden Neurons=50-25,
Data Parameter Ratio=1.723,
Registry version=v1_heatpump_active_pv,
training algo=FANN_TRAIN_RPROP,
output AF=LINEAR,
hidden AF=SIGMOID,
hidden steepness=1.2,
max. Epoches=15000,
mse_error=0.001,
learning rate=0.00020,
learning momentum=0.5,
BitFail limit: 0.35,
Data sharing=chronological split and AI internal shuffle of training data (Train=10340, Test=2585),
Data shuffle=1 (period=25)
2026.08.06 11:35:51 1: mySolarForecast DEBUG> Epoche 1: Train MSE=0.034602, Val MSE=1.478282, Val MAE=1.204894, Val MedAE=1.277245, Bit_Fail=2586 -> Snap metric improved
2026.08.06 11:35:52 1: mySolarForecast DEBUG> Epoche 3: Train MSE=2.888304, Val MSE=1.245994, Val MAE=1.104301, Val MedAE=1.176651, Bit_Fail=2586 -> Snap metric improved
2026.08.06 11:35:52 1: mySolarForecast DEBUG> Epoche 4: Train MSE=1.253522, Val MSE=0.114162, Val MAE=0.323655, Val MedAE=0.369325, Bit_Fail=1679 -> Snap metric improved
2026.08.06 11:35:53 1: mySolarForecast DEBUG> Epoche 6: Train MSE=0.225848, Val MSE=0.039345, Val MAE=0.109647, Val MedAE=0.040768, Bit_Fail=264 -> Snap metric improved
2026.08.06 11:35:55 1: mySolarForecast DEBUG> Epoche 10: Train MSE=0.030794, Val MSE=0.031656, Val MAE=0.087069, Val MedAE=0.018497, Bit_Fail=229 -> Snap metric improved
2026.08.06 11:35:58 1: mySolarForecast DEBUG> Epoche 15: Train MSE=0.030230, Val MSE=0.031656, Val MAE=0.086709, Val MedAE=0.015277, Bit_Fail=237 -> Snap weighted rmse improved
2026.08.06 11:36:39 1: mySolarForecast DEBUG> Epoche 100: Train MSE=0.006667, Val MSE=0.021004, Val MAE=0.075212, Val MedAE=0.018400, Bit_Fail=116
2026.08.06 11:37:29 1: mySolarForecast DEBUG> Epoche 200: Train MSE=0.010891, Val MSE=0.023287, Val MAE=0.079735, Val MedAE=0.021796, Bit_Fail=138
2026.08.06 11:38:18 1: mySolarForecast DEBUG> Epoche 300: Train MSE=0.067994, Val MSE=0.361263, Val MAE=0.204194, Val MedAE=0.028992, Bit_Fail=312
2026.08.06 11:38:25 1: mySolarForecast DEBUG> Early stopping bei Epoche 315 (no improvement since 300 epochs)
2026.08.06 11:38:25 1: === Snapshot-Statistik ===
2026.08.06 11:38:25 1: Metric-Improvement Snapshots:              5 (letzte Epoche: 10)
2026.08.06 11:38:25 1: Weighted-RMSE-Proxy-Improvement Snapshots: 1 (letzte Epoche: 15)
2026.08.06 11:38:25 1: Bit-Improvement Snapshots:                0 (letzte Epoche: 0)
2026.08.06 11:38:25 1: Bit-Tradeoff Snapshots:                    0 (letzte Epoche: 0)
2026.08.06 11:38:25 1: mySolarForecast DEBUG> Best Snapshot reloaded from Epoche 15: Train MSE=0.030230, Val MSE=0.031656, Val MAE=0.086709, Val MedAE=0.015277, Bit_Fail=237,
2026.08.06 11:38:25 1: mySolarForecast DEBUG> Run Validation Test with 20% of Input data ...
2026.08.06 11:38:25 1: mySolarForecast DEBUG> Validation finished - Best Training MSE=0.030230, Validation MSE=0.032402, Validation Bit_Fail=237
2026.08.06 11:38:25 1: mySolarForecast DEBUG> Retrain check ->
-- In Normalization Space: --
Train MSE=0.030230
Val MSE=0.032402
Val Mean=6.7512927638
VAL/TRAIN MSE Ratio=1.071818 (limit=6.5)
Diff=0.002171 (limit=0.005)
ValStd=8.2291142761 (limit=1.68782319094305)
-- At Original Scale: --
MAE=456.314087057276
RMSE/MAE=1.5861 (limit=2.5)
Slope=0.005376 (limit=0.6 .. 1.3)
Bias=282.41 (limit=+-684.471130585914)
R2=-0.22
P95=2617.8769 (limit=1825.25634822911)
P99=3561.4140
-- Robustness Indicators: --
RMSE relative=230 (limit=60)
BitFail=237 (limit=5)
BitFailRate=0.0916 (limit=0.1)
-- Architecture Check: --
Data Parameter Ratio=1.723
DPR Warning: CRITICAL (ratio=1.723 < 5): Architektur zu gro� f�r den Datensatz, Training wahrscheinlich instabil
Forecast Quality Score=55 (limit=60)
-> Retrain decision=Retrain
-> Retrain reasons: score=55 < thd_retrain=60
  valstd=8.22911428 > limit=1.68782319
  bitfail=237 > 5
  slope=0.0054 < slope_min=0.60
  rmse_rel=230.0% > 60% AND p95=2617.9 > 1825.3
2026.08.06 11:38:25 1: mySolarForecast DEBUG> Retry attempt 1 with Seed=7222411
2026.08.06 11:38:25 1: mySolarForecast DEBUG> AI FANN Training started with Params:
input datasets=12926,
input features=123,
hidden Neurons=50-25,
Data Parameter Ratio=1.723,
Registry version=v1_heatpump_active_pv,
training algo=FANN_TRAIN_RPROP,
output AF=LINEAR,
hidden AF=SIGMOID,
hidden steepness=1.2,
max. Epoches=15000,
mse_error=0.001,
learning rate=0.00020,
learning momentum=0.5,
BitFail limit: 0.35,
Data sharing=chronological split and AI internal shuffle of training data (Train=10340, Test=2585),
Data shuffle=1 (period=25)
2026.08.06 11:38:26 1: mySolarForecast DEBUG> Epoche 1: Train MSE=0.024007, Val MSE=1.153285, Val MAE=1.061495, Val MedAE=1.133846, Bit_Fail=2582 -> Snap metric improved
2026.08.06 11:38:27 1: mySolarForecast DEBUG> Epoche 3: Train MSE=2.238389, Val MSE=0.968832, Val MAE=0.970737, Val MedAE=1.043067, Bit_Fail=2570 -> Snap metric improved
2026.08.06 11:38:27 1: mySolarForecast DEBUG> Epoche 4: Train MSE=0.975032, Val MSE=0.107891, Val MAE=0.314617, Val MedAE=0.357905, Bit_Fail=1509 -> Snap metric improved
2026.08.06 11:38:28 1: mySolarForecast DEBUG> Epoche 5: Train MSE=0.107124, Val MSE=0.045431, Val MAE=0.137545, Val MedAE=0.065084, Bit_Fail=286 -> Snap metric improved
2026.08.06 11:38:28 1: mySolarForecast DEBUG> Epoche 6: Train MSE=0.040390, Val MSE=0.029373, Val MAE=0.090460, Val MedAE=0.034905, Bit_Fail=218 -> Snap metric improved
2026.08.06 11:38:30 1: mySolarForecast DEBUG> Epoche 10: Train MSE=0.034915, Val MSE=0.029373, Val MAE=0.090460, Val MedAE=0.031272, Bit_Fail=221 -> Snap weighted rmse improved
2026.08.06 11:38:31 1: mySolarForecast DEBUG> Epoche 11: Train MSE=0.024964, Val MSE=0.029373, Val MAE=0.083642, Val MedAE=0.014274, Bit_Fail=223 -> Snap weighted rmse improved
2026.08.06 11:39:14 1: mySolarForecast DEBUG> Epoche 100: Train MSE=0.009396, Val MSE=0.022265, Val MAE=0.077611, Val MedAE=0.016945, Bit_Fail=124
2026.08.06 11:40:04 1: mySolarForecast DEBUG> Epoche 200: Train MSE=0.006640, Val MSE=0.039305, Val MAE=0.077719, Val MedAE=0.019158, Bit_Fail=133
2026.08.06 11:40:53 1: mySolarForecast DEBUG> Epoche 300: Train MSE=0.005623, Val MSE=0.022143, Val MAE=0.075321, Val MedAE=0.018305, Bit_Fail=131
2026.08.06 11:40:59 1: mySolarForecast DEBUG> Early stopping bei Epoche 311 (no improvement since 300 epochs)
2026.08.06 11:40:59 1: === Snapshot-Statistik ===
2026.08.06 11:40:59 1: Metric-Improvement Snapshots:              5 (letzte Epoche: 6)
2026.08.06 11:40:59 1: Weighted-RMSE-Proxy-Improvement Snapshots: 2 (letzte Epoche: 11)
2026.08.06 11:40:59 1: Bit-Improvement Snapshots:                0 (letzte Epoche: 0)
2026.08.06 11:40:59 1: Bit-Tradeoff Snapshots:                    0 (letzte Epoche: 0)
2026.08.06 11:40:59 1: mySolarForecast DEBUG> Best Snapshot reloaded from Epoche 11: Train MSE=0.024964, Val MSE=0.029373, Val MAE=0.083642, Val MedAE=0.014274, Bit_Fail=223,
2026.08.06 11:40:59 1: mySolarForecast DEBUG> Run Validation Test with 20% of Input data ...
2026.08.06 11:40:59 1: mySolarForecast DEBUG> Validation finished - Best Training MSE=0.024964, Validation MSE=0.029928, Validation Bit_Fail=223
2026.08.06 11:40:59 1: mySolarForecast DEBUG> Retrain check ->
-- In Normalization Space: --
Train MSE=0.024964
Val MSE=0.029928
Val Mean=0.0221407516
VAL/TRAIN MSE Ratio=1.198857 (limit=6.5)
Diff=0.004964 (limit=0.005)
ValStd=0.0002749463 (limit=0.00553518790932294)
-- At Original Scale: --
MAE=440.173582743656
RMSE/MAE=1.5806 (limit=2.5)
Slope=0.053617 (limit=0.6 .. 1.3)
Bias=258.19 (limit=+-660.260374115483)
R2=-0.13
P95=2545.9232 (limit=1760.69433097462)
P99=3406.9232
-- Robustness Indicators: --
RMSE relative=221 (limit=60)
BitFail=223 (limit=5)
BitFailRate=0.0862 (limit=0.1)
-- Architecture Check: --
Data Parameter Ratio=1.723
DPR Warning: CRITICAL (ratio=1.723 < 5): Architektur zu gro� f�r den Datensatz, Training wahrscheinlich instabil
Forecast Quality Score=56 (limit=60)
-> Retrain decision=Retrain
-> Retrain reasons: score=56 < thd_retrain=60
  bitfail=223 > 5
  slope=0.0536 < slope_min=0.60
  rmse_rel=221.0% > 60% AND p95=2545.9 > 1760.7
2026.08.06 11:40:59 1: mySolarForecast DEBUG> Retry attempt 2 with Seed=6648465
2026.08.06 11:40:59 1: mySolarForecast DEBUG> AI FANN Training started with Params:
input datasets=12926,
input features=123,
hidden Neurons=50-25,
Data Parameter Ratio=1.723,
Registry version=v1_heatpump_active_pv,
training algo=FANN_TRAIN_RPROP,
output AF=LINEAR,
hidden AF=SIGMOID,
hidden steepness=1.2,
max. Epoches=15000,
mse_error=0.001,
learning rate=0.00020,
learning momentum=0.5,
BitFail limit: 0.35,
Data sharing=chronological split and AI internal shuffle of training data (Train=10340, Test=2585),
Data shuffle=1 (period=25)
2026.08.06 11:40:59 1: mySolarForecast DEBUG> Epoche 1: Train MSE=0.039527, Val MSE=1.047893, Val MAE=1.010633, Val MedAE=1.082984, Bit_Fail=2578 -> Snap metric improved
2026.08.06 11:41:00 1: mySolarForecast DEBUG> Epoche 3: Train MSE=2.000370, Val MSE=0.894037, Val MAE=0.931409, Val MedAE=1.003760, Bit_Fail=2559 -> Snap metric improved
2026.08.06 11:41:01 1: mySolarForecast DEBUG> Epoche 4: Train MSE=0.899814, Val MSE=0.108848, Val MAE=0.316012, Val MedAE=0.359578, Bit_Fail=1555 -> Snap metric improved
2026.08.06 11:41:01 1: mySolarForecast DEBUG> Epoche 5: Train MSE=0.108212, Val MSE=0.044228, Val MAE=0.133097, Val MedAE=0.060733, Bit_Fail=283 -> Snap metric improved
2026.08.06 11:41:02 1: mySolarForecast DEBUG> Epoche 6: Train MSE=0.039225, Val MSE=0.035959, Val MAE=0.097581, Val MedAE=0.024997, Bit_Fail=249 -> Snap metric improved
2026.08.06 11:41:20 1: mySolarForecast DEBUG> Epoche 43: Train MSE=0.012250, Val MSE=0.035959, Val MAE=0.083029, Val MedAE=0.024997, Bit_Fail=126 -> Snap weighted rmse improved
2026.08.06 11:41:20 1: mySolarForecast DEBUG> Epoche 44: Train MSE=0.011863, Val MSE=0.035959, Val MAE=0.080775, Val MedAE=0.022089, Bit_Fail=133 -> Snap weighted rmse improved
2026.08.06 11:41:21 1: mySolarForecast DEBUG> Epoche 46: Train MSE=0.011842, Val MSE=0.035959, Val MAE=0.080775, Val MedAE=0.022089, Bit_Fail=131 -> Snap bit tradeoff
2026.08.06 11:41:22 1: mySolarForecast DEBUG> Epoche 48: Train MSE=0.011627, Val MSE=0.035959, Val MAE=0.080775, Val MedAE=0.022089, Bit_Fail=129 -> Snap weighted rmse improved
2026.08.06 11:41:23 1: mySolarForecast DEBUG> Epoche 49: Train MSE=0.011534, Val MSE=0.035959, Val MAE=0.080775, Val MedAE=0.021329, Bit_Fail=130 -> Snap weighted rmse improved
2026.08.06 11:41:23 1: mySolarForecast DEBUG> Epoche 50: Train MSE=0.011471, Val MSE=0.035959, Val MAE=0.080775, Val MedAE=0.021329, Bit_Fail=128 -> Snap bit tradeoff
2026.08.06 11:41:24 1: mySolarForecast DEBUG> Epoche 51: Train MSE=0.011402, Val MSE=0.035959, Val MAE=0.080775, Val MedAE=0.021329, Bit_Fail=128 -> Snap weighted rmse improved
2026.08.06 11:41:24 1: mySolarForecast DEBUG> Epoche 52: Train MSE=0.011348, Val MSE=0.035959, Val MAE=0.080775, Val MedAE=0.020421, Bit_Fail=128 -> Snap weighted rmse improved
2026.08.06 11:41:25 1: mySolarForecast DEBUG> Epoche 53: Train MSE=0.011335, Val MSE=0.035959, Val MAE=0.080775, Val MedAE=0.019433, Bit_Fail=130 -> Snap weighted rmse improved
2026.08.06 11:41:27 1: mySolarForecast DEBUG> Epoche 58: Train MSE=0.175290, Val MSE=0.035959, Val MAE=0.078848, Val MedAE=0.017973, Bit_Fail=148 -> Snap weighted rmse improved
2026.08.06 11:41:28 1: mySolarForecast DEBUG> Epoche 60: Train MSE=0.011723, Val MSE=0.035959, Val MAE=0.078426, Val MedAE=0.017973, Bit_Fail=145 -> Snap bit tradeoff
2026.08.06 11:41:35 1: mySolarForecast DEBUG> Epoche 75: Train MSE=0.017163, Val MSE=0.035959, Val MAE=0.078426, Val MedAE=0.017973, Bit_Fail=185 -> Snap weighted rmse improved
2026.08.06 11:41:36 1: mySolarForecast DEBUG> Epoche 76: Train MSE=0.014757, Val MSE=0.035959, Val MAE=0.078426, Val MedAE=0.017973, Bit_Fail=194 -> Snap weighted rmse improved
2026.08.06 11:41:36 1: mySolarForecast DEBUG> Epoche 77: Train MSE=0.014405, Val MSE=0.035959, Val MAE=0.078426, Val MedAE=0.017973, Bit_Fail=193 -> Snap weighted rmse improved
2026.08.06 11:41:37 1: mySolarForecast DEBUG> Epoche 78: Train MSE=0.013478, Val MSE=0.035959, Val MAE=0.078426, Val MedAE=0.017956, Bit_Fail=186 -> Snap weighted rmse improved
2026.08.06 11:41:45 1: mySolarForecast DEBUG> Epoche 95: Train MSE=0.021771, Val MSE=0.035959, Val MAE=0.078426, Val MedAE=0.014282, Bit_Fail=229 -> Snap weighted rmse improved
2026.08.06 11:41:47 1: mySolarForecast DEBUG> Epoche 100: Train MSE=0.023878, Val MSE=0.878053, Val MAE=0.144647, Val MedAE=0.058245, Bit_Fail=227
2026.08.06 11:42:34 1: mySolarForecast DEBUG> Epoche 200: Train MSE=0.014441, Val MSE=0.020500, Val MAE=0.080434, Val MedAE=0.024133, Bit_Fail=115
2026.08.06 11:43:22 1: mySolarForecast DEBUG> Epoche 300: Train MSE=0.010008, Val MSE=0.021923, Val MAE=0.079434, Val MedAE=0.018977, Bit_Fail=144
2026.08.06 11:44:08 1: mySolarForecast DEBUG> Early stopping bei Epoche 395 (no improvement since 300 epochs)
2026.08.06 11:44:08 1: === Snapshot-Statistik ===
2026.08.06 11:44:08 1: Metric-Improvement Snapshots:              5 (letzte Epoche: 6)
2026.08.06 11:44:08 1: Weighted-RMSE-Proxy-Improvement Snapshots: 13 (letzte Epoche: 95)
2026.08.06 11:44:08 1: Bit-Improvement Snapshots:                0 (letzte Epoche: 0)
2026.08.06 11:44:08 1: Bit-Tradeoff Snapshots:                    3 (letzte Epoche: 60)
2026.08.06 11:44:08 1: mySolarForecast DEBUG> Best Snapshot reloaded from Epoche 95: Train MSE=0.021771, Val MSE=0.035959, Val MAE=0.078426, Val MedAE=0.014282, Bit_Fail=229,
2026.08.06 11:44:08 1: mySolarForecast DEBUG> Run Validation Test with 20% of Input data ...
2026.08.06 11:44:08 1: mySolarForecast DEBUG> Validation finished - Best Training MSE=0.021771, Validation MSE=0.031774, Validation Bit_Fail=229
2026.08.06 11:44:08 1: mySolarForecast DEBUG> Retrain check ->
-- In Normalization Space: --
Train MSE=0.021771
Val MSE=0.031774
Val Mean=1.6755772494
VAL/TRAIN MSE Ratio=1.459449 (limit=6.5)
Diff=0.010003 (limit=0.005)
ValStd=2.5276233836 (limit=0.418894312346623)
-- At Original Scale: --
MAE=480.083549198862
RMSE/MAE=1.5441 (limit=2.5)
Slope=0.155993 (limit=0.6 .. 1.3)
Bias=340.66 (limit=+-720.125323798292)
R2=-0.20
P95=2365.0038 (limit=1920.33419679545)
P99=3472.7414
-- Robustness Indicators: --
RMSE relative=236 (limit=60)
BitFail=229 (limit=5)
BitFailRate=0.0886 (limit=0.1)
-- Architecture Check: --
Data Parameter Ratio=1.723
DPR Warning: CRITICAL (ratio=1.723 < 5): Architektur zu gro� f�r den Datensatz, Training wahrscheinlich instabil
Forecast Quality Score=58 (limit=60)
-> Retrain decision=Retrain
-> Retrain reasons: score=58 < thd_retrain=60
  MSE diff=0.010003 > 0.005
  valstd=2.52762338 > limit=0.41889431
  bitfail=229 > 5
  slope=0.1560 < slope_min=0.60
  rmse_rel=236.0% > 60% AND p95=2365.0 > 1920.3
2026.08.06 11:44:08 1: mySolarForecast DEBUG> Retry attempt 3 with Seed=7146717
2026.08.06 11:44:08 1: mySolarForecast DEBUG> AI FANN Training started with Params:
input datasets=12926,
input features=123,
hidden Neurons=50-25,
Data Parameter Ratio=1.723,
Registry version=v1_heatpump_active_pv,
training algo=FANN_TRAIN_RPROP,
output AF=LINEAR,
hidden AF=SIGMOID,
hidden steepness=1.2,
max. Epoches=15000,
mse_error=0.001,
learning rate=0.00020,
learning momentum=0.5,
BitFail limit: 0.35,
Data sharing=chronological split and AI internal shuffle of training data (Train=10340, Test=2585),
Data shuffle=1 (period=25)
2026.08.06 11:44:08 1: mySolarForecast DEBUG> Epoche 1: Train MSE=0.037469, Val MSE=1.184080, Val MAE=1.075903, Val MedAE=1.148254, Bit_Fail=2584 -> Snap metric improved
2026.08.06 11:44:09 1: mySolarForecast DEBUG> Epoche 3: Train MSE=2.375315, Val MSE=0.985922, Val MAE=0.979494, Val MedAE=1.051844, Bit_Fail=2574 -> Snap metric improved
2026.08.06 11:44:10 1: mySolarForecast DEBUG> Epoche 4: Train MSE=0.992182, Val MSE=0.078343, Val MAE=0.268105, Val MedAE=0.302710, Bit_Fail=27 -> Snap metric improved
2026.08.06 11:44:11 1: mySolarForecast DEBUG> Epoche 6: Train MSE=0.076044, Val MSE=0.078343, Val MAE=0.161782, Val MedAE=0.089337, Bit_Fail=317 -> Snap weighted rmse improved
2026.08.06 11:44:11 1: mySolarForecast DEBUG> Epoche 7: Train MSE=0.047333, Val MSE=0.029466, Val MAE=0.090626, Val MedAE=0.034961, Bit_Fail=219 -> Snap metric improved
2026.08.06 11:44:14 1: mySolarForecast DEBUG> Epoche 13: Train MSE=0.023498, Val MSE=0.029466, Val MAE=0.090626, Val MedAE=0.026093, Bit_Fail=241 -> Snap weighted rmse improved
2026.08.06 11:44:18 1: mySolarForecast DEBUG> Epoche 21: Train MSE=0.013328, Val MSE=0.023616, Val MAE=0.084185, Val MedAE=0.024818, Bit_Fail=141 -> Snap metric improved
2026.08.06 11:44:19 1: mySolarForecast DEBUG> Epoche 22: Train MSE=0.012735, Val MSE=0.022930, Val MAE=0.081214, Val MedAE=0.017939, Bit_Fail=133 -> Snap metric improved
2026.08.06 11:44:29 1: mySolarForecast DEBUG> Epoche 44: Train MSE=0.007766, Val MSE=0.022930, Val MAE=0.074736, Val MedAE=0.017939, Bit_Fail=137 -> Snap weighted rmse improved
2026.08.06 11:44:30 1: mySolarForecast DEBUG> Epoche 45: Train MSE=0.007657, Val MSE=0.021551, Val MAE=0.074688, Val MedAE=0.017886, Bit_Fail=130 -> Snap metric improved
2026.08.06 11:44:31 1: mySolarForecast DEBUG> Epoche 47: Train MSE=0.007450, Val MSE=0.021551, Val MAE=0.074573, Val MedAE=0.017886, Bit_Fail=126 -> Snap bit tradeoff
2026.08.06 11:44:31 1: mySolarForecast DEBUG> Epoche 48: Train MSE=0.007359, Val MSE=0.021551, Val MAE=0.073990, Val MedAE=0.016817, Bit_Fail=128 -> Snap weighted rmse improved
2026.08.06 11:44:32 1: mySolarForecast DEBUG> Epoche 49: Train MSE=0.007401, Val MSE=0.021551, Val MAE=0.073990, Val MedAE=0.016817, Bit_Fail=123 -> Snap bit tradeoff
2026.08.06 11:44:34 1: mySolarForecast DEBUG> Epoche 54: Train MSE=0.007182, Val MSE=0.021551, Val MAE=0.073990, Val MedAE=0.016817, Bit_Fail=119 -> Snap bit tradeoff
2026.08.06 11:44:35 1: mySolarForecast DEBUG> Epoche 56: Train MSE=0.007018, Val MSE=0.021551, Val MAE=0.073990, Val MedAE=0.016817, Bit_Fail=121 -> Snap weighted rmse improved
2026.08.06 11:44:36 1: mySolarForecast DEBUG> Epoche 57: Train MSE=0.006984, Val MSE=0.021551, Val MAE=0.073990, Val MedAE=0.016817, Bit_Fail=121 -> Snap weighted rmse improved
2026.08.06 11:44:57 1: mySolarForecast DEBUG> Epoche 100: Train MSE=0.015522, Val MSE=0.025906, Val MAE=0.083892, Val MedAE=0.019959, Bit_Fail=190
2026.08.06 11:45:23 1: mySolarForecast DEBUG> Epoche 153: Train MSE=0.037300, Val MSE=0.021551, Val MAE=0.073990, Val MedAE=0.016817, Bit_Fail=137 -> Snap weighted rmse improved
2026.08.06 11:45:25 1: mySolarForecast DEBUG> Epoche 158: Train MSE=0.009299, Val MSE=0.021551, Val MAE=0.073990, Val MedAE=0.016657, Bit_Fail=133 -> Snap weighted rmse improved
2026.08.06 11:45:26 1: mySolarForecast DEBUG> Epoche 159: Train MSE=0.009087, Val MSE=0.021551, Val MAE=0.073990, Val MedAE=0.016340, Bit_Fail=133 -> Snap weighted rmse improved
2026.08.06 11:45:39 1: mySolarForecast DEBUG> Epoche 186: Train MSE=0.007576, Val MSE=0.021551, Val MAE=0.073990, Val MedAE=0.016228, Bit_Fail=135 -> Snap weighted rmse improved
2026.08.06 11:45:46 1: mySolarForecast DEBUG> Epoche 200: Train MSE=0.007166, Val MSE=0.022327, Val MAE=0.076107, Val MedAE=0.017756, Bit_Fail=134
2026.08.06 11:46:35 1: mySolarForecast DEBUG> Epoche 300: Train MSE=0.005350, Val MSE=0.023791, Val MAE=0.075707, Val MedAE=0.017558, Bit_Fail=150
2026.08.06 11:47:24 1: mySolarForecast DEBUG> Epoche 400: Train MSE=0.004716, Val MSE=0.025707, Val MAE=0.079516, Val MedAE=0.018444, Bit_Fail=151
2026.08.06 11:48:06 1: mySolarForecast DEBUG> Early stopping bei Epoche 486 (no improvement since 300 epochs)
2026.08.06 11:48:06 1: === Snapshot-Statistik ===
2026.08.06 11:48:06 1: Metric-Improvement Snapshots:              7 (letzte Epoche: 45)
2026.08.06 11:48:06 1: Weighted-RMSE-Proxy-Improvement Snapshots: 10 (letzte Epoche: 186)
2026.08.06 11:48:06 1: Bit-Improvement Snapshots:                0 (letzte Epoche: 0)
2026.08.06 11:48:06 1: Bit-Tradeoff Snapshots:                    3 (letzte Epoche: 54)
2026.08.06 11:48:06 1: mySolarForecast DEBUG> Best Snapshot reloaded from Epoche 186: Train MSE=0.007576, Val MSE=0.021551, Val MAE=0.073990, Val MedAE=0.016228, Bit_Fail=135,
2026.08.06 11:48:06 1: mySolarForecast DEBUG> Run Validation Test with 20% of Input data ...
2026.08.06 11:48:06 1: mySolarForecast DEBUG> Validation finished - Best Training MSE=0.007576, Validation MSE=0.022320, Validation Bit_Fail=135
2026.08.06 11:48:06 1: mySolarForecast DEBUG> Retrain check ->
-- In Normalization Space: --
Train MSE=0.007576
Val MSE=0.022320
Val Mean=0.0319474217
VAL/TRAIN MSE Ratio=2.946271 (limit=6.5)
Diff=0.014744 (limit=0.005)
ValStd=0.0013555883 (limit=0.0079868554240052)
-- At Original Scale: --
MAE=393.313560466346
RMSE/MAE=1.4950 (limit=2.5)
Slope=0.320095 (limit=0.6 .. 1.3)
Bias=328.17 (limit=+-589.970340699519)
R2=0.16
P95=1914.9456 (limit=1573.25424186538)
P99=3295.9456
-- Robustness Indicators: --
RMSE relative=187 (limit=60)
BitFail=135 (limit=5)
BitFailRate=0.0522 (limit=0.1)
-- Architecture Check: --
Data Parameter Ratio=1.723
DPR Warning: CRITICAL (ratio=1.723 < 5): Architektur zu gro� f�r den Datensatz, Training wahrscheinlich instabil
Forecast Quality Score=60 (limit=60)
-> Retrain decision=Retrain
-> Retrain reasons: MSE diff=0.014744 > 0.005
  bitfail=135 > 5
  slope=0.3201 < slope_min=0.60
  rmse_rel=187.0% > 60% AND p95=1914.9 > 1573.3
2026.08.06 11:48:06 1: mySolarForecast DEBUG> Best model after retries comes from Attempt=3 with:
Seed=7146717,
Model Score=60,
Model Slope=0.32,
Model Bias=328.17,
VAL MedAE=85.40,
VAL MAE=393.31,
VAL weighted RMSE=588.02,
VAL weighted RMSE relative=187 %,
VAL weighted RMSE_Rating=very bad,
VAL R2=0.16,
Val MSE=0.022320
2026.08.06 11:48:06 1: mySolarForecast DEBUG> AI FANN training data successfully written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_mySolarForecast
2026.08.06 11:48:06 1: mySolarForecast DEBUG> AI FANN con Training BlockingCall PID '23128' finished. Trainstate: ok

Und die Anweisung für die Bewertung:
ZitatDu bewertest die Trainings- und Bewertungskennzahlen eines neuronalen Netzes (FANN),
das den stündlichen Energieverbrauch für einen Haushalt prognostiziert
(FHEM-Modul 76_SolarForecast.pm, FANN-basiertes neuronales Netz).

Wichtiger Domänen-Kontext für deine Bewertung:
- Stochastische Haushalte (ohne Wärmepumpe/BEV) erreichen typischerweise R²=0.25-0.35 –
  das ist kein Modellfehler, sondern physikalisch bedingt durch unvorhersehbares Nutzerverhalten.
- Ein ModelSlope von 0.35-0.45 und ein ModelBias von 400-500 Wh sind bei diesen Haushalten
  strukturell erwartet (Bias ≈ mean_consumption × (1 - Slope)) und kein Kalibrierfehler.
- Haushalte mit Wärmepumpe oder BEV können R²=0.5-0.7 erreichen.
- Ein DriftIndex unter 0.7 gilt als stabil, über 1.0 als kritisch.
- Ein hohes Rauschlevel (NoiseLevel) begrenzt die maximal erreichbare Modellqualität strukturell.
- BitFailLimit (aiConBitFailLimit) definiert die Fehlertoleranz pro Datenpunkt – ein HÖHERER
  Wert bedeutet MEHR Toleranz (mehr Fehler werden akzeptiert, bevor ein Sample als Bit_Fail
  zählt), ein NIEDRIGERER Wert bedeutet strengere Bewertung.
- Zur Diagnose von früher Konvergenz: Wenn Val MSE > Train MSE (Overfitting-Indikator) UND
  wenige Epochen genutzt wurden, deutet das auf eine zu hohe Lernrate hin (Empfehlung:
  Lernrate reduzieren). Nur wenn Val MSE ≈ Train MSE und wenige Epochen genutzt wurden,
  kann eine höhere Lernrate sinnvoll sein.

Beurteile die Metriken ausschließlich vor diesem Domänen-Hintergrund, nicht nach
generischen ML-Benchmarks.

Bitte bewerte die Kennzahlen zusätzlich im Kontext dieser konkreten Haushaltskonfiguration
(siehe Abschnitt "Modellparameter", insbesondere Profile) und beantworte:

1. Wo liegen aktuell die größten Schwachstellen des Modells?
2. Welche 2-3 Maßnahmen versprechen den größten Hebel zur Verbesserung (Datenqualität/-menge,
  Hyperparameter wie aiConLearnRate/aiConMomentum, Architektur/HiddenLayers, Feature-Auswahl,
  Trainingsdauer/Epochen, Rauschen, Drift/Rekalibrierung)? Bitte jeweils mit Richtungsangabe
  (erhöhen/reduzieren).
3. Gibt es Hinweise auf strukturelle Probleme (z.B. zu wenig Trainingsdaten, instabile Slope,
  Bias-Drift, Over-/Underfitting, verrauschte Zielgröße, zu früh konvergiertes Training)?
4. Bitte konkrete, umsetzbare nächste Schritte nennen, keine allgemeinen Floskeln.

Hier die Kennzahlen:
--------------------------------------------------------------------

Allgemeine Informationen
- trainiert mit Modulversion: 2.9.4
- letztes KI-Training: 06.08.2026 11:48:06 (Laufzeit in Sekunden: 752)
- KI Abfragestatus: ok
- letzte KI-Ergebnis Generierungsdauer: 168.29 ms
- Verbrauchernummer Wärmepumpe: 03

Bewertungsüberblick
- Trainingsbewertung: Retrain (MSE diff=0.014744 > 0.005 | bitfail=135 > 5 | slope=0.3201 < slope_min=0.60 | rmse_rel=187.0% > 60% AND p95=1914.9 > 1573.3)
- Data-Parameter-Ratio Bewertung: CRITICAL (ratio=1.723 < 5): Architektur zu gro� f�r den Datensatz, Training wahrscheinlich instabil
- Lernverhalten: sehr früh konvergiert (1.2 % Epochenausnutzung)
- Rauschen Bewertung: merkliches Rauschen, Interpretation mit Vorsicht (borderline)
- Drift Bewertung: fresh_model
- Empfehlung für Retrain: keine

Modellparameter
- Normierungsgrenzen: PV=15750 Wh, Hausverbrauch: Min=0 Wh / Max=5263 Wh
- Trainingsdaten: 12926 Datensätze (Training=10340, Validation=2586)
- Architektur: Inputs=123, Hidden Layers=50-25, Outputs=1
- Hyperparameter: Learning Rate=0.0002, Momentum=0.5, BitFail-Limit=0.35
- Aktivierungen: Hidden=SIGMOID, Steepness=1.2, Output=LINEAR
- Trainingsalgorithmus: RPROP, Profile=v1_heatpump_active_pv (Haushalt mit Wärmepumpe und/oder Klimaanlage, PV-gesteuertem Lastmanagement, ausgeprägten Tages-/Verbrauchsrhythmen)
- Zufallsgenerator: Mode=1, Period=25
- Modellalter: 0 h

Trainingsmetriken
- bestes Modell bei Epoche: 186 (max. 15000)
- Training MSE: 0.007576
- Validation MSE: 0.022320
- Validation MSE Average: 0.031947
- Validation MSE Standard Deviation: 0.001356
- Validation Bit_Fail: 135
- Data Parameter Ratio: 1.723
- Model Bias: 328 Wh
- Model Slope: 0.32
- Trainingsbewertung: Retrain

Fehlermaße der Prognosen
- MAE: 393.31 Wh
- MedAE: 85.40 Wh
- RMSE: 588.02 Wh
- RMSE relative: 187 %
- RMSE Rating: very bad
- MAPE: 52.10 %
- MdAPE: 25.18 %
- R2: 0.16

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

Drift-Kennzahlen (berechnet ab Modellalter > 6 h)
- Analysefenster: - h
- Drift RMSE Ratio: -
- Semantic Ratio: -
- Slope Reference: 0.32
- Slope Live: -
- Slope Drift: 1
- Bias Reference: 328
- Bias Live: -
- Bias Drift: 0
- Score: -
- Index: -
- Drift Bewertung: fresh_model
- Empfehlung für Retrain: keine
- letzte Rekalibrierung: -
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

DS_Starter

#6809
@TheTrumpeter,

also das Trainingsergebnis ist wirklich unbrauchbar.
Wichtig zunächst aber die Erkenntnis, du hast keine Ausreißer mehr in den Rohdaten:

2026.08.06 11:35:38 1: mySolarForecast DEBUG> AI FANN - Target-Norm: raw_max=5012, p99=3576, p99.5=4923, targmaxval=5263
2026.08.06 11:35:38 1: mySolarForecast DEBUG> AI FANN - True Outliers above p99.5 (4923): 5012

Das passt.

Die LLM Auswertung gibt schon den ersten wichtigsten Hinweis:

Data-Parameter-Ratio Bewertung: CRITICAL (ratio=1.723 < 5): Architektur zu gro� f�r den Datensatz, Training wahrscheinlich instabil

Deswegen lösche aiConHiddenLayers und lasse das Modul die Architektur selbst bestimmen.
Dein Modell muß erstmal anfangen richtig zu lernen, momentan passiert das überhaupt nicht.

Mach das mal und dann schauen wir uns das nächste Log an. 300P liest hoffentlich mit, er träumt schon von Trainings.  ;)
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