diff --git a/Manager/module.php b/Manager/module.php index 102427a..6404ac8 100644 --- a/Manager/module.php +++ b/Manager/module.php @@ -312,8 +312,42 @@ class Manager extends IPSModule // Nun die verteilen, die 0 erhalten können. $samePriorityUsers = $withZero; + // $userEnergyProv = []; + // $userEnergyProv = array_fill_keys(array_column($samePriorityUsers, "InstanceID"), 0); // Initialisierung für jeden Benutzer auf 0 setzen + + $userEnergyProv = []; - $userEnergyProv = array_fill_keys(array_column($samePriorityUsers, "InstanceID"), 0); // Initialisierung für jeden Benutzer auf 0 setzen + +foreach ($samePriorityUsers as $entry) { + $instanceID = $entry["InstanceID"]; + // Schutz: falls PowerSteps nicht gesetzt oder kein Array ist + $steps = (isset($entry["PowerSteps"]) && is_array($entry["PowerSteps"])) ? $entry["PowerSteps"] : [0]; + + // Wenn 0 als möglicher Step vorhanden ist -> 0 setzen + + $minStep = min($steps); + $maxStep = max($steps); + + if (in_array(0, $steps, true)) { + $userEnergyProv[$instanceID] = 0; + continue; + } elseif ($minStep > 0) { + // nur positive Schritte -> minimalen positiven Wert einsetzen + $userEnergyProv[$instanceID] = $minStep; + // entspricht deinem vorherigen Verhalten: remainingPower reduzieren + $remainingPower -= $minStep; + } elseif ($maxStep < 0) { + // nur negative Schritte -> maximalen (am wenigsten negativen) Wert einsetzen + $userEnergyProv[$instanceID] = $maxStep; + // entspricht deinem vorherigen Verhalten: remainingPower erhöhen (maxStep ist negativ) + $remainingPower += $maxStep; + } else { + // Mixed (positive & negative) aber kein 0 -> Fallback 0 (ändere wenn nötig) + $userEnergyProv[$instanceID] = 0; + } +} + + IPS_LogMessage("Manag", $remainingPower);