no message

This commit is contained in:
belevo\mh
2026-01-26 14:04:35 +01:00
parent a314141093
commit 2eab6b60ec
2 changed files with 70 additions and 10 deletions

View File

@@ -102,8 +102,14 @@
},
{
"type": "NumberSpinner",
"name": "SDL_Leistung",
"caption": "SDL_Leistung",
"name": "SDL_Lade_Leistung",
"caption": "SDL_Lade_Leistung",
"suffix": "W"
},
{
"type": "NumberSpinner",
"name": "SDL_Entlade_Leistung",
"caption": "SDL_Entlade_Leistung",
"suffix": "W"
},
{

View File

@@ -8,7 +8,8 @@ class Bat_EV_SDL extends IPSModule
// Properties
$this->RegisterPropertyString("Batteries", "[]");
$this->RegisterPropertyInteger("SDL_Leistung", 0); // W
$this->RegisterPropertyInteger("SDL_Lade_Leistung", 0);
$this->RegisterPropertyInteger("SDL_Entlade_Leistung", 0); // W
$this->RegisterPropertyInteger("UpdateInterval", 5); // Minuten
// Status
@@ -69,11 +70,45 @@ class Bat_EV_SDL extends IPSModule
$batteries = [];
}
//--------------------------------------------------
$sdlTotalW = (float)$this->ReadPropertyInteger("SDL_Leistung"); // W
if ($sdlTotalW < 0) $sdlTotalW = 0;
$sdlTotalkW = $sdlTotalW / 1000.0;
//---------------------------------------------
$sdlTotalLadeW = (float)$this->ReadPropertyInteger("SDL_Lade_Leistung"); // W
if ($sdlTotalLadeW < 0) $sdlTotalLadeW = 0;
$sdlTotalLadekW = $sdlTotalLadeW / 1000.0;
$sdlTotalEntladeW = (float)$this->ReadPropertyInteger("SDL_Entlade_Leistung"); // W
if ($sdlTotalEntladeW < 0) $sdlTotalEntladeW = 0;
$sdlTotalEntladekW = $sdlTotalEntladeW / 1000.0;
if ($sdlTotalLadekW > $sdlTotalEntladekW) {
$sdlTotalkW = $sdlTotalLadekW;
$mode = 'charge';
} elseif ($sdlTotalLadekW < $sdlTotalEntladekW) {
$sdlTotalkW = $sdlTotalEntladekW;
$mode = 'discharge';
} else {
$sdlTotalkW = $sdlTotalEntladekW;
$mode = 'equal';
}
//---------------------------------------------
// 30 Minuten Fenster
$hours = 0.5;
@@ -93,7 +128,8 @@ class Bat_EV_SDL extends IPSModule
$calc = [
"inputs" => [
"SDL_Leistung_W" => round($sdlTotalW, 0),
"SDL_Entlade_Leistung_W" => round($sdlTotalEntladeW, 0),
"SDL_Lade_Leistung_W" => round($sdlTotalLadeW, 0),
"SumBatPower_W" => round($sumBatPowerW, 0),
"hours" => $hours
],
@@ -151,17 +187,35 @@ class Bat_EV_SDL extends IPSModule
continue;
}
// Deine Logik: SDL/EV Aufteilung über Leistungsanteil
$sdlShareKW = ($sumBatPowerkW > 0.0) ? ($sdlTotalkW / $sumBatPowerkW * $pBatkW) : 0.0;
$evShareKW = $pBatkW - $sdlShareKW;
// untere Grenze für SDL (wichtig: zuerst setzen, dann clamp)
$underKWh = $sdlShareKW * $hours;
$underKWh = max(0.0, min($underKWh, $capKWh / 2.0));
$upKWh = $capKWh - $underKWh;
$SDL_kWh = 2.0 * $underKWh;
$EV_kWH = max(0.0, $capKWh - $SDL_kWh);
if ($mode == 'charge') {
$ver = $sdlTotalLadekW / $sdlTotalEntladekW;
$underKWh = ($sdlShareKW * $hours) / $ver;
$upKWh = $capKWh - ($sdlShareKW * $hours);
} elseif ($mode == 'discharge' ) {
$ver = $sdlTotalEntladekW / $sdlTotalLadekW;
$underKWh = ($sdlShareKW * $hours) ;
$upKWh = $capKWh - ($sdlShareKW * $hours) / $ver;
}else {
// untere Grenze für SDL (wichtig: zuerst setzen, dann clamp)
$underKWh = $sdlShareKW * $hours;
$underKWh = max(0.0, min($underKWh, $capKWh / 2.0));
$upKWh = $capKWh - $underKWh;
$SDL_kWh = 2.0 * $underKWh;
$EV_kWH = max(0.0, $capKWh - $SDL_kWh);
}
$real_kWh = $capKWh / 100.0 * $socPct;