Verteilarray optimiert und kleines Problem in der hysteres Behoben
This commit is contained in:
@@ -57,19 +57,43 @@ class Batterie extends IPSModule
|
|||||||
$this->SetValue("Batteriemanagement_Variabel", $batterieManagement);
|
$this->SetValue("Batteriemanagement_Variabel", $batterieManagement);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function GeneratePowerSteps()
|
private function GeneratePowerSteps($additionalValue)
|
||||||
{
|
{
|
||||||
$maxleistung = $this->ReadPropertyInteger("MaxBatterieleistung");
|
$maxleistung = $this->ReadPropertyInteger("MaxBatterieleistung");
|
||||||
$array_powersteps = [];
|
$stepSize = 125; // Schrittgröße
|
||||||
$stepSize = 125; // Schrittgröße
|
$stepSizeSmall = 25; // Kleine Schrittgröße
|
||||||
|
|
||||||
// Erstellen der PowerSteps
|
// Array direkt als Range erzeugen (schneller als Schleife)
|
||||||
for ($i = -$maxleistung; $i <= $maxleistung; $i += $stepSize) {
|
$array_powersteps = range(-$maxleistung, $maxleistung, $stepSize);
|
||||||
$array_powersteps[] = $i;
|
|
||||||
|
// 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");
|
IPS_LogMessage("Batterie", "Currentdata");
|
||||||
|
|
||||||
$array_powersteps = $this->GeneratePowerSteps();
|
$array_powersteps = $this->GeneratePowerSteps($this->GetValue("Aktuelle_Leistung"));
|
||||||
$aufdasnachladen = $this->ReadPropertyInteger("AufdasNachladen");
|
$aufdasnachladen = $this->ReadPropertyInteger("AufdasNachladen");
|
||||||
$minimumentladen = $this->ReadPropertyInteger("MinimumEntladen");
|
$minimumentladen = $this->ReadPropertyInteger("MinimumEntladen");
|
||||||
$maxleistung = $this->ReadPropertyInteger("MaxBatterieleistung");
|
$maxleistung = $this->ReadPropertyInteger("MaxBatterieleistung");
|
||||||
@@ -176,7 +200,7 @@ public function RequestAction($Ident, $Value)
|
|||||||
|
|
||||||
$this->SetValue("Hysterese", false);
|
$this->SetValue("Hysterese", false);
|
||||||
|
|
||||||
}elseif($batterieladezustand<$aufdasnachladen){
|
}elseif($batterieladezustand<=$aufdasnachladen){
|
||||||
$this->SetValue("Hysterese", true);
|
$this->SetValue("Hysterese", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,7 +255,7 @@ public function RequestAction($Ident, $Value)
|
|||||||
IPS_LogMessage("Batterie", "im 2");
|
IPS_LogMessage("Batterie", "im 2");
|
||||||
|
|
||||||
|
|
||||||
}elseif($batterieladezustand>$aufdasnachladen && $hyst==true){
|
}elseif($batterieladezustand>=$aufdasnachladen && $hyst==true){
|
||||||
|
|
||||||
$filtered_powersteps = array_filter($array_powersteps, function ($value) {
|
$filtered_powersteps = array_filter($array_powersteps, function ($value) {
|
||||||
return $value >= 0;
|
return $value >= 0;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"compatibility": {
|
"compatibility": {
|
||||||
"version": "7.1"
|
"version": "7.1"
|
||||||
},
|
},
|
||||||
"version": "1.182",
|
"version": "1.183",
|
||||||
"build": 0,
|
"build": 0,
|
||||||
"date": 0
|
"date": 0
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user