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])); }); };