From bc4edf1c5a7e404e8e2fe21f9f46c7b279c64012 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=A4fliger?= Date: Thu, 1 May 2025 07:15:33 +0200 Subject: [PATCH] no message --- HauptManager/module.php | 14 ++++++-------- Manager/module.php | 11 +++++++---- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/HauptManager/module.php b/HauptManager/module.php index 8be4517..60de778 100644 --- a/HauptManager/module.php +++ b/HauptManager/module.php @@ -14,6 +14,7 @@ class HauptManager extends IPSModule $this->RegisterPropertyInteger("Interval", 3); // Recheninterval $this->RegisterVariableInteger("Gesamtnetzbezug", "Gesamtnetzbezug", "", 0); + $this->RegisterVariableBoolean("Is_Peak_Shaving", false); // Timer registrieren $this->RegisterTimer("Timer_DistributeEnergy",$this->ReadPropertyInteger("Interval")*1000,"IPS_RequestAction(" .$this->InstanceID .', "DistributeEnergy", "");'); @@ -77,15 +78,9 @@ class HauptManager extends IPSModule $Ueberschussleistung = $this->ReadPropertyInteger("Ueberschussleistung"); $Is_Peak_Shaving = false; - IPS_LogMessage("MaHaunager", $Peakleistung); - - IPS_LogMessage("MaHaunager", $Ueberschussleistung); - - IPS_LogMessage("MaHaunager", $Netzbezug); - // Fallunterscheidung ob auf Solarladen oder Peakshaving gerregelt wird. - if ($Netzbezug < ($Peakleistung - $Ueberschussleistung) / 2) { + if ($Netzbezug < ($Peakleistung + $Ueberschussleistung) / 2) { $remainingPower = -1 * (-1 * $Ueberschussleistung + $Netzbezug); $Is_Peak_Shaving = false; } else { @@ -127,7 +122,7 @@ class HauptManager extends IPSModule $remainingPower += $totalAktuelle_Leistung; // Wenn nicht alle Benutzer Idle = true sind, rufe SetAktuelle_Leistung mit Aktuelle_Leistung Werten auf, (alle Verbraucher behalten die aktuelle Leistung) - if (!$allIdle) { + if (!$allIdle || ($Is_Peak_Shaving != $this->GetValue("Is_Peak_Shaving"))) { // Schritt 1: Benutzer nach Writeback-Wert aufteilen $writebackArrays = []; foreach ($Verbraucher_Liste_Korr[0]["User"] as $user) { @@ -161,8 +156,11 @@ class HauptManager extends IPSModule // Schritt 4: RequestAction aufrufen RequestAction($writeback, $resultString); } + $this->SetValue("Is_Peak_Shaving", $Is_Peak_Shaving); + return; } + $this->SetValue("Is_Peak_Shaving", $Is_Peak_Shaving); // Sortiere die Verbruacher nach Priorität entweder der PV_Prio oder der Peak Prio usort($Verbraucher_Liste_Korr[0]["User"], function ($a, $b) use ( diff --git a/Manager/module.php b/Manager/module.php index be24152..23acf09 100644 --- a/Manager/module.php +++ b/Manager/module.php @@ -17,6 +17,8 @@ class Manager extends IPSModule $this->RegisterPropertyInteger("DatenZuruck", 0); // Initialisierung mit 0 $this->RegisterPropertyInteger("Interval", 2); // Recheninterval + $this->RegisterVariableBoolean("Is_Peak_Shaving", false); + // Timer registrieren $this->RegisterTimer("Timer_DistributeEnergy",$this->ReadPropertyInteger("Interval")*1000,"IPS_RequestAction(" .$this->InstanceID .', "DistributeEnergy", "");'); @@ -78,7 +80,7 @@ class Manager extends IPSModule $Ueberschussleistung = $this->ReadPropertyInteger("Ueberschussleistung"); // Fallunterscheidung ob auf Solarladen oder Peakshaving gerregelt wird. - if ($Netzbezug < ($Peakleistung - $Ueberschussleistung) / 2) { + if ($Netzbezug < ($Peakleistung + $Ueberschussleistung) / 2) { $remainingPower = -1 * (-1 * $Ueberschussleistung + $Netzbezug); $Is_Peak_Shaving = false; } else { @@ -163,16 +165,17 @@ class Manager extends IPSModule return; } - // Wenn nicht alle Benutzer Idle = true sind, rufe SetAktuelle_Leistung mit Aktuelle_Leistung Werten auf, (alle Verbraucher behalten die aktuelle Leistung) - if (!$allIdle) { + // Wenn nicht alle Benutzer Idle = true sind, oder sich der zustand von Is_Peak_shaving gerade verändert hat rufe SetAktuelle_Leistung mit Aktuelle_Leistung Werten auf, (alle Verbraucher behalten die aktuelle Leistung) + if (!$allIdle || ($Is_Peak_Shaving != $this->GetValue("Is_Peak_Shaving"))) { foreach ($filteredVerbraucher as $user) { IPS_RequestAction($user["InstanceID"],"SetAktuelle_Leistung",$user["Aktuelle_Leistung"]); IPS_LogMessage("Manager", "aufgerufen nicht alle idle"); + $this->SetValue("Is_Peak_Shaving", $Is_Peak_Shaving); } return; } - + $this->SetValue("Is_Peak_Shaving", $Is_Peak_Shaving); // Sortiere die Verbruacher nach Priorität entweder der PV_Prio oder der Peak Prio usort($filteredVerbraucher, function ($a, $b) use ( $Is_Peak_Shaving