Verteilarray optimiert und kleines Problem in der hysteres Behoben

This commit is contained in:
2025-03-14 10:17:21 +01:00
parent 8374d2d1da
commit f3f4c48b65
2 changed files with 41 additions and 17 deletions

View File

@@ -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;

View File

@@ -6,7 +6,7 @@
"compatibility": {
"version": "7.1"
},
"version": "1.182",
"version": "1.183",
"build": 0,
"date": 0
}