diff --git a/HauptManager/module.php b/HauptManager/module.php index fceb341..835970d 100644 --- a/HauptManager/module.php +++ b/HauptManager/module.php @@ -110,12 +110,12 @@ class HauptManager extends IPSModule } // Addiere die aktuell bereits verwendete Leistung auf, um sie bei der verteilung zu berücksichtigen - if(in_array(0, $user["PowerSteps"], true)){ + //if(in_array(0, $user["PowerSteps"], true)){ // Addiere die aktuell bereits verwendete Leistung auf, um sie bei der verteilung zu berücksichtigen $totalAktuelle_Leistung += ($user["Aktuelle_Leistung"]- $user["Leistung_Delta"]); - } + //} } // Berücksichtigung der bereits verteilten Leistungen (nachher kann dafür wieder bei 0 begonnen werden zu verteilen) @@ -206,8 +206,10 @@ class HauptManager extends IPSModule if (empty($samePriorityUsers)) { continue; } + $withZero = []; - $withoutZero = []; + $withoutZeroHigh = []; + $withoutZeroLow = []; /* Alter Verteilalgor. zu testzwecken auskommentiert, wird dann gelöscht wenns funktioniert. foreach ($samePriorityUsers as $entry) { if (min($entry["PowerSteps"]) <= 0) { @@ -216,12 +218,54 @@ class HauptManager extends IPSModule $withoutZero[] = $entry; } } + + // Verbraucher die nicht 0 annhemen können erhalten nun den minimalwert + if (!empty($withoutZero)) { + foreach ($withoutZero as $entry) { + $instanceID = $entry["InstanceID"]; + $minPowerStep = min($entry["PowerSteps"]); + + IPS_RequestAction($instanceID,"SetAktuelle_Leistung",$minPowerStep); + //$remainingPower -= $entry["Aktuelle_Leistung"]; + } + } */ /* Neuer Block */ foreach ($samePriorityUsers as $entry) { - $withZero[] = $entry; + $withZero[] = $entry; + + if (min($entry["PowerSteps"]) > 0) { + + $withoutZeroHigh[] = $entry; + } + if (max($entry["PowerSteps"]) < 0) { + + $withoutZeroLow[] = $entry; + } } + + // Verbraucher die nicht 0 annhemen können erhalten nun den minimalwert + if (!empty($withoutZeroHigh)) { + foreach ($withoutZeroHigh as $entry) { + $instanceID = $entry["InstanceID"]; + $minPowerStep = min($entry["PowerSteps"]); + + $remainingPower -= $minPowerStep; + } + } + // Verbraucher die nicht 0 annhemen können erhalten nun den minimalwert + if (!empty($withoutZeroLow)) { + foreach ($withoutZeroLow as $entry) { + $instanceID = $entry["InstanceID"]; + $minPowerStep = max($entry["PowerSteps"]); + + $remainingPower += $minPowerStep; + } + } + + + /* Neuer Block Ende */ // Verbraucher die nicht 0 annhemen können erhalten nun den minimalwert diff --git a/Manager/module.php b/Manager/module.php index f6e72d8..ef7ba70 100644 --- a/Manager/module.php +++ b/Manager/module.php @@ -169,12 +169,12 @@ class Manager extends IPSModule IPS_LogMessage("Manager", "nciht idle"); } - if(in_array(0, $powerSteps, true)){ + //if(in_array(0, $powerSteps, true)){ // Addiere die aktuell bereits verwendete Leistung auf, um sie bei der verteilung zu berücksichtigen $totalAktuelle_Leistung += ($Aktuelle_Leistung-$delta); - } + // } } // Berücksichtigung der bereits verteilten Leistungen (nachher kann dafür wieder bei 0 begonnen werden zu verteilen) @@ -238,7 +238,8 @@ class Manager extends IPSModule continue; } $withZero = []; - $withoutZero = []; + $withoutZeroHigh = []; + $withoutZeroLow = []; // Verbraucher die nicht 0 Annhemen können, bekommen einfach den tiefsten wert @@ -252,15 +253,6 @@ class Manager extends IPSModule $withoutZero[] = $entry; } } - */ - - /* Neuer Block */ - foreach ($samePriorityUsers as $entry) { - $withZero[] = $entry; - } - - /* Neuer Block Ende */ - // Verbraucher die nicht 0 annhemen können erhalten nun den minimalwert if (!empty($withoutZero)) { @@ -272,6 +264,45 @@ class Manager extends IPSModule //$remainingPower -= $entry["Aktuelle_Leistung"]; } } + */ + + /* Neuer Block */ + foreach ($samePriorityUsers as $entry) { + $withZero[] = $entry; + + if (min($entry["PowerSteps"]) > 0) { + + $withoutZeroHigh[] = $entry; + } + if (max($entry["PowerSteps"]) < 0) { + + $withoutZeroLow[] = $entry; + } + } + + // Verbraucher die nicht 0 annhemen können erhalten nun den minimalwert + if (!empty($withoutZeroHigh)) { + foreach ($withoutZeroHigh as $entry) { + $instanceID = $entry["InstanceID"]; + $minPowerStep = min($entry["PowerSteps"]); + + $remainingPower -= $minPowerStep; + } + } + // Verbraucher die nicht 0 annhemen können erhalten nun den minimalwert + if (!empty($withoutZeroLow)) { + foreach ($withoutZeroLow as $entry) { + $instanceID = $entry["InstanceID"]; + $minPowerStep = max($entry["PowerSteps"]); + + $remainingPower += $minPowerStep; + } + } + + + /* Neuer Block Ende */ + + // Nun die verteilen, die 0 erhalten können.