diff --git a/Bat_EV_SDL _V2/form.json b/Bat_EV_SDL _V2/form.json index 414e7b6..938b61f 100644 --- a/Bat_EV_SDL _V2/form.json +++ b/Bat_EV_SDL _V2/form.json @@ -70,6 +70,18 @@ "caption": "SDL_Leistung", "suffix": "W" }, + { + "type": "NumberSpinner", + "name": "SDL_Leistung_Laden", + "caption": "SDL_Leistung_Laden", + "suffix": "W" + }, + { + "type": "NumberSpinner", + "name": "SDL_Leistung_Entladen", + "caption": "SDL_Leistung_Entladen", + "suffix": "W" + }, { "type": "NumberSpinner", "name": "UpdateInterval", diff --git a/Bat_EV_SDL _V2/module.php b/Bat_EV_SDL _V2/module.php index e766dae..0ad09a5 100644 --- a/Bat_EV_SDL _V2/module.php +++ b/Bat_EV_SDL _V2/module.php @@ -10,7 +10,9 @@ class Bat_EV_SDL_V2 extends IPSModule // Properties $this->RegisterPropertyString("Batteries", "[]"); - $this->RegisterPropertyInteger("SDL_Leistung", 0); // W + $this->RegisterPropertyInteger("SDL_Leistung", 0); + $this->RegisterPropertyInteger("SDL_Leistung_Laden", 0); + $this->RegisterPropertyInteger("SDL_Leistung_Entladen", 0); // W $this->RegisterPropertyInteger("UpdateInterval", 5); // Minuten // Status @@ -118,8 +120,12 @@ class Bat_EV_SDL_V2 extends IPSModule $SDL_kWh = (float)($c["SDL_kWh_total"] ?? 0.0); $EV_kWh = (float)($c["EV_kWh_total"] ?? 0.0); - $sdlShareKW = (float)($c["sdlShareKW"] ?? 0.0); - $evShareKW = (float)($c["evShareKW"] ?? 0.0); + $sdlShareKW_laden = (float)($c["sdlShareKW laden"] ?? 0.0); + $sdlShareKW_entladen = (float)($c["sdlShareKW entladen"] ?? 0.0); + $evShareKW_laden = (float)($c["evShareKW laden"] ?? 0.0); + $evShareKW_entladen = (float)($c["evShareKW entladen"] ?? 0.0); + + // Defaults $EV_SOC = 0.0; @@ -137,10 +143,10 @@ class Bat_EV_SDL_V2 extends IPSModule $SDL_SOC = 50.0; $EV_SOC = ($capKWh > 0.0) ? (($real_kWh - $underKWh) * 100.0 / $capKWh) : 0.0; - $sdlDisKW = $sdlShareKW; - $evDisKW = $evShareKW; - $sdlChKW = $sdlShareKW; - $evChKW = $evShareKW; + $sdlDisKW = $sdlShareKW_entladen; + $evDisKW = $evShareKW_entladen; + $sdlChKW = $sdlShareKW_laden; + $evChKW = $evShareKW_laden; $real_kWh_ev = $real_kWh - $underKWh; $real_kWh_sdl = $underKWh; @@ -152,25 +158,25 @@ class Bat_EV_SDL_V2 extends IPSModule $den = ($capKWh - $real_kWh + $underKWh); $SDL_SOC = ($den > 0.0 && $underKWh > 0.0) ? ($den / (2.0 * $underKWh) * 100.0) : 0.0; - $sdlDisKW = $sdlShareKW; - $evDisKW = $evShareKW; - $sdlChKW = $sdlShareKW; + $sdlDisKW = $sdlShareKW_entladen; + $evDisKW = $evShareKW_entladen; + $sdlChKW = $sdlShareKW_laden; $evChKW = 0.0; - $real_kWh_ev = $capKWh - 2.0 * $underKWh; - $real_kWh_sdl = (2.0 * $underKWh) - ($capKWh - $real_kWh); + $real_kWh_ev = $capKWh - ($upKWh + $underKWh); + $real_kWh_sdl = ($upKWh + $underKWh) - ($capKWh - $real_kWh); } elseif ($underKWh > $real_kWh) { $EV_SOC = 0.0; - $den = 2.0 * $underKWh; + $den = $upKWh + $underKWh; $SDL_SOC = ($den > 0.0) ? ($real_kWh * 100.0 / $den) : 0.0; - $sdlDisKW = $sdlShareKW; + $sdlDisKW = $sdlShareKW_entladen; $evDisKW = 0.0; - $sdlChKW = $sdlShareKW; - $evChKW = $evShareKW; + $sdlChKW = $sdlShareKW_laden; + $evChKW = $evShareKW_laden; $real_kWh_ev = 0.0; $real_kWh_sdl = $real_kWh; @@ -183,8 +189,8 @@ class Bat_EV_SDL_V2 extends IPSModule $real_kWh_sdl = 0.0; } elseif ($real_kWh >= $capKWh) { $sdlChKW = 0.0; - $real_kWh_ev = $capKWh - 2.0 * $underKWh; - $real_kWh_sdl = 2.0 * $underKWh; + $real_kWh_ev = $capKWh - ($upKWh + $underKWh); + $real_kWh_sdl = $upKWh + $underKWh; } $real_kWh_ev = max(0.0, $real_kWh_ev); @@ -268,11 +274,15 @@ class Bat_EV_SDL_V2 extends IPSModule { $batteriesRaw = $this->ReadPropertyString("Batteries"); $sdlTotalW = max(0, (int)$this->ReadPropertyInteger("SDL_Leistung")); + $sdlTotalW_laden = max(0, (int)$this->ReadPropertyInteger("SDL_Leistung_Laden")); + $sdlTotalW_entladen = max(0, (int)$this->ReadPropertyInteger("SDL_Leistung_Entladen")); $hours = self::HOURS; $hash = md5(json_encode([ "Batteries" => $batteriesRaw, "SDL_W" => $sdlTotalW, + "SDL_W_Laden" => $sdlTotalW_laden, + "SDL_W_Entladen" => $sdlTotalW_entladen, "hours" => $hours ])); @@ -293,6 +303,8 @@ class Bat_EV_SDL_V2 extends IPSModule $cache = [ "inputs" => [ "SDL_Leistung_W" => $sdlTotalW, + "SDL_Leistung_W_laden" => $sdlTotalW_laden, + "SDL_Leistung_W_entladen" => $sdlTotalW_entladen, "SumBatPower_W" => round($sumBatPowerW, 0), "hours" => $hours ], @@ -309,6 +321,9 @@ class Bat_EV_SDL_V2 extends IPSModule $sumBatPowerkW = $sumBatPowerW / 1000.0; $sdlTotalkW = $sdlTotalW / 1000.0; + $sdlTotalkW_laden = $sdlTotalW_laden / 1000.0; + $sdlTotalkW_entladen = $sdlTotalW_entladen / 1000.0; + foreach ($batteries as $idx => $b) { $pBatW = max(0.0, (float)($b["powerbat"] ?? 0)); @@ -320,6 +335,7 @@ class Bat_EV_SDL_V2 extends IPSModule $socVarId = (int)($b["soc"] ?? 0); $typ = (string)($b["typ"] ?? ("Bat " . ($idx + 1))); + /* $sdlShareKW = ($sumBatPowerkW > 0.0) ? ($sdlTotalkW / $sumBatPowerkW * $pBatkW) : 0.0; $evShareKW = $pBatkW - $sdlShareKW; @@ -329,6 +345,19 @@ class Bat_EV_SDL_V2 extends IPSModule $upKWh = $capKWh - $underKWh; $SDL_kWh = 2.0 * $underKWh; $EV_kWh = max(0.0, $capKWh - $SDL_kWh); + */ + + // Mit laden und entladen unterschiedlich + //---------------------------------------------------- + $sdlShareKW_laden = ($sumBatPowerkW > 0.0) ? ($sdlTotalkW_laden / $sumBatPowerkW * $pBatkW) : 0.0; + $evShareKW_laden = $pBatkW - $sdlShareKW_laden; + $upKWh = $capKWh - $sdlShareKW_laden * 0.5; + $sdlShareKW_entladen = ($sumBatPowerkW > 0.0) ? ($sdlTotalkW_entladen / $sumBatPowerkW * $pBatkW) : 0.0; + $evShareKW_entladen = $pBatkW - $sdlShareKW_entladen; + $underKWh = $sdlShareKW_entladen * 0.5; + $SDL_kW = $underKWh + $upKWh; + $EV_kWh = $capKWh - $SDL_kW; + //---------------------------------------------------- $cache["bats"][] = [ "idx" => $idx, @@ -338,8 +367,10 @@ class Bat_EV_SDL_V2 extends IPSModule "capKWh" => $capKWh, "pBatW" => $pBatW, - "sdlShareKW" => $sdlShareKW, - "evShareKW" => $evShareKW, + "sdlShareKW laden" => $sdlShareKW_laden, + "sdlShareKW entladen" => $sdlShareKW_entladen, + "evShareKW laden" => $evShareKW_laden, + "evShareKW entladen" => $evShareKW_entladen, "underKWh" => $underKWh, "upKWh" => $upKWh,