155 lines
4.0 KiB
PHP
155 lines
4.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Belevo\EnelixEMS\Tests;
|
|
|
|
use Belevo\EnelixEMS\PufferspeicherRegler;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
final class PufferspeicherReglerTest extends TestCase
|
|
{
|
|
/** @return list<array{Stufe: int, Leistung_W: int, KontaktID: int}> */
|
|
private function stufen(): array
|
|
{
|
|
return [
|
|
['Stufe' => 1, 'Leistung_W' => 1000, 'KontaktID' => 101],
|
|
['Stufe' => 2, 'Leistung_W' => 2000, 'KontaktID' => 102],
|
|
];
|
|
}
|
|
|
|
public function testHeizkurveWirdBerechnetUndBegrenzt(): void
|
|
{
|
|
self::assertSame(
|
|
50.0,
|
|
PufferspeicherRegler::solltemperatur(5.0, 35.0, 1.0, 20.0, 80.0)
|
|
);
|
|
self::assertSame(
|
|
80.0,
|
|
PufferspeicherRegler::solltemperatur(-100.0, 35.0, 1.0, 20.0, 80.0)
|
|
);
|
|
self::assertSame(
|
|
20.0,
|
|
PufferspeicherRegler::solltemperatur(100.0, 35.0, 1.0, 20.0, 80.0)
|
|
);
|
|
}
|
|
|
|
public function testUnterErrechneterEinschaltschwelleWerdenAlleStufenAngeboten(): void
|
|
{
|
|
self::assertSame(
|
|
[0, 1000, 2000],
|
|
PufferspeicherRegler::leistungsangebot(
|
|
true,
|
|
false,
|
|
true,
|
|
44.9,
|
|
45.0,
|
|
$this->stufen()
|
|
)
|
|
);
|
|
}
|
|
|
|
public function testInHystereseUndDarueberWirdNurNullAngeboten(): void
|
|
{
|
|
self::assertSame(
|
|
[0],
|
|
PufferspeicherRegler::leistungsangebot(
|
|
true,
|
|
false,
|
|
true,
|
|
45.0,
|
|
45.0,
|
|
$this->stufen()
|
|
)
|
|
);
|
|
self::assertSame(
|
|
[0],
|
|
PufferspeicherRegler::leistungsangebot(
|
|
true,
|
|
false,
|
|
true,
|
|
51.0,
|
|
45.0,
|
|
$this->stufen()
|
|
)
|
|
);
|
|
}
|
|
|
|
public function testPeakbetriebBietetUnabhaengigVonDerTemperaturNurNull(): void
|
|
{
|
|
foreach ([-20.0, 44.9, 45.0, 100.0] as $temperatur) {
|
|
self::assertSame(
|
|
[0],
|
|
PufferspeicherRegler::leistungsangebot(
|
|
true,
|
|
true,
|
|
true,
|
|
$temperatur,
|
|
45.0,
|
|
$this->stufen()
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
public function testAusgeschaltetWirdImmerNurNullAngeboten(): void
|
|
{
|
|
self::assertSame(
|
|
[0],
|
|
PufferspeicherRegler::leistungsangebot(
|
|
false,
|
|
false,
|
|
true,
|
|
-20.0,
|
|
45.0,
|
|
$this->stufen()
|
|
)
|
|
);
|
|
}
|
|
|
|
public function testMindesttemperaturIstOptionalStatischOderDifferenzbasiert(): void
|
|
{
|
|
self::assertSame(
|
|
45.0,
|
|
PufferspeicherRegler::einschaltschwelle(
|
|
50.0,
|
|
5.0,
|
|
PufferspeicherRegler::MINIMUM_AUS,
|
|
30.0,
|
|
10.0
|
|
)
|
|
);
|
|
self::assertSame(
|
|
42.0,
|
|
PufferspeicherRegler::einschaltschwelle(
|
|
50.0,
|
|
5.0,
|
|
PufferspeicherRegler::MINIMUM_STATISCH,
|
|
42.0,
|
|
10.0
|
|
)
|
|
);
|
|
self::assertSame(
|
|
43.0,
|
|
PufferspeicherRegler::einschaltschwelle(
|
|
50.0,
|
|
5.0,
|
|
PufferspeicherRegler::MINIMUM_DIFFERENZ,
|
|
30.0,
|
|
7.0
|
|
)
|
|
);
|
|
}
|
|
|
|
public function testWaermepumpenwertKalibriertFusspunktAmAktuellenAussenwert(): void
|
|
{
|
|
$fusspunkt = PufferspeicherRegler::fusspunktAusWaermepumpenwert(50.0, 5.0, 1.0);
|
|
|
|
self::assertSame(35.0, $fusspunkt);
|
|
self::assertSame(
|
|
50.0,
|
|
PufferspeicherRegler::solltemperatur(5.0, $fusspunkt, 1.0, 0.0, 100.0)
|
|
);
|
|
}
|
|
}
|