DEV-INFO // MID_DAY_CORRECTION (MDC) // STATS LEGACY-SENSORS // TRANSLATION // Mexico-Dessert FIX
(Leider habe ich noch keine finale Antwort von Simon und den Admins bzgl. DEV-Thread und Split, daher muss ich diesen Thread aus aktuellem Anlass kurz “missbrauchen” für eine Info an die DEVs. Das Folgende ist nicht für “normale” User gedacht, sondern ein technischer Hinweis für Entwickler.)
SFML V16.8.0 #BUG 02
Ein Entwickler aus den Spanien hat eine wichtige Beobachtung gemacht. Im Kern geht es noch eimal um die MDC:
**Case:**valide
Die automatische Midday Correction (MDC) check läuft um 12:30. Dabei wird Stunde 12 als “vergangen” klassifiziert (hour <= current_hour ), aber actual_kwh ist um 12:30 noch NULL (wird erst um 13:05 geschrieben) → macht auch vorher keinen Sinn da es ein retrospektiver Wert ist
Impact: Irreführende Spikes zwischen 12 und 13 Uhr (local) und fehlende neue Prediction in Daily_Forecast und damit verbunden Automationen // Sensor-Attribute
Solution: recht einfach es muss nur das " ist gleich" entfernt werden.
# VORHER:
if hour <= current_hour:
# NACHHER:
if hour < current_hour:
FIX: Stunde 12 wird um 12:30 als “Zukunft” behandelt und bekommt den frischen Forecast (inkl. physics_kwh, ai_kwh, lstm_kwh, ridge_kwh, confidence, panel_groups, weather). Die prediction_kwh_uncapped wird dabei ebenfalls auf den neuen Forecast gesetzt — konsistent mit allen anderen Zukunftsstunden und korrekte Gesamtsumme.
Für den EOD hat es keine Auswirkungen: Method Performance Learning nutzt prediction_kwh_uncapped für adaptive_corrected=TRUE Stunden. Der neue MDC-Forecast ist die ehrlichste Prediction für Stunde 12 (basiert auf frischen Wetterdaten um 12:30). Besser als der stale Morning-Forecast.
Weitere Anpassung im Service (DEV-Service nicht zu benutzen von Usern) Step 3 entfernen → notwendig
FIX: #BUG 02 V16.8.2 -done
SFML V16.8.0 #BUG 03
Meldung eines Entwicklers aus Mexico: In Wüstenregionen mit extremen Temperaturunterschieden (Tag / Nacht) campt der Physics Calibrator zu früh → Korrekturen werden nicht schnell genug gelernt.
Bsp: Großer Leistungssprung bei Nachfrost auf Max-Irridation typisch für Wüstenregionen, Süd-Europa, Asien,..
Case: valide
Der Physics Calibrator verwirft bei der taeglichen Kalibrierung (EOD) alle Stunden komplett, deren Ratio (actual/predicted) ausserhalb [0.5, 2.0] liegt (continue). Bei massiven Fehlprognosen (z.B. Morning-Forecast 1.42 kWh, tatsaechlich 3.34 kWh → Ratio 2.35) gehen genau die Tage verloren, von denen das System am meisten lernen koennte. Zusaetzlich ist EMA_ALPHA = 0.15 fix — egal ob die Abweichung 5% oder 135% betraegt, der neue Datenpunkt bekommt immer nur 15% Gewicht. OUTLIER_THRESHOLD = 3.0 war toter Code (nicht referenziert).
Impact:
Stagnierendes Lernen bei exorbitanten Sprüngen // schnelle Auftauen nach Nachtfrost // Kondensnebel. Der Calibrator konvergiert nicht, weil die informativsten Datenpunkte systematisch verworfen werden. Effektive Anpassungszeit ~6.7 Tage selbst wenn Daten einfliessen.
Solution:
Drei notwendige Änderungen im physics_calibrator.py`:
1) Soft-Cap statt Hard-Rejection
# VORHER:
if ratio < MIN_CORRECTION_FACTOR or ratio > MAX_CORRECTION_FACTOR:
_LOGGER.debug(f"Skipping outlier: {group_name} hour {hour}, ratio={ratio:.2f}")
continue
# NACHHER:
if ratio < MIN_CORRECTION_FACTOR or ratio > MAX_CORRECTION_FACTOR:
_LOGGER.debug(f"Clamping outlier: {group_name} hour {hour}, "
f"ratio={ratio:.2f} -> {max(MIN_CORRECTION_FACTOR, min(MAX_CORRECTION_FACTOR, ratio)):.2f}")
ratio = max(MIN_CORRECTION_FACTOR, min(MAX_CORRECTION_FACTOR, ratio))
2) Konstanten anpassen
# VORHER:
MAX_CORRECTION_FACTOR = 2.0
MIN_CORRECTION_FACTOR = 0.5
OUTLIER_THRESHOLD = 3.0
# NACHHER:
MAX_CORRECTION_FACTOR = 2.5
MIN_CORRECTION_FACTOR = 0.4
# OUTLIER_THRESHOLD entfernt (toter Code)
3) Adaptives EMA-Alpha
# VORHER:
new_factor = EMA_ALPHA * current_avg + (1 - EMA_ALPHA) * factors.global_factor
# NACHHER:
alpha = self._adaptive_alpha(current_avg)
new_factor = alpha * current_avg + (1 - alpha) * factors.global_factor
def _adaptive_alpha(self, current_avg: float) -> float:
deviation = abs(current_avg - 1.0)
return min(0.40, EMA_ALPHA + deviation * 0.15)
Outlier-Ratios werden geclampt statt verworfen — kein Datenverlust mehr. Das adaptive Alpha skaliert von 0.15 (perfekte Vorhersage) bis 0.40 (extreme Abweichung) und wird an allen 6 EMA-Stellen angewendet (Global, Hourly, Bucket Global, Bucket Hourly, History Replay Hourly, History Replay Bucket). Cap bei 0.40 verhindert Instabilitaet.
EOD-Log verifiziert: Clamping outlier: Gruppe 2 hour 15, ratio=0.34 -> 0.40.
FIX: #BUG 03 V16.8.2 -done
SFML STATS V12.0.0 #BUG 01
User aus Forum Simon42 berichten fehlende Möglichkeit ehemalige Sensoren im config_flow und re_config nicht mehr eingeben zu können.
Case: valide
Durch den Umbau von Full auf DEV und NORMAL ist ein Teil des config_flow broken. Senoren in sensor.py noch vorhanden aber vom Code als Legacy markiert.
Impact: Anzeigefehler (Beide); fehlerhafte Berechnungen (DEV-Only Version) (Energie-Dashboard). Internal Server-Error “Invalid Config”
Solution: rebuild and refactor config_flow und sensor.py add legacy; korrekturen an strings.json // de.json // en.json
FIX-Impact: User beider Versionen können alle Sensoren hinzufügen und Berechnungen (DEV-Version) und Anzeigen (Normal + DEV-Version) funktionieren wie erwartet. Wirkungsgrad-Berechnung Inverter (DEV-Version) wieder funktional.
FIX: #BUG 02 V12.0.2 -done
SFML ALL Modules #BUG 03
User aus Forum Simon42 berichten Datenbank-Zugriffsfehler.
Case: no
Die Fehler gehen ausnahmslos auf fehlerhaftes Verhalten von HA durch inkorrektes schließen oder Cache-Fehler zurück.
Impact: In die DB kann nicht geschrieben werden
Solution: Sauberen Neustart ausführen - am sichersten HA komplett herunterfahren und Neustarten. Dieses schließt die DB korrekt. User auf Fehlbedienung VM (besonders Proxmox) hinweisen über korrektes Ausschalten und Einschalten
FIX-Impact: no
FIX: #BUG 01 ALL no action needed - HW-related / User related