DOIF/Mehrfachnutzung eines Tasters: Unterschied zwischen den Versionen

Aus FHEMWiki
(Link-Korrektur)
 
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt)
Zeile 4: Zeile 4:
===Funktionsweise===
===Funktionsweise===
{{Randnotiz|RNText=Hinweis
{{Randnotiz|RNText=Hinweis
* Verwendung von DOIF als State Maschine durch Bezug auf den eigenen Status ($cmd) in der Bedingung
* Verwendung von DOIF als '''State Maschine''' durch Bezug auf den eigenen Status '''$cmd''' in der Bedingung
* triggern durch Events ["<Regex Device>:<Regex Event>"]}}
* triggern durch Events '''["<Regex Device>:<Regex Event>"]'''}}
'''Taster''' simuliert ein Tastergerät das short und long sendet.<br>
'''Taster''' simuliert ein Tastergerät das short und long sendet.<br>
'''Lampe1''' und '''Lampe2''' simulieren 2 Lampengeräte.<br>
'''Lampe1''' und '''Lampe2''' simulieren 2 Lampengeräte.<br>
Zeile 73: Zeile 73:
==Links==
==Links==
* [[DOIF]]
* [[DOIF]]
* [[DOIF/Labor - ausführbare, praxisnahe Beispiele als Problemlösung zum Experimetieren]]
* [[DOIF/Labor - ausführbare, praxisnahe Beispiele als Problemlösung zum Experimentieren]]


[[Kategorie:Code Snippets]]
[[Kategorie:Code Snippets]]

Aktuelle Version vom 13. Februar 2017, 15:58 Uhr

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