diff --git a/Waermepumpe/module.php b/Waermepumpe/module.php index da2a2df..8263efa 100644 --- a/Waermepumpe/module.php +++ b/Waermepumpe/module.php @@ -425,11 +425,6 @@ class VerbraucherWaermepumpe extends IPSModule implements VerbraucherSchnittstel } $pv = $this->ReadAttributeString('Betriebsart') === Nachrichtenvertrag::BETRIEBSART_PV; - if ($laeuft && $restMindestlaufzeit > 0) { - return $pv - ? WaermepumpenRegler::STEUERZUSTAND_ERHOEHUNG - : WaermepumpenRegler::STEUERZUSTAND_NORMAL; - } if (!(bool) $this->leseZustand('SollwertGueltig')) { return WaermepumpenRegler::STEUERZUSTAND_NORMAL; } @@ -440,6 +435,9 @@ class VerbraucherWaermepumpe extends IPSModule implements VerbraucherSchnittstel ? WaermepumpenRegler::STEUERZUSTAND_ERHOEHUNG : WaermepumpenRegler::STEUERZUSTAND_NORMAL; } + if ($laeuft && $restMindestlaufzeit > 0) { + return WaermepumpenRegler::STEUERZUSTAND_NORMAL; + } return $sollleistung === 0 && $sperrenZulaessig ? WaermepumpenRegler::STEUERZUSTAND_SPERRE diff --git a/tests/Symcon/modules/Waermepumpe.php b/tests/Symcon/modules/Waermepumpe.php index c33fa72..f987e4b 100644 --- a/tests/Symcon/modules/Waermepumpe.php +++ b/tests/Symcon/modules/Waermepumpe.php @@ -20,7 +20,7 @@ return static function (TestContext $test): void { 'IstleistungVariableID' => $rueckmeldung, 'Anlaufwartezeit' => 1, 'Wiederholsperre' => 3, - 'Mindestlaufzeit' => 1, + 'Mindestlaufzeit' => 5, 'Mindestsperrzeit' => 0, 'MaximaleSperrzeit' => 2, 'MaximaleSperrzeit24h' => 60, @@ -115,7 +115,20 @@ return static function (TestContext $test): void { $test->assertSame(5000, (int) GetValue( $test->objectByIdent('Istleistung', $waermepumpe) )); - IPS_Sleep(1100); + }); + + $test->runCase('Lauf ohne Vorgabe erzwingt keine Erhoehung', static function ( + TestContext $test + ) use ($waermepumpe, $kontakt1, $kontakt2): void { + IPS_RequestAction($waermepumpe, 'Aktiv', false); + IPS_RequestAction($waermepumpe, 'Aktiv', true); + $test->waitUntil( + static fn (): bool => GetValue($kontakt1) === false + && GetValue($kontakt2) === false + ); + $test->assertSame(false, GetValue($kontakt1)); + $test->assertSame(false, GetValue($kontakt2)); + IPS_Sleep(5100); }); $test->runCase('Peak sperrt und maximale Sperrzeit erzwingt Normalbetrieb', static function (