fix(ladestation): Regeluebergaenge stabilisieren
Tests / test (push) Successful in 50s

This commit is contained in:
dh
2026-10-01 13:01:32 +00:00
parent 8357e8dfab
commit 3ce9af4244
11 changed files with 427 additions and 119 deletions
@@ -184,6 +184,58 @@ return static function (TestContext $test): void {
$test->assertInstanceStatus($station);
});
$test->runCase('Solarumschaltung wartet auf die neue Manager-Vorgabe', static function (
TestContext $test
) use ($station): void {
$managerId = $test->createInstance(
'{6F771B18-59D4-4C8A-B951-3B2FE9F6A2C4}',
'Hilfsmanager Easee-Uebergang',
[
'AutomatischeSuche' => false,
'VerbraucherZuordnung' => json_encode([
['InstanzID' => $station, 'Aktiv' => true],
], JSON_THROW_ON_ERROR),
]
);
$sendeSollwert = static function (int $leistung) use ($managerId, $station): void {
IPS_RequestAction($station, 'ManagerdatenEmpfangen', json_encode([
'Kopf' => [
'Version' => '4.0',
'AbsenderID' => $managerId,
'EmpfaengerID' => $station,
'Zeitpunkt' => time(),
],
'Betriebsart' => 'PV',
'Sollleistung_W' => $leistung,
], JSON_THROW_ON_ERROR));
};
$sendeSollwert(4104);
$befehlVorUmschaltung = (string) GetValue(
$test->objectByIdent('LetzterGeraetebefehl', $station)
);
IPS_RequestAction($station, 'Solarladen', false);
$test->assertSame(
$befehlVorUmschaltung,
(string) GetValue($test->objectByIdent('LetzterGeraetebefehl', $station))
);
$test->assertSame(
4104,
GetValue($test->objectByIdent('Sollleistung', $station)),
'Die Sollleistung muss bis zur neuen Manager-Vorgabe stabil bleiben.'
);
$sendeSollwert(10944);
$test->assertTrue(str_contains(
(string) GetValue($test->objectByIdent('LetzterGeraetebefehl', $station)),
'"Ampere":16'
));
IPS_RequestAction($station, 'Solarladen', true);
$sendeSollwert(0);
});
$test->runCase('SignalR-Abbruch erreicht die Ladestation', static function (
TestContext $test
) use ($gateway, $station): void {
@@ -226,4 +278,24 @@ return static function (TestContext $test): void {
);
$test->assertInstanceStatus($station, 202);
});
$test->runCase('Leistungswerte und Fahrzeugstatus folgen ihrer Sichtbarkeitsgruppe', static function (
TestContext $test
) use ($station): void {
IPS_SetProperty($station, 'EinstellungenInVisu', true);
IPS_SetProperty($station, 'DiagnosevariablenAnzeigen', false);
IPS_ApplyChanges($station);
$test->assertTrue(@IPS_GetObjectIDByIdent('Istleistung', $station) !== false);
$test->assertTrue(@IPS_GetObjectIDByIdent('Sollleistung', $station) !== false);
$test->assertSame(false, @IPS_GetObjectIDByIdent('Fahrzeugstatus', $station));
IPS_SetProperty($station, 'EinstellungenInVisu', false);
IPS_SetProperty($station, 'DiagnosevariablenAnzeigen', true);
IPS_ApplyChanges($station);
$test->assertSame(false, @IPS_GetObjectIDByIdent('Istleistung', $station));
$test->assertSame(false, @IPS_GetObjectIDByIdent('Sollleistung', $station));
$test->assertTrue(@IPS_GetObjectIDByIdent('Fahrzeugstatus', $station) !== false);
});
};
+37 -5
View File
@@ -361,7 +361,18 @@ return static function (TestContext $test): void {
'amp=6'
), 'Solarladen: Der 6-A-Befehl fehlt. Erhalten: ' . $befehl . '; Diagnose: ' . $diagnose);
$befehlVorUmschaltung = $befehl;
IPS_RequestAction($stationId, 'Solarladen', false);
$test->assertSame(
$befehlVorUmschaltung,
(string) GetValue($test->objectByIdent('LetzterGeraetebefehl', $stationId)),
'Die Umschaltung darf vor der neuen Manager-Vorgabe keinen Zwischenwert setzen.'
);
$test->assertSame(
4104,
GetValue($test->objectByIdent('Sollleistung', $stationId)),
'Die Sollleistung muss bis zur neuen Manager-Vorgabe stabil bleiben.'
);
$angebot = (string) GetValue($test->objectByIdent('LeistungsangebotDiagnose', $stationId));
$test->assertSame('[10944]', $angebot, 'PV ohne Solarladen muss nur das Maximum anbieten.');
$abgewiesen = false;
@@ -422,7 +433,7 @@ return static function (TestContext $test): void {
));
});
$test->runCase('Neue Ladestation wird erst nach Freigabe mit Maximalstrom erkannt', static function (
$test->runCase('Neue Ladestation wird erst nach Freigabe mit Mindeststrom erkannt', static function (
TestContext $test
) use ($phasenerkennung, $anforderungSenden): void {
$stationId = $phasenerkennung;
@@ -432,8 +443,8 @@ return static function (TestContext $test): void {
);
$test->assertTrue(!str_contains(
(string) GetValue($test->objectByIdent('LetzterGeraetebefehl', $stationId)),
'amp=16'
), 'Eine inaktive Station darf keine Maximalstrom-Probe starten.');
'amp=6'
), 'Eine inaktive Station darf keine Phasenprobe starten.');
IPS_RequestAction($stationId, 'Aktiv', true);
@@ -443,8 +454,8 @@ return static function (TestContext $test): void {
);
$test->assertTrue(str_contains(
(string) GetValue($test->objectByIdent('LetzterGeraetebefehl', $stationId)),
'amp=16'
), 'Nach der Freigabe muss die Maximalstrom-Probe starten.');
'amp=6'
), 'Nach der Freigabe muss die Mindeststrom-Phasenprobe starten.');
IPS_Sleep(2100);
IPS_RequestAction($stationId, 'Statuszyklus', false);
@@ -472,4 +483,25 @@ return static function (TestContext $test): void {
(string) GetValue($test->objectByIdent('LeistungsangebotDiagnose', $stationId))
);
});
$test->runCase('Leistungswerte und Fahrzeugstatus folgen ihrer Sichtbarkeitsgruppe', static function (
TestContext $test
) use ($stationen): void {
$stationId = $stationen['go-e alt'];
IPS_SetProperty($stationId, 'EinstellungenInVisu', true);
IPS_SetProperty($stationId, 'DiagnosevariablenAnzeigen', false);
IPS_ApplyChanges($stationId);
$test->assertTrue(@IPS_GetObjectIDByIdent('Istleistung', $stationId) !== false);
$test->assertTrue(@IPS_GetObjectIDByIdent('Sollleistung', $stationId) !== false);
$test->assertSame(false, @IPS_GetObjectIDByIdent('Fahrzeugstatus', $stationId));
IPS_SetProperty($stationId, 'EinstellungenInVisu', false);
IPS_SetProperty($stationId, 'DiagnosevariablenAnzeigen', true);
IPS_ApplyChanges($stationId);
$test->assertSame(false, @IPS_GetObjectIDByIdent('Istleistung', $stationId));
$test->assertSame(false, @IPS_GetObjectIDByIdent('Sollleistung', $stationId));
$test->assertTrue(@IPS_GetObjectIDByIdent('Fahrzeugstatus', $stationId) !== false);
});
};