DOIF/Mehrfachnutzung eines Tasters

Aus FHEMWiki
Zur Navigation springen Zur Suche springen
Mehrfachnutzung eines Tasters.png

Mehrfachbelegung eines Tasters

Die Mehrfachbelegung eines Tasters wird durch die Nutzung des DOIF als Zustandsautomat (State Maschine) realisiert.

Funktionsweise

Info green.pngHinweis
  • Verwendung von DOIF als State Maschine durch Bezug auf den eigenen Status $cmd in der Bedingung
  • triggern durch Events ["<Regex Device>:<Regex Event>"]

Taster simuliert ein Tastergerät das short und long sendet.
Lampe1 und Lampe2 simulieren 2 Lampengeräte.
schrittSchalter_Labor bildet die Mehrfachbelegung eines Tasters nach.
$cmd ist nach der Initialisierung des DOIF 0 und ist die Kurzform für [?$SELF:cmd] oder [?schrittSchalter_Labor001:cmd].
Wenn Taster short sendet, dann wird die erste Bedingung wahr und Lampe1 wird eingeschaltet, $cmd ist jetzt 1.
Beim nächsten short wird die zweite Bedingung wahr und Lampe2 wird eingeschaltet, $cmd ist jetzt 2.
Beim nächsten short wird die dritte Bedingung wahr Lampe1 und Lampe2 werden eingeschaltet, $cmd ist jetzt 3.
Beim nächsten short wird die vierte Bedingung wahr Lampe1 und Lampe2 werden ausgeschaltet, $cmd ist jetzt 4.
Weil $cmd gleich vier ist, wird beim nächsten short wieder die erste Bedingung wahr und der Zyklus beginnt von vorn.

Definition

## 1 
(["button_Labor000:short"] and $cmd=~"0|4") 
   (set lamp1_Labor000 on)
## 2
DOELSEIF (["button_Labor000:short"] and $cmd==1) 
   (set lamp2_Labor000 on, set lamp1_Labor000 off)
## 3
DOELSEIF (["button_Labor000:short"] and $cmd==2) 
   (set lamp(1|2)_Labor000 on)
## 4
DOELSEIF (["button_Labor000:short"] and $cmd==3) 
   (set lamp(1|2)_Labor000 off)

Übungsvorschlag

  • Verändere das DOIF so, dass nicht beide Lampen auf einmal ausgeschaltet werden, sondern Eine nach der Anderen.
  • Lasse die Lampen mit long ausschalten, egal welcher Befehlszweig aktiv ist.

Laborgruppe zum Import mit Raw definition

define button_Labor000 dummy
attr button_Labor000 alias Taster
attr button_Labor000 group Labor: Mehrfachnutzung eines Tasters
attr button_Labor000 room DOIF_Labor
attr button_Labor000 setList short long
attr button_Labor000 webCmd short:long

define lamp1_Labor000 dummy
attr lamp1_Labor000 alias Lampe1
attr lamp1_Labor000 group Labor: Mehrfachnutzung eines Tasters
attr lamp1_Labor000 room DOIF_Labor

define lamp2_Labor000 dummy
attr lamp2_Labor000 alias Lampe2
attr lamp2_Labor000 group Labor: Mehrfachnutzung eines Tasters
attr lamp2_Labor000 room DOIF_Labor

define schrittSchalter_Labor001 DOIF ## 1 \
(["button_Labor000:short"] and $cmd=~"0|4") \
   (set lamp1_Labor000 on)\
## 2\
DOELSEIF (["button_Labor000:short"] and $cmd==1) \
   (set lamp2_Labor000 on, set lamp1_Labor000 off)\
## 3\
DOELSEIF (["button_Labor000:short"] and $cmd==2) \
   (set lamp(1|2)_Labor000 on)\
## 4\
DOELSEIF (["button_Labor000:short"] and $cmd==3) \
   (set lamp(1|2)_Labor000 off)
attr schrittSchalter_Labor001 alias Schrittschalter
attr schrittSchalter_Labor001 cmdState Schritt 1|Schritt 2|Schritt 3|Schritt 4
attr schrittSchalter_Labor001 group Labor: Mehrfachnutzung eines Tasters
attr schrittSchalter_Labor001 room DOIF_Labor
save

Links