diff --git a/Manager/module.php b/Manager/module.php index a53348b..cdd3d1d 100644 --- a/Manager/module.php +++ b/Manager/module.php @@ -353,29 +353,25 @@ class Manager extends IPSModule // Prüfen, dass jeder User mindestens seinen minimalwert an Leistung bekommt foreach ($userEnergyProv as $userInstanceID => $leistung) { - // 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; - } + // 1. Innerhalb der Schleife: alle nicht-negativen Leistungen sammeln + $positiveValues = array_filter( + $userEnergyProv, + function ($l) { + return $l >= 0; } - $minimalleistung = $closestToZero; - } else { - $minimalleistung = 0; - } + ); + // 2. Falls keine Werte ≥ 0 vorhanden sind, auf 0 zurückfallen + $fallbackMinimum = empty($positiveValues) + ? 0 + : min($positiveValues); - // 2. Welcher Wert liegt weiter von 0 entfernt? (größerer Absolutwert) - if (abs($leistung) >= abs($minimalleistung)) { - $chosen = $leistung; - } else { - $chosen = $minimalleistung; - } + // 3. minimalleistung = dieser Fallback + $minimalleistung = $fallbackMinimum; - // 3. Für IPS negativieren und schreiben - $schreibleistung = $chosen; + // 4. den höheren Wert wählen und für IPS negativieren + $schreibleistung = max($leistung, $minimalleistung); + // 5. Aktion ausführen if (IPS_InstanceExists($userInstanceID)) { IPS_RequestAction( $userInstanceID, @@ -384,7 +380,7 @@ class Manager extends IPSModule ); IPS_LogMessage( "Manager", - "aufgerufen setleistung (weiter von 0): " . $schreibleistung + "aufgerufen setleistung (Berechnung in foreach): " . $schreibleistung ); } } @@ -428,29 +424,25 @@ class Manager extends IPSModule // Prüfen, dass jeder User mindestens seinen minimalwert an Leistung bekommt foreach ($userEnergyProv as $userInstanceID => $leistung) { - // 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; - } + // 1. Innerhalb der Schleife: alle nicht-negativen Leistungen sammeln + $positiveValues = array_filter( + $userEnergyProv, + function ($l) { + return $l <= 0; } - $minimalleistung = $closestToZero; - } else { - $minimalleistung = 0; - } + ); + // 2. Falls keine Werte ≥ 0 vorhanden sind, auf 0 zurückfallen + $fallbackMinimum = empty($positiveValues) + ? 0 + : min($positiveValues); - // 2. Welcher Wert liegt weiter von 0 entfernt? (größerer Absolutwert) - if (abs($leistung) >= abs($minimalleistung)) { - $chosen = $leistung*-1; - } else { - $chosen = $minimalleistung; - } + // 3. minimalleistung = dieser Fallback + $minimalleistung = $fallbackMinimum*-1; - // 3. Für IPS negativieren und schreiben - $schreibleistung = $chosen * -1; + // 4. den höheren Wert wählen und für IPS negativieren + $schreibleistung = max($leistung, $minimalleistung) * -1; + // 5. Aktion ausführen if (IPS_InstanceExists($userInstanceID)) { IPS_RequestAction( $userInstanceID, @@ -459,7 +451,7 @@ class Manager extends IPSModule ); IPS_LogMessage( "Manager", - "aufgerufen setleistung (weiter von 0): " . $schreibleistung + "aufgerufen setleistung (Berechnung in foreach): " . $schreibleistung ); } }