no message

This commit is contained in:
belevo\mh
2026-04-29 08:27:20 +02:00
parent 5a375640c1
commit df7d776f8e
+41 -6
View File
@@ -116,6 +116,23 @@ class Bat_EV_SDL_V3_Beta extends IPSModule
$EV_kWh_ges = 0.0;
$totalCapKWh = 0.0;
// SDL-Gesamtkapazität aus Cache vorab berechnen
$SDL_kWh_ges_cfg = 0.0;
foreach ($cache["bats"] as $bc) {
$SDL_kWh_ges_cfg += (float)($bc["SDL_kWh_total"] ?? 0.0);
}
// aktueller virtueller SDL-Stand
$sdlVirtPct = ($SDL_kWh_ges_cfg > 0.0)
? ($Esdl_kWh / $SDL_kWh_ges_cfg * 100.0)
: 0.0;
$sdlVirtPct = max(0.0, min(100.0, $sdlVirtPct));
$sdlIsEmpty = ($sdlVirtPct <= 0.1);
$sdlIsFull = ($sdlVirtPct >= 99.9);
foreach ($cache["bats"] as $i => $c) {
$capKWh = (float)($c["capKWh"] ?? 0.0);
@@ -133,6 +150,24 @@ class Bat_EV_SDL_V3_Beta extends IPSModule
$typ = (string)($c["typ"] ?? ("Bat " . ($i + 1)));
$underKWh = (float)($c["underKWh"] ?? 0.0);
$upKWh = (float)($c["upKWh"] ?? 0.0);
// Standard: EV darf nur zwischen underKWh und upKWh arbeiten
$evUnderKWh = $underKWh;
$evUpKWh = $upKWh;
// Wenn SDL virtuell leer ist, darf EV die untere SDL-Reserve verwenden
if ($sdlIsEmpty) {
$evUnderKWh = 0.0;
}
// Wenn SDL virtuell voll ist, darf EV die obere SDL-Reserve verwenden
if ($sdlIsFull) {
$evUpKWh = $capKWh;
}
$evWindowKWh = max(0.0, $evUpKWh - $evUnderKWh);
$SDL_kWh = (float)($c["SDL_kWh_total"] ?? 0.0);
$EV_kWh = (float)($c["EV_kWh_total"] ?? 0.0);
@@ -155,8 +190,8 @@ class Bat_EV_SDL_V3_Beta extends IPSModule
if ($underKWh <= $real_kWh && $real_kWh <= $upKWh) {
// EV_SOC im Fenster dynamisch (0..100)
if ($EV_kWh > 0.0) {
$EV_SOC = 100.0 * ($real_kWh - $underKWh) / $EV_kWh;
if ($evWindowKWh > 0.0) {
$EV_SOC = 100.0 * ($real_kWh - $evUnderKWh) / $evWindowKWh;
} else {
$EV_SOC = 0.0;
}
@@ -176,10 +211,10 @@ class Bat_EV_SDL_V3_Beta extends IPSModule
$sdlChKW = $sdlShareKW_laden;
$evChKW = $evShareKW_laden;
$real_kWh_ev = $real_kWh - $underKWh;
$real_kWh_sdl = $underKWh;
$real_kWh_ev = max(0.0, min($evWindowKWh, $real_kWh - $evUnderKWh));
$real_kWh_sdl = $real_kWh - $real_kWh_ev;
} elseif ($real_kWh > $upKWh) {
} elseif ($real_kWh > $evUpKWh) {
// Obere Grenze: EV = 100%
$EV_SOC = 100.0;
@@ -202,7 +237,7 @@ class Bat_EV_SDL_V3_Beta extends IPSModule
$real_kWh_ev = $capKWh - ($capKWh - $upKWh + $underKWh);
$real_kWh_sdl = ($capKWh - $upKWh + $underKWh) - ($capKWh - $real_kWh);
} else { // $real_kWh < $underKWh
} elseif ($real_kWh < $evUnderKWh) {
// Untere Grenze: EV = 0%
$EV_SOC = 0.0;