Add opt-in SDL measurement sources and independent visualization toggles. Exclude balancing power from household telemetry and new household energy. Preserve custom views and cover measurement, migration and Symcon 8.0 behavior.
This commit is contained in:
@@ -431,6 +431,97 @@ return static function (TestContext $test): void {
|
||||
}
|
||||
});
|
||||
|
||||
$test->runCase('SDL korrigiert Hauslast und ergaenzt bestehende Anzeigen idempotent', static function (
|
||||
TestContext $test
|
||||
) use ($managerId): void {
|
||||
$leistungID = $test->createVariable(2, 'SDL Istleistung', -1.2);
|
||||
$socID = $test->createVariable(2, 'SDL SOC', 47.5);
|
||||
$flussID = $test->objectByIdent('Energiefluss', $managerId);
|
||||
$chartID = $test->objectByIdent('Leistungsdiagramm', $managerId);
|
||||
$flussVorher = json_decode(IPS_GetProperty($flussID, 'Config'), true, 512, JSON_THROW_ON_ERROR);
|
||||
$chartVorher = json_decode(base64_decode(IPS_GetMediaContent($chartID)), true, 512, JSON_THROW_ON_ERROR);
|
||||
try {
|
||||
IPS_SetProperty($managerId, 'SDLAktiv', true);
|
||||
IPS_SetProperty($managerId, 'SDLLeistungVariableID', $leistungID);
|
||||
IPS_SetProperty($managerId, 'SDLLeistungsfaktor', -1000.0);
|
||||
IPS_SetProperty($managerId, 'SDLSOCVariableID', $socID);
|
||||
IPS_SetProperty($managerId, 'SDLEnergieflussAnzeigen', true);
|
||||
IPS_SetProperty($managerId, 'SDLDiagrammeAnzeigen', true);
|
||||
IPS_ApplyChanges($managerId);
|
||||
$test->assertSame(1500.0, GetValue($test->objectByIdent('HausverbrauchLeistungArchiv', $managerId)));
|
||||
$test->assertSame(1200.0, GetValue($test->objectByIdent('SDLLeistungArchiv', $managerId)));
|
||||
$test->assertSame(47.5, GetValue($test->objectByIdent('SDLSOCArchiv', $managerId)));
|
||||
$test->assertSame(1.2, GetValue($test->objectByIdent('EnergieflussSDL', $managerId)));
|
||||
$test->assertSame('Aktiv', GetValue($test->objectByIdent('SDLStatus', $managerId)));
|
||||
$fluss = json_decode(IPS_GetProperty($flussID, 'Config'), true, 512, JSON_THROW_ON_ERROR);
|
||||
$test->assertSame($flussVorher, array_slice($fluss, 0, count($flussVorher)));
|
||||
$test->assertSame(count($flussVorher) + 1, count($fluss));
|
||||
$test->assertSame($test->objectByIdent('SDLSOCArchiv', $managerId), $fluss[count($fluss) - 1]['InfoVariableID']);
|
||||
$chart = json_decode(base64_decode(IPS_GetMediaContent($chartID)), true, 512, JSON_THROW_ON_ERROR);
|
||||
$test->assertSame($chartVorher['datasets'], array_slice($chart['datasets'], 0, count($chartVorher['datasets'])));
|
||||
$test->assertSame('right', $chart['datasets'][count($chart['datasets']) - 1]['side']);
|
||||
$test->assertSame('~Intensity.100', $chart['datasets'][count($chart['datasets']) - 1]['profile']);
|
||||
IPS_ApplyChanges($managerId);
|
||||
$test->assertSame($fluss, json_decode(IPS_GetProperty($flussID, 'Config'), true, 512, JSON_THROW_ON_ERROR));
|
||||
$test->assertSame($chart, json_decode(base64_decode(IPS_GetMediaContent($chartID)), true, 512, JSON_THROW_ON_ERROR));
|
||||
|
||||
foreach ([0 => ['~Power', 1200.0], 1 => ['Enelix.Power.kW', 1.2]] as $einheit => $erwartet) {
|
||||
IPS_SetProperty($managerId, 'EnergieflussAnzeigen', false);
|
||||
IPS_ApplyChanges($managerId);
|
||||
IPS_SetProperty($managerId, 'EnergieflussLeistungseinheit', $einheit);
|
||||
IPS_SetProperty($managerId, 'EnergieflussAnzeigen', true);
|
||||
IPS_ApplyChanges($managerId);
|
||||
$flussID = $test->objectByIdent('Energiefluss', $managerId);
|
||||
$sdlID = $test->objectByIdent('EnergieflussSDL', $managerId);
|
||||
$test->assertSame($erwartet[0], IPS_GetVariable($sdlID)['VariableProfile']);
|
||||
$test->assertSame($erwartet[1], GetValue($sdlID));
|
||||
}
|
||||
|
||||
IPS_SetProperty($managerId, 'SDLEnergieflussAnzeigen', false);
|
||||
IPS_SetProperty($managerId, 'SDLDiagrammeAnzeigen', false);
|
||||
IPS_ApplyChanges($managerId);
|
||||
$test->assertSame($flussVorher, json_decode(IPS_GetProperty($flussID, 'Config'), true, 512, JSON_THROW_ON_ERROR));
|
||||
$test->assertSame($chartVorher, json_decode(base64_decode(IPS_GetMediaContent($chartID)), true, 512, JSON_THROW_ON_ERROR));
|
||||
$test->assertSame(1500.0, GetValue($test->objectByIdent('HausverbrauchLeistungArchiv', $managerId)));
|
||||
$test->assertEquals(1.9, GetValue($test->objectByIdent('EnergieflussBatterie', $managerId)), 0.000001);
|
||||
|
||||
IPS_SetProperty($managerId, 'SDLSOCVariableID', 0);
|
||||
IPS_SetProperty($managerId, 'SDLDiagrammeAnzeigen', true);
|
||||
IPS_ApplyChanges($managerId);
|
||||
$chart = json_decode(base64_decode(IPS_GetMediaContent($chartID)), true, 512, JSON_THROW_ON_ERROR);
|
||||
$test->assertSame(count($chartVorher['datasets']) + 1, count($chart['datasets']));
|
||||
IPS_SetProperty($managerId, 'EnergieaufzeichnungAktiv', false);
|
||||
$test->assertTrue(IPS_ApplyChanges($managerId));
|
||||
$archivID = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0];
|
||||
foreach (['SDLLeistungArchiv', 'SDLSOCArchiv', 'SDLLadenEnergie', 'SDLEntladenEnergie'] as $ident) {
|
||||
$test->assertSame(false, AC_GetLoggingStatus($archivID, $test->objectByIdent($ident, $managerId)));
|
||||
}
|
||||
} finally {
|
||||
IPS_SetProperty($managerId, 'EnergieaufzeichnungAktiv', true);
|
||||
IPS_SetProperty($managerId, 'SDLAktiv', false);
|
||||
IPS_SetProperty($managerId, 'SDLEnergieflussAnzeigen', false);
|
||||
IPS_SetProperty($managerId, 'SDLDiagrammeAnzeigen', false);
|
||||
IPS_ApplyChanges($managerId);
|
||||
}
|
||||
$test->assertSame(2700.0, GetValue($test->objectByIdent('HausverbrauchLeistungArchiv', $managerId)));
|
||||
});
|
||||
$test->runCase('SDL weist fehlende und doppelte Leistungsquellen zurueck', static function (
|
||||
TestContext $test
|
||||
) use ($managerId, $batterieLeistungId): void {
|
||||
try {
|
||||
IPS_SetProperty($managerId, 'SDLAktiv', true);
|
||||
foreach ([0, $batterieLeistungId] as $quelle) {
|
||||
IPS_SetProperty($managerId, 'SDLLeistungVariableID', $quelle);
|
||||
IPS_ApplyChanges($managerId);
|
||||
$test->assertInstanceStatus($managerId, 202);
|
||||
}
|
||||
} finally {
|
||||
IPS_SetProperty($managerId, 'SDLAktiv', false);
|
||||
IPS_SetProperty($managerId, 'SDLLeistungVariableID', 0);
|
||||
IPS_ApplyChanges($managerId);
|
||||
}
|
||||
});
|
||||
|
||||
$zustandswert = static function (array $daten, int $instanzId, string $kennung) {
|
||||
foreach ($daten['Verbraucher'] ?? [] as $verbraucher) {
|
||||
if (($verbraucher['InstanzID'] ?? 0) !== $instanzId) {
|
||||
|
||||
Reference in New Issue
Block a user