feat(manager): Energieaufzeichnung und Visualisierungen integrieren
Tests / test (push) Successful in 47s

This commit is contained in:
dh
2026-09-27 19:29:37 +00:00
parent 40f41a2fb8
commit 708a8ecea2
11 changed files with 1426 additions and 56 deletions
+87 -1
View File
@@ -5,7 +5,10 @@ declare(strict_types=1);
use Belevo\EnelixEMS\SymconTest\TestContext;
return static function (TestContext $test): void {
$netzleistungId = $test->createVariable(2, 'Netzleistung', 0.0);
$netzleistungId = $test->createVariable(2, 'Netzleistung', -800.0);
$pvLeistungId = $test->createVariable(2, 'PV-Leistung', 4200.0);
$batterieLeistungId = $test->createVariable(2, 'Batterieleistung', 700.0);
$batterieSocId = $test->createVariable(2, 'Batterie-Ladezustand', 62.0);
$einKontaktId = $test->createActionVariable('Kontakt Verbraucher 1-Stufig');
$einStufigId = $test->createInstance(
'{15879A4E-D0C2-4495-83DE-46E1E462591E}',
@@ -79,6 +82,8 @@ return static function (TestContext $test): void {
'ACNennleistung_kW' => 10.0,
'ACEinspeisegrenze_kW' => 8.0,
'ACBezugsgrenze_kW' => 0.0,
'IstleistungVariableID' => $pvLeistungId,
'Istleistungsfaktor' => 1.0,
]];
$pvKonfiguration = [[
'ID' => 'pv-1',
@@ -100,6 +105,9 @@ return static function (TestContext $test): void {
'MaxEntladeleistung_kW' => 5.0,
'WechselrichterID' => 'hybrid-1',
'Kopplung' => 'hybrid',
'LeistungVariableID' => $batterieLeistungId,
'Leistungsfaktor' => 1.0,
'SOCVariableID' => $batterieSocId,
]];
$lizenzcode = trim((string) getenv('ENELIX_TEST_LICENSE_CODE'));
$managerId = $test->createInstance(
@@ -107,6 +115,10 @@ return static function (TestContext $test): void {
'Manager',
[
'NetzleistungVariableID' => $netzleistungId,
'EnergyPieAnzeigen' => true,
'EnergiediagrammeAnzeigen' => true,
'FunFactsAnzeigen' => true,
'EnergieflussAnzeigen' => true,
'Lizenzcode' => $lizenzcode,
'AutomatischeSuche' => false,
'VerbraucherZuordnung' => json_encode($zuordnung, JSON_THROW_ON_ERROR),
@@ -214,6 +226,80 @@ return static function (TestContext $test): void {
$test->assertSame(['pv-1'], $topologie['sharedAcLimits'][0]['pvArrayIds'] ?? null);
$test->assertSame(['bat-1'], $topologie['sharedAcLimits'][0]['batteryIds'] ?? null);
});
$test->runCase('Energiewerte, Archivregeln und Unterobjekte werden erzeugt', static function (
TestContext $test
) use ($managerId): void {
IPS_RequestAction($managerId, 'MesswerteAufzeichnen', true);
$test->assertSame(
4200.0,
GetValue($test->objectByIdent('PVLeistungArchiv', $managerId))
);
$test->assertSame(
2700.0,
GetValue($test->objectByIdent('HausverbrauchLeistungArchiv', $managerId))
);
$test->assertSame(
-800.0,
GetValue($test->objectByIdent('NetzleistungArchiv', $managerId))
);
$test->assertSame(
700.0,
GetValue($test->objectByIdent('BatterieleistungArchiv', $managerId))
);
$archive = IPS_GetInstanceListByModuleID(
'{43192F0B-135B-4CE7-A0A7-1475603F3060}'
);
$test->assertTrue($archive !== []);
$archivID = (int) $archive[0];
$leistungID = $test->objectByIdent('PVLeistungArchiv', $managerId);
$energieID = $test->objectByIdent('PVEnergie', $managerId);
$test->assertSame(true, AC_GetLoggingStatus($archivID, $leistungID));
$test->assertSame(0, AC_GetAggregationType($archivID, $leistungID));
$test->assertSame(1, AC_GetAggregationType($archivID, $energieID));
foreach (['Leistungsdiagramm', 'Energiediagramm'] as $ident) {
$medienID = $test->objectByIdent($ident, $managerId);
$test->assertSame(4, (int) IPS_GetMedia($medienID)['MediaType']);
}
$html = (string) GetValue($test->objectByIdent('EnergieFunFacts', $managerId));
$test->assertTrue(str_contains($html, 'Solar'));
$test->assertTrue(str_contains($html, 'Netz & Haus'));
$energieflussID = $test->objectByIdent('Energiefluss', $managerId);
$test->assertSame(
'{BA90FDB3-C203-8F26-B4D6-F3DB99905724}',
IPS_GetInstance($energieflussID)['ModuleInfo']['ModuleID']
);
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']);
foreach ([
'EnergyPieAnzeigen',
'EnergiediagrammeAnzeigen',
'FunFactsAnzeigen',
'EnergieflussAnzeigen',
] as $property) {
IPS_SetProperty($managerId, $property, false);
}
IPS_ApplyChanges($managerId);
foreach ([
'EnergyPie',
'Leistungsdiagramm',
'Energiediagramm',
'EnergieFunFacts',
] as $ident) {
$test->assertSame(
false,
@IPS_GetObjectIDByIdent($ident, $managerId),
$ident . ' wurde beim Ausschalten nicht entfernt.'
);
}
$test->assertSame(true, (bool) IPS_GetObject($energieflussID)['ObjectIsHidden']);
});
$zustandswert = static function (array $daten, int $instanzId, string $kennung) {
foreach ($daten['Verbraucher'] ?? [] as $verbraucher) {
if (($verbraucher['InstanzID'] ?? 0) !== $instanzId) {