Anpassgunen an zeitintervallen, hauptmanager auf manager angepasst (achtung nciht updaten muss ncoht fertig werden)
This commit is contained in:
@@ -7,9 +7,15 @@
|
||||
{
|
||||
"type": "NumberSpinner",
|
||||
"name": "IdleCounterMax",
|
||||
"caption": "Zyklen zwischen zwei Leisutungsänderungen",
|
||||
"caption": "Zyklen zwischen zwei Leistungsänderungen (Multipliziert sich mit Interval)",
|
||||
"suffix": ""
|
||||
},
|
||||
{
|
||||
"type": "NumberSpinner",
|
||||
"name": "Interval",
|
||||
"caption": "Intervall Neuberechnung der Werte",
|
||||
"suffix": "Sekunden"
|
||||
},
|
||||
{
|
||||
"type": "NumberSpinner",
|
||||
"name": "MaxBatterieleistung",
|
||||
|
||||
@@ -15,6 +15,7 @@ class Batterie extends IPSModule
|
||||
$this->RegisterPropertyInteger("Batteriemanagement", 1);
|
||||
$this->RegisterPropertyInteger("MaxNachladen",0);
|
||||
$this->RegisterPropertyInteger("Netzbezug", 0); // Initialisierung mit 0
|
||||
$this->RegisterPropertyInteger("Interval", 2); // Recheninterval
|
||||
|
||||
// Variabeln für Kommunkation mit Manager
|
||||
$this->RegisterVariableFloat("Entladeleistung","Entladeleistung", "",0);
|
||||
@@ -44,7 +45,7 @@ class Batterie extends IPSModule
|
||||
// Initialisiere Idle
|
||||
$this->SetValue("Idle", true);
|
||||
|
||||
$this->RegisterTimer("Timer_Do_UserCalc",2000,"IPS_RequestAction(" .$this->InstanceID .', "Do_UserCalc", "");');
|
||||
$this->RegisterTimer("Timer_Do_UserCalc_Battery",$this->ReadPropertyInteger("Interval")*1000,"IPS_RequestAction(" .$this->InstanceID .', "Do_UserCalc", "");');
|
||||
|
||||
|
||||
}
|
||||
@@ -55,6 +56,7 @@ class Batterie extends IPSModule
|
||||
|
||||
$batterieManagement = $this->ReadPropertyInteger("Batteriemanagement");
|
||||
$this->SetValue("Batteriemanagement_Variabel", $batterieManagement);
|
||||
$this->SetTimerInterval("Timer_Do_UserCalc_Battery",$this->ReadPropertyInteger("Interval")*1000);
|
||||
}
|
||||
|
||||
private function GeneratePowerSteps($additionalValue)
|
||||
|
||||
@@ -25,11 +25,17 @@
|
||||
"caption": "Zeit Konstante",
|
||||
"suffix": ""
|
||||
},
|
||||
{
|
||||
"type": "NumberSpinner",
|
||||
"name": "Interval",
|
||||
"caption": "Intervall Neuberechnung der Werte Erst für spätere Versionen, aktuell auf 5 lassen!",
|
||||
"suffix": "Sekunden"
|
||||
},
|
||||
{
|
||||
"type": "NumberSpinner",
|
||||
"name": "IdleCounterMax",
|
||||
"caption": "Zeit zwischen zwei Leisutungsänderungen",
|
||||
"suffix": "x5 Sekunden"
|
||||
"caption": "Zyklen zwischen zwei Leistungsänderungen (Multipliziert sich mit Interval)",
|
||||
"suffix": ""
|
||||
},
|
||||
{
|
||||
"type": "NumberSpinner",
|
||||
|
||||
@@ -16,6 +16,7 @@ class Boiler_2_Stufig_Mit_Fueler extends IPSModule
|
||||
$this->RegisterPropertyBoolean("Boilertemperatur_glätten", false);
|
||||
$this->RegisterPropertyInteger("Boilervolumen", 300);
|
||||
$this->RegisterPropertyString("Zeitplan", "");
|
||||
$this->RegisterPropertyInteger("Interval", 5); // Recheninterval
|
||||
|
||||
|
||||
// Boiler spezifische Variablen
|
||||
@@ -46,13 +47,14 @@ class Boiler_2_Stufig_Mit_Fueler extends IPSModule
|
||||
// Initialisiere Idle
|
||||
$this->SetValue("Idle", true);
|
||||
|
||||
$this->RegisterTimer("Timer_Do_UserCalc",5000,"IPS_RequestAction(" .$this->InstanceID .', "Do_UserCalc", "");');
|
||||
$this->RegisterTimer("Timer_Do_UserCalc_Boiler",$this->ReadPropertyInteger("Interval")*1000,"IPS_RequestAction(" .$this->InstanceID .', "Do_UserCalc", "");');
|
||||
|
||||
}
|
||||
|
||||
public function ApplyChanges()
|
||||
{
|
||||
parent::ApplyChanges();
|
||||
$this->SetTimerInterval("Timer_Do_UserCalc_Boiler",$this->ReadPropertyInteger("Interval")*1000);
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -16,6 +16,12 @@
|
||||
"caption": "Sollwertvorgabe für Solarladen",
|
||||
"suffix": "Watt"
|
||||
},
|
||||
{
|
||||
"type": "NumberSpinner",
|
||||
"name": "Interval",
|
||||
"caption": "Intervall Neuberechnung der Werte",
|
||||
"suffix": "Sekunden"
|
||||
},
|
||||
{
|
||||
"type": "List",
|
||||
"name": "Verbraucher_Liste",
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -46,9 +46,15 @@
|
||||
{
|
||||
"type": "NumberSpinner",
|
||||
"name": "IdleCounterMax",
|
||||
"caption": "Zyklen zwischen zwei Leistungsänderungen",
|
||||
"caption": "Zyklen zwischen zwei Leistungsänderungen (Multipliziert sich mit Interval)",
|
||||
"suffix": ""
|
||||
},
|
||||
{
|
||||
"type": "NumberSpinner",
|
||||
"name": "Interval",
|
||||
"caption": "Intervall Neuberechnung der Werte",
|
||||
"suffix": "Sekunden"
|
||||
},
|
||||
{
|
||||
"type": "ValidationTextBox",
|
||||
"name": "IP_Adresse",
|
||||
|
||||
@@ -17,6 +17,7 @@ class Ladestation_Universal extends IPSModule
|
||||
$this->RegisterPropertyString("Seriennummer", "");
|
||||
$this->RegisterPropertyString("Username", "");
|
||||
$this->RegisterPropertyString("Password", "");
|
||||
$this->RegisterPropertyInteger("Interval", 5); // Recheninterval
|
||||
|
||||
|
||||
// Ladestationspezifische Variabeln
|
||||
@@ -47,13 +48,15 @@ class Ladestation_Universal extends IPSModule
|
||||
// Initialisiere Idle
|
||||
$this->SetValue("Idle", true);
|
||||
|
||||
$this->RegisterTimer("Timer_Do_UserCalc",5000,"IPS_RequestAction(" .$this->InstanceID .', "Do_UserCalc", "");');
|
||||
$this->RegisterTimer("Timer_Do_UserCalc_EVC",$this->ReadPropertyInteger("Interval")*1000,"IPS_RequestAction(" .$this->InstanceID .', "Do_UserCalc", "");');
|
||||
|
||||
}
|
||||
|
||||
public function ApplyChanges()
|
||||
{
|
||||
parent::ApplyChanges();
|
||||
$this->SetTimerInterval("Timer_Do_UserCalc_EVC",$this->ReadPropertyInteger("Interval")*1000);
|
||||
|
||||
// Zusätzliche Anpassungen nach Bedarf
|
||||
}
|
||||
|
||||
|
||||
@@ -42,6 +42,12 @@
|
||||
"name": "DatenZuruck",
|
||||
"caption": "Daten Zurück"
|
||||
},
|
||||
{
|
||||
"type": "NumberSpinner",
|
||||
"name": "Interval",
|
||||
"caption": "Intervall Neuberechnung der Werte",
|
||||
"suffix": "Sekunden"
|
||||
},
|
||||
{
|
||||
"type": "List",
|
||||
"name": "Verbraucher_Liste",
|
||||
|
||||
@@ -15,16 +15,19 @@ class Manager extends IPSModule
|
||||
$this->RegisterPropertyInteger("ManagerID", 0); // Initialisierung mit 0
|
||||
$this->RegisterPropertyInteger("DatenHoch", 0); // Initialisierung mit 0
|
||||
$this->RegisterPropertyInteger("DatenZuruck", 0); // Initialisierung mit 0
|
||||
$this->RegisterPropertyInteger("Interval", 2); // Recheninterval
|
||||
|
||||
// Timer registrieren
|
||||
$this->RegisterTimer("Timer_DistributeEnergy",2000,"IPS_RequestAction(" .$this->InstanceID .', "DistributeEnergy", "");');
|
||||
|
||||
$this->RegisterTimer("Timer_DistributeEnergy",$this->ReadPropertyInteger("Interval")*1000,"IPS_RequestAction(" .$this->InstanceID .', "DistributeEnergy", "");');
|
||||
}
|
||||
|
||||
public function ApplyChanges()
|
||||
{
|
||||
parent::ApplyChanges();
|
||||
//Liste aller Verbraucher einlesen
|
||||
$Verbraucher_Liste = $this->ReadPropertyString("Verbraucher_Liste");
|
||||
$this->SetTimerInterval("Timer_DistributeEnergy",$this->ReadPropertyInteger("Interval")*1000);
|
||||
|
||||
}
|
||||
|
||||
public function RequestAction($Ident, $Value)
|
||||
@@ -146,7 +149,7 @@ class Manager extends IPSModule
|
||||
}
|
||||
// Berücksichtigung der bereits verteilten Leistungen (nachher kann dafür wieder bei 0 begonnen werden zu verteilen)
|
||||
$remainingPower += $totalAktuelle_Leistung;
|
||||
IPS_LogMessage("Manag nach kalk", $remainingPower);
|
||||
|
||||
|
||||
// Abbrechen wenn es keine gefilterten User gibt
|
||||
if (empty($filteredVerbraucher)) {
|
||||
@@ -223,7 +226,7 @@ class Manager extends IPSModule
|
||||
//$remainingPower -= $entry["Aktuelle_Leistung"];
|
||||
}
|
||||
}
|
||||
IPS_LogMessage("Manag abzug noller", $remainingPower);
|
||||
|
||||
|
||||
// Nun die verteilen, die 0 erhalten können.
|
||||
$samePriorityUsers = $withZero;
|
||||
|
||||
@@ -8,9 +8,15 @@
|
||||
{
|
||||
"type": "NumberSpinner",
|
||||
"name": "IdleCounterMax",
|
||||
"caption": "Zyklen zwischen zwei Leisutungsänderungen",
|
||||
"caption": "Zyklen zwischen zwei Leistungsänderungen (Multipliziert sich mit Interval)",
|
||||
"suffix": ""
|
||||
},
|
||||
{
|
||||
"type": "NumberSpinner",
|
||||
"name": "Interval",
|
||||
"caption": "Intervall Neuberechnung der Werte Erst für spätere Versionen, aktuell auf 5 lassen!",
|
||||
"suffix": "Sekunden"
|
||||
},
|
||||
{
|
||||
"type": "NumberSpinner",
|
||||
"name": "Mindesttlaufzeit",
|
||||
|
||||
@@ -12,6 +12,7 @@ class Verbraucher_1_Stufig extends IPSModule
|
||||
$this->RegisterPropertyInteger("Mindesttlaufzeit", 4); // Standardwert für Volllast
|
||||
$this->RegisterPropertyInteger("Zeit_Zwischen_Zustandswechseln", 1);
|
||||
$this->RegisterPropertyInteger("Schaltkontakt1", 0);
|
||||
$this->RegisterPropertyInteger("Interval", 5); // Recheninterval
|
||||
|
||||
// Verbraucherspezifische Variabeln
|
||||
$this->RegisterVariableBoolean("IstNacht", "IstNacht", "", 0);
|
||||
@@ -40,13 +41,15 @@ class Verbraucher_1_Stufig extends IPSModule
|
||||
// Initialisiere Idle
|
||||
$this->SetValue("Idle", true);
|
||||
|
||||
$this->RegisterTimer("Timer_Do_UserCalc",5000,"IPS_RequestAction(" .$this->InstanceID .', "Do_UserCalc", "");');
|
||||
$this->RegisterTimer("Timer_Do_UserCalc_Verb",$this->ReadPropertyInteger("Interval")*1000,"IPS_RequestAction(" .$this->InstanceID .', "Do_UserCalc", "");');
|
||||
|
||||
}
|
||||
|
||||
public function ApplyChanges()
|
||||
{
|
||||
parent::ApplyChanges();
|
||||
$this->SetTimerInterval("Timer_Do_UserCalc_Verb",$this->ReadPropertyInteger("Interval")*1000);
|
||||
|
||||
}
|
||||
|
||||
public function RequestAction($Ident, $Value)
|
||||
|
||||
@@ -65,6 +65,12 @@
|
||||
"name": "WW_Temp",
|
||||
"caption": "Variable mit der Aktuellen Warmwassertemperatur",
|
||||
"test": true
|
||||
},
|
||||
{
|
||||
"type": "NumberSpinner",
|
||||
"name": "Interval",
|
||||
"caption": "Intervall Neuberechnung der Werte Erst für spätere Versionen, aktuell auf 5 lassen!",
|
||||
"suffix": "Sekunden"
|
||||
}
|
||||
|
||||
]
|
||||
|
||||
@@ -16,6 +16,7 @@ class WP_Steuerung extends IPSModule
|
||||
$this->RegisterPropertyBoolean("Schwellwert_Anwenden", false);
|
||||
$this->RegisterPropertyInteger("Schwellwert", 0);
|
||||
$this->RegisterPropertyInteger("WW_Temp", 1);
|
||||
$this->RegisterPropertyInteger("Interval", 5); // Recheninterval
|
||||
|
||||
// WP-Spezifische Variabeln
|
||||
$this->RegisterVariableBoolean("Sperrzeit", "Sperrzeit", "", false);
|
||||
@@ -45,13 +46,15 @@ class WP_Steuerung extends IPSModule
|
||||
// Initialisiere Idle
|
||||
$this->SetValue("Idle", true);
|
||||
|
||||
$this->RegisterTimer("Timer_Do_UserCalc",5000,"IPS_RequestAction(" .$this->InstanceID .', "Do_UserCalc", "");');
|
||||
$this->RegisterTimer("Timer_Do_UserCalc_WP",$this->ReadPropertyInteger("Interval")*1000,"IPS_RequestAction(" .$this->InstanceID .', "Do_UserCalc", "");');
|
||||
|
||||
}
|
||||
|
||||
public function ApplyChanges()
|
||||
{
|
||||
parent::ApplyChanges();
|
||||
$this->SetTimerInterval("Timer_Do_UserCalc_WP",$this->ReadPropertyInteger("Interval")*1000);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user