163 lines
4.6 KiB
PHP
163 lines
4.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Belevo\EnelixEMS\Tests;
|
|
|
|
use Belevo\EnelixEMS\Nachrichtenvertrag;
|
|
use Belevo\EnelixEMS\WaermepumpenRegler;
|
|
use InvalidArgumentException;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
final class WaermepumpenReglerTest extends TestCase
|
|
{
|
|
public function testKontaktwerteBildenNormalSperreUndErhoehungAb(): void
|
|
{
|
|
self::assertSame(
|
|
['Kontakt1' => 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);
|
|
}
|
|
}
|