DOIF/Mehrfachnutzung eines Tasters: Unterschied zwischen den Versionen

Aus FHEMWiki
Keine Bearbeitungszusammenfassung
(Link-Korrektur)
 
(4 dazwischenliegende Versionen von einem anderen Benutzer werden 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>
'''schrittSchalter_Labor''' bildet die Mehrfachbelegung eines Tasters nach.<br>
'''schrittSchalter_Labor''' bildet die Mehrfachbelegung eines Tasters nach.<br>
'''$cmd''' ist nach der Initialisierung des DOIF 0 und ist die Kurzform für [$SELF:cmd] oder [schrittSchalterDOIF:cmd].<br>
'''$cmd''' ist nach der Initialisierung des DOIF 0 und ist die Kurzform für '''[?$SELF:cmd]''' oder '''[?schrittSchalter_Labor001:cmd]'''.<br>
Wenn '''Taster short''' sendet, dann wird die erste Bedingung wahr und '''Lampe1''' wird eingeschaltet, '''$cmd''' ist jetzt 1.<br>
Wenn '''Taster short''' sendet, dann wird die erste Bedingung wahr und '''Lampe1''' wird eingeschaltet, '''$cmd''' ist jetzt 1.<br>
Beim nächsten '''short''' wird die zweite Bedingung wahr und Lampe2 wird eingeschaltet, '''$cmd''' ist jetzt 2.<br>
Beim nächsten '''short''' wird die zweite Bedingung wahr und Lampe2 wird eingeschaltet, '''$cmd''' ist jetzt 2.<br>
Beim nächsten '''short''' wird die dritte Bedingung wahr '''Lampe1''' und '''Lampe2''' werden eingeschaltet, '''$cmd''' ist jetzt 3.<br>
Beim nächsten '''short''' wird die dritte Bedingung wahr '''Lampe1''' und '''Lampe2''' werden eingeschaltet, '''$cmd''' ist jetzt 3.<br>
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.
Beim nächsten '''short''' wird die vierte Bedingung wahr '''Lampe1''' und '''Lampe2''' werden ausgeschaltet, '''$cmd''' ist jetzt 4.<br>Weil '''$cmd''' gleich vier ist, wird beim nächsten '''short''' wieder die erste Bedingung wahr und der Zyklus beginnt von vorn.


===Definition===
===Definition===
Zeile 35: Zeile 35:
===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]===
===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]===
<pre>
<pre>
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 \
define schrittSchalter_Labor001 DOIF ## 1 \
(["button_Labor000:short"] and $cmd=~"0|4") \
(["button_Labor000:short"] and $cmd=~"0|4") \
Zeile 49: Zeile 66:
attr schrittSchalter_Labor001 alias Schrittschalter
attr schrittSchalter_Labor001 alias Schrittschalter
attr schrittSchalter_Labor001 cmdState Schritt 1|Schritt 2|Schritt 3|Schritt 4
attr schrittSchalter_Labor001 cmdState Schritt 1|Schritt 2|Schritt 3|Schritt 4
attr schrittSchalter_Labor001 group Mehrfachnutzung eines Tasters
attr schrittSchalter_Labor001 group Labor: Mehrfachnutzung eines Tasters
attr schrittSchalter_Labor001 room DOIF_Labor
attr schrittSchalter_Labor001 room DOIF_Labor
 
save
define button_Labor000 dummy
attr button_Labor000 alias Taster
attr button_Labor000 group 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 Mehrfachnutzung eines Tasters
attr lamp1_Labor000 room DOIF_Labor
 
define lamp2_Labor000 dummy
attr lamp2_Labor000 alias Lampe2
attr lamp2_Labor000 group Mehrfachnutzung eines Tasters
attr lamp2_Labor000 room DOIF_Labor
</pre>
</pre>


==Links==
==Links==
* [[DOIF]]
* [[DOIF]]
 
* [[DOIF/Labor - ausführbare, praxisnahe Beispiele als Problemlösung zum Experimentieren]]


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

Aktuelle Version vom 13. Februar 2017, 14: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