From 446ed0926ea38fb7fa9297f07d8aade5329281a5 Mon Sep 17 00:00:00 2001 From: "belevo\\mh" Date: Fri, 17 Apr 2026 18:47:42 +0200 Subject: [PATCH] no message --- Bat_EV_SDL_V3_Beta/module.php | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/Bat_EV_SDL_V3_Beta/module.php b/Bat_EV_SDL_V3_Beta/module.php index 7aaaa0b..289f4f5 100644 --- a/Bat_EV_SDL_V3_Beta/module.php +++ b/Bat_EV_SDL_V3_Beta/module.php @@ -321,6 +321,40 @@ class Bat_EV_SDL_V3_Beta extends IPSModule } $this->SetBuffer("Int_ResetArmed", $armed ? "1" : "0"); + // ===================== + // EV-Zone (oben/unten) erkennen und EV-Konto beim Zonenwechsel hart setzen + // Ziel: Wenn obere Grenze erreicht -> SoC_EV = 100% (Eev = EV_total) + // Wenn untere Grenze erreicht -> SoC_EV = 0% (Eev = 0) + // ===================== + $epsKWh = 0.001; + + // ZoneNow aus EV-Referenz ableiten: + // -1 = EV leer (untere Zone), 0 = Fenster, +1 = EV voll (obere Zone) + $zoneNow = 0; + if ($real_kWh_ev_ges <= $epsKWh) { + $zoneNow = -1; + } elseif ($EV_kWh_ges > 0.0 && $real_kWh_ev_ges >= ($EV_kWh_ges - $epsKWh)) { + $zoneNow = 1; + } + + // Vorherige Zone aus Buffer + $zonePrevStr = $this->GetBufferSafe("EV_Zone"); + $zonePrev = ($zonePrevStr === "") ? $zoneNow : (int)$zonePrevStr; + + // Nur beim Zonenwechsel hart setzen (Edge-Trigger) + if ($zoneNow !== $zonePrev) { + if ($zoneNow === 1) { + // Übergang in obere Zone -> EV "voll" + $Eev = $EV_kWh_ges; + } elseif ($zoneNow === -1) { + // Übergang in untere Zone -> EV "leer" + $Eev = 0.0; + } + } + + // Zone speichern + $this->SetBuffer("EV_Zone", (string)$zoneNow); + // =================================================== // Integrator: NUR integrieren wenn Soll != 0W // Angleichen ist raus: wir setzen bei Soll=0 hart auf Referenz