Hallo FHEMler,
Riesenproblem :-\
ich möchte, dass eine Lampe SOS blinkt.
Zur Verfügung habe ich ein FS20 Steckdose.
mit zum Beispiel
set Lampe1 blink 3 1;;set Lampe1 blink 3 2;;set Lampe1 blink 3 1
komme ich nicht weiter, da die Befehle nicht nacheinander sondern quasi gleichzeitig gesendet werden.
Wie kann ich nach dem ersten Befehl eine Pause von 6 Sekunden einbauen und dann erst den nächsten Befehl senden??
Danke im Voraus
Schau dir sleep an.
ok danke, mit sleep bekomme 3 x kurz - 3x lang - 3x kurz hin, aber wie kann ich das endlos wiederholen??
Eine Schleife in einer myUtils oder at. Endlos wird allerdings schwierig.
Gelöst
Es gibt wahrscheinlich elegantere Lösungen aber das Folgende funktioniert und ist auch verständlich.
(Zumindest verständlicher als so manche Ein-Wort-Sätze die man gerne in dem Forum als Antwort erhält 8))
zuerst habe ich mir zwei Hilfsvariablen gebaut.
SOS dient zum toggeln zwischen 3xlang und 3xkurz
define SOS dummy
attr SOS room Alarm
attr SOS setList state:kurz,lang
Blinken unterbricht das Toggeln
define Blinken dummy
attr Blinken setList state:ein,aus
attr Blinken webCmd state
jetzt definiere ich ein notify der prüft ob der Schalter 'ein' ist
define SchalteON notify Schalter:on set Blinken ein
mit den folgenden beiden Zeilen wird die Steckdose geschaltet
#schalte 3 x kurz, danach eine Sekunde Pause
define SOSKurz DOIF ([Blinken] eq "ein" and [SOS] eq "kurz")(set Steckdose blink 3 1;;sleep 7;;set SOS lang)
#schalte 3x lang, danach eine Sekunde Pause
define SOSLang DOIF ([Blinken] eq "ein" and [SOS] eq "lang" )(set Steckdose blink 3 2;;sleep 13;;set SOS kurz)
mit dem folgenden Befehl kann das Blinken ausgeschaltet werden
define SOSaus notify Blinken:aus set Steckdose blink 0 0
...na geht doch ;D
Und wenn du das nun noch editierst und in Code-Tags schreibst, kann es eventuell auch jemand lesen ;)
Gelöst
Es gibt wahrscheinlich elegantere Lösungen aber das Folgende funktioniert und ist auch verständlich.
(Zumindest verständlicher als so manche Ein-Wort-Sätze die man gerne in dem Forum als Antwort erhält 8))
zuerst habe ich mir zwei Hilfsvariablen gebaut.
SOS dient zum toggeln zwischen 3xlang und 3xkurz
define SOS dummy
attr SOS room Alarm
attr SOS setList state:kurz,lang
Blinken unterbricht das Toggeln
define Blinken dummy
attr Blinken setList state:ein,aus
attr Blinken webCmd state
jetzt definiere ich ein notify der prüft ob der Schalter 'ein' ist
define SchalteON notify Schalter:on set Blinken ein
mit den folgenden beiden Zeilen wird die Steckdose geschaltet
#schalte 3 x kurz, danach eine Sekunde Pause
define SOSKurz DOIF ([Blinken] eq "ein" and [SOS] eq "kurz")(set Steckdose blink 3 1;;sleep 7;;set SOS lang)
#schalte 3x lang, danach eine Sekunde Pause
define SOSLang DOIF ([Blinken] eq "ein" and [SOS] eq "lang" )(set Steckdose blink 3 2;;sleep 13;;set SOS kurz)
mit dem folgenden Befehl kann das Blinken ausgeschaltet werden
define SOSaus notify Blinken:aus set Steckdose blink 0 0
oder alles :
define SOS dummy
attr SOS room Alarm
attr SOS setList state:kurz,lang
define Blinken dummy
attr Blinken setList state:ein,aus
attr Blinken webCmd state
define SchalteON notify Schalter:on set Blinken ein
#schalte 3 x kurz, danach eine Sekunde Pause
define SOSKurz DOIF ([Blinken] eq "ein" and [SOS] eq "kurz")(set Steckdose blink 3 1;;sleep 7;;set SOS lang)
#schalte 3x lang, danach eine Sekunde Pause
define SOSLang DOIF ([Blinken] eq "ein" and [SOS] eq "lang" )(set Steckdose blink 3 2;;sleep 13;;set SOS kurz)
define SOSaus notify Blinken:aus set Steckdose blink 0 0
DOIF zu nutzen ist eine gute Idee und Du sagst selbst "Es gibt wahrscheinlich elegantere Lösungen ..."
Es könnte sehr kurz formuliert werden:
define SOS_di DOIF ([Schalter] eq "on") (set Steckdose blink 3 1) (set Steckdose blink 3 2)
DOELSEIF ([Schalter] eq "off") (set Steckdose blink 0 0)
und die Attribute
wait 0,7:0
repeatcmd 13
Funktion: Bei Schalter "on" wird die 1. Sequenzen ausgeführt, 7 s gewartet und die 2. Sequenz ausgeführt, dann werden nach 13 s beide Sequenzen wiederholt bis Schalter "off" wird.