no message
This commit is contained in:
@@ -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"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user