no message
This commit is contained in:
@@ -353,25 +353,29 @@ class Manager extends IPSModule
|
||||
|
||||
// Prüfen, dass jeder User mindestens seinen minimalwert an Leistung bekommt
|
||||
foreach ($userEnergyProv as $userInstanceID => $leistung) {
|
||||
// 1. Innerhalb der Schleife: alle nicht-negativen Leistungen sammeln
|
||||
$positiveValues = array_filter(
|
||||
$userEnergyProv,
|
||||
function ($l) {
|
||||
return $l >= 0;
|
||||
// 1. Fallback: Wert aus userEnergyProv, der betragsmäßig am nächsten bei 0 liegt
|
||||
if (!empty($userEnergyProv)) {
|
||||
$closestToZero = null;
|
||||
foreach ($userEnergyProv as $val) {
|
||||
if ($closestToZero === null || abs($val) < abs($closestToZero)) {
|
||||
$closestToZero = $val;
|
||||
}
|
||||
}
|
||||
$minimalleistung = $closestToZero;
|
||||
} else {
|
||||
$minimalleistung = 0;
|
||||
}
|
||||
);
|
||||
// 2. Falls keine Werte ≥ 0 vorhanden sind, auf 0 zurückfallen
|
||||
$fallbackMinimum = empty($positiveValues)
|
||||
? 0
|
||||
: min($positiveValues);
|
||||
|
||||
// 3. minimalleistung = dieser Fallback
|
||||
$minimalleistung = $fallbackMinimum;
|
||||
// 2. Welcher Wert liegt weiter von 0 entfernt? (größerer Absolutwert)
|
||||
if (abs($leistung) >= abs($minimalleistung)) {
|
||||
$chosen = $leistung;
|
||||
} else {
|
||||
$chosen = $minimalleistung;
|
||||
}
|
||||
|
||||
// 4. den höheren Wert wählen und für IPS negativieren
|
||||
$schreibleistung = max($leistung, $minimalleistung);
|
||||
// 3. Für IPS negativieren und schreiben
|
||||
$schreibleistung = $chosen;
|
||||
|
||||
// 5. Aktion ausführen
|
||||
if (IPS_InstanceExists($userInstanceID)) {
|
||||
IPS_RequestAction(
|
||||
$userInstanceID,
|
||||
@@ -380,7 +384,7 @@ class Manager extends IPSModule
|
||||
);
|
||||
IPS_LogMessage(
|
||||
"Manager",
|
||||
"aufgerufen setleistung (Berechnung in foreach): " . $schreibleistung
|
||||
"aufgerufen setleistung (weiter von 0): " . $schreibleistung
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -424,25 +428,29 @@ class Manager extends IPSModule
|
||||
|
||||
// Prüfen, dass jeder User mindestens seinen minimalwert an Leistung bekommt
|
||||
foreach ($userEnergyProv as $userInstanceID => $leistung) {
|
||||
// 1. Innerhalb der Schleife: alle nicht-negativen Leistungen sammeln
|
||||
$positiveValues = array_filter(
|
||||
$userEnergyProv,
|
||||
function ($l) {
|
||||
return $l <= 0;
|
||||
// 1. Fallback: Wert aus userEnergyProv, der betragsmäßig am nächsten bei 0 liegt
|
||||
if (!empty($userEnergyProv)) {
|
||||
$closestToZero = null;
|
||||
foreach ($userEnergyProv as $val) {
|
||||
if ($closestToZero === null || abs($val) < abs($closestToZero)) {
|
||||
$closestToZero = $val;
|
||||
}
|
||||
}
|
||||
$minimalleistung = $closestToZero;
|
||||
} else {
|
||||
$minimalleistung = 0;
|
||||
}
|
||||
);
|
||||
// 2. Falls keine Werte ≥ 0 vorhanden sind, auf 0 zurückfallen
|
||||
$fallbackMinimum = empty($positiveValues)
|
||||
? 0
|
||||
: min($positiveValues);
|
||||
|
||||
// 3. minimalleistung = dieser Fallback
|
||||
$minimalleistung = $fallbackMinimum*-1;
|
||||
// 2. Welcher Wert liegt weiter von 0 entfernt? (größerer Absolutwert)
|
||||
if (abs($leistung) >= abs($minimalleistung)) {
|
||||
$chosen = $leistung*-1;
|
||||
} else {
|
||||
$chosen = $minimalleistung;
|
||||
}
|
||||
|
||||
// 4. den höheren Wert wählen und für IPS negativieren
|
||||
$schreibleistung = max($leistung, $minimalleistung) * -1;
|
||||
// 3. Für IPS negativieren und schreiben
|
||||
$schreibleistung = $chosen * -1;
|
||||
|
||||
// 5. Aktion ausführen
|
||||
if (IPS_InstanceExists($userInstanceID)) {
|
||||
IPS_RequestAction(
|
||||
$userInstanceID,
|
||||
@@ -451,7 +459,7 @@ class Manager extends IPSModule
|
||||
);
|
||||
IPS_LogMessage(
|
||||
"Manager",
|
||||
"aufgerufen setleistung (Berechnung in foreach): " . $schreibleistung
|
||||
"aufgerufen setleistung (weiter von 0): " . $schreibleistung
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user