Auf Stand V2.001 gebracht, Sofarmodul ist jetzt integriert.
This commit is contained in:
@@ -14,6 +14,7 @@ class HauptManager extends IPSModule
|
||||
$this->RegisterPropertyInteger("Interval", 3); // Recheninterval
|
||||
|
||||
$this->RegisterVariableInteger("Gesamtnetzbezug", "Gesamtnetzbezug", "", 0);
|
||||
$this->RegisterVariableBoolean("Is_Peak_Shaving", "Peakshaving", "", false);
|
||||
|
||||
// Timer registrieren
|
||||
$this->RegisterTimer("Timer_DistributeEnergy",$this->ReadPropertyInteger("Interval")*1000,"IPS_RequestAction(" .$this->InstanceID .', "DistributeEnergy", "");');
|
||||
@@ -53,9 +54,9 @@ class HauptManager extends IPSModule
|
||||
|
||||
$decodedUser = json_decode(GetValue($user["User_Up"]), true);
|
||||
|
||||
if (isset($decodedUser["Timestamp"]) && (($currentTime - $decodedUser["Timestamp"])) < 30) {
|
||||
if (isset($decodedUser["Timestamp"]) && ((($currentTime - $decodedUser["Timestamp"])) < 30) && array_key_exists('User', $decodedUser)) {
|
||||
|
||||
foreach ($decodedUser["Users"] as $subuser) {
|
||||
foreach ($decodedUser["User"] as $subuser) {
|
||||
$subuser['Writeback'] = $user["User_Down"];
|
||||
|
||||
$Verbraucher_Liste_Korr[0]["User"][] = $subuser;
|
||||
@@ -64,7 +65,7 @@ class HauptManager extends IPSModule
|
||||
$Netzbezug += $decodedUser["Netzbezug"];
|
||||
}else{
|
||||
|
||||
RequestAction($user["User_Down"],'{"timestamp":'.time().',"Is_Peak_Shaving":'.true.',"User":[]}');
|
||||
SetValue($user["User_Down"],'{"Timestamp":'.time().',"Is_Peak_Shaving":'.true.',"User":[]}');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -76,8 +77,10 @@ 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) {
|
||||
if ($Netzbezug < ($Peakleistung + $Ueberschussleistung) / 2) {
|
||||
$remainingPower = -1 * (-1 * $Ueberschussleistung + $Netzbezug);
|
||||
$Is_Peak_Shaving = false;
|
||||
} else {
|
||||
@@ -90,7 +93,6 @@ class HauptManager extends IPSModule
|
||||
if (empty($Verbraucher_Liste_Korr[0]["User"])) {
|
||||
// Liste ist leer, daher nichts zu tun
|
||||
IPS_LogMessage("Manager", "aufgerufen leere liste");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -120,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) {
|
||||
@@ -154,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 (
|
||||
@@ -269,14 +274,15 @@ class HauptManager extends IPSModule
|
||||
|
||||
$aktleistung = array_filter($userEnergyProv, function($entry2) use ($user, $manager) {
|
||||
|
||||
|
||||
return $entry2["user"] == $user && $entry2["Writeback"] == $manager;
|
||||
});
|
||||
IPS_LogMessage("Aktuelle LEistung vor foreahc", print_r($aktleistung));
|
||||
|
||||
foreach($aktleistung as $entry){
|
||||
$aktleistung = $entry;
|
||||
}
|
||||
|
||||
|
||||
IPS_LogMessage("Aktuelle LEistung Mnaagear", print_r($aktleistung));
|
||||
// Überprüfe, ob noch genügend verbleibende Energie für den nächsten Schritt vorhanden ist
|
||||
if ($remainingPower >= $powerstep - $aktleistung['Set_Leistung']) {
|
||||
// Aktualisiere die verbleibende Energie und die bereitgestellte Energie für den Benutzer
|
||||
@@ -359,6 +365,7 @@ class HauptManager extends IPSModule
|
||||
return $entry2["user"] == $user && $entry2["Writeback"] == $manager;
|
||||
});
|
||||
|
||||
|
||||
foreach($aktleistung as $entry){
|
||||
$aktleistung = $entry;
|
||||
}
|
||||
@@ -426,7 +433,7 @@ class HauptManager extends IPSModule
|
||||
// Schritt 2: Foreach-Schleife pro Writeback-Array
|
||||
foreach ($writebackArrays as $writeback => $users) {
|
||||
$resultArray = [
|
||||
'timestamp' => time(),
|
||||
'Timestamp' => time(),
|
||||
'Is_Peak_Shaving' => $Is_Peak_Shaving,
|
||||
'User' => []
|
||||
];
|
||||
@@ -442,7 +449,7 @@ class HauptManager extends IPSModule
|
||||
$resultString = json_encode($resultArray);
|
||||
|
||||
// Schritt 4: RequestAction aufrufen
|
||||
RequestAction($writeback, $resultString);
|
||||
SetValue($writeback, $resultString);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user