anpassungen an der pending_zeit, und fertig ausbau des askoheat moduls

This commit is contained in:
2025-04-22 16:55:52 +02:00
parent cf71fd6711
commit 8bacecd7c0
4 changed files with 119 additions and 39 deletions

View File

@@ -4,7 +4,6 @@
"type": "Label", "type": "Label",
"caption": "Einstellungen für einstufigen Verbruacher Ein-Aus" "caption": "Einstellungen für einstufigen Verbruacher Ein-Aus"
}, },
{ {
"type": "NumberSpinner", "type": "NumberSpinner",
"name": "IdleCounterMax", "name": "IdleCounterMax",
@@ -24,9 +23,80 @@
"suffix": "" "suffix": ""
}, },
{ {
"type": "ValidationTextBox", "type": "SelectVariable",
"name": "IP_Adresse", "name": "Variable_Leistung",
"caption": "IP-Adresse Askoheat" "caption": "Variable mit der Nennleistung",
"test": true
},
{
"type": "SelectVariable",
"name": "Variable_Temperatur",
"caption": "Variable mit der Solltemperatur Boiler",
"test": true
},
{
"type": "SelectVariable",
"name": "Variable_Temperatur_Ist",
"caption": "Variable mit der Isttemperatur Boiler",
"test": true
},
{
"type":"Select",
"name":"Boilertemperatur_glätten",
"caption":"Boilertemperatur glätten",
"options":[
{
"caption":"Ja",
"value":true
},
{
"caption":"Nein",
"value":false
}
]
},
{
"type": "NumberSpinner",
"name": "ZeitKonstante",
"caption": "Zeit Konstante",
"suffix": ""
},
{
"type": "NumberSpinner",
"name": "Boilervolumen",
"caption": "Boilervolumen",
"suffix": "Liter"
},
{
"type": "List",
"name": "Zeitplan",
"caption": "Zeitplan für Solltemperaturen",
"columns": [
{
"caption": "Uhrzeit",
"name": "Uhrzeit",
"width": "150px",
"add": "00:00",
"edit": {
"type": "ValidationTextBox"
}
},
{
"caption": "Solltemperatur",
"name": "Solltemperatur",
"width": "150px",
"add": 0,
"edit": {
"type": "NumberSpinner"
}
}
],
"add": true,
"delete": true,
"sort": {
"column": "Uhrzeit",
"direction": "ascending"
}
} }
] ]

View File

@@ -8,9 +8,15 @@ class Ansteuerung_Askoheat extends IPSModule
parent::Create(); parent::Create();
// Verbraucherspezifische Properties // Verbraucherspezifische Properties
$this->RegisterPropertyInteger("BoilerLeistung", 4000); // Standardwert für Volllast $this->RegisterPropertyInteger("ZeitKonstante", 120);
$this->RegisterPropertyString("IP_Adresse", ""); // Standardwert für Volllast $this->RegisterPropertyBoolean("Boilertemperatur_glätten", false);
$this->RegisterPropertyInteger("Boilervolumen", 300);
$this->RegisterPropertyString("Zeitplan", "");
$this->RegisterPropertyInteger("BoilerLeistung", 3500); // Standardwert für Volllast
$this->RegisterPropertyInteger("Interval", 5); // Recheninterval $this->RegisterPropertyInteger("Interval", 5); // Recheninterval
$this->RegisterPropertyInteger("Variable_Leistung", 0); // Recheninterval
$this->RegisterPropertyInteger("Variable_Temperatur", 0); // Recheninterval
$this->RegisterPropertyInteger("Variable_Temperatur_Ist", 0); // Recheninterval
// Variabeln für Kommunkation mit Manager // Variabeln für Kommunkation mit Manager
$this->RegisterVariableInteger("Sperre_Prio", "Sperre_Prio"); $this->RegisterVariableInteger("Sperre_Prio", "Sperre_Prio");
@@ -24,6 +30,13 @@ class Ansteuerung_Askoheat extends IPSModule
$this->RegisterVariableInteger("Leistung_Delta", "Leistung_Delta", "", 0); $this->RegisterVariableInteger("Leistung_Delta", "Leistung_Delta", "", 0);
$this->RegisterVariableFloat("Boilertemperatur", "Boilertemperatur", "", 0); $this->RegisterVariableFloat("Boilertemperatur", "Boilertemperatur", "", 0);
// Boiler spezifische Variablen
$this->RegisterVariableInteger("Mindesttemperatur","Mindesttemperatur","",45);
$this->RegisterVariableInteger("Maximaltemperatur","Maximaltemperatur","",60);
$this->RegisterVariableInteger("Legionellentemperatur","Legionellentemperatur","",65);
$this->RegisterVariableInteger("LegioCounter", "LegioCounter", "", 0);
$this->RegisterVariableInteger("Boilertemperatur", "Boilertemperatur", "", 0);
// Hilfsvariabeln für Idle zustand // Hilfsvariabeln für Idle zustand
$this->RegisterPropertyInteger("IdleCounterMax", 2); $this->RegisterPropertyInteger("IdleCounterMax", 2);
$this->RegisterVariableInteger("IdleCounter", "IdleCounter", "", 0); $this->RegisterVariableInteger("IdleCounter", "IdleCounter", "", 0);
@@ -55,10 +68,6 @@ class Ansteuerung_Askoheat extends IPSModule
$this->SetValue("Is_Peak_Shaving", (bool)$Value); $this->SetValue("Is_Peak_Shaving", (bool)$Value);
break; break;
case "ResetPowerSteps":
$this->ResetPowerSteps($Value);
break;
case "Do_UserCalc": case "Do_UserCalc":
$this->SetAktuelle_Leistung($this->GetValue("Power")); $this->SetAktuelle_Leistung($this->GetValue("Power"));
$this->GetCurrentData($this->GetValue("Is_Peak_Shaving")); $this->GetCurrentData($this->GetValue("Is_Peak_Shaving"));
@@ -123,19 +132,7 @@ class Ansteuerung_Askoheat extends IPSModule
// Methode zum Setzen des aktuellen Stromverbrauchs // Methode zum Setzen des aktuellen Stromverbrauchs
public function SetAktuelle_Leistung(int $power) public function SetAktuelle_Leistung(int $power)
{ {
// Schalte Kontakt Teillast und Vollast entsprechend der Power-Einstellung IPS_RequestAction($this->ReadPropertyInteger("Variable_Leistung"), $power);
if ($power == $this->ReadPropertyInteger("BoilerLeistungVolllast")) {
SetValue($this->ReadPropertyInteger("Kontakt_Volllast"), true);
SetValue($this->ReadPropertyInteger("Kontakt_Teillast"), false);
} elseif (
$power == $this->ReadPropertyInteger("BoilerLeistungTeillast")
) {
SetValue($this->ReadPropertyInteger("Kontakt_Volllast"), false);
SetValue($this->ReadPropertyInteger("Kontakt_Teillast"), true);
} else {
SetValue($this->ReadPropertyInteger("Kontakt_Volllast"), false);
SetValue($this->ReadPropertyInteger("Kontakt_Teillast"), false);
}
// Prüfe auf Änderung der Power im Vergleich zur letzten Einstellung // Prüfe auf Änderung der Power im Vergleich zur letzten Einstellung
$lastPower = GetValue($this->GetIDForIdent("Aktuelle_Leistung")); $lastPower = GetValue($this->GetIDForIdent("Aktuelle_Leistung"));
@@ -154,6 +151,20 @@ class Ansteuerung_Askoheat extends IPSModule
$this->ProcessIdleCounter(); $this->ProcessIdleCounter();
} }
public function Calc_Seven_Steps(int $power)
{
$steps = [];
$increment = $power / 7;
for ($i = 0; $i <= 7; $i++) {
$steps[] = $i * $increment;
}
return $steps;
}
// Methode zum Abrufen der aktuellen Daten // Methode zum Abrufen der aktuellen Daten
public function GetCurrentData(bool $Peak) public function GetCurrentData(bool $Peak)
{ {
@@ -164,7 +175,7 @@ class Ansteuerung_Askoheat extends IPSModule
if ($boilertemperatur_glätten) { if ($boilertemperatur_glätten) {
// Wenn Glättung aktiviert ist, führe das Glätten durch // Wenn Glättung aktiviert ist, führe das Glätten durch
$boilerFuehlerPT1ID = $this->ReadPropertyInteger("Boilerfuehler_PT1"); $boilerFuehlerPT1ID = $this->ReadPropertyInteger("Variable_Temperatur_Ist");
if (IPS_VariableExists($boilerFuehlerPT1ID)) { if (IPS_VariableExists($boilerFuehlerPT1ID)) {
$boilerPT1 = GetValue($boilerFuehlerPT1ID); $boilerPT1 = GetValue($boilerFuehlerPT1ID);
@@ -187,7 +198,7 @@ class Ansteuerung_Askoheat extends IPSModule
$this->SetValue("Boilertemperatur", $newBoilerTemp); $this->SetValue("Boilertemperatur", $newBoilerTemp);
} else { } else {
// Wenn Glättung nicht aktiviert ist, setze die Boilertemperatur direkt auf den Wert des Boilerfühlers // Wenn Glättung nicht aktiviert ist, setze die Boilertemperatur direkt auf den Wert des Boilerfühlers
$boilerFuehlerPT1ID = $this->ReadPropertyInteger("Boilerfuehler_PT1"); $boilerFuehlerPT1ID = $this->ReadPropertyInteger("Variable_Temperatur_Ist");
if (IPS_VariableExists($boilerFuehlerPT1ID)) { if (IPS_VariableExists($boilerFuehlerPT1ID)) {
$boilerPT1 = GetValue($boilerFuehlerPT1ID); $boilerPT1 = GetValue($boilerFuehlerPT1ID);
@@ -204,8 +215,7 @@ class Ansteuerung_Askoheat extends IPSModule
$minTemp = $this->GetValue("Mindesttemperatur"); $minTemp = $this->GetValue("Mindesttemperatur");
$maxTemp = $this->GetValue("Maximaltemperatur"); $maxTemp = $this->GetValue("Maximaltemperatur");
$LegioTemp = $this->GetValue("Legionellentemperatur"); $LegioTemp = $this->GetValue("Legionellentemperatur");
$teilLeistung = $this->ReadPropertyInteger("BoilerLeistungTeillast"); $vollLeistung = $this->ReadPropertyInteger("BoilerLeistung");
$vollLeistung = $this->ReadPropertyInteger("BoilerLeistungVolllast");
$nextEntry = $this->getNextTimeAndTemperature($this->ReadPropertyString("Zeitplan")); $nextEntry = $this->getNextTimeAndTemperature($this->ReadPropertyString("Zeitplan"));
@@ -220,8 +230,9 @@ class Ansteuerung_Askoheat extends IPSModule
$boilerIsOn = (GetValue($this->ReadPropertyInteger("Variable_Leistung"))>0);
$AktuelleVollast = GetValue( $AktuelleVollast = GetValue(
$this->ReadPropertyInteger("Kontakt_Volllast") $this->ReadPropertyInteger("Variable_Leistung")
); );
$AktuelleTeillast = GetValue( $AktuelleTeillast = GetValue(
$this->ReadPropertyInteger("Kontakt_Teillast") $this->ReadPropertyInteger("Kontakt_Teillast")
@@ -246,14 +257,14 @@ class Ansteuerung_Askoheat extends IPSModule
if ($Peak) { if ($Peak) {
if ($boilerTemp < $minTemp) { if ($boilerTemp < $minTemp) {
$this->SetValue( "PowerSteps", json_encode([0, $teilLeistung, $vollLeistung]) ); $this->SetValue( "PowerSteps", json_encode($this->Calc_Seven_Steps($vollLeistung)) );
} elseif ( } elseif (
$boilerTemp < $minTemp + 5 && $boilerTemp < $minTemp + 5 &&
($AktuelleVollast || $AktuelleTeillast) ($boilerIsOn)
) { ) {
$this->SetValue( $this->SetValue(
"PowerSteps", "PowerSteps",
json_encode([0, $teilLeistung, $vollLeistung]) json_encode($this->Calc_Seven_Steps($vollLeistung))
); );
} else { } else {
$this->SetValue("PowerSteps", json_encode([0])); $this->SetValue("PowerSteps", json_encode([0]));
@@ -263,14 +274,14 @@ class Ansteuerung_Askoheat extends IPSModule
$this->SetValue("PowerSteps", json_encode([$vollLeistung])); $this->SetValue("PowerSteps", json_encode([$vollLeistung]));
} elseif ( } elseif (
$boilerTemp < $minTemp + 5 && $boilerTemp < $minTemp + 5 &&
($AktuelleVollast || $AktuelleTeillast) ($boilerIsOn)
) { ) {
$this->SetValue("PowerSteps", json_encode([$vollLeistung])); $this->SetValue("PowerSteps", json_encode([$vollLeistung]));
} elseif ($boilerTemp < $maxTemp - 5) { } elseif ($boilerTemp < $maxTemp - 5) {
$this->SetValue("PowerSteps", json_encode([0, $teilLeistung, $vollLeistung])); $this->SetValue("PowerSteps", json_encode($this->Calc_Seven_Steps($vollLeistung)));
} elseif ( $boilerTemp < $maxTemp && ($AktuelleVollast || $AktuelleTeillast) } elseif ( $boilerTemp < $maxTemp && ($boilerIsOn)
) { ) {
$this->SetValue( "PowerSteps", json_encode([0, $teilLeistung, $vollLeistung])); $this->SetValue( "PowerSteps", json_encode($this->Calc_Seven_Steps($vollLeistung)));
} else { } else {
$this->SetValue("PowerSteps", json_encode([0])); $this->SetValue("PowerSteps", json_encode([0]));
} }

View File

@@ -25,7 +25,6 @@ class Boiler_2_Stufig_Mit_Fueler extends IPSModule
$this->RegisterVariableInteger("Maximaltemperatur","Maximaltemperatur","",60); $this->RegisterVariableInteger("Maximaltemperatur","Maximaltemperatur","",60);
$this->RegisterVariableInteger("Legionellentemperatur","Legionellentemperatur","",65); $this->RegisterVariableInteger("Legionellentemperatur","Legionellentemperatur","",65);
$this->RegisterVariableInteger("LegioCounter", "LegioCounter", "", 0); $this->RegisterVariableInteger("LegioCounter", "LegioCounter", "", 0);
//$this->RegisterVariableInteger("Boilertemperatur", "Boilertemperatur", "", 0);
$this->RegisterVariableInteger("Boilertemperatur", "Boilertemperatur", "", 0); $this->RegisterVariableInteger("Boilertemperatur", "Boilertemperatur", "", 0);

View File

@@ -439,7 +439,7 @@ class Ladestation_v2 extends IPSModule
} }
if($counter>(55/($this->ReadPropertyInteger("Interval")))){ if($counter>(90/($this->ReadPropertyInteger("Interval")))){
$this->SetValue("Pending_Counter", 0); $this->SetValue("Pending_Counter", 0);
$this->Calc_Max_Current($this->GetValue("Is_1_ph")); $this->Calc_Max_Current($this->GetValue("Is_1_ph"));