[GELÖST] ISSUE: Möglichkeit in der WebUI, eine Bedingung negiert auszuwerten

Einrichtung, Nutzung und Hilfe zu RaspberryMatic (OCCU auf Raspberry Pi)

Moderatoren: jmaus, Co-Administratoren

Benutzeravatar
Black
Beiträge: 5469
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 419 Mal
Danksagung erhalten: 1070 Mal
Kontaktdaten:

[GELÖST] ISSUE: Möglichkeit in der WebUI, eine Bedingung negiert auszuwerten

Beitrag von Black » 22.04.2020, 11:14

Erweiterung der Funktionalität von WebUI Programmen um die Möglichkeit, einzelne Bedingungen (SingleConditions) in einem WebUI Programm invertiert abzufragen und auszuwerten.

Die Rega verfügt in Ihrer Methodendefinition des SingleConditionObjektes über eine Möglichkeit, die In der WebUI definierte Bedingung normal oder Invertiert abzufragen.
Dazu dient die offiziell nicht dokumentierte Methode NegateCondition (). Bekannt ist diese einer kleinen Gruppe von Leuten (auch mein SDV berücksichtigt diese Eigenschaft des SingleconditionObjectes seit etwa Mitte letztes Jahres in der Detailview und auch in dem Backup und Restore von einzelnen WebUI-Programmen.

Bei einem neu angelegten WebUI programm ist diese Property immer false, es erfolgt also normale Abfrage und Auswertung.
mit einem Object oSCND des Types OT_SINGLECONDITION lässt sich die Eigenschaft mit oSCND.NegateCondition () abfragen und mit oSCND.NegateCondition (false) bzw oSCND.NegateCondition (true) setzen.

Beispiele folgen noch in den weiteren Posts von mir hin in dem Thema, mit Jens bin ich im Hintergrund dran an einer Möglichen WebUI Umsetzung für alle, nicht nur für eine kleine Gruppe "Auserwählter".
Mein GitHub Issue kommt dann auch noch, immo bin ich noch dienstlich unterwegs und kann nicht wirklich über VPN an mein System.

Was geht damit:

beispielsweise ein ungleich vergleich bei Strings

oder ein NICHT vergleich bei einer WerteListe
z.B. WerteListe möglich mit Aus;An;Auto

triggern soll bei nicht Auto, also bei Aus oder an

schreibweise bisher

systemvariableX bei Aus
oder
systemvariableX bei An

gab immer nette komplexe Konstrukte, wenn noch weitere und oder oder Dazukamen

würde sich nun negiert schreiben lassen:

systemvariableX nicht bei auto


Dito wäre Möglich bei Drehgriffen, Zu,gekippt, auf.

will ich auf nicht zu auswerten musste ich jeweils gekippt und auf in 2 separaten bedingungen prüfen
mit der negation liesse sich das in einer Zeile ;

Drehgriff nicht bei ZU

âbhandeln.

Funktionstechnisch in der Rega sollte da alles schon vorgesehen gewesen sein, aber anscheinend vergessen worden bei der implementierung oder programmierteam gewechselt
oder Launchtermin vor der Tür und musste erstmal so fertigwerden. oder oder oder...

Eine Implementierung könnte folgendermassen aussehen in der WebUI.
bei eingeschalteter Negierung wird vor dem Text des Conditiontypes (bei, gleich, um, im Bereich von etc) das Wort Nicht geschrieben

Bildschirmfoto nicht Kopie.jpg

an der passenden WebUI Stelle bräuchte es dort, wo die Singlecondition als Zeile dargestellt wird, eine Zeile in der Art:

Code: Alles auswählen

if (oSCND.NegateCondition () ) { Write ("Nicht "); }
in sauber gemacht natürlich mit einem bestimmten Style und unter Berücksichtungung von englischem Übersetzungstext (NOT)

Damit wäre die Darstellung der zeile eigentlich schon mal erfasst, es bräuchte dann noch eine Möglichkeit in der zeile vor oder hinter dem roten kreuz für Zeile löschen
einen button zu haben, um die bedingung zwischen invertiert und nicht invertiert togglen zu können. Ich habe beispielhaft mal das Invertiersymbol aus einem bekannten SPS Editor genommen,
mit dem Eingänge oder Ausgänge zwischen normal und invertiert umgeschaltet werden können.
Invert.JPG
Invert.JPG (8.05 KiB) 3064 mal betrachtet

damit wäre dann auch die Umschaltung gewährleistet, ein Event auf das Buttonpressed wär dann

Code: Alles auswählen

oSCND.NegateCondition (! oSCND.NegateCondition () );
Beispiel einer Umsetzung z.B. wäre dann
Bildschirmfoto nicht2.jpg
-------------------------------------------------------------------------------------------------------------------------------------

Wir bauen nun ein testprogramm wie dieses:
Negate1.JPG
wers es nachbauen möchter, dieser BackupCode aus dem SDV legt das Programm unter dem namen TestNegate an. Wichtig, es müssen auch 2 Systemvariablen angelegt sein:
1. TestBool vom Type Logigwert
2: testWerteListe vom Type Werteliste mit den Einträgen Wert1;Wert2;Wert3

Das Programm zum erzeugen des TestWebUI programmes

Code: Alles auswählen

string sPRGName= "TestNegate";
WriteLine ("Backup/Restore CCU Programme by Black 2020");
WriteLine ("Backup erstellt vom SDV V3.11.03 LCL am 22.04.2020 20:02:21");
WriteLine ("CCU ProgrammName: \"" # sPRGName # "\"");
WriteLine ("CCU ProgrammInfo: \"Test con NegateCondition ()\"");
WriteLine ("----------------------------");
!- Verwendete Kanäle
string sCHNList= "";
!- Verwendete Systemvariablen
string sSYSVARList= "TestBool\ttestWerteListe";
!- Referenzierung von im Programm verwendeten HSS-Datenpunkten
!- Die Referenzierung erfolgt über den substituierten Kanal und die HSSID 
!- Ab hier bitte die Finger weg !!!
!- ----------------------------
string s= "27|0|2|1089|\t27|1|16|1089|";
string sID; object oID; boolean isOK= true; boolean valid; integer idType; string  idName; string okText= "\tOK....\t"; string errText = "\tERROR.\t";
WriteLine ("Test auf Existenz referenzierter Channels");
foreach (sID,sCHNList) {oID=channels.Get(sID); if (oID) { Write (okText);} else {isOK=false; Write (errText); } WriteLine (sID);}  
WriteLine ("Test auf Existenz und Typkonsistenz referenzierter Systemvariablen");
foreach (sID,s) {
 if (sID.StrValueByIndex ("|",0).ToInteger ()==ID_SYSTEM_VARIABLES) {
   idName= sSYSVARList.StrValueByIndex ("\t", ((sID.StrValueByIndex ("|",1)).ToInteger () ));
   oID=dom.GetObject (ID_SYSTEM_VARIABLES).Get (idName); valid= false;
   if (oID) {
     valid= ((oID.Type()== sID.StrValueByIndex ("|",3).ToInteger ()) && (oID.ValueType()== sID.StrValueByIndex ("|",2).ToInteger ()));}
   if (valid) {Write (okText); } else { Write (errText); isOK=false; }
   if (sID.StrValueByIndex ("|",3).ToInteger ()==OT_VARDP) {Write("SYSVAR\t");} else {Write ("ALARM\t");}
   WriteLine (idName);
 }
}
WriteLine ("Test auf Existenz und Typkonsistenz referenzierter Geräte-Datenpunkte");
foreach (sID,s) {
 if (sID.StrValueByIndex ("|",0).ToInteger ()==ID_DATAPOINTS) {
   idName= sCHNList.StrValueByIndex ("\t", ((sID.StrValueByIndex ("|",1)).ToInteger () ));
   oID= channels.Get (idName); valid= false;
   if (oID) {
     oID= oID.DPByHssDP ((sID.StrValueByIndex ("|",4)));
     if (oID) {
       valid= ((oID.Type()== sID.StrValueByIndex ("|",3).ToInteger ()) && (oID.ValueType()== sID.StrValueByIndex ("|",2).ToInteger ()));
     }
   }
   if (valid) {Write (okText); } else { Write (errText); isOK=false; }
   WriteLine (idName #"."# (sID.StrValueByIndex ("|",4)));
 }
}
if (!isOK) {WriteLine ("Startbedingungen nicht erfüllt, Restore wird abgebrochen"); quit;}
object oPRG= dom.GetObject (ID_PROGRAMS).Get (sPRGName);
if (oPRG) {isOK= false; WriteLine ("Programm existiert schon mit dem Namen \"" # oPRG.Name () # "\" --> Abbruch"); quit;}  
oPRG= dom.CreateObject (OT_PROGRAM,sPRGName);
if (!oPRG) {WriteLine ("Programm konnte nicht angelegt werden. --> Abbruch"); quit; }
dom.GetObject (ID_PROGRAMS).Add (oPRG.ID () );
oPRG.PrgInfo ("Test con NegateCondition ()");
oPRG.Active (false);
oPRG.Enabled  (true);
oPRG.Visible  (true);
oPRG.Internal (false);
object oRULE= oPRG.Rule ();
object oCND; object oSCND; object oDST; object oSDST; object oOBJ;
!-------- Rule 0
oRULE.RuleOperatorType (2);
oRULE.ElseIfFlag (true);
oCND=oRULE.RuleAddCondition(); !- Condition 0
oCND.CndOperatorType (2);
oSCND=oCND.CndAddSingle (); !- Single Condition 0
oSCND.ConditionType(1);
oSCND.ConditionType2(13);
oSCND.OperatorType(1);
oSCND.NegateCondition(false);
oSCND.ConditionChannel(65535);
oSCND.LeftValType(19);
oSCND.LeftVal (dom.GetObject (ID_SYSTEM_VARIABLES).Get ((sSYSVARList.StrValueByIndex ("\t",0))).ID () );  !- 0. Element aus SystemvariablenListe [TestBool]
oSCND.RightVal1ValType(2);
oSCND.RightVal2ValType(2);
oSCND.RightVal1(true);
oSCND.RightVal2(false);
oSCND=oCND.CndAddSingle (); !- Single Condition 1
oSCND.ConditionType(1);
oSCND.ConditionType2(13);
oSCND.OperatorType(1);
oSCND.NegateCondition(false);
oSCND.ConditionChannel(65535);
oSCND.LeftValType(19);
oSCND.LeftVal (dom.GetObject (ID_SYSTEM_VARIABLES).Get ((sSYSVARList.StrValueByIndex ("\t",1))).ID () );  !- 1. Element aus SystemvariablenListe [testWerteListe]
oSCND.RightVal1ValType(16);
oSCND.RightVal2ValType(16);
oSCND.RightVal1(0);
oSCND.RightVal2(0);
!-------- Rule Destination
oDST=oRULE.RuleDestination();
oDST.BreakOnRestart (true);
oSDST=oDST.DestAddSingle ();
oSDST.DestinationParam(20);
oSDST.DestinationValueType(20);
oSDST.DestinationChannel(65535);
oSDST.DestinationDP(65535);
oSDST.DestinationValueParamType(0);
oSDST.DestinationValue("object osrc= dom.GetObject (\"$src$\");\r\nif (osrc) {\r\n   string s= \" ausgelöst von \" # osrc.Name () # \" mit \" # \"$val$\";\r\n   system.Exec (\"logger -t LOGGERNAME -p user.debug [DANN TEIL \" # s # \"]\");\r\n} else {\r\n   system.Exec (\"logger -t LOGGERNAME -p user.debug [DANN TEIL ohne Trigger]\");\r\n}\r\n");
oRULE=oRULE.RuleCreateSubRule();
!-------- Rule 1
oRULE.RuleOperatorType (2);
oRULE.ElseIfFlag (false);
!-------- Rule Destination
oDST=oRULE.RuleDestination();
oDST.BreakOnRestart (true);
oSDST=oDST.DestAddSingle ();
oSDST.DestinationParam(20);
oSDST.DestinationValueType(20);
oSDST.DestinationChannel(65535);
oSDST.DestinationDP(65535);
oSDST.DestinationValueParamType(0);
oSDST.DestinationValue("object osrc= dom.GetObject (\"$src$\");\r\nif (osrc) {\r\n   string s= \" ausgelöst von \" # osrc.Name () # \" mit \" # \"$val$\";\r\n   system.Exec (\"logger -t LOGGERNAME -p user.debug [SONST TEIL \" # s # \"]\");\r\n} else {\r\n   system.Exec (\"logger -t LOGGERNAME -p user.debug [SONST TEIL ohne Trigger]\");\r\n}\r\n");
oPRG.Active (true);
dom.RTUpdate (0);
WriteLine ("Restore Programm von Program \"" # sPRGName # "\" erfolgreich durchgelaufen");
Ist nun Testbool= wahr und testWerteListe= Wert1 (entsprechend einer Zahl=0) so wird der DannTeil aufgerufen, ansonsten der Sonst Teil.
keine Schwierigkeit.

wir triggern nun mal die testWerteListe mit 0:
wie Erwartet gibts im Systemprotokoll:
Apr 22 20:24:45 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ausgelöst von testWerteListe mit 0]

und testWerteListe =1 gibts im Systemprotoll wie erwartet
Apr 22 20:25:55 homematic-ccu2 user.debug LOGGERNAME: [SONST TEIL ausgelöst von testWerteListe mit 1]

nun invertieren wir mal die zweite SingleCondition, die die WeteListe behandelt:

mit dem SDV geht das recht schnell: programm auflösen 2. SCND anwählen, Methode NegateCondition wählen und ändern:
Negate2.JPG

diejenigen ohne SDV können dies in diesem Testprogramm so ändern:

Code: Alles auswählen

object oPRG= dom.GetObject (ID_PROGRAMS).Get ("TestNegate");
oPRG.Rule ().RuleCondition (0).CndSingleCondition (1).NegateCondition (false);   
false macht den Ausgangszustand, true invertiert diesen:

Den Zustand Anzeigen kann man mit:

Code: Alles auswählen

object oPRG= dom.GetObject (ID_PROGRAMS).Get ("TestNegate");
WriteLine (oPRG.Rule ().RuleCondition (0).CndSingleCondition (1).NegateCondition ());  
Wir negieren nun diese Singlecondition durch Aufruf mit true und machen die gleiche Spielerei wieder:

wir triggern nun mal die testWerteListe mit 0:
wie Erwartet gibts im Systemprotokoll:
Apr 22 20:36:35 homematic-ccu2 user.debug LOGGERNAME: [SONST TEIL ausgelöst von testWerteListe mit 0]

und mit Wert = 1:
Apr 22 20:37:16 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ausgelöst von testWerteListe mit 1]

die 2 SCND wird also interpretiert als:

Systemzustand testWerteListe NICHT bei "Wert1" bei Aktualisierung


Black
Zuletzt geändert von Black am 22.04.2020, 20:39, insgesamt 3-mal geändert.
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Benutzeravatar
Black
Beiträge: 5469
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 419 Mal
Danksagung erhalten: 1070 Mal
Kontaktdaten:

Re: ISSUE: Möglichkeit in der WebUI, eine Bedingung negiert auszuwerten

Beitrag von Black » 22.04.2020, 11:14

Nun gehts weiter mit einer Reihe: das geleiche Programm eine nur mit einer Systemvariable Typ Zahl und einem bereich triggern auf änderung:
Negate3.JPG
Testvar stand bei beginn der Reihe auf 11:
es wurde auf folgende Weise die Werte geändert: 9,10,11,12,13

das systemprotokoll brachte wie erwartet:

Code: Alles auswählen

Apr 23 20:54:37 homematic-ccu2 user.debug LOGGERNAME: [SONST TEIL ausgelöst von TestVar mit 9.000000]
Apr 23 20:54:42 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ausgelöst von TestVar mit 10.000000]
Apr 23 20:54:52 homematic-ccu2 user.debug LOGGERNAME: [SONST TEIL ausgelöst von TestVar mit 12.000000]
und nun negieren wir diese Singlecondition

Code: Alles auswählen

Apr 23 21:01:48 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ausgelöst von TestVar mit 9.000000]
Apr 23 21:01:56 homematic-ccu2 user.debug LOGGERNAME: [SONST TEIL ausgelöst von TestVar mit 10.000000]
Apr 23 21:02:04 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ausgelöst von TestVar mit 12.000000]
Durch die Negation wird hier nun das programm getriggert und der dann Teil ausgelöst, wenn der angegebene WerteBereich verlassen wird
Diese Funktion liest sich dann wie:
Systemzustand Testvar Nicht im Bereich/wert von 10.00 bis kleiner 12 bei Änderung

Black
Zuletzt geändert von Black am 26.04.2020, 18:58, insgesamt 3-mal geändert.
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Benutzeravatar
Black
Beiträge: 5469
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 419 Mal
Danksagung erhalten: 1070 Mal
Kontaktdaten:

Re: ISSUE: Möglichkeit in der WebUI, eine Bedingung negiert auszuwerten

Beitrag von Black » 22.04.2020, 11:15

Auswerten eines Türdrehgriffsensor:
Negate10.JPG
Wir triggern mit der Reihenfolge:
0,1,2,1,0

und erhalten die Erwartete Ausgabe

Code: Alles auswählen

Apr 26 18:43:05 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ausgelöst von BidCos-RF.LEQ1252736:1.STATE mit 0]
Apr 26 18:42:42 homematic-ccu2 user.debug LOGGERNAME: [SONST TEIL ausgelöst von BidCos-RF.LEQ1252736:1.STATE mit 1]
Apr 26 18:42:36 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ausgelöst von BidCos-RF.LEQ1252736:1.STATE mit 0]

Wenn wir auf Aktualierung triggern: 0,1,2,1,0
Negate11.JPG


Auch dieser Teil so wir wir uns das Vorstellen

Code: Alles auswählen

Apr 26 18:48:51 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ausgelöst von BidCos-RF.LEQ1252736:1.STATE mit 0]
Apr 26 18:48:46 homematic-ccu2 user.debug LOGGERNAME: [SONST TEIL ausgelöst von BidCos-RF.LEQ1252736:1.STATE mit 1]
Apr 26 18:48:41 homematic-ccu2 user.debug LOGGERNAME: [SONST TEIL ausgelöst von BidCos-RF.LEQ1252736:1.STATE mit 2]
Apr 26 18:48:37 homematic-ccu2 user.debug LOGGERNAME: [SONST TEIL ausgelöst von BidCos-RF.LEQ1252736:1.STATE mit 1]
Apr 26 18:48:32 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ausgelöst von BidCos-RF.LEQ1252736:1.STATE mit 0]

Nun Negieren wir die Funktion. (Mit dem SDV, in der WEB UI gehts ja noch nicht)
ersteinmal wieder auf Änderung
die Bedingung wäre nun
Geräteauswahl HM-Sec-RHS LEQ1252736:1 bei NICHT bei Fensterzustand verriegelt bei Änderung auslösen

wir erhalten be Trigger: 0,1,2,1,0

Code: Alles auswählen

Apr 26 18:53:40 homematic-ccu2 user.debug LOGGERNAME: [SONST TEIL ausgelöst von BidCos-RF.LEQ1252736:1.STATE mit 0]
Apr 26 18:53:29 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ausgelöst von BidCos-RF.LEQ1252736:1.STATE mit 1]
Apr 26 18:53:24 homematic-ccu2 user.debug LOGGERNAME: [SONST TEIL ausgelöst von BidCos-RF.LEQ1252736:1.STATE mit 0][/code

genau die Negierte Auswertung von OBEN, es ist also möglich ein einer zeile abzufragen ob das Fenster offen oder gekippt = nicht verrigelt ist

und der Vollständigkeit halber nochmal mit aktualisierung:

auch her
[code]Apr 26 18:56:44 homematic-ccu2 user.debug LOGGERNAME: [SONST TEIL ausgelöst von BidCos-RF.LEQ1252736:1.STATE mit 0]
Apr 26 18:56:39 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ausgelöst von BidCos-RF.LEQ1252736:1.STATE mit 1]
Apr 26 18:56:36 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ausgelöst von BidCos-RF.LEQ1252736:1.STATE mit 2]
Apr 26 18:56:32 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ausgelöst von BidCos-RF.LEQ1252736:1.STATE mit 1]
Apr 26 18:56:27 homematic-ccu2 user.debug LOGGERNAME: [SONST TEIL ausgelöst von BidCos-RF.LEQ1252736:1.STATE mit 0]
das invertierte Bild zu eben auch hier trigger und wahr bei offen oder gekippt = nicht geschlossen

To be continued

Black
Zuletzt geändert von Black am 26.04.2020, 18:58, insgesamt 1-mal geändert.
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Benutzeravatar
Black
Beiträge: 5469
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 419 Mal
Danksagung erhalten: 1070 Mal
Kontaktdaten:

Re: ISSUE: Möglichkeit in der WebUI, eine Bedingung negiert auszuwerten

Beitrag von Black » 22.04.2020, 11:16

Platzhalter für mich
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Benutzeravatar
jmaus
Beiträge: 9840
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 462 Mal
Danksagung erhalten: 1863 Mal
Kontaktdaten:

Re: ISSUE: Möglichkeit in der WebUI, eine Bedingung negiert auszuwerten

Beitrag von jmaus » 22.04.2020, 11:16

Danke Black für die Zusammenfassung. Allerdings wäre es mir lieber wenn diese Entwicklungsdinge in einem Ticket auf GitHub landen würden, da lässt sich sowas einfach besser bearbeiten und mit Quellcode verlinken, etc.
RaspberryMatic 3.75.6.20240316 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

Benutzeravatar
Black
Beiträge: 5469
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 419 Mal
Danksagung erhalten: 1070 Mal
Kontaktdaten:

Re: ISSUE: Möglichkeit in der WebUI, eine Bedingung negiert auszuwerten

Beitrag von Black » 22.04.2020, 11:22

jup... siehe.

(..)
Mein GitHub Issue kommt dann auch noch, immo bin ich noch dienstlich unterwegs und kann nicht wirklich über VPN an mein System.
(..)

getippt aufm tablett, und unter android läuft mein SDV nicht... also heute ode rmorgen schreib ichs auf github. und stell hier auch die Beispiele rein was geht. und da eine tablett tastatur und ich in diesem Leben keine Freunde mehr werden = wer rechtschreibfehler findet....

WebUI Änderungen sind aber nicht meine Welt, da gibts hier Leute hier die habens besser drauf, vllt schreibt mich ja einer derjenigen an dann sollte es recht schnell machbar sein.

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Benutzeravatar
jmaus
Beiträge: 9840
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 462 Mal
Danksagung erhalten: 1863 Mal
Kontaktdaten:

Re: ISSUE: Möglichkeit in der WebUI, eine Bedingung negiert auszuwerten

Beitrag von jmaus » 22.04.2020, 11:29

Black hat geschrieben:
22.04.2020, 11:22
getippt aufm tablett, und unter android läuft mein SDV nicht... also heute ode rmorgen schreib ichs auf github. und stell hier auch die Beispiele rein was geht.

WebUI Änderungen sind aber nicht meine Welt, da gibts hier Leute hier die habens besser drauf, vllt schreibt mich ja einer derjenigen an dann sollte es recht schnell machbar sein.
Danke. Allerdings sollten wir vmtl. erst einmal klären ob es nicht doch randbedingungen gibt die solch eine Negierungsfunktion nicht ad absurdum führt. Weil in deinem Beispielbild sehe ich ja z.B. den Knopf auch in der Zeile mit dem Zeitsteuerungeintrag. Aber wie genau soll das dann bitte zu verstehen sein bzw. wie soll das funktionieren? Da steht "Täglich von 20:00 Uhr bis 23:00 Uhr beginnend am 20.04.2020 zu Zeitpunkten auslösen". Und wenn man da jetzt das negate drückt, dann würde da ja stehen "Täglich von 20:00 Uhr bis 23:00 Uhr beginnend am 20.04.2020 NICHT zu Zeitpunkten auslösen". Da weiss ich schon gar nicht wie die ReGa intern reagiert wenn die Condition dann so mit NegateCondition abgeändert wird und ob das dann zum text passt, d.h. auf was bezieht sich dann bitte das NICHT? Auf Täglich, auf 20-23:00 Uhr oder auf 20.04.2020 oder auf "zu Zeitpunkten auslösen"? D.h. das Zeitmodul müsste dann immer auslösen nur nicht in genau dem eingestellten Zeitrahmen?!?! Hast du sowas auch schon probiert und kontrolliert? Denn ich denke das ist genau der Grund wieso sowas noch nicht bzw. von eQ3 nicht vorgesehen wurde, weil es ggf. viele solcher Randbedingungen gibt die man 1. prüfen müsste und 2. ggf. keinen Sinn ergeben. Und genau solche Dinge würde ich eben gerne im GitHub diskutieren wollen bevor man solch eine Umsetzung auch angeht.
RaspberryMatic 3.75.6.20240316 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

Benutzeravatar
Black
Beiträge: 5469
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 419 Mal
Danksagung erhalten: 1070 Mal
Kontaktdaten:

Re: ISSUE: Möglichkeit in der WebUI, eine Bedingung negiert auszuwerten

Beitrag von Black » 22.04.2020, 11:33

Mit dem Diskutieren und der "Gültigkeitsgrenzen" bin ich full ack bei dir

Dies ist die Möglichkeit die es gibt und wie man es einsetzen könnte, die Randbedingungen müssen wir diskutieren und defnieren.. Bei einem zeitmodul bin ich übrigens bei dir, das war aus meinem Gedanken eh raus, weil es auch in meinen Augen keinen Sinn ergibt, müsste dann natürlich abgefangen sein. Ich kanns aber heute oder rmorgen auch nochmal explizit testen.

Black


Edit: Erste reihe zu den Zeitmodulen:

Zeitmodul Zeitspanne von 22:57 bis 22:58

Apr 22 22:58:00 homematic-ccu2 user.debug LOGGERNAME: [SONST TEIL ausgelöst von Zeitmodul mit 1]
Apr 22 22:57:00 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ausgelöst von Zeitmodul mit 1]

wie erwartet 2 Trigger, mit beginn 22:57, Trigger und der dann teil, am ende um 22:58 trigger und der sonst Teil


Nun das Spiel in negiert
Zeitspanne aber von 22:59 bis 23:00

Apr 22 23:00:00 homematic-ccu2 user.debug LOGGERNAME: [DANN TEIL ausgelöst von Zeitmodul mit 1]
Apr 22 22:59:00 homematic-ccu2 user.debug LOGGERNAME: [SONST TEIL ausgelöst von Zeitmodul mit 1]

mit beginn trigger aber auslösung vom Sonstteil, mit ende Trigger und auslösung vom Dann Teil

würde bedeutetn, zeitmodule machen auch sinn mit der negierung

zeitmodul Nicht täglich von 22:59 bis 23:00 beginnend am zu Zeitpunkten auslösen wäre dann schlüssig um Zeitbereiche auszuschliessen
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Benutzeravatar
Black
Beiträge: 5469
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 419 Mal
Danksagung erhalten: 1070 Mal
Kontaktdaten:

Re: ISSUE: Möglichkeit in der WebUI, eine Bedingung negiert auszuwerten

Beitrag von Black » 23.04.2020, 21:25

GitHub Issue ist geschrieben

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Hütte
Beiträge: 746
Registriert: 08.02.2017, 11:08
Hat sich bedankt: 32 Mal
Danksagung erhalten: 75 Mal

Re: ISSUE: Möglichkeit in der WebUI, eine Bedingung negiert auszuwerten

Beitrag von Hütte » 02.05.2020, 17:47

@Black

dafür gibt's von mir ein GANZ FETTES DANKE. Das würde allein schon meine Programme für den Aussperrschutz an den Terrassentüren sehr vereinfachen. Statt 2 Gruppen aus 5 Bedingungen, die mit UND verknüpft sind, und die Gruppen wiederum per ODER, um beim Drehgriff genau diese beiden Situation abzufangen (offen oder gekippt) nur noch eine Gruppe, bei der auf "nicht geschlossen" getriggert wird, das macht die ganze Sache viel übersichtlicher. Auch habe ich Programme, die auf Wertelisten getriggert werden. Da habe ich dann dasselbe "Spiel". Manchmal wird es dann ziemlich kniffelig, wenn es darum geht, wie stellt man die Gruppen der UND/ODER Verknüpfungen so zusammen, dass sie funktionieren wie erwartet.

Antworten

Zurück zu „RaspberryMatic“