feat(manager): Energievisualisierung und Synchronisierung erweitern
Tests / test (push) Successful in 50s
Tests / test (push) Successful in 50s
This commit is contained in:
@@ -6,8 +6,13 @@ use Belevo\EnelixEMS\SymconTest\TestContext;
|
||||
|
||||
return static function (TestContext $test): void {
|
||||
$netzleistungId = $test->createVariable(2, 'Netzleistung', -800.0);
|
||||
$netzbezugEnergieId = $test->createVariable(2, 'Netzbezug-Energie', 32.0);
|
||||
$netzeinspeisungEnergieId = $test->createVariable(2, 'Netzeinspeisung-Energie', 16.0);
|
||||
$pvLeistungId = $test->createVariable(2, 'PV-Leistung', 4200.0);
|
||||
$pvEnergieId = $test->createVariable(2, 'PV-Energie', 120.0);
|
||||
$batterieLeistungId = $test->createVariable(2, 'Batterieleistung', 700.0);
|
||||
$batterieLadeenergieId = $test->createVariable(2, 'Batterie-Ladeenergie', 18.0);
|
||||
$batterieEntladeenergieId = $test->createVariable(2, 'Batterie-Entladeenergie', 12.0);
|
||||
$batterieSocId = $test->createVariable(2, 'Batterie-Ladezustand', 62.0);
|
||||
$einKontaktId = $test->createActionVariable('Kontakt Verbraucher 1-Stufig');
|
||||
$einStufigId = $test->createInstance(
|
||||
@@ -82,6 +87,8 @@ return static function (TestContext $test): void {
|
||||
'ACNennleistung_kW' => 10.0,
|
||||
'IstleistungVariableID' => $pvLeistungId,
|
||||
'Istleistungsfaktor' => 1.0,
|
||||
'ErzeugungsenergieVariableID' => $pvEnergieId,
|
||||
'Erzeugungsenergiefaktor' => 1.0,
|
||||
]];
|
||||
$pvKonfiguration = [[
|
||||
'ID' => 'pv-1',
|
||||
@@ -106,6 +113,9 @@ return static function (TestContext $test): void {
|
||||
'LeistungVariableID' => $batterieLeistungId,
|
||||
'Leistungsfaktor' => 1.0,
|
||||
'SOCVariableID' => $batterieSocId,
|
||||
'LadeenergieVariableID' => $batterieLadeenergieId,
|
||||
'EntladeenergieVariableID' => $batterieEntladeenergieId,
|
||||
'Energiefaktor' => 1.0,
|
||||
]];
|
||||
$lizenzcode = trim((string) getenv('ENELIX_TEST_LICENSE_CODE'));
|
||||
$managerId = $test->createInstance(
|
||||
@@ -113,6 +123,8 @@ return static function (TestContext $test): void {
|
||||
'Manager',
|
||||
[
|
||||
'NetzleistungVariableID' => $netzleistungId,
|
||||
'NetzbezugEnergieVariableID' => $netzbezugEnergieId,
|
||||
'NetzeinspeisungEnergieVariableID' => $netzeinspeisungEnergieId,
|
||||
'EnergyPieAnzeigen' => true,
|
||||
'EnergiediagrammeAnzeigen' => true,
|
||||
'FunFactsAnzeigen' => true,
|
||||
@@ -226,11 +238,17 @@ return static function (TestContext $test): void {
|
||||
});
|
||||
$test->runCase('Energiewerte, Archivregeln und Unterobjekte werden erzeugt', static function (
|
||||
TestContext $test
|
||||
) use ($managerId): void {
|
||||
) use ($managerId, $pvLeistungId): void {
|
||||
IPS_RequestAction($managerId, 'MesswerteAufzeichnen', true);
|
||||
$test->assertSame(
|
||||
4200.0,
|
||||
GetValue($test->objectByIdent('PVLeistungArchiv', $managerId))
|
||||
GetValue($test->objectByIdent('PVLeistungArchiv', $managerId)),
|
||||
sprintf(
|
||||
'PV-Archiv unveraendert; Quelle %.1f W, Managerstatus %d, Konfiguration %s.',
|
||||
(float) GetValue($pvLeistungId),
|
||||
(int) IPS_GetInstance($managerId)['InstanceStatus'],
|
||||
(string) IPS_GetProperty($managerId, 'AnlagenWechselrichter')
|
||||
)
|
||||
);
|
||||
$test->assertSame(
|
||||
2700.0,
|
||||
@@ -288,18 +306,69 @@ return static function (TestContext $test): void {
|
||||
}
|
||||
}
|
||||
$pvFlussID = $test->objectByIdent('EnergieflussPV', $managerId);
|
||||
$test->assertSame(4200.0, (float) GetValue($pvFlussID));
|
||||
$test->assertSame(
|
||||
4200.0,
|
||||
(float) GetValue($pvFlussID),
|
||||
'Der anfaengliche PV-Energiefluss ist falsch.'
|
||||
);
|
||||
$test->assertSame('~Power', IPS_GetVariable($pvFlussID)['VariableProfile']);
|
||||
|
||||
IPS_SetProperty($managerId, 'EnergieflussLeistungseinheit', 1);
|
||||
IPS_ApplyChanges($managerId);
|
||||
$test->assertSame(4.2, (float) GetValue($pvFlussID));
|
||||
$test->assertSame('Enelix.Power.kW', IPS_GetVariable($pvFlussID)['VariableProfile']);
|
||||
$pieID = $test->objectByIdent('EnergyPie', $managerId);
|
||||
$leistungsdiagrammID = $test->objectByIdent('Leistungsdiagramm', $managerId);
|
||||
$energiediagrammID = $test->objectByIdent('Energiediagramm', $managerId);
|
||||
$energiediagramm = json_decode(
|
||||
base64_decode((string) IPS_GetMediaContent($energiediagrammID), true),
|
||||
true,
|
||||
512,
|
||||
JSON_THROW_ON_ERROR
|
||||
);
|
||||
$energietitel = array_column($energiediagramm['datasets'] ?? [], 'title');
|
||||
foreach ($energiediagramm['datasets'] ?? [] as $datensatz) {
|
||||
$test->assertSame('bar', $datensatz['type'] ?? null);
|
||||
}
|
||||
foreach ([
|
||||
'Netzbezug',
|
||||
'Netzeinspeisung',
|
||||
'Batterie laden gesamt',
|
||||
'Batterie entladen gesamt',
|
||||
] as $titel) {
|
||||
$test->assertTrue(in_array($titel, $energietitel, true));
|
||||
}
|
||||
|
||||
IPS_RequestAction($managerId, 'FormEnergieflussAnzeigen', false);
|
||||
$test->assertSame(true, (bool) IPS_GetObject($energieflussID)['ObjectIsHidden']);
|
||||
IPS_RequestAction($managerId, 'FormEnergieflussAnzeigen', true);
|
||||
$test->assertSame(false, (bool) IPS_GetObject($energieflussID)['ObjectIsHidden']);
|
||||
$angepasstesDiagramm = base64_encode(
|
||||
json_encode(['datasets' => [], 'custom' => 'bleibt'], JSON_THROW_ON_ERROR)
|
||||
);
|
||||
IPS_SetMediaContent($energiediagrammID, $angepasstesDiagramm);
|
||||
IPS_SetProperty($pieID, 'Zaehlerfaktor', 2.0);
|
||||
IPS_ApplyChanges($pieID);
|
||||
IPS_SetProperty($energieflussID, 'Config', '[]');
|
||||
IPS_ApplyChanges($energieflussID);
|
||||
IPS_SetProperty($managerId, 'EnergieflussLeistungseinheit', 1);
|
||||
IPS_SetProperty($managerId, 'DiagrammPVModus', 2);
|
||||
IPS_SetProperty($managerId, 'DiagrammBatterieModus', 2);
|
||||
IPS_ApplyChanges($managerId);
|
||||
|
||||
$test->assertSame($pieID, $test->objectByIdent('EnergyPie', $managerId));
|
||||
$test->assertSame(
|
||||
$leistungsdiagrammID,
|
||||
$test->objectByIdent('Leistungsdiagramm', $managerId)
|
||||
);
|
||||
$test->assertSame(
|
||||
$energiediagrammID,
|
||||
$test->objectByIdent('Energiediagramm', $managerId)
|
||||
);
|
||||
$test->assertSame(
|
||||
$angepasstesDiagramm,
|
||||
(string) IPS_GetMediaContent($energiediagrammID)
|
||||
);
|
||||
$test->assertSame(2.0, (float) IPS_GetProperty($pieID, 'Zaehlerfaktor'));
|
||||
$test->assertSame('[]', (string) IPS_GetProperty($energieflussID, 'Config'));
|
||||
$test->assertSame(
|
||||
4200.0,
|
||||
(float) GetValue($pvFlussID),
|
||||
'Der bestehende PV-Energiefluss wurde beim Apply veraendert.'
|
||||
);
|
||||
$test->assertSame('~Power', IPS_GetVariable($pvFlussID)['VariableProfile']);
|
||||
|
||||
foreach ([
|
||||
'EnergyPieAnzeigen',
|
||||
@@ -322,7 +391,44 @@ return static function (TestContext $test): void {
|
||||
$ident . ' wurde beim Ausschalten nicht entfernt.'
|
||||
);
|
||||
}
|
||||
$test->assertSame(true, (bool) IPS_GetObject($energieflussID)['ObjectIsHidden']);
|
||||
$test->assertSame(
|
||||
true,
|
||||
(bool) IPS_GetObject($energieflussID)['ObjectIsHidden']
|
||||
);
|
||||
|
||||
foreach ([
|
||||
'EnergyPieAnzeigen',
|
||||
'EnergiediagrammeAnzeigen',
|
||||
'EnergieflussAnzeigen',
|
||||
] as $property) {
|
||||
IPS_SetProperty($managerId, $property, true);
|
||||
}
|
||||
IPS_ApplyChanges($managerId);
|
||||
$neuerFlussID = $test->objectByIdent('Energiefluss', $managerId);
|
||||
$test->assertSame($energieflussID, $neuerFlussID);
|
||||
$test->assertSame(false, (bool) IPS_GetObject($neuerFlussID)['ObjectIsHidden']);
|
||||
$test->assertTrue((string) IPS_GetProperty($neuerFlussID, 'Config') !== '[]');
|
||||
$test->assertSame(4.2, (float) GetValue($pvFlussID));
|
||||
$test->assertSame('Enelix.Power.kW', IPS_GetVariable($pvFlussID)['VariableProfile']);
|
||||
|
||||
$neuesLeistungsdiagramm = json_decode(
|
||||
base64_decode(
|
||||
(string) IPS_GetMediaContent(
|
||||
$test->objectByIdent('Leistungsdiagramm', $managerId)
|
||||
),
|
||||
true
|
||||
),
|
||||
true,
|
||||
512,
|
||||
JSON_THROW_ON_ERROR
|
||||
);
|
||||
$leistungstitel = array_column(
|
||||
$neuesLeistungsdiagramm['datasets'] ?? [],
|
||||
'title'
|
||||
);
|
||||
foreach (['PV gesamt', 'Hybridwechselrichter', 'Batterie gesamt', 'Hausspeicher'] as $titel) {
|
||||
$test->assertTrue(in_array($titel, $leistungstitel, true));
|
||||
}
|
||||
});
|
||||
|
||||
$zustandswert = static function (array $daten, int $instanzId, string $kennung) {
|
||||
@@ -470,12 +576,11 @@ return static function (TestContext $test): void {
|
||||
));
|
||||
});
|
||||
|
||||
$test->runCase('Veralteter Verbraucher blockiert aktuelle Verbraucher nicht', static function (
|
||||
$test->runCase('Veraltete Verbraucher werden aktiv neu angefordert', static function (
|
||||
TestContext $test
|
||||
) use (
|
||||
$managerId,
|
||||
$netzleistungId,
|
||||
$einStufigId,
|
||||
$warmwasserId,
|
||||
$pufferspeicherId,
|
||||
$melden,
|
||||
@@ -496,17 +601,9 @@ return static function (TestContext $test): void {
|
||||
IPS_RequestAction($managerId, 'Regeln', true);
|
||||
|
||||
$daten = $verbraucherstatus();
|
||||
$test->assertSame(false, $daten['Synchronisiert'] ?? null);
|
||||
$test->assertSame(2, count($daten['Verbraucher'] ?? []));
|
||||
$test->assertSame(1, count($daten['NichtGeregelt'] ?? []));
|
||||
$test->assertSame(
|
||||
$einStufigId,
|
||||
$daten['NichtGeregelt'][0]['InstanzID'] ?? null
|
||||
);
|
||||
$test->assertSame(
|
||||
'Meldung ist veraltet',
|
||||
$daten['NichtGeregelt'][0]['Grund'] ?? null
|
||||
);
|
||||
$test->assertSame(true, $daten['Synchronisiert'] ?? null);
|
||||
$test->assertSame(3, count($daten['Verbraucher'] ?? []));
|
||||
$test->assertSame(0, count($daten['NichtGeregelt'] ?? []));
|
||||
$test->assertTrue(
|
||||
(float) GetValue($test->objectByIdent('Verteilbudget', $managerId)) > 0.0
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user