diff --git a/Bat_EV_SDL_V3_Beta/module.php b/Bat_EV_SDL_V3_Beta/module.php index 896d2b7..8b13ab4 100644 --- a/Bat_EV_SDL_V3_Beta/module.php +++ b/Bat_EV_SDL_V3_Beta/module.php @@ -292,6 +292,51 @@ class Bat_EV_SDL_V3_Beta extends IPSModule $maxSDL_dis = $sdlDisKW_ges * 1000.0; $pSdlSollW = max(-$maxSDL_dis, min($maxSDL_ch, $pSdlSollW)); + + // Soll auf erlaubte SDL-Leistung clampen (aus Summen kW->W)// Soll auf = $sdlChKW_ges * 1000.0; + $maxSDL_dis = $sdlDisKW_ges * 1000.0; + $pSdlSollW = max(-$maxSDL_dis, min($maxSDL_ch, $pSdlSollW)); + + /* ============================================================ + * RESYNC: Wenn sich Cache/SDL-Leistung geändert hat, + * dann SDL-Integrator auf physikalischen Wert setzen, + * damit SDL_Pos nicht plötzlich auf ~0% springt. + * ============================================================ */ + $cacheHash = (string)$this->GetBufferSafe("BatCacheHash"); // wird in BuildBatteryCache() gesetzt + $intHash = (string)$this->GetBufferSafe("Int_CFG_HASH"); // unser gespeicherter Hash + + // Erstinitialisierung + if ($intHash === "") { + $this->SetBuffer("Int_CFG_HASH", $cacheHash); + $intHash = $cacheHash; + } + + // Wenn Hash gewechselt hat => Definition von SDL-Fenster hat sich geändert + if ($cacheHash !== "" && $cacheHash !== $intHash) { + + // Physikalisches Resync: passt sofort zu den aktuellen SoCs / neuem SDL-Fenster + $Esdl_kWh = $real_kWh_sdl_ges; + + // Optional: Zeitstempel neu setzen, damit dt nicht "nachläuft" + $lastTs = $now; + $this->SetBuffer("Int_LastTs", (string)$now); + + // Hash aktualisieren + $this->SetBuffer("Int_CFG_HASH", $cacheHash); + + // Optional: Init-Flag setzen (damit klar ist: Konto ist gültig) + $this->SetBuffer("Int_Init_SDL", "1"); + + $this->SendDebug("SDL", "Resync wegen CacheHash-Change: Esdl_kWh=" . round($Esdl_kWh, 3), 0); + } + + // Init SDL-Konto einmalig auf physikalische Referenz (nur beim ersten Lauf) + if ($this->GetBufferSafe("Int_Init_SDL") !== "1") { + $Esdl_kWh = $real_kWh_sdl_ges; + $this->SetBuffer("Int_Init_SDL", "1"); + } + + // Init SDL-Konto einmalig auf physikalische Referenz (nur beim ersten Lauf) if ($this->GetBufferSafe("Int_Init_SDL") !== "1") { $Esdl_kWh = $real_kWh_sdl_ges;