From 2ffd4efc4fb70d504eefe62edb1e1f4094cc39d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=A4fliger?= Date: Wed, 6 Aug 2025 13:43:02 +0200 Subject: [PATCH] no message --- Manager/module.php | 89 ++++++++++++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 38 deletions(-) diff --git a/Manager/module.php b/Manager/module.php index 29d48f7..cdd3d1d 100644 --- a/Manager/module.php +++ b/Manager/module.php @@ -240,7 +240,7 @@ class Manager extends IPSModule $withZero = []; $withoutZeroHigh = []; $withoutZeroLow = []; - + // Verbraucher die nicht 0 Annhemen können, bekommen einfach den tiefsten wert @@ -348,35 +348,40 @@ class Manager extends IPSModule } - //else - - - // mache invertierte verteilung + // 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" - ) + // 1. Innerhalb der Schleife: alle nicht-negativen Leistungen sammeln + $positiveValues = array_filter( + $userEnergyProv, + function ($l) { + return $l >= 0; + } ); + // 2. Falls keine Werte ≥ 0 vorhanden sind, auf 0 zurückfallen + $fallbackMinimum = empty($positiveValues) + ? 0 + : min($positiveValues); - // Jedem user den höheren der beiden werte aus minimalwert oder vergebenem zuteilen - $leistung = max($leistung, $minimalleitsung); + // 3. minimalleistung = dieser Fallback + $minimalleistung = $fallbackMinimum; + // 4. den höheren Wert wählen und für IPS negativieren + $schreibleistung = max($leistung, $minimalleistung); - - // Methode SetAktuelle_Leistung für jeden Verbraucher mit der entsprechenden Energie aufrufen + // 5. Aktion ausführen if (IPS_InstanceExists($userInstanceID)) { - IPS_RequestAction($userInstanceID,"SetAktuelle_Leistung",$leistung); - IPS_LogMessage("Manager", "aufgerufen setleistung if". $leistung); - + IPS_RequestAction( + $userInstanceID, + "SetAktuelle_Leistung", + $schreibleistung + ); + IPS_LogMessage( + "Manager", + "aufgerufen setleistung (Berechnung in foreach): " . $schreibleistung + ); } } } @@ -388,7 +393,7 @@ class Manager extends IPSModule if($step<=0){ $allSteps[] = [ "user" => $user["InstanceID"], - "Leistung_Delta" => $user["Leistung_Delta"], + //"Leistung_Delta" => $user["Leistung_Delta"], "step" => -1*$step, ];} } @@ -419,27 +424,35 @@ class Manager 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" - ) + // 1. Innerhalb der Schleife: alle nicht-negativen Leistungen sammeln + $positiveValues = array_filter( + $userEnergyProv, + function ($l) { + return $l <= 0; + } ); + // 2. Falls keine Werte ≥ 0 vorhanden sind, auf 0 zurückfallen + $fallbackMinimum = empty($positiveValues) + ? 0 + : min($positiveValues); - // Jedem user den höheren der beiden werte aus minimalwert oder vergebenem zuteilen - $schreibleistung = max($leistung, $minimalleitsung)*-1; + // 3. minimalleistung = dieser Fallback + $minimalleistung = $fallbackMinimum*-1; + // 4. den höheren Wert wählen und für IPS negativieren + $schreibleistung = max($leistung, $minimalleistung) * -1; - - // Methode SetAktuelle_Leistung für jeden Verbraucher mit der entsprechenden Energie aufrufen + // 5. Aktion ausführen if (IPS_InstanceExists($userInstanceID)) { - IPS_RequestAction($userInstanceID,"SetAktuelle_Leistung",$schreibleistung); - IPS_LogMessage("Manager", "aufgerufen setleistung else ".$schreibleistung); - + IPS_RequestAction( + $userInstanceID, + "SetAktuelle_Leistung", + $schreibleistung + ); + IPS_LogMessage( + "Manager", + "aufgerufen setleistung (Berechnung in foreach): " . $schreibleistung + ); } } }