Istzustand:
Beim Anlegen einer Condition in einer ProgramRule werden die Bedingungen der dann anzulegenden Singleconditions auch direkt mit definiert.
dadurch dass die Bedungen dann zangsweise festliegen ist das system an sich starr, obwohl dieses nicht sein müsste.
diese ANDs in dem Beispiel sind nicht in stein gemeisselt sondern finden sich in den entsprechenden Singleconditions in der Methode .Operatortype wieder. Diese methode ist Read/Write und beschreibt die Art, die das Ergebnis der Singlecondition verknüpft wird. Kann si ähnlich betrachtet wrden wie NegateCondition (), welches ja mit dem Nicht eine Invertierung der Singlecondition ermöglicht (s.a. entsprechender beitrag seinerzeit von mir)
Das interessante ist nun, dass sich dieser Oeratortype ändern lässt und damit auch gezielt und reproduzierbar die Logik der Condition.
in dem beispiel nun habe ich das And der letzen Bedingung mit dem SDV in ein OR geändert. (mit einem Script geht es genauso)
daraus resultiert nun folgende Logig in der WebUI:
Man beachte nun das oder, welches sich auch in der WebUI wiederfindet
in SPS AWL-Schreibweise (die einige ja kennen ja das ursprungsprogramm ja so aus:
Code: Alles auswählen
U "TP1"
U "TP2"
U "TP3"
U "TP4"
mit der gerwaltaktions des Umschreibens in ein OR und dem Umstand, das wir aussnutzen, das die Rega bei der Auswertung der programmlogig streng von oben nach unen durchgeht erhalten wir die folgende resiltierende SPS-Schreibweise
Code: Alles auswählen
U "TP1"
U "TP2"
U "TP3"
O "TP4"
TEST:
folgendes kleines testscript kommt aus Anwendung:
1.
Code: Alles auswählen
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("TP1").State(true);
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("TP2").State(true);
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("TP3").State(false);
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("TP4").State(false);
dom.GetObject (ID_PROGRAMS).Get ("Test 1").State(1);
Code: Alles auswählen
--------------------------------- SystemLog ---------------------------------
Nov 15 13:06:33 homematic-ccu2 user.debug LOGGERNAME: [SONST TEIL ohne Trigger]
Code: Alles auswählen
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("TP1").State(true);
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("TP2").State(true);
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("TP3").State(true);
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("TP4").State(false);
dom.GetObject (ID_PROGRAMS).Get ("Test 1").State(1);
Code: Alles auswählen
Nov 15 13:20:16 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ohne Trigger]
Code: Alles auswählen
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("TP1").State(true);
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("TP2").State(false);
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("TP3").State(false);
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("TP4").State(true);
dom.GetObject (ID_PROGRAMS).Get ("Test 1").State(1);
Code: Alles auswählen
Nov 15 13:22:16 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ohne Trigger]
aber es geht noch weiter.....