Files
Enelix-EMS/tests/PufferspeicherReglerTest.php
T
2026-09-21 18:46:17 +00:00

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)
);
}
}