HI. Sorry mir fällt irgendwie kein vernünftiger Titel dafür ein...
Ich habe 2 Türen: Tür1 und Tür2
Ist es möglich ein DOIF zu erstellen das ein SET Befehl ausführt wenn:
Tür1 auf UND zu geht und dann im ANSCHLUSS Tür2 auf UND zu geht...?
Also es muss exakt das passieren und auch in dieser Reihenfolge, dann müsste ich ein set Befehl bekommen...
Der Befehl müsste also gesendet werden wenn die zweite Tür zu gegangen ist und alle vorherigen zustände auch passiert sind in dieser Reihenfolge..
::)Jungeeee, hoffentlich versteht das einer... ;D
Wie müsste so ein DOIF aussehen? Irgendwie komme ich da nicht weiter...
Im einfachsten Fall
([T1] eq 'auf' and ($cmd == 4 or $cmd == 0))
DOELSEIF ([T1] eq 'zu' and $cmd == 1)
DOELSEIF ([T2] eq 'auf' and $cmd == 2)
DOELSEIF ([T2] eq 'zu' and $cmd == 3 ) (set ...)
Ungetestet!
Krasser Code! Vielen Dank! werde es mal testen...
Hättest du Lust mir den zu erklären? Weil verstehe den nicht so richtig... :-X eigentlich gar nicht...Was bedeutet cmd==1 usw?
Dakneschön!
Hallo misux,
hallo Ellert,
$cmd == 1
würde mich auch interessieren.
Ich nutze innerhalb eines DOIFs folgende Abfrage:
[$SELF:cmd_nr] =~ ("1|2")
oder auch mit < oder > Zeichen, mit den == stehe ich gelegentlich auf Kriegsfuß.
Die Erklärung hier ist, wenn cmd_nr auf 1 oder 2 steht, wird diese Bedingung wahr.
Viele Grüße Gisbert
Zitat aus der Commandref zu DOIF:
Zitat$cmd
Perl-Variablen mit der Bedeutung [$SELF:cmd]
Hallo misux
Das Beispiel von Ellert funktioniert nach einem Abfolge Prinzip.
Bedingung 1 wird nur möglich wenn Bedingung 0 oder 4
Bedingung 2 nur wenn 1 schon ist und so weiter
wobei das in diesem Fall das Reading cmd_nr vom DOIF ist
([T1] eq 'auf' and ($cmd == 4 or $cmd == 0)) ## erster Befehlszweig wird nur ausgeführt wenn Bedingung T1 auf ist und das DOIF cmd_nr 4 oder 0 hat
DOELSEIF ([T1] eq 'zu' and $cmd == 1) ## zweiter Zweig wird erst ausgeführt wenn Bedingung T1 zu ist und das DOIF cmd_nr 1 hat
DOELSEIF ([T2] eq 'auf' and $cmd == 2) ## dritter Zweig wird erst ausgeführt wenn Bedingung T2 auf ist und das DOIF cmd_nr 2 hat
DOELSEIF ([T2] eq 'zu' and $cmd == 3 ) (set ...) ## vierte Zweig wird erst ausgeführt wenn Bedingung T2zu ist und das DOIF cmd_nr 3 hat
Kleiner schönheitsfehler in diesem DOIF ist aber das Du Deine erste Tür bei dieser Programmierung immer wiedr auf und zu machen kannst.
Und dann die zweite öffnest wird der Befehl gesetzt. Es ist noch eine Abfrage die fehlt um Deine Sequenze wieder zurückzusetzten wenn die
Türen in einer anderen Reihenfolge geöffnet oder geschlossen werden.
Ich hab mal Ellert sein DOIF etwas abgeändert so funktioniert es in meiner Testumgebung
([T1] eq 'auf' and ($cmd == 4 or $cmd == 0 or $cmd == 2 or $cmd == 3))
DOELSEIF ([T1] eq 'zu' and $cmd == 1)
DOELSEIF ([T2] eq 'auf' and $cmd == 2)
DOELSEIF ([T2] eq 'zu' and $cmd == 3 ) (set aktion on)
Es gibt aber auch die Möglichkeit das ganze mit dem Modul sequenze zu machen
würde dann z.b. so aussehen.
defmod Aktion sequence T1:auf 4 T1:zu 4 T2:auf 4 T2:zu
hier wird wenn T1 auf ist und inerhalb von 4 sekunden T1 wieder zu ist und dann inerhalb von 4 sekunden T2 auf geht und wieder nach 4 sekunden zu ist ein event gesetzt auf das man dann über ein
DOIF oder notify reagieren kann.
Für ein DOIF sähe das z.b. so aus
([Aktion:"^trigger$"]) (set irgentwas)
Viele Grüsse
Stephan
Zitat von: Stelaku am 28 Februar 2021, 15:19:57
([T1] eq 'auf' and ($cmd == 4 or $cmd == 0 or $cmd == 2 or $cmd == 3))
Oder
([T1] eq 'auf')
weil DOIF ohne do always eh $cmd == 1 ignoriert ;) (selbst wenn nicht, wäre das auch kein Problem).