From 92e8ec59df9487661a1e4dd5a72dc6441ec5135c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=A4fliger?= Date: Thu, 17 Sep 2026 09:16:52 +0000 Subject: [PATCH] Leistungsangebot nach Lastwechsel sperren --- Warmwassererwaermer/module.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Warmwassererwaermer/module.php b/Warmwassererwaermer/module.php index 2d66109..d4da692 100644 --- a/Warmwassererwaermer/module.php +++ b/Warmwassererwaermer/module.php @@ -271,7 +271,11 @@ class VerbraucherWarmwassererwaermer extends IPSModule implements VerbraucherSch } } - $this->schalteLeistung($ziel, $jetzt); + $lastwechselErfolgt = $this->schalteLeistung($ziel, $jetzt); + if ($lastwechselErfolgt) { + $this->WriteAttributeString('Leistungsangebot', json_encode([$ziel], JSON_THROW_ON_ERROR)); + $this->setzeZustand('AenderungMoeglich', false); + } $this->setzeZustand('Sollleistung', $ziel); $this->aktualisiereStoerungen($temperaturGueltig); if ($meldungPlanen) { @@ -420,14 +424,14 @@ class VerbraucherWarmwassererwaermer extends IPSModule implements VerbraucherSch $this->setzeZustand('LegionellenbetriebAktiv', $fruehestensFaellig); } - private function schalteLeistung(int $zielLeistung, int $jetzt): void + private function schalteLeistung(int $zielLeistung, int $jetzt): bool { $stufen = WarmwasserRegler::dekodiereLeistungsstufen($this->ReadPropertyString('LeistungsStufen')); $zielStufe = WarmwasserRegler::stufeFuerLeistung($stufen, $zielLeistung); $bisherigeLeistung = (int) round((float) $this->leseZustand('Istleistung')); if ($zielLeistung === $bisherigeLeistung && $this->kontakteEntsprechenZiel($stufen, $zielLeistung)) { $this->WriteAttributeString('Schaltfehler', ''); - return; + return false; } try { @@ -464,6 +468,8 @@ class VerbraucherWarmwassererwaermer extends IPSModule implements VerbraucherSch $this->WriteAttributeInteger('LetzterLastwechsel', $jetzt); $this->aktualisiereLastwechselstatus($jetzt); $this->protokolliere('Leistungsstufe', ['Leistung_W' => $zielLeistung, 'Stufe' => $zielStufe]); + + return true; } /**