From 071443a65692a75ec24fb8b62fb150763fdc4580 Mon Sep 17 00:00:00 2001 From: "belevo\\mh" Date: Wed, 22 Apr 2026 08:14:17 +0200 Subject: [PATCH] no message --- Bat_EV_SDL_V3_Beta/module.php | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/Bat_EV_SDL_V3_Beta/module.php b/Bat_EV_SDL_V3_Beta/module.php index 24d7f8d..9841b88 100644 --- a/Bat_EV_SDL_V3_Beta/module.php +++ b/Bat_EV_SDL_V3_Beta/module.php @@ -81,18 +81,17 @@ class Bat_EV_SDL_V3_Beta extends IPSModule // ===================== $now = microtime(true); - $lastTs = (float)$this->GetBufferSafe("Int_LastTs"); // Float! - $Esdl_kWh = (float)$this->GetBufferSafe("Int_E_SDL_kWh"); // SDL-Konto in kWh (Integrator) + $lastTs = (float)$this->GetBufferSafe("Int_LastTs"); // Float! + $Esdl_kWh = (float)$this->GetBufferSafe("Int_E_SDL_kWh"); // SDL-Konto in kWh if ($lastTs <= 0.0) { - $lastTs = $now; + $lastTs = $now; $Esdl_kWh = 0.0; } $dtSec = $now - $lastTs; if ($dtSec < 0.0) $dtSec = 0.0; - // optional: falls IPS mal hängt, keine riesigen Sprünge integrieren - if ($dtSec > 10.0) $dtSec = 10.0; + if ($dtSec > 10.0) $dtSec = 10.0; // optional: Kappe bei Aussetzern $dtH = $dtSec / 3600.0; @@ -163,8 +162,7 @@ class Bat_EV_SDL_V3_Beta extends IPSModule } $EV_SOC = is_finite($EV_SOC) ? max(0.0, min(100.0, $EV_SOC)) : 0.0; - // SDL_SOC im Fenster (wie du es früher hattest – hier konstant, wenn du willst) - // Wenn du hier lieber dynamisch willst, sag kurz Bescheid. + // SDL_SOC (wie in deinem alten Code im Fenster) $denSDL = ($capKWh - $upKWh + $underKWh); if ($denSDL > 0.0) { $SDL_SOC = 100.0 * $underKWh / $denSDL; @@ -186,7 +184,7 @@ class Bat_EV_SDL_V3_Beta extends IPSModule // Obere Grenze: EV = 100% $EV_SOC = 100.0; - // SDL_SOC (deine bestehende obere Formel) + // SDL_SOC (deine obere Formel) $den1 = ($capKWh - $real_kWh + $underKWh); $den2 = (2.0 * $underKWh); if ($den1 > 0.0 && $den2 > 0.0) { @@ -209,7 +207,7 @@ class Bat_EV_SDL_V3_Beta extends IPSModule // Untere Grenze: EV = 0% $EV_SOC = 0.0; - // SDL_SOC (deine bestehende untere Formel) + // SDL_SOC (deine untere Formel) $den = $upKWh + $underKWh; $SDL_SOC = ($den > 0.0) ? ($real_kWh * 100.0 / $den) : 0.0; $SDL_SOC = is_finite($SDL_SOC) ? max(0.0, min(100.0, $SDL_SOC)) : 0.0; @@ -275,14 +273,15 @@ class Bat_EV_SDL_V3_Beta extends IPSModule } // ============================ - // 1) EV-SoC "normal" (physikalisch) ohne Integrator + // EV Anzeige: "normal" physikalisch (ja: aus realem SoC!) // ============================ $evPosPct = ($EV_kWh_ges > 0.0) ? ($real_kWh_ev_ges / $EV_kWh_ges * 100.0) : 0.0; $evPosPct = max(0.0, min(100.0, $evPosPct)); $this->SetIdentValue("SoC_EV", round($evPosPct, 3)); // ============================ - // 2) SDL-SoC integriert mit Nennleistung_Soll_SDL (virtuell) + // SDL Anzeige: integriert mit Nennleistung_Soll_SDL + // UND WICHTIG: bei Soll = 0 -> SoC stehen lassen (kein Resync!) // ============================ $pSdlSollW = (float)GetValue($this->GetIDForIdent("Nennleistung_Soll_SDL")); $epsW = 1.0; @@ -293,17 +292,14 @@ class Bat_EV_SDL_V3_Beta extends IPSModule $maxSDL_dis = $sdlDisKW_ges * 1000.0; $pSdlSollW = max(-$maxSDL_dis, min($maxSDL_ch, $pSdlSollW)); - // Init SDL-Konto einmalig auf physikalische Referenz + // 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"); } - // Wenn SDL inaktiv: hart auf Referenz (damit nichts driftet) - if (!$sdlActive) { - $Esdl_kWh = $real_kWh_sdl_ges; - } else { - // Integration: (+) laden -> steigt, (-) entladen -> fällt + // Nur wenn aktiv integrieren, sonst: NICHTS -> Konto bleibt stehen + if ($sdlActive) { $Esdl_kWh += (($pSdlSollW / 1000.0) * $dtH); }