@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Belevo\EnelixEMS\SymconTest\TestContext;
|
||||
|
||||
return static function (TestContext $test): void {
|
||||
$netzleistungId = $test->createVariable(2, 'Netzleistung', 0.0);
|
||||
$einKontaktId = $test->createActionVariable('Kontakt Verbraucher 1-Stufig');
|
||||
$einStufigId = $test->createInstance(
|
||||
'{15879A4E-D0C2-4495-83DE-46E1E462591E}',
|
||||
'Verbraucher 1-Stufig',
|
||||
[
|
||||
'Nennleistung' => 1000,
|
||||
'SchaltkontaktVariableID' => $einKontaktId,
|
||||
'Mindesteinschaltdauer' => 0,
|
||||
'Mindestausschaltdauer' => 0,
|
||||
'PrioritaetPV' => 0,
|
||||
'DiagnosevariablenAnzeigen' => true,
|
||||
]
|
||||
);
|
||||
|
||||
$temperaturId = $test->createVariable(2, 'Boilertemperatur', 52.0);
|
||||
$warmKontakte = [
|
||||
$test->createActionVariable('Warmwasser Stufe 1'),
|
||||
$test->createActionVariable('Warmwasser Stufe 2'),
|
||||
];
|
||||
$warmStufen = [
|
||||
['Stufe' => 1, 'Leistung' => 1000, 'Schaltkontakt_Stufe' => $warmKontakte[0]],
|
||||
['Stufe' => 2, 'Leistung' => 2000, 'Schaltkontakt_Stufe' => $warmKontakte[1]],
|
||||
];
|
||||
$warmwasserId = $test->createInstance(
|
||||
'{B7C54AF4-AD7D-4FE4-B75D-203693906251}',
|
||||
'Wassererwärmer',
|
||||
[
|
||||
'Boilerfuehler_PT1' => $temperaturId,
|
||||
'LeistungsStufen' => json_encode($warmStufen, JSON_THROW_ON_ERROR),
|
||||
'LastwechselSperrzeit' => 1,
|
||||
'LegionellenfunktionAktiv' => false,
|
||||
'PrioritaetPV' => 1,
|
||||
'DiagnosevariablenAnzeigen' => true,
|
||||
]
|
||||
);
|
||||
|
||||
$managerId = $test->createInstance(
|
||||
'{6F771B18-59D4-4C8A-B951-3B2FE9F6A2C4}',
|
||||
'Manager',
|
||||
[
|
||||
'NetzleistungVariableID' => $netzleistungId,
|
||||
'AutomatischeSuche' => false,
|
||||
'VerbraucherZuordnung' => '[]',
|
||||
'DiagnosevariablenAnzeigen' => true,
|
||||
'SollwertSolarladen' => 0.0,
|
||||
]
|
||||
);
|
||||
|
||||
$setAssignment = static function (array $ids) use ($test, $managerId): void {
|
||||
$assignment = array_map(
|
||||
static fn (int $id): array => ['InstanzID' => $id, 'Aktiv' => true],
|
||||
$ids
|
||||
);
|
||||
$test->configureInstance($managerId, [
|
||||
'VerbraucherZuordnung' => json_encode($assignment, JSON_THROW_ON_ERROR),
|
||||
]);
|
||||
};
|
||||
$reportConsumers = static function (array $ids): void {
|
||||
foreach ($ids as $id) {
|
||||
IPS_RequestAction($id, 'Aktiv', true);
|
||||
IPS_RequestAction($id, 'Melden', true);
|
||||
}
|
||||
};
|
||||
|
||||
$test->runCase('Manager funktioniert ohne Verbraucher', static function (TestContext $test) use (
|
||||
$managerId
|
||||
): void {
|
||||
IPS_RequestAction($managerId, 'Aktiv', true);
|
||||
IPS_RequestAction($managerId, 'Regeln', true);
|
||||
$test->assertInstanceStatus($managerId);
|
||||
$test->assertSame('PV', GetValue($test->objectByIdent('Betriebsart', $managerId)));
|
||||
});
|
||||
|
||||
$test->runCase('Manager steuert Verbraucher 1-Stufig', static function (TestContext $test) use (
|
||||
$setAssignment,
|
||||
$reportConsumers,
|
||||
$netzleistungId,
|
||||
$managerId,
|
||||
$einStufigId,
|
||||
$einKontaktId
|
||||
): void {
|
||||
$setAssignment([$einStufigId]);
|
||||
SetValue($netzleistungId, -1000.0);
|
||||
$reportConsumers([$einStufigId]);
|
||||
IPS_RequestAction($managerId, 'Regeln', true);
|
||||
$test->waitUntil(static fn (): bool => GetValue($einKontaktId) === true);
|
||||
$test->assertSame(true, GetValue($einKontaktId));
|
||||
});
|
||||
|
||||
$test->runCase('Manager steuert Wassererwärmer', static function (TestContext $test) use (
|
||||
$setAssignment,
|
||||
$reportConsumers,
|
||||
$netzleistungId,
|
||||
$managerId,
|
||||
$warmwasserId,
|
||||
$warmKontakte
|
||||
): void {
|
||||
$setAssignment([$warmwasserId]);
|
||||
SetValue($netzleistungId, -2000.0);
|
||||
$reportConsumers([$warmwasserId]);
|
||||
IPS_RequestAction($managerId, 'Regeln', true);
|
||||
$test->waitUntil(static fn (): bool => GetValue($warmKontakte[1]) === true);
|
||||
$test->assertSame([false, true], array_map(
|
||||
static fn (int $id): bool => (bool) GetValue($id),
|
||||
$warmKontakte
|
||||
));
|
||||
});
|
||||
|
||||
$test->runCase('Manager steuert beide Verbrauchertypen gemeinsam', static function (
|
||||
TestContext $test
|
||||
) use (
|
||||
$setAssignment,
|
||||
$reportConsumers,
|
||||
$netzleistungId,
|
||||
$managerId,
|
||||
$einStufigId,
|
||||
$warmwasserId,
|
||||
$einKontaktId,
|
||||
$warmKontakte
|
||||
): void {
|
||||
$setAssignment([$einStufigId, $warmwasserId]);
|
||||
SetValue($netzleistungId, -3000.0);
|
||||
$reportConsumers([$einStufigId, $warmwasserId]);
|
||||
IPS_RequestAction($managerId, 'Regeln', true);
|
||||
$test->waitUntil(static fn (): bool => (
|
||||
GetValue($einKontaktId) === true && GetValue($warmKontakte[1]) === true
|
||||
));
|
||||
$test->assertSame(
|
||||
2,
|
||||
GetValue($test->objectByIdent('VerbraucherAnzahl', $managerId))
|
||||
);
|
||||
$test->assertSame(true, GetValue($einKontaktId));
|
||||
$test->assertSame(true, GetValue($warmKontakte[1]));
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user