diff --git a/HauptManager/module.php b/HauptManager/module.php index 0504eef..b8229d7 100644 --- a/HauptManager/module.php +++ b/HauptManager/module.php @@ -56,10 +56,10 @@ class HauptManager extends IPSModule ]; - $summeNetzbezug += $decodedUser["Netzbezug"]; + $Netzbezug += $decodedUser["Netzbezug"]; } } - IPS_LogMessage("Hauptmanager", print_r($Verbraucher_Liste)); + IPS_LogMessage("Hauptmanager", print_r($Verbraucher_Liste_Korr)); IPS_LogMessage("Hauptmanager", $Netzbezug); @@ -67,7 +67,7 @@ class HauptManager extends IPSModule $Peakleistung = $this->ReadPropertyInteger("Peakleistung"); $Ueberschussleistung = $this->ReadPropertyInteger("Ueberschussleistung"); - + $Is_Peak_Shaving = false; // Fallunterscheidung ob auf Solarladen oder Peakshaving gerregelt wird. if ($Netzbezug < ($Peakleistung - $Ueberschussleistung) / 2) { $remainingPower = -1 * (-1 * $Ueberschussleistung + $Netzbezug); @@ -79,85 +79,49 @@ class HauptManager extends IPSModule // Alle Energieverbraucher auslesen und dekodieren - if (empty($Verbraucher_Liste)) { + if (empty($Verbraucher_Liste_Korr)) { // Liste ist leer, daher nichts zu tun IPS_LogMessage("Manager", "aufgerufen leere liste"); return; } - // Frage alle Energieverbraucher ab, was sie für Leistungen benötigen könnten - foreach ($Verbraucher_Liste as $user) { - if (IPS_InstanceExists($user["Verbraucher"])) { - IPS_RequestAction($user["Verbraucher"],"GetCurrentData", $Is_Peak_Shaving); - IPS_LogMessage("Manager", "aufgerufen getcurrentdata"); - - } - } - - $filteredVerbraucher = []; // Array das später mit allen Verbrauchsdaten der Energieverbraucher gefüllt wird $allIdle = true; // Variable zur Überprüfung, ob alle Benutzer Idle = true sind $totalAktuelle_Leistung = 0; // Variable zur Summierung der Aktuelle_Leistung Werte // Fülle das Array mit allen entsprechenden Werten der Verbraucher ab - foreach ($Verbraucher_Liste as $user) { - if (!IPS_InstanceExists($user["Verbraucher"])) { - IPS_LogMessage("Manager", "aufgerufen komisch"); - - continue; - } - - // Werte direkt von der Verbraucher-Instanz abrufen - $Aktuelle_Leistung = GetValue(IPS_GetObjectIDByIdent("Aktuelle_Leistung", $user["Verbraucher"])); - $Bezogene_Energie = GetValue(IPS_GetObjectIDByIdent("Bezogene_Energie", $user["Verbraucher"])); - $PV_Prio = GetValue(IPS_GetObjectIDByIdent("PV_Prio", $user["Verbraucher"])); - $Sperre_Prio = GetValue(IPS_GetObjectIDByIdent("Sperre_Prio", $user["Verbraucher"])); - $idle = GetValue(IPS_GetObjectIDByIdent("Idle", $user["Verbraucher"])); - $powerStepsJson = GetValue(IPS_GetObjectIDByIdent("PowerSteps", $user["Verbraucher"])); - $powerSteps = json_decode($powerStepsJson, true); - - // Verbraucher-Daten zum gefilterten Array hinzufügen - $filteredVerbraucher[] = [ - "Verbraucher" => $user["Verbraucher"], - "InstanceID" => $user["Verbraucher"], - "Aktuelle_Leistung" => $Aktuelle_Leistung, - "Bezogene_Energie" => $Bezogene_Energie, - "PV_Prio" => $PV_Prio, - "Sperre_Prio" => $Sperre_Prio, - "Idle" => $idle, - "PowerSteps" => $powerSteps, - ]; - + foreach ($Verbraucher_Liste_Korr as $user) { + // Überprüfen, ob alle Benutzer Idle = true sind, wenn einer nicht ist, wird später verworfen... - if (!$idle) { + if (!$user["User"]["Idle"]) { $allIdle = false; IPS_LogMessage("Manager", "nciht idle"); } // Addiere die aktuell bereits verwendete Leistung auf, um sie bei der verteilung zu berücksichtigen - $totalAktuelle_Leistung += $Aktuelle_Leistung; + $totalAktuelle_Leistung += $user["User"]["Aktuelle_Leistung"]; } // Berücksichtigung der bereits verteilten Leistungen (nachher kann dafür wieder bei 0 begonnen werden zu verteilen) $remainingPower += $totalAktuelle_Leistung; - // Abbrechen wenn es keine gefilterten User gibt - if (empty($filteredVerbraucher)) { - return; - } // Wenn nicht alle Benutzer Idle = true sind, rufe SetAktuelle_Leistung mit Aktuelle_Leistung Werten auf, (alle Verbraucher behalten die aktuelle Leistung) if (!$allIdle) { foreach ($filteredVerbraucher as $user) { - IPS_RequestAction($user["InstanceID"],"SetAktuelle_Leistung",$user["Aktuelle_Leistung"]); - IPS_LogMessage("Manager", "aufgerufen nicht alle idle"); + $sendarray = [ + "peak" => $Is_Peak_Shaving, + "setpower" => $user["User"]["Aktuelle_Leistung"] + ] + RequestAction($user["Sendback"], json_encode($sendarray)); + IPS_LogMessage("HauptManager", "aufgerufen nicht alle idle"); } return; } // Sortiere die Verbruacher nach Priorität entweder der PV_Prio oder der Peak Prio - usort($filteredVerbraucher, function ($a, $b) use ( + usort($filteredVerbraucher["User"], function ($a, $b) use ( $Is_Peak_Shaving ) { $primaryKey = $Is_Peak_Shaving ? "Sperre_Prio" : "PV_Prio"; diff --git a/library.json b/library.json index a9712f3..8868886 100644 --- a/library.json +++ b/library.json @@ -6,7 +6,7 @@ "compatibility": { "version": "7.1" }, - "version": "1.121", + "version": "1.122", "build": 0, "date": 0 } \ No newline at end of file