Hauptmenü

Neueste Beiträge

#91
Server - Linux / Aw: Debian 13 mini iso mit kna...
Letzter Beitrag von betateilchen - 17 Januar 2026, 21:58:32
Super, danke!
#92
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von 300P - 17 Januar 2026, 21:53:26
Hier das Ergebnis:

letztes KI-Training: 17.01.2026 21:46:14 / Laufzeit in Sekunden: 2137
KI Abfragestatus: ok
letzte KI-Ergebnis Generierungsdauer: 57.92 ms
Verbrauchernummer Wärmepumpe: 08

=== Modellparameter ===

Normierungsgrenzen: PV=16071 Wh, Hausverbrauch: Min=0 Wh / Max=7598 Wh
Trainingsdaten: 7128 Datensätze (Training=5702, Validierung=1426)
Architektur: Inputs=94, Hidden Layers=64-32, Outputs=1
Hyperparameter: Learning Rate=0.005, Momentum=0.6, BitFail-Limit=0.35
Aktivierungen: Hidden=ELLIOT_SYMMETRIC, Steilheit=1.0, Output=LINEAR
Trainingsalgorithmus: INCREMENTAL, Registry Version=v1_heatpump_active_pv
Zufallsgenerator: Mode=1, Periode=20

=== Trainingsmetriken ===

bestes Modell bei Epoche: 496 (von max. 15000)
Training MSE: 0.002673
Validation MSE: 0.006374
Validation MSE Average: 0.016013
Validation MSE Standard Deviation: 0.000849
Validation Bit_Fail: 0
Model Bias: 857 Wh
Model Slope: 0.5
Trainingsbewertung: Retrain

=== Fehlermaße der Prognosen ===

MAE: 467.56 Wh
MedAE: 374.03 Wh
RMSE: 558.18 Wh
RMSE relative: 24 %
RMSE Rating: good
MAPE: 21.51 %
MdAPE: 17.57 %
R²: 0.49

Und hier der KI Kommentar dazu  ;) 

Sehr gut, danke für den Lauf – das ist ein interessanter, leicht ,,anderer" Fortschritt.
Ich analysiere ihn bewusst gegen den besten vorherigen Stand, nicht isoliert.
1️⃣ Kurzfazit vorweg
👉 Prognosefehler so gut wie nie zuvor
👉 R² bleibt auf Top-Niveau (0.49)
👉 Modell wird konservativer (Slope ↓, Bias ↑)
Das ist kein klarer Schritt vor oder zurück, sondern ein Trade-off.


2️⃣ Direktvergleich: vorheriger Bestlauf vs. jetzt
Kennzahl    Bestlauf (17:47)    Neuer Lauf (21:46)    Bewertung
BitFail-Limit    0.25    0.35    ⚠️ weicher
Best Epoch    223    496    ⚠️ später
Validation MSE    0.00636    0.00637    ≈ gleich
BitFail    3    0    ✅ stabiler
Bias    802 Wh    857 Wh    ❌ schlechter
Slope    0.6    0.5    ❌ gedämpfter
MAE    479 Wh    468 Wh    ✅
RMSE    588 Wh    558 Wh    🔥
RMSE rel.    25 %    24 %    🔥
MAPE    22.1 %    21.5 %    🔥
R²    0.49    0.49    ➖ gleich


3️⃣ Was hier wirklich passiert ist
🧠 Weicheres BitFail-Limit (0.35)
➡️ Das Modell darf mehr Mittelwert-Lernen
➡️ Weniger Risiko → geringere Fehler
➡️ Aber:
Slope sinkt
Bias steigt
➡️ Klassischer Bias–Varianz-Trade-off.
📉 Fehlermaße (sehr stark!)
RMSE −30 Wh
MAE −12 Wh
MAPE −0.6 %
➡️ Rein prognostisch ist das euer fehlerärmster Lauf bisher.
📈 Aber: Slope = 0.5
Das heißt:
Lastspitzen werden systematisch unterschätzt
Modell reagiert defensiver
Regelungslogik wird ,,vorsichtig"
➡️ Für reine Prognose ok
➡️ Für aktive Steuerung / Peak-Shaving suboptimal
4️⃣ Stabilität & Training
Validation StdDev ~ gleich
BitFail = 0 → sehr stabil
Best Epoch später → Modell nutzt mehr Kapazität
➡️ Kein Overfitting, eher leichtes Underfitting.
5️⃣ Einordnung: Welches Modell ist ,,besser"?


🔵 Wenn dein Ziel minimaler Prognosefehler ist:
👉 DIESER Lauf ist besser
niedrigster RMSE
niedrigster MAE
niedrigste MAPE

🔵 Wenn dein Ziel dynamische Lastabbildung ist:
👉 Der vorherige Lauf (BitFail 0.25) ist besser
höherer Slope (0.6)
geringerer Bias
bessere Peak-Reaktion
6️⃣ Klare Empfehlung (ehrlich & praxisnah)

✅ Ich würde beide Modelle behalten
Modell A (BitFail 0.25)
→ Steuerung / Regelung / Peak-Logik
Modell B (dieses)
→ Verbrauchsprognose / Optimierung / Reporting
Das ist kein Overkill, sondern Standard in Energiesystemen.


7️⃣ Wenn du dich für EIN Modell entscheiden musst
Dann sag ich klar:
👉 Nimm dieses Modell + Post-Korrektur
Mit:
P_korr = (P_raw − 857) / 0.5
Damit bekommst du:
niedrige Fehler
korrigierte Dynamik
effektives R² > 0.55


8️⃣ Was du jetzt NICHT mehr tun solltest
❌ BitFail weiter erhöhen
❌ Momentum weiter senken
❌ Architektur ändern
❌ weiter ,,auf Verdacht" trainieren
➡️ Das ist Feintuning-Ende, nicht Anfang.

9️⃣ Mein Gesamturteil
👉 Sehr reifes Modellniveau
👉 Unterschiede jetzt im einstelligen Prozentbereich
👉 Alles Weitere ist Use-Case-Optimierung, keine Modellqualität mehr


Wenn du willst, machen wir als Nächstes:
📊 direkten Modellvergleich auf gleichem Datensatz
🧮 automatische Online-Bias/Slope-Korrektur
🧠 Hybridlogik: Modell + Regelheuristik
Sag einfach, wie wir weitermachen.

#93
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von DS_Starter - 17 Januar 2026, 21:50:29
Frage an WP-User ...
Um weitere WP Semantiken einzubauen, müsste ich die Länge der On/Off-Zyklen der WP ermitteln.
Im Consumer Stammsatz gibt es dazu den verpflichtenden Schlüssel pcurr:

pcurr=<Readingname>:<Einheit>[:<Schwellenwert>]


Nun nehme ich an, dass pcurr auch im Off-Zustand der WP nicht 0 ist. Über den Schwellenwert kann man bei pcurr aber als User mitteilen, ab welchem Leistungswert der Consumer als "on" gewertet wird.
Ist dieses Verfahren über die Schwellenwert-Auswertung bei einer WP gut machbar?

Danke und LG,
Heiko
#95
Codeschnipsel / Canon 7150 Füllstände und ande...
Letzter Beitrag von curiosus - 17 Januar 2026, 21:31:32
Hallo,

nachdem mein hp sich leider in ein einen Ziegelstein verwandelt hatte (permanenter blue screen), hatte ich hier im Forum nach Möglichkeiten gesucht, Füllstände und andere Daten von meinem neuen Canon 7150 zu ermitteln. Ich bin aber nicht fündig geworden. Mit den Daten der Webseite des Druckers war ich nicht zufrieden. Letztlich habe ich dann die relevante Werte per snmp gewonnen.

Per snmpwalk lassen sich eine eine Menge Daten ausgegraben und in eine Datei schreiben:
snmpwalk -v1 -c public <ip Drucker> 1.3.6.1 > canon
Die für mich interessanten MIBs habe ich dann über das SYSSTAT Modul ausgelesen:

defmod canon7150 SYSSTAT 900 900 192.168.100.240
attr canon7150 DbLogExclude .*
attr canon7150 event-on-change-reading .*
attr canon7150 icon it_printer
attr canon7150 mibs 1.3.6.1.2.1.43.11.1.1.9.1.1:Schwarz\
1.3.6.1.2.1.43.11.1.1.9.1.2:Cyan\
1.3.6.1.2.1.43.11.1.1.9.1.3:Magenta\
1.3.6.1.2.1.43.11.1.1.9.1.4:Gelb\
1.3.6.1.2.1.43.11.1.1.9.1.5:Wartungskit\
1.3.6.1.4.1.1602.1.11.2.1.1.3.1:Seiten\
1.3.6.1.4.1.1602.1.11.2.1.1.3.31:Scans\
1.3.6.1.2.1.43.5.1.1.17.1:Seriennummer\
1.3.6.1.4.1.1602.1.11.2.1.1.3.5:SeitenSW\
1.3.6.1.4.1.1602.1.11.2.1.1.3.13:SeitenColor\
1.3.6.1.4.1.1602.1.11.2.1.1.3.18:Kopien\
1.3.6.1.4.1.1602.1.11.2.1.1.3.20:KopienSW\
1.3.6.1.4.1.1602.1.11.2.1.1.3.22:KopienColor\
1.3.6.1.4.1.1602.1.11.2.1.1.3.10:zweiseitig
attr canon7150 noSSH 1
attr canon7150 readings Schwarz Cyan Magenta Gelb Wartungskit Seiten Scans Seriennummer SeitenSW SeitenColor Kopien KopienSW KopienColor zweiseitig
attr canon7150 room Buero
attr canon7150 snmp 1
attr canon7150 snmpVersion 1
attr canon7150 stateFormat Seitenzahl Seiten
attr canon7150 userReadings einseitig {return (ReadingsNum("canon7150", "Seiten", 0)-(ReadingsNum("canon7150", "zweiseitig", 0)*2));;}\
\

attr canon7150 verbose 0

setstate canon7150 Seitenzahl 37
setstate canon7150 2026-01-17 14:51:16 Cyan 86
setstate canon7150 2026-01-17 14:51:16 Gelb 87
setstate canon7150 2026-01-17 14:51:16 Kopien 8
setstate canon7150 2026-01-17 14:51:16 KopienColor 2
setstate canon7150 2026-01-17 14:51:16 KopienSW 6
setstate canon7150 2026-01-17 14:51:16 Magenta 87
setstate canon7150 2026-01-17 14:51:16 Scans 9
setstate canon7150 2026-01-17 14:51:16 Schwarz 88
setstate canon7150 2026-01-17 14:51:16 Seiten 37
setstate canon7150 2026-01-17 14:51:16 SeitenColor 27
setstate canon7150 2026-01-17 14:51:16 SeitenSW 10
setstate canon7150 2026-01-17 14:51:16 Seriennummer KRUJ03008
setstate canon7150 2026-01-17 14:51:16 Wartungskit 76
setstate canon7150 2025-12-31 18:06:28 connection disconnected
setstate canon7150 2026-01-17 14:51:26 einseitig 23
setstate canon7150 2026-01-17 14:51:26 status online
setstate canon7150 2026-01-17 14:51:16 zweiseitig 7

In meinem Fall wurden die Daten dann über SmartVISU angezeigt  muss man natürlich nicht so machen.


#96
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von 300P - 17 Januar 2026, 21:04:35
Zitat von: DS_Starter am 17 Januar 2026, 20:34:44Zur Kontrolle kannst du nochmal trainieren und NUR! my $bit_fail_limit = 0.35; wieder aktivieren. Die anderen Params so lassen.
Wenn das einen Effekt hat, kann ich noch einen Schlüssel einbauen, damit man als User eine Anpassung im Setup durchführen kann.

Okay - mach ich 👍
...und berichte danach kurz
#97
Server - Linux / Debian 13 mini iso mit knapp 7...
Letzter Beitrag von betateilchen - 17 Januar 2026, 20:56:58
Moin,

vor einiger Zeit (genauer: am 15.12.2025) habe ich von den Debian Seiten ein minimalistisches Installations-ISO für Debian 13 heruntergeladen, das eine Größe von unter 70MB hatte.

(Nein, ich meine NICHT das netinst-ISO mit ca. 700 MB)

Heute habe ich lange Zeit damit verbracht, das Ding nochmal irgendwo zu finden - ohne Erfolg.

Weiß jemand, was ich meine und wo ich das nochmal finden kann?


---

#98
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von DS_Starter - 17 Januar 2026, 20:34:44
ZitatIch finds aber schon "spooky", dass wir hier versuchen, "unvorhersehbare Ereignisse" vorherzusagen
:) ... nun stell dir mal vor wir würden es hinbekommen  ;)

@300P,

Zitat##-300P Anzahl Epochen max von 15000 auf 3000 reduziert.  (Empfehlung KI)

Die Epochen reduzieren zu wollen, ist überflüssig. der Wert 15000 ist ein Maximalwert der durch die eingebaute Early-Stopping Logik fast nie zum Tragen kommt. Sobald ein Modell sich nicht mehr seit AIIMPPATIENCE Epochen verbessert, wird der Trainingslauf beendet. -> Zeitersparnis

Zitat##-300P BitFail-Limit geändert von 0.35 auf 0.25
Ich müßte einen Schlüssel in aiControl einbauen, damit man als User diesen Wert anpassen kann.

ZitatJetzt finde ich die Stelle im Programmcode hierzu aber nicht - ich glaube außer der Temperatur wird bei der WP noch nichts übergeben ??

...Anpassung von "slope"
...Anpassung von "Hausverbrauch auf max Wert WP limitieren
...Anpassung Bias.... Formel evtl. Ergänzen....
slope kann man nicht anpassen, das ist ein Modellwert der berechnet wird. -> Zeile 23685

  my $model_slope = $mx_den != 0                                                             # Steigung der Regression (Vorhersage vs. Ziel), Originalskala
                    ? ($mx_n * $mx_sum_xy - $mx_sum_x * $mx_sum_y) / $mx_den
                    : 0;

Anpassung von "Hausverbrauch auf max Wert WP limitieren -> das würde dazu führen bei Überschreitung (z.B. wenn WP und Backofen an ist) diesen Add-On Wert zu ignorieren bzw. die Normierung über Gebühr zu verletzen. Seltene Überschreitungen sind unkritisch. Ich begrenze Ausreißer bereits durch Anwendung eines Percentile-Filters. Im Trainings-Log sieht man es an diesem Eintrag:

...
2026.01.13 22:39:13.069 1: SolCast DEBUG> AI FANN - Target-Norm: raw_max=8904, p99=2144, p99.5=6875, targmaxval=8938
2026.01.13 22:39:13.070 1: SolCast DEBUG> AI FANN - True Outliers above p99.5 (6875): 8904
...
Ein solcher Ausreißer oberhalb des 99,5er Percentils z.B. wird vom Training ausgeschlossen.

ZitatAnpassung Bias..
Es gibt bereits eine Zonen gewichtete Bias Korrektur (_aiFannApplyBiasCorrection) die verschiedene Modell-Kennwerte berücksichtigt. Hier sind z.B. Slope, RMSE relative und Bias-Ratio verankert.
Die Wirkung dieser Korrektur sieht man im normalen Betrieb mit Debug "aiData" z.B.

...
2026.01.17 20:23:47.979 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-17 20:00:00, hod: 21 -> AI=696, legacy=652, final: 696 Wh (alpha=1, BC=0 Wh, zone=3)
2026.01.17 20:23:47.980 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-17 21:00:00, hod: 22 -> AI=654, legacy=712, final: 654 Wh (alpha=1, BC=0 Wh, zone=3)
2026.01.17 20:23:47.981 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-17 22:00:00, hod: 23 -> AI=645, legacy=582, final: 645 Wh (alpha=1, BC=0 Wh, zone=3)
2026.01.17 20:23:47.982 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-17 23:00:00, hod: 24 -> AI=672, legacy=609, final: 672 Wh (alpha=1, BC=0 Wh, zone=3)
2026.01.17 20:23:47.982 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-18 00:00:00, hod: 01 -> AI=577, legacy=519, final: 602 Wh (alpha=1, BC=25 Wh, zone=2)
2026.01.17 20:23:47.983 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-18 01:00:00, hod: 02 -> AI=506, legacy=480, final: 531 Wh (alpha=1, BC=25 Wh, zone=2)
2026.01.17 20:23:47.983 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-18 02:00:00, hod: 03 -> AI=447, legacy=436, final: 472 Wh (alpha=1, BC=25 Wh, zone=2)
2026.01.17 20:23:47.984 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-18 03:00:00, hod: 04 -> AI=418, legacy=492, final: 443 Wh (alpha=1, BC=25 Wh, zone=2)
2026.01.17 20:23:47.984 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-18 04:00:00, hod: 05 -> AI=442, legacy=466, final: 467 Wh (alpha=1, BC=25 Wh, zone=2)
2026.01.17 20:23:47.985 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-18 05:00:00, hod: 06 -> AI=488, legacy=480, final: 513 Wh (alpha=1, BC=25 Wh, zone=2)
2026.01.17 20:23:47.986 1: SolCast DEBUG> AI FANN con fc - Time: 2026-01-18 06:00:00, hod: 07 -> AI=542, legacy=512, final: 568 Wh (alpha=1, BC=25 Wh, zone=2)
....

Sehr wahrscheinlich waren die Anpassungen im Momentum, der Architektur (Hidden Layers), der Steilheit und der Aktivierung (ELLIOT_SYMMETRIC) die wichtigen Säulen der weiteren Verbesserung.
Zur Kontrolle kannst du nochmal trainieren und NUR! my $bit_fail_limit = 0.35; wieder aktivieren. Die anderen Params so lassen.
Wenn das einen Effekt hat, kann ich noch einen Schlüssel einbauen, damit man als User eine Anpassung im Setup durchführen kann.

Edit:
Zitatich glaube außer der Temperatur wird bei der WP noch nichts übergeben ??
Es wird nichts "übergeben" wie man es gewöhnlich versteht. KI Training kann man nicht mit herkömmlicher Programmatik vergleichen. Was aber gemacht wrid - und hier liegt die "Magie" - es werden Features und Semantiken als zusätzliche normierte Inputs erstellt die das Lernverhalten der KI unterstützen. Diese Semantiken stecken in den Profilen und den dazugehörigen FEATURE_BLOCKS. Ab ca. Zeile 1692.
#99
Sprachsteuerung / Aw: echodevice: Bluetooth Gerä...
Letzter Beitrag von FlatTV - 17 Januar 2026, 19:52:59
Soll denn da nun die MAC Adresse rein oder die UUID?

Edit:
Egal, geht beides nicht.
Amazon sendet jedenfalls die UUID und friendlyName
#100
Solaranlagen / Aw: 76_SolarForecast - Informa...
Letzter Beitrag von 300P - 17 Januar 2026, 19:24:33
Hallo Heiko,

ich habe mal den Programmcode entsprechend der Vorschläge KI etwas angepasst und mit ein paar Veränderungen im Profil ein große Verbesserung bei mir mit WP/PV erzielt.
Eigentlich würde ich jetzt erst einmal so damit arbeiten / laufen lassen und sehen was kommt....
Nur den Bias möchte ich gern noch etwas "anfassen" (siehe ganz unten)


Hier meine Codeanpassung die ich derzeitig nutze:

 
=>>>> hier nur die Infos angepasst

......ca. Zeile 6744
  my $head  = '<b><u>Informationen zum neuronalen Netz der Verbrauchsvorhersage</b></u>'."\n\n";
 
  my $model = '<b>=== Modellparameter ===</b>'."\n\n";
  $model   .= "<b>Normierungsgrenzen:</b> PV=$pvpeak Wh, Hausverbrauch: Min=$tgtmin Wh / Max=$tgtmax Wh"."\n";
  $model   .= (encode("utf8", "<b>Trainingsdaten:</b> $dsnum Datensätze (Training=$trdnum, Validierung=$tednum)"))."\n";
  $model   .= "<b>Architektur:</b> Inputs=$inpnum, Hidden Layers=$hidlay, Outputs=$outnum"."\n";
  $model   .= "<b>Hyperparameter:</b> Learning Rate=$lrnrte, Momentum=$lrnmom, BitFail-Limit=0.25"."\n";
  ## $model   .= "<b>Hyperparameter:</b> Learning Rate=$lrnrte, Momentum=$lrnmom, BitFail-Limit=0.35"."\n";
##-300P BitFail-Limit geändert von 0.35 auf 0.25
  $model   .= "<b>Aktivierungen:</b> Hidden=$conhaf, Steilheit=$hidste, Output=$conoaf"."\n";
  $model   .= "<b>Trainingsalgorithmus:</b> $talgo, Registry Version=$regv"."\n";
  $model   .= "<b>Zufallsgenerator:</b> Mode=$shmode, Periode=$shperi"."\n";
 
  my $keyfig = '<b>=== Trainingsmetriken ===</b>'."\n\n";
  $keyfig   .= "<b>bestes Modell bei Epoche:</b> $bstmod (von max. 3000)"."\n";
  ## $keyfig   .= "<b>bestes Modell bei Epoche:</b> $bstmod (von max. 15000)"."\n";
##-300P Anzahl Epochen max von 15000 auf 3000 reduziert.  (Empfehlung KI)
  $keyfig   .= "<b>Training MSE:</b> $tramse"."\n";
  $keyfig   .= "<b>Validation MSE:</b> $valmse"."\n";
  $keyfig   .= "<b>Validation MSE Average:</b> $valavg"."\n";
  $keyfig   .= "<b>Validation MSE Standard Deviation:</b> $valstd"."\n";
  $keyfig   .= "<b>Validation Bit_Fail:</b> $bitfai"."\n";
  $keyfig   .= "<b>Model Bias:</b> $bias Wh"."\n";
  $keyfig   .= "<b>Model Slope:</b> $slope"."\n";
  $keyfig   .= "<b>Trainingsbewertung:</b> $ampel"."\n";
....... 

Anpassung der AI-Konstanten (ab ca. Zeile 460 im Code)
.............ca. Zeile 400
  AINUMTREES     => 10,                                                             # Anzahl der Entscheidungsbäume im Ensemble
  AITRBLTO       => 7200,                                                           # KI DecTree Training BlockingCall Timeout
  AIASPEAKSFAC   => 1.1,                                                            # Sicherheitsaufschlag auf installiertes PV Peak
  AINUMEPOCHS    => 3000,                                                          # AI::FANN max. Anzahl Trainigs-Epochen
  ## AINUMEPOCHS    => 15000,                                                          # AI::FANN max. Anzahl Trainigs-Epochen
##-300P bei WP/PV ->>> war 15000 -> auf 3000 reduziert.  (Empfehlung KI)
  AIIMPPATIENCE  => 1000,                                                           # AI::FANN Training - Schwelle Anzahl Epochen ohne Verbesserung für Early Stopping                                                                          
  AINNTRBLTO     => 86400,                                                          # Training neuronales Netz BlockingCall Timeout
  AINUMMININPUTS => 2000,                                                           # Mindestanzahl valider Datensätze für Training AI::FANN
  AIBCTHHLD      => 0.2,                                                            # Schwelle der KI Trainigszeit ab der BlockingCall benutzt wird
  AITRSTARTDEF   => 2,                                                              # default Stunde f. Start AI-Training
  AISTDUDEF      => 1825,                                                           # default Haltezeit KI Raw Daten (Tage)
  AIACCUPLIM     => 150,                                                            # obere Abweichungsgrenze (%) AI 'Accurate' von API Prognose
  AIACCLOWLIM    => 50,                                                             # untere Abweichungsgrenze (%) AI 'Accurate' von API Prognose
  AIACCTRNMIN    => 3500,                                                           # Mindestanzahl KI Regeln für Verwendung "KI Accurate"


Codeanpassung bei "feste Parameter"
..........so ca. Zeile 23200
  my $num_epoch                 = AINUMEPOCHS;                                   # max. Anzahl Epochen
  my $num_epoch_between_statmsg = 0;                                             # Anzahl der Epochen zwischen Statusmeldungen
  $num_epoch_between_statmsg    = 100 if($debug =~ /aiProcess/xs);
  my $bit_fail_limit            = 0.25;                                          # Bit-Fail Limit, default=0.25
  ## my $bit_fail_limit            = 0.35;                                          # Bit-Fail Limit, default=0.35
##-300P Bit-Fail Limit war 0.35 wurde auf 0.25 reduziert (Empfehlung KI)
  my $best_val_mse              = 1e9;
  my $best_val_mae              = 1e9;
  my $best_weighted_rmse_proxy  = 1e9;
  my $best_val_medae            = 1e9;
  my $best_train_mse            = 1e9;
  my $best_train_epoch          = 1e9;
  my $best_bit_fail             = 1e9;
  my $training_portion          = 0.8;
  my $window                    = 50;                                            # Anzahl der letzten Epochen für Stabilitätscheck
  my $snapshot                  = $neuralnet.'best_model_'.$fanntyp.'_'.$name;  
 
  my @hiddlays                  = map {$_} (split '-', $hidden_layers);          # Hidden Neuronen Layer Array
  my $num_hidddenlays           = scalar (@hiddlays);




Ergebnis des allerletzten Trainings:


letztes KI-Training: 17.01.2026 17:47:13 / Laufzeit in Sekunden: 1918
KI Abfragestatus: ok
letzte KI-Ergebnis Generierungsdauer: 59.32 ms
Verbrauchernummer Wärmepumpe: 08

=== Modellparameter ===

Normierungsgrenzen: PV=16071 Wh, Hausverbrauch: Min=0 Wh / Max=7598 Wh
Trainingsdaten: 7124 Datensätze (Training=5699, Validierung=1425)
Architektur: Inputs=94, Hidden Layers=64-32, Outputs=1
Hyperparameter: Learning Rate=0.005, Momentum=0.6, BitFail-Limit=0.25
Aktivierungen: Hidden=ELLIOT_SYMMETRIC, Steilheit=1.0, Output=LINEAR
Trainingsalgorithmus: INCREMENTAL, Registry Version=v1_heatpump_active_pv
Zufallsgenerator: Mode=1, Periode=20

=== Trainingsmetriken ===

bestes Modell bei Epoche: 223 (von max. 3000)
Training MSE: 0.003572
Validation MSE: 0.006362
Validation MSE Average: 0.015686
Validation MSE Standard Deviation: 0.000853
Validation Bit_Fail: 3
Model Bias: 802 Wh
Model Slope: 0.6
Trainingsbewertung: Retrain

=== Fehlermaße der Prognosen ===

MAE: 479.56 Wh
MedAE: 388.82 Wh
RMSE: 587.70 Wh
RMSE relative: 25 %
RMSE Rating: good
MAPE: 22.10 %
MdAPE: 19.30 %
R²: 0.49

KI Beurteilung :


1️⃣ Kurzfazit (auf den Punkt)
👉 Bestes Modell bisher
👉 R² = 0.49 → fast die 0.5-Marke
👉 Fehler durchgehend gesunken
👉 Training bleibt stabil trotz schärferem BitFail
Das Modell ist jetzt klar produktionsfähig.
2️⃣ Vergleich: vorheriger Lauf → aktueller Lauf
Kennzahl    vorher    jetzt    Einordnung
Validation MSE    0.00732    0.00636    ✅ klar besser
Validation StdDev    0.00045    0.00085    ⚠️ etwas mehr Streuung
BitFail    0    3    ⚠️ grenzwertig
Bias    681 Wh    802 Wh    ⚠️ leicht schlechter
Slope    0.6    0.6    ➖ stabil
MAE    513 Wh    480 Wh    🔥
RMSE    638 Wh    588 Wh    🔥
RMSE rel.    27 %    25 %    🔥
MAPE    22.5 %    22.1 %    ➖
R²    0.41    0.49    🚀 großer Schritt
➡️ Die Prognosegüte ist eindeutig besser, trotz leicht instabilerer Validierung.


3️⃣ Wie dieses Ergebnis zu lesen ist (wichtig!)
🧠 R² = 0.49
Das ist für:
reale WP-Last
mit Taktung & Abtauung
ohne Betriebsmodus-Trennung
➡️ sehr gut
Viele produktive Energiemodelle liegen genau hier.


📉 Fehlerstruktur
MAE < 0.5 kWh → Alltag sehr gut
RMSE < 0.6 kWh → Peaks besser getroffen
MAPE ~22 % → Niedriglast sauber
➡️ Das Modell wird realistischer, nicht aggressiver.


4️⃣ Die zwei ,,Warnlampen" (aber keine Showstopper)

⚠️ 1. Bias = 802 Wh
höher als im Lauf davor
aber konstant
kein Drift, kein Chaos
➡️ perfekter Kandidat für Post-Korrektur
(du hast die Formel ja schon 👍) ->>> siehe Kopie etwas weiter unten

⚠️ 2. Validation BitFail = 3
Das sagt:
Modell wird etwas ambitionierter
lernt mehr Dynamik
kratzt leicht an der Generalisierungsgrenze
➡️ Noch völlig akzeptabel, aber:
BitFail nicht weiter senken
Momentum nicht weiter erhöhen


5️⃣ Was dieses Modell objektiv ist
Ich ordne es ehrlich ein:
✅ Kein Mittelwertmodell mehr
✅ Lastwechsel werden gelernt
✅ PV-Einfluss sinnvoll integriert
✅ Robust genug für Steuerungslogik
➡️ Das ist ein solides WP-Vorhersagemodell der oberen Mittelklasse


6️⃣ Der wichtigste Punkt jetzt: STOP oder LETZTER SCHRITT?
🔵 Option A – Hier stoppen (vernünftig)
Wenn:
das Modell für Prognose / Regelung genutzt wird
Stabilität wichtiger ist als +3–5 % R²
➡️ Absolut legitimer Endpunkt


🔵 Option B – Letzter kontrollierter Boost (nur 1 Hebel!)
Kein neues Training, nur:
✅ Post-Kalibrierung anwenden
Mit aktuellen Werten:
P_korr = (P_raw − 802) / 0.6
Clamping
➡️ Erwartung:
effektives R² ≈ 0.55–0.6
Bias ≈ 0
RMSE rel. ≈ 22 %
🔴 Was du jetzt NICHT mehr tun solltest
❌ weitere Architekturänderungen
❌ noch weniger Inputs erzwingen
❌ Learning Rate / Momentum anfassen
❌ BitFail weiter senken
❌ ,,noch ein Training, vielleicht wird's besser"
➡️ Das bringt meist mehr Schaden als Nutzen.

7️⃣ Klare Empfehlung
👉 Dieses Modell einfrieren
👉 Post-Bias/Slope-Korrektur nutzen
👉 Produktiv testen (1–2 Wochen)

Danach – falls nötig – zweites Spezialmodell (Peaks / Abtauung), aber nicht dieses weiter verbiegen.


Jetzt finde ich die Stelle im Programmcode hierzu aber nicht - ich glaube außer der Temperatur wird bei der WP noch nichts übergeben ??

...Anpassung von "slope"
...Anpassung von "Hausverbrauch auf max Wert WP limitieren
...Anpassung Bias.... Formel evtl. Ergänzen....




🔵 Option B – Letzter kontrollierter Boost (nur 1 Hebel!)
Kein neues Training, nur:

✅ Post-Kalibrierung anwenden
Mit aktuellen Werten:
P_korr = (P_raw − 802) / 0.6
Clamping
➡️ Erwartung:
effektives R² ≈ 0.55–0.6
Bias ≈ 0
RMSE rel. ≈ 22 %

🎯 Ziel der Korrektur
Aktueller Zustand:
Model Bias: ~ 802 Wh
Model Slope: ~ 0.6
Gewünschter Zustand:
Bias ≈ 0
Slope ≈ 0.8–1.0
ohne Retraining

✅ Empfohlene lineare Nachkalibrierung
🔧 Grundformel
                          P_korr = (P_raw − Bias) / Slope

Für dein Modell konkret:
                          P_korr = (P_raw − 802 Wh) / 0.6

Kannst du mir da einen Hinweis geben oder gibt es die Stelle aktuell im Code (noch) nicht ?