diff --git a/Batterie/module.php b/Batterie/module.php index 39b7cb7..7f67889 100644 --- a/Batterie/module.php +++ b/Batterie/module.php @@ -56,20 +56,44 @@ class Batterie extends IPSModule $batterieManagement = $this->ReadPropertyInteger("Batteriemanagement"); $this->SetValue("Batteriemanagement_Variabel", $batterieManagement); } - - private function GeneratePowerSteps() -{ - $maxleistung = $this->ReadPropertyInteger("MaxBatterieleistung"); - $array_powersteps = []; - $stepSize = 125; // Schrittgröße - - // Erstellen der PowerSteps - for ($i = -$maxleistung; $i <= $maxleistung; $i += $stepSize) { - $array_powersteps[] = $i; + + private function GeneratePowerSteps($additionalValue) + { + $maxleistung = $this->ReadPropertyInteger("MaxBatterieleistung"); + $stepSize = 125; // Schrittgröße + $stepSizeSmall = 25; // Kleine Schrittgröße + + // Array direkt als Range erzeugen (schneller als Schleife) + $array_powersteps = range(-$maxleistung, $maxleistung, $stepSize); + + // Nächstgelegenen Wert direkt bestimmen (rundet auf den nächsten Step) + $closestValue = round($additionalValue / $stepSize) * $stepSize; + + // Falls der Wert nicht im Bereich liegt, abbrechen + if (!in_array($closestValue, $array_powersteps)) { + return $array_powersteps; + } + + // Index des gefundenen Werts suchen + $index = array_search($closestValue, $array_powersteps); + + // Zusätzliche Werte berechnen und auf MaxLeistung begrenzen + $newValues = array_filter([ + $closestValue - 2 * $stepSizeSmall, + $closestValue - $stepSizeSmall, + $closestValue, + $closestValue + $stepSizeSmall, + $closestValue + 2 * $stepSizeSmall + ], function ($value) use ($maxleistung) { + return $value >= -$maxleistung && $value <= $maxleistung; + }); + + // Effizienteres Einfügen der Werte (direkt an der Stelle) + array_splice($array_powersteps, $index, 1, $newValues); + + return $array_powersteps; } - - return $array_powersteps; -} + @@ -155,7 +179,7 @@ public function RequestAction($Ident, $Value) { IPS_LogMessage("Batterie", "Currentdata"); - $array_powersteps = $this->GeneratePowerSteps(); + $array_powersteps = $this->GeneratePowerSteps($this->GetValue("Aktuelle_Leistung")); $aufdasnachladen = $this->ReadPropertyInteger("AufdasNachladen"); $minimumentladen = $this->ReadPropertyInteger("MinimumEntladen"); $maxleistung = $this->ReadPropertyInteger("MaxBatterieleistung"); @@ -176,7 +200,7 @@ public function RequestAction($Ident, $Value) $this->SetValue("Hysterese", false); - }elseif($batterieladezustand<$aufdasnachladen){ + }elseif($batterieladezustand<=$aufdasnachladen){ $this->SetValue("Hysterese", true); } @@ -231,7 +255,7 @@ public function RequestAction($Ident, $Value) IPS_LogMessage("Batterie", "im 2"); - }elseif($batterieladezustand>$aufdasnachladen && $hyst==true){ + }elseif($batterieladezustand>=$aufdasnachladen && $hyst==true){ $filtered_powersteps = array_filter($array_powersteps, function ($value) { return $value >= 0; diff --git a/library.json b/library.json index 403ee9b..a2dc0df 100644 --- a/library.json +++ b/library.json @@ -6,7 +6,7 @@ "compatibility": { "version": "7.1" }, - "version": "1.182", + "version": "1.183", "build": 0, "date": 0 } \ No newline at end of file