Verbrauchermodule und betriebsartabhängige Angebote ergänzen
Tests / test (push) Successful in 42s

This commit is contained in:
dh
2026-09-21 18:46:17 +00:00
parent 7b6d1b2f07
commit 3c71626b5f
46 changed files with 4513 additions and 311 deletions
+41 -13
View File
@@ -44,9 +44,33 @@ return static function (TestContext $test): void {
]
);
$pufferTemperaturId = $test->createVariable(2, 'Puffertemperatur', 52.0);
$aussenTemperaturId = $test->createVariable(2, 'Aussentemperatur', 5.0);
$pufferKontakte = [
$test->createActionVariable('Pufferspeicher Stufe 1'),
$test->createActionVariable('Pufferspeicher Stufe 2'),
];
$pufferspeicherId = $test->createInstance(
'{C92D5EEF-9632-47A5-9659-4B02BF40FBE9}',
'Pufferspeicher',
[
'PufferfuehlerVariableID' => $pufferTemperaturId,
'AussentemperaturVariableID' => $aussenTemperaturId,
'LeistungsStufen' => json_encode([
['Stufe' => 1, 'Leistung' => 1000, 'Schaltkontakt_Stufe' => $pufferKontakte[0]],
['Stufe' => 2, 'Leistung' => 2000, 'Schaltkontakt_Stufe' => $pufferKontakte[1]],
], JSON_THROW_ON_ERROR),
'LastwechselSperrzeit' => 0,
'PrioritaetPV' => 2,
'PrioritaetPeak' => 2,
'DiagnosevariablenAnzeigen' => true,
]
);
$zuordnung = [
['InstanzID' => $einStufigId, 'Aktiv' => true],
['InstanzID' => $warmwasserId, 'Aktiv' => true],
['InstanzID' => $pufferspeicherId, 'Aktiv' => true],
];
$lizenzcode = trim((string) getenv('ENELIX_TEST_LICENSE_CODE'));
$managerId = $test->createInstance(
@@ -67,8 +91,8 @@ return static function (TestContext $test): void {
]
);
$melden = static function () use ($einStufigId, $warmwasserId): void {
foreach ([$einStufigId, $warmwasserId] as $instanzId) {
$melden = static function () use ($einStufigId, $warmwasserId, $pufferspeicherId): void {
foreach ([$einStufigId, $warmwasserId, $pufferspeicherId] as $instanzId) {
IPS_RequestAction($instanzId, 'Aktiv', true);
IPS_RequestAction($instanzId, 'Melden', true);
}
@@ -77,10 +101,12 @@ return static function (TestContext $test): void {
$netzleistungId,
$managerId,
$einStufigId,
$warmwasserId
$warmwasserId,
$pufferspeicherId
): void {
IPS_RequestAction($einStufigId, 'Melden', true);
IPS_RequestAction($warmwasserId, 'Melden', true);
IPS_RequestAction($pufferspeicherId, 'Melden', true);
SetValue($netzleistungId, $netzleistung);
IPS_RequestAction($managerId, 'Regeln', true);
};
@@ -88,6 +114,8 @@ return static function (TestContext $test): void {
(bool) GetValue($einKontaktId),
(bool) GetValue($warmKontakte[0]),
(bool) GetValue($warmKontakte[1]),
(bool) GetValue($pufferKontakte[0]),
(bool) GetValue($pufferKontakte[1]),
];
$warteAufKontakte = static function (array $erwartet, string $schritt) use (
$test,
@@ -150,20 +178,20 @@ return static function (TestContext $test): void {
$test->runCase('Manager und alle vorhandenen Verbrauchertypen sind verknüpft', static function (
TestContext $test
) use ($managerId, $einStufigId, $warmwasserId, $melden): void {
) use ($managerId, $einStufigId, $warmwasserId, $pufferspeicherId, $melden): void {
IPS_RequestAction($managerId, 'Aktiv', true);
$melden();
IPS_RequestAction($managerId, 'Regeln', true);
foreach ([$managerId, $einStufigId, $warmwasserId] as $instanzId) {
foreach ([$managerId, $einStufigId, $warmwasserId, $pufferspeicherId] as $instanzId) {
$test->assertInstanceStatus($instanzId);
}
$test->assertSame(
2,
3,
GetValue($test->objectByIdent('VerbraucherAnzahl', $managerId))
);
$test->assertSame(
2,
3,
GetValue($test->objectByIdent('VerbraucherVerfuegbar', $managerId))
);
});
@@ -172,22 +200,22 @@ return static function (TestContext $test): void {
TestContext $test
) use ($managerId, $regeln, $warteAufKontakte): void {
$regeln(-3000.0);
$warteAufKontakte([true, false, true], 'Netz -3000 W');
$warteAufKontakte([true, false, true, false, false], 'Netz -3000 W');
$test->assertSame('PV', GetValue($test->objectByIdent('Betriebsart', $managerId)));
$regeln(-1000.0);
$warteAufKontakte([true, false, true], 'Netz -1000 W');
$warteAufKontakte([true, false, true, false, false], 'Netz -1000 W');
$regeln(0.0);
$warteAufKontakte([true, false, true], 'Netz 0 W');
$warteAufKontakte([true, false, true, false, false], 'Netz 0 W');
IPS_Sleep(1100);
$regeln(1000.0);
$warteAufKontakte([true, true, false], 'Netz +1000 W');
$warteAufKontakte([false, false, false, false, false], 'Netz +1000 W');
$test->assertSame('Peak', GetValue($test->objectByIdent('Betriebsart', $managerId)));
IPS_Sleep(1100);
$regeln(3000.0);
$warteAufKontakte([false, false, false], 'Netz +3000 W');
$warteAufKontakte([false, false, false, false, false], 'Netz +3000 W');
});
$test->runCase('Keep-alive ist aktiv und erneuert unveränderte Sollwerte', static function (
@@ -216,7 +244,7 @@ return static function (TestContext $test): void {
$melden();
IPS_RequestAction($managerId, 'Regeln', false);
$daten = $verbraucherstatus();
$test->assertSame(2, count($daten['Verbraucher'] ?? []));
$test->assertSame(3, count($daten['Verbraucher'] ?? []));
SetValue($temperaturId, 53.0);
$test->waitUntil(static function () use (