diff --git a/Verbraucher_extern/module.php b/Verbraucher_extern/module.php index 341dc1b..c060551 100644 --- a/Verbraucher_extern/module.php +++ b/Verbraucher_extern/module.php @@ -70,12 +70,9 @@ class Verbraucher_extern extends IPSModule private function berechneKombinationen(array $verbraucherListe) { $kombinationen = []; - IPS_LogMessage("externer verb 1", "1" .print_r($kombinationen)); - foreach ($verbraucherListe as $verbraucher) { if (GetValue($verbraucher['Read_Var']) == 1) { - IPS_LogMessage("externer verb 2", "2" .print_r($kombinationen)); $tempListe = []; if(empty($kombinationen)){ $kombinationen[] = $verbraucher['P_Nenn']; @@ -85,17 +82,51 @@ class Verbraucher_extern extends IPSModule } $kombinationen = array_merge($kombinationen, $tempListe); } - IPS_LogMessage("externer verb 3", "34" .print_r($kombinationen)); } } - IPS_LogMessage("externer verb 4", "4" . print_r($kombinationen)); - sort($kombinationen); - IPS_LogMessage("externer verb 5", "5" .print_r($kombinationen)); - return array_values(array_unique($kombinationen)); } + + private function find($target, $values, $current, &$result) { + if ($target == 0) { + $result[] = $current; + return; + } + if ($target < 0) { + return; + } + for ($i = 0; $i < count($values); $i++) { + $newValues = array_slice($values, $i + 1); + find($target - $values[$i], $newValues, array_merge($current, [$values[$i]]), $result); + } + } + + private function berechneInverseKombinationen() + { + $values = json_decode($this->GetValue("PowerSteps")); + $result = []; + + $this->find($this->GetValue("Power"), $values, [], $result); + + $verbraucherListe = json_decode($this->ReadPropertyString("Verbraucher_Liste"), true); + + + $firstCombination = $result[0]; + + foreach ($verbraucherListe as &$verbraucher) { + if (in_array($verbraucher['P_Nenn'], $firstCombination)) { + SetValue($verbraucher['Write_Var'], 1); + } else { + SetValue($verbraucher['Write_Var'], 0); + } + } + + return $result; + + } + public function SetAktuelle_Leistung(float $power) { $this->CheckIdle($power);