diff --git a/HauptManager/module.php b/HauptManager/module.php index 835970d..abb3b2d 100644 --- a/HauptManager/module.php +++ b/HauptManager/module.php @@ -349,22 +349,36 @@ class HauptManager extends IPSModule // Prüfen, dass jeder User mindestens seinen minimalwert an Leistung bekommt foreach ($userEnergyProv as $userInstanceID => $leistung) { - $minimalleitsung = min( - array_column( - array_filter($allSteps, function ($entry) use ( - $userInstanceID - ) { - return $entry["user"] == $userInstanceID; - }), - "step" - ) - ); + $positiveValues = array_filter( + array_column( + $samePriorityUsers, + 'PowerSteps', + 'InstanceID' + )[$userInstanceID], + function ($l) { + return $l >= 0; + } + ); + // 2. Falls keine Werte ≥ 0 vorhanden sind, auf 0 zurückfallen + $fallbackMinimum = empty($positiveValues) + ? max( array_column( + $samePriorityUsers, + 'PowerSteps', + 'InstanceID' + )[$userInstanceID]) + : min($positiveValues); - IPS_LogMessage("Manager", $userInstanceID); - IPS_LogMessage("Manager", $minimalleitsung); - IPS_LogMessage("Manager", $remainingPower); - // Jedem user den höheren der beiden werte aus minimalwert oder vergebenem zuteilen - $leistung = max($leistung["Set_Leistung"], $minimalleitsung); + // 3. minimalleistung = dieser Fallback + $minimalleistung = $fallbackMinimum; + + // 4. den höheren Wert wählen und für IPS negativieren + //$schreibleistung = max($leistung, $minimalleistung); + + if (abs($leistung["Set_Leistung"]) > abs($minimalleistung)) { + $leistung = $leistung["Set_Leistung"]; + } else { + $leistung = $minimalleistung; + } // Methode SetAktuelle_Leistung für jeden Verbraucher mit der entsprechenden Energie aufrufen @@ -437,22 +451,37 @@ class HauptManager extends IPSModule // Prüfen, dass jeder User mindestens seinen minimalwert an Leistung bekommt foreach ($userEnergyProv as $userInstanceID => $leistung) { - $minimalleitsung = min( - array_column( - array_filter($allSteps, function ($entry) use ( - $userInstanceID - ) { - return $entry["user"] == $userInstanceID; - }), - "step" - ) - ); + $positiveValues = array_filter( + array_column( + $samePriorityUsers, + 'PowerSteps', + 'InstanceID' + )[$userInstanceID], + function ($l) { + return $l <= 0; + } + ); + // 2. Falls keine Werte ≥ 0 vorhanden sind, auf 0 zurückfallen + $fallbackMinimum = empty($positiveValues) + ? min( array_column( + $samePriorityUsers, + 'PowerSteps', + 'InstanceID' + )[$userInstanceID]) + : max($positiveValues); - IPS_LogMessage("Manager", $userInstanceID); - IPS_LogMessage("Manager", $minimalleitsung); - IPS_LogMessage("Manager", $remainingPower); + // 3. minimalleistung = dieser Fallback + $minimalleistung = $fallbackMinimum; + + // 4. den höheren Wert wählen und für IPS negativieren + //$schreibleistung = max($leistung, $minimalleistung); + + if (abs($leistung["Set_Leistung"]) > abs($minimalleistung)) { + $leistung = $leistung["Set_Leistung"]*-1; + } else { + $leistung = $minimalleistung; + } // Jedem user den höheren der beiden werte aus minimalwert oder vergebenem zuteilen - $leistung = max($leistung["Set_Leistung"], $minimalleitsung)*-1; // Methode SetAktuelle_Leistung für jeden Verbraucher mit der entsprechenden Energie aufrufen