From 88ea835aa1bcca451593ff3859bf13cb25a21031 Mon Sep 17 00:00:00 2001 From: "belevo\\mh" Date: Thu, 30 Apr 2026 16:01:33 +0200 Subject: [PATCH] no message --- Bat_EV_SDL_V3_Beta/module.php | 75 +++-------------------------------- 1 file changed, 6 insertions(+), 69 deletions(-) diff --git a/Bat_EV_SDL_V3_Beta/module.php b/Bat_EV_SDL_V3_Beta/module.php index 31c1c77..c5ca9ed 100644 --- a/Bat_EV_SDL_V3_Beta/module.php +++ b/Bat_EV_SDL_V3_Beta/module.php @@ -39,7 +39,7 @@ class Bat_EV_SDL_V3_Beta extends IPSModule $this->SetTimerInterval("UpdateTimer", ($intervalSec > 0) ? $intervalSec * 1000 : 0); // Cache neu bauen (force) $this->BuildBatteryCache(true); - $this->ResetSDLTo50Percent(); + $this->Update(); } public function RequestAction($Ident, $Value) @@ -172,15 +172,7 @@ public function Update() $underKWh = (float)($c["underKWh"] ?? 0.0); $upKWh = (float)($c["upKWh"] ?? 0.0); - // Grenz-Anker nur wenn SDL wirklich in Richtung Grenze fährt: - // Laden (Ist > 0): oberhalb up -> Upper Hit - if ($real_kWh > $upKWh && $pSdlIstW_raw > 0.0) { - $sdlHitUpperBySDL = true; - } - // Entladen (Ist < 0): unterhalb under -> Lower Hit - if ($real_kWh < $underKWh && $pSdlIstW_raw < 0.0) { - $sdlHitLowerBySDL = true; - } + // EV-Fenster (dynamisch erweitert bei SDL virt leer/voll) $evUnderKWh = $underKWh; @@ -353,31 +345,7 @@ public function Update() $intHash = $cacheHash; } - if ($cacheHash !== "" && $cacheHash !== $intHash) { - $Esdl_kWh = max(0.0, min($SDL_kWh_ges_cfg, $SDL_start_kWh_cfg)); - $dtH = 0.0; - $this->SetBuffer("Int_LastTs", (string)$now); - $this->SetBuffer("Int_CFG_HASH", $cacheHash); - $this->SetBuffer("Int_Init_SDL", "1"); - $this->SendDebug("SDL", "Reset wegen CacheHash-Change auf Startpunkt: Esdl_kWh=" . round($Esdl_kWh, 3), 0); - } - // ---------------------------------------------------------- - // OPTIONAL: Grenz-Anker, aber jetzt basierend auf IST-Richtung - // (verhindert Drift an echten Grenzen) - // ---------------------------------------------------------- - if ($sdlHitUpperBySDL || $sdlHitLowerBySDL) { - $Esdl_kWh = max(0.0, min($SDL_kWh_ges, $real_kWh_sdl_ges)); - $dtH = 0.0; - $this->SetBuffer("Int_LastTs", (string)$now); - $this->SendDebug( - "SDL", - "Grenz-Anker (IST): Esdl_kWh=" . round($Esdl_kWh, 3) . - " upper=" . ($sdlHitUpperBySDL ? "1" : "0") . - " lower=" . ($sdlHitLowerBySDL ? "1" : "0"), - 0 - ); - } // ========================================================== // FIX #2 (dein Wunsch): Integration NUR mit aktueller SDL-Leistung @@ -535,6 +503,10 @@ public function Update() $this->SetBuffer("BatCacheJSON", json_encode($cache)); $this->SendDebug("Cache", "Battery cache rebuilt (" . count($cache["bats"]) . " bats)", 0); } + + + + private function GetBufferSafe(string $name): string { $v = $this->GetBuffer($name); @@ -999,42 +971,7 @@ private function WriteByVendorRegistersSingleMode(string $typ, array $cfg, float // $setInt($varMode, 0); } -private function ResetSDLTo50Percent(): void -{ - $cache = json_decode($this->GetBufferSafe("BatCacheJSON"), true); - if (!is_array($cache) || empty($cache["bats"])) { - return; - } - - $sdlKWhTotal = 0.0; - - foreach ($cache["bats"] as $bat) { - $sdlKWhTotal += (float)($bat["SDL_kWh_total"] ?? 0.0); - } - - if ($sdlKWhTotal <= 0.0) { - return; - } - - $startKWh = 0.0; - - foreach ($cache["bats"] as $bat) { - $startKWh += (float)($bat["underKWh"] ?? 0.0); - } - - $startKWh = max(0.0, min($sdlKWhTotal, $startKWh)); - - $this->SetBuffer("Int_E_SDL_kWh", (string)$startKWh); - $this->SetBuffer("Int_Init_SDL", "1"); - $this->SetBuffer("Int_LastTs", (string)microtime(true)); - - // wichtig: Hash merken, damit direkt danach kein Resync kommt - $cacheHash = (string)$this->GetBufferSafe("BatCacheHash"); - if ($cacheHash !== "") { - $this->SetBuffer("Int_CFG_HASH", $cacheHash); - } -} private function GetTotalBatteryPowerIstW(): float {