false, 'Kontakt2' => false], WaermepumpenRegler::kontaktwerte(0, WaermepumpenRegler::STEUERZUSTAND_NORMAL) ); self::assertSame( ['Kontakt1' => true, 'Kontakt2' => false], WaermepumpenRegler::kontaktwerte(1, WaermepumpenRegler::STEUERZUSTAND_SPERRE) ); self::assertSame( ['Kontakt1' => false, 'Kontakt2' => true], WaermepumpenRegler::kontaktwerte(1, WaermepumpenRegler::STEUERZUSTAND_ERHOEHUNG) ); } public function testLeistungUndBetriebsstatusBestimmenLaufUndIstleistung(): void { self::assertTrue(WaermepumpenRegler::laeuft(650.0, 0, 100.0)); self::assertFalse(WaermepumpenRegler::laeuft(50.0, 0, 100.0)); self::assertTrue(WaermepumpenRegler::laeuft(true, 1, 100.0)); self::assertSame(650.0, WaermepumpenRegler::istleistung(650.0, 0, 5000)); self::assertSame(5000.0, WaermepumpenRegler::istleistung(true, 1, 5000)); } public function testPvBietetStartUndErhoehungNurBeiFreigabeAn(): void { self::assertSame( [0, 5000], WaermepumpenRegler::leistungsangebot( 5000, Nachrichtenvertrag::BETRIEBSART_PV, false, true, false, false, true, true, false ) ); self::assertSame( [0], WaermepumpenRegler::leistungsangebot( 5000, Nachrichtenvertrag::BETRIEBSART_PV, false, true, false, true, true, false, false ) ); } public function testPeakBietetSperreNurBeiLaufenderUndFreigegebenerPumpeAn(): void { self::assertSame( [0, 5000], WaermepumpenRegler::leistungsangebot( 5000, Nachrichtenvertrag::BETRIEBSART_PEAK, true, true, false, false, true, true, false ) ); self::assertSame( [5000], WaermepumpenRegler::leistungsangebot( 5000, Nachrichtenvertrag::BETRIEBSART_PEAK, true, true, true, false, false, true, false ) ); self::assertSame( [0], WaermepumpenRegler::leistungsangebot( 5000, Nachrichtenvertrag::BETRIEBSART_PEAK, false, true, false, false, true, true, false ) ); } public function testSperrerholungHaeltDenBestaetigtenBetrieb(): void { self::assertSame( [5000], WaermepumpenRegler::leistungsangebot( 5000, Nachrichtenvertrag::BETRIEBSART_PEAK, true, true, false, false, true, true, true ) ); } public function testRestzeitWirdNieNegativ(): void { self::assertSame(20, WaermepumpenRegler::restzeit(100, 30, 110)); self::assertSame(0, WaermepumpenRegler::restzeit(100, 30, 140)); self::assertSame(0, WaermepumpenRegler::restzeit(0, 30, 10)); } public function testSperrzeit24hSchneidetAlteIntervalleAb(): void { $jetzt = 200000; $historie = [ ['Von' => $jetzt - 90000, 'Bis' => $jetzt - 80000], ['Von' => $jetzt - 1000, 'Bis' => $jetzt - 400], ]; self::assertSame( 7400, WaermepumpenRegler::sperrsekunden24h($historie, $jetzt, $jetzt - 400) ); } public function testUngueltigeKontaktartWirdAbgewiesen(): void { $this->expectException(InvalidArgumentException::class); WaermepumpenRegler::kontaktwerte(99, WaermepumpenRegler::STEUERZUSTAND_NORMAL); } }