diff --git a/Boiler_2_Stufig_Landwirtschaft/form.json b/Boiler_2_Stufig_Landwirtschaft/form.json index d6bd2a4..5415bc0 100644 --- a/Boiler_2_Stufig_Landwirtschaft/form.json +++ b/Boiler_2_Stufig_Landwirtschaft/form.json @@ -60,7 +60,43 @@ "name": "Kontakt_Volllast", "caption": "Schaltkontakt Volllast", "test": true + }, + { + "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" + } + }, + { + "type": "NumberSpinner", + "name": "Boilervolumen", + "caption": "Boilervolumen", + "suffix": "Liter" } - ] -} +} \ No newline at end of file diff --git a/Boiler_2_Stufig_Landwirtschaft/module.php b/Boiler_2_Stufig_Landwirtschaft/module.php index f818622..3e60b15 100644 --- a/Boiler_2_Stufig_Landwirtschaft/module.php +++ b/Boiler_2_Stufig_Landwirtschaft/module.php @@ -14,6 +14,9 @@ class Boiler_2_Stufig_Landwirtschaft extends IPSModule $this->RegisterPropertyInteger("Kontakt_Teillast", 0); $this->RegisterPropertyInteger("Kontakt_Volllast", 0); $this->RegisterPropertyBoolean("Boilertemperatur_glätten", false); + $this->RegisterPropertyInteger("Boilervolumen", 300); + $this->RegisterPropertyString("Zeitplan", ""); + // Boiler spezifische Variablen @@ -78,6 +81,45 @@ class Boiler_2_Stufig_Landwirtschaft extends IPSModule } } + function getNextTimeAndTemperature($zeitplan) { + if (empty($zeitplan)) { + return null; + } + $currentTime = date('H:i'); + foreach ($zeitplan as $entry) { + if ($entry['Uhrzeit'] > $currentTime) { + return $entry; + } + } + // Falls keine spätere Uhrzeit gefunden wird, nimm den ersten Eintrag am nächsten Tag + return $zeitplan[0]; + } + + function calculateRemainingTime($nextTime) { + $currentTime = new DateTime(); + $nextDateTime = DateTime::createFromFormat('H:i', $nextTime); + if ($nextDateTime < $currentTime) { + $nextDateTime->modify('+1 day'); + } + $interval = $currentTime->diff($nextDateTime); + return $interval->h + ($interval->i / 60); + } + + function calculateRequiredHeat($boilervolumen, $tempDiff) { + // Annahme: spezifische Wärmekapazität von Wasser = 4.186 J/g°C + // 1 Liter Wasser = 1000 Gramm + $specificHeatCapacity = 4.186; // J/g°C + $waterMass = $boilervolumen * 1000; // Gramm + return $specificHeatCapacity * $waterMass * $tempDiff; // Joules + } + + function canBoilerReachTemperature($boilervolumen, $boilerTemper, $nextTemp, $remainingTime, $vollleistung) { + $tempDiff = $nextTemp - $boilerTemper; + $requiredHeat = calculateRequiredHeat($boilervolumen, $tempDiff); + $availableHeat = $vollleistung * $remainingTime * 3600; // Leistung in Watt * Zeit in Sekunden + return $availableHeat >= $requiredHeat; + } + // Methode zum Setzen des aktuellen Stromverbrauchs public function SetAktuelle_Leistung(int $power) { @@ -158,8 +200,6 @@ class Boiler_2_Stufig_Landwirtschaft extends IPSModule } - - $boilerTemp = $this->GetValue("Boilertemperatur"); $minTemp = $this->GetValue("Mindesttemperatur"); $maxTemp = $this->GetValue("Maximaltemperatur"); @@ -167,6 +207,19 @@ class Boiler_2_Stufig_Landwirtschaft extends IPSModule $teilLeistung = $this->ReadPropertyInteger("BoilerLeistungTeillast"); $vollLeistung = $this->ReadPropertyInteger("BoilerLeistungVolllast"); + + $nextEntry = getNextTimeAndTemperature($this->ReadPropertyInteger("Zeitplan")); + if ($nextEntry !== null) { + $remainingTime = calculateRemainingTime($nextEntry['Uhrzeit']); + $nextTemp = $nextEntry['Solltemperatur']; + + if (!canBoilerReachTemperature($this->ReadPropertyInteger("Boilervolumen"), $boilerTemp, $nextTemp, $remainingTime, $vollLeistung)) { + $minTemp = $nextTemp; + } + } + + + $AktuelleVollast = GetValue( $this->ReadPropertyInteger("Kontakt_Volllast") ); diff --git a/library.json b/library.json index a4a0cc4..dcd6064 100644 --- a/library.json +++ b/library.json @@ -6,7 +6,7 @@ "compatibility": { "version": "7.1" }, - "version": "1.028", + "version": "1.029", "build": 0, "date": 0 } \ No newline at end of file