Anpassgunen an zeitintervallen, hauptmanager auf manager angepasst (achtung nciht updaten muss ncoht fertig werden)
This commit is contained in:
@@ -11,16 +11,19 @@ class HauptManager extends IPSModule
|
||||
$this->RegisterPropertyInteger("Ueberschussleistung", 0);
|
||||
$this->RegisterPropertyInteger("Netzbezug", 0); // Initialisierung mit 0
|
||||
$this->RegisterPropertyString("Verbraucher_Liste", "[]");
|
||||
$this->RegisterPropertyInteger("Interval", 3); // Recheninterval
|
||||
|
||||
$this->RegisterVariableInteger("Gesamtnetzbezug", "Gesamtnetzbezug", "", 0);
|
||||
|
||||
// Timer registrieren
|
||||
$this->RegisterTimer("Timer_DistributeEnergy",5000,"IPS_RequestAction(" .$this->InstanceID .', "DistributeEnergy", "");');
|
||||
$this->RegisterTimer("Timer_DistributeEnergy",$this->ReadPropertyInteger("Interval")*1000,"IPS_RequestAction(" .$this->InstanceID .', "DistributeEnergy", "");');
|
||||
}
|
||||
|
||||
public function ApplyChanges()
|
||||
{
|
||||
parent::ApplyChanges();
|
||||
$this->SetTimerInterval("Timer_DistributeEnergy",$this->ReadPropertyInteger("Interval")*1000);
|
||||
|
||||
//Liste aller Verbraucher einlesen
|
||||
}
|
||||
|
||||
@@ -59,6 +62,9 @@ class HauptManager extends IPSModule
|
||||
|
||||
}
|
||||
$Netzbezug += $decodedUser["Netzbezug"];
|
||||
}else{
|
||||
|
||||
SetValue($user["User_Up"],'{"timestamp":'.time().',"Is_Peak_Shaving":'true',"User":[]}');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -102,8 +108,14 @@ class HauptManager extends IPSModule
|
||||
}
|
||||
|
||||
// Addiere die aktuell bereits verwendete Leistung auf, um sie bei der verteilung zu berücksichtigen
|
||||
$totalAktuelle_Leistung += $user["Aktuelle_Leistung"];
|
||||
}
|
||||
if(in_array(0, $user["PowerSteps"], true)){
|
||||
|
||||
// Addiere die aktuell bereits verwendete Leistung auf, um sie bei der verteilung zu berücksichtigen
|
||||
$totalAktuelle_Leistung += $Aktuelle_Leistung;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Berücksichtigung der bereits verteilten Leistungen (nachher kann dafür wieder bei 0 begonnen werden zu verteilen)
|
||||
$remainingPower += $totalAktuelle_Leistung;
|
||||
|
||||
@@ -209,7 +221,7 @@ class HauptManager extends IPSModule
|
||||
'Writeback' => $user['Writeback'],
|
||||
'Set_Leistung' => min($entry["PowerSteps"])
|
||||
];
|
||||
$remainingPower -= $entry["Aktuelle_Leistung"];
|
||||
//$remainingPower -= $entry["Aktuelle_Leistung"];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -226,6 +238,7 @@ class HauptManager extends IPSModule
|
||||
];
|
||||
}
|
||||
|
||||
if($remainingPower>=0){
|
||||
// Alle Schritte der Benutzer in einem Array sammeln
|
||||
$allSteps = [];
|
||||
foreach ($samePriorityUsers as $user) {
|
||||
@@ -294,12 +307,8 @@ class HauptManager extends IPSModule
|
||||
IPS_LogMessage("Manager", $remainingPower);
|
||||
IPS_LogMessage("Manager", $leistung);
|
||||
// Jedem user den höheren der beiden werte aus minimalwert oder vergebenem zuteilen
|
||||
if($leistung <= $remainingPower){
|
||||
$leistung = max($leistung, $minimalleitsung);
|
||||
}elseif($remainingPower<=$minimalleitsung){
|
||||
$leistung = min($leistung, $minimalleitsung);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Methode SetAktuelle_Leistung für jeden Verbraucher mit der entsprechenden Energie aufrufen
|
||||
|
||||
@@ -312,7 +321,93 @@ class HauptManager extends IPSModule
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
else{
|
||||
|
||||
// Alle Schritte der Benutzer in einem Array sammeln
|
||||
$allSteps = [];
|
||||
foreach ($samePriorityUsers as $user) {
|
||||
foreach ($user["PowerSteps"] as $step) {
|
||||
$allSteps[] = [
|
||||
"user" => $user["InstanceID"],
|
||||
"Writeback" => $user["Writeback"],
|
||||
"step" => $step*-1,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Sortiere die Schritte nach Größe
|
||||
usort($allSteps, function ($a, $b) {
|
||||
return $a["step"] <=> $b["step"];
|
||||
});
|
||||
|
||||
$remainingPower = $remainingPower *-1;
|
||||
|
||||
// Iteriere durch alle Schritte
|
||||
foreach ($allSteps as $entry) {
|
||||
$user = $entry["user"];
|
||||
$manager = $entry["Writeback"];
|
||||
$powerstep = $entry["step"];
|
||||
|
||||
|
||||
$aktleistung = array_filter($userEnergyProv, function($entry2) use ($user, $manager) {
|
||||
|
||||
|
||||
return $entry2["user"] == $user && $entry2["Writeback"] == $manager;
|
||||
});
|
||||
|
||||
foreach($aktleistung as $entry){
|
||||
$aktleistung = $entry;
|
||||
}
|
||||
|
||||
// Ü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
|
||||
$remainingPower -= $powerstep - $aktleistung['Set_Leistung'];
|
||||
|
||||
array_walk($userEnergyProv, function(&$entry3) use ($user, $manager, $powerstep) {
|
||||
if ($entry3["user"] == $user && $entry3["Writeback"] == $manager) {
|
||||
$entry3["Set_Leistung"] = $powerstep;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
$remainingPower = $remainingPower *-1;
|
||||
|
||||
// Prüfen, dass jeder User mindestens seinen minimalwert an Leistung bekommt
|
||||
foreach ($userEnergyProv as $userInstanceID => $leistung) {
|
||||
$minimalleitsung = min(
|
||||
array_column(
|
||||
array_filter($allSteps, function ($entry) use (
|
||||
$userInstanceID
|
||||
) {
|
||||
return $entry["user"] == $userInstanceID;
|
||||
}),
|
||||
"step"
|
||||
)
|
||||
);
|
||||
|
||||
IPS_LogMessage("Manager", $userInstanceID);
|
||||
IPS_LogMessage("Manager", $minimalleitsung);
|
||||
IPS_LogMessage("Manager", $remainingPower);
|
||||
IPS_LogMessage("Manager", $leistung);
|
||||
// Jedem user den höheren der beiden werte aus minimalwert oder vergebenem zuteilen
|
||||
$leistung = max($leistung, $minimalleitsung)*-1;
|
||||
|
||||
|
||||
// Methode SetAktuelle_Leistung für jeden Verbraucher mit der entsprechenden Energie aufrufen
|
||||
|
||||
$resultArray[] = $userEnergyProv[$userInstanceID]; //[
|
||||
// 'InstanceID' => $user['InstanceID'],
|
||||
// 'Writeback' => $user['Writeback'],
|
||||
// 'Set_Leistung' => $leistung
|
||||
// ];
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//IPS_LogMessage("Manager", print_r($resultArray));
|
||||
|
||||
Reference in New Issue
Block a user