no message
This commit is contained in:
@@ -102,8 +102,14 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "NumberSpinner",
|
"type": "NumberSpinner",
|
||||||
"name": "SDL_Leistung",
|
"name": "SDL_Lade_Leistung",
|
||||||
"caption": "SDL_Leistung",
|
"caption": "SDL_Lade_Leistung",
|
||||||
|
"suffix": "W"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "NumberSpinner",
|
||||||
|
"name": "SDL_Entlade_Leistung",
|
||||||
|
"caption": "SDL_Entlade_Leistung",
|
||||||
"suffix": "W"
|
"suffix": "W"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ class Bat_EV_SDL extends IPSModule
|
|||||||
|
|
||||||
// Properties
|
// Properties
|
||||||
$this->RegisterPropertyString("Batteries", "[]");
|
$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
|
$this->RegisterPropertyInteger("UpdateInterval", 5); // Minuten
|
||||||
|
|
||||||
// Status
|
// Status
|
||||||
@@ -69,11 +70,45 @@ class Bat_EV_SDL extends IPSModule
|
|||||||
$batteries = [];
|
$batteries = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------
|
||||||
|
|
||||||
$sdlTotalW = (float)$this->ReadPropertyInteger("SDL_Leistung"); // W
|
$sdlTotalW = (float)$this->ReadPropertyInteger("SDL_Leistung"); // W
|
||||||
if ($sdlTotalW < 0) $sdlTotalW = 0;
|
if ($sdlTotalW < 0) $sdlTotalW = 0;
|
||||||
|
|
||||||
$sdlTotalkW = $sdlTotalW / 1000.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
|
// 30 Minuten Fenster
|
||||||
$hours = 0.5;
|
$hours = 0.5;
|
||||||
|
|
||||||
@@ -93,7 +128,8 @@ class Bat_EV_SDL extends IPSModule
|
|||||||
|
|
||||||
$calc = [
|
$calc = [
|
||||||
"inputs" => [
|
"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),
|
"SumBatPower_W" => round($sumBatPowerW, 0),
|
||||||
"hours" => $hours
|
"hours" => $hours
|
||||||
],
|
],
|
||||||
@@ -151,17 +187,35 @@ class Bat_EV_SDL extends IPSModule
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Deine Logik: SDL/EV Aufteilung über Leistungsanteil
|
// Deine Logik: SDL/EV Aufteilung über Leistungsanteil
|
||||||
|
|
||||||
$sdlShareKW = ($sumBatPowerkW > 0.0) ? ($sdlTotalkW / $sumBatPowerkW * $pBatkW) : 0.0;
|
$sdlShareKW = ($sumBatPowerkW > 0.0) ? ($sdlTotalkW / $sumBatPowerkW * $pBatkW) : 0.0;
|
||||||
$evShareKW = $pBatkW - $sdlShareKW;
|
$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;
|
if ($mode == 'charge') {
|
||||||
$SDL_kWh = 2.0 * $underKWh;
|
$ver = $sdlTotalLadekW / $sdlTotalEntladekW;
|
||||||
$EV_kWH = max(0.0, $capKWh - $SDL_kWh);
|
$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;
|
$real_kWh = $capKWh / 100.0 * $socPct;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user