== FS20-KSE Türklingel-Prell-Verhüterli ==
Moin,
wollte mal meine Lösung dafür kundtun:
# Schalter fuer Mails, den gibts nicht als wirkliches Geraet
define A_AlarmMail FS20 0000 00
attr A_AlarmMail eventMap on:EIN off:AUS
# Schalter fuer den Gong, den gibts nicht als wirkliches Geraet
define A_AlarmGong FS20 0000 01
attr A_AlarmGong eventMap on:EIN off:AUS
# FS20-KSE Kanal1 Definition musst Du statt xxxx selber eintragen
define Klingel FS20 xxxx 00
define FileLog_Klingel FileLog ./log/Klingel-%Y.log Klingel
attr FileLog_Klingel logtype text
# FS20-KSE Kanal2 Definition musst Du statt xxxx selber eintragen
define Klingel2 FS20 xxxx 01
attr Klingel2 ignore 1
# Man kann aber auch den 2ten Kanal ganz abschalten
define nKlingel notify Klingel:on { \
fhem "attr Klingel do_not_notify";;\
if ( Value("A_AlarmMail") eq "EIN") { \
FB_mail('DeineEmail@@muellmail.info','^ @ %','@ %');;\
} \
if ( Value("A_AlarmGong") eq "EIN") { \
fhem "set GONGen toggle" ;;\
} \
sleep 60;;\
fhem "deleteattr Klingel do_not_notify";;\
}
Mit dem sleep bestimmt man, wie lange das klingeln nicht notify-ed wird.
Hattu bessere Idee als Einzeiler? Dann behalte das nicht für Dich :-)
Hallo,
ist das nicht DAS sleep das fhem für die Dauer blockiert???
Grüße
Ich wuerde es mit http://fhem.de/commandref.html#event-min-interval (//fhem.de/commandref.html#event-min-interval) versuchen.
Zitat von: Puschel74 schrieb am So, 28 April 2013 16:14... ist das nicht DAS sleep das fhem für die Dauer blockiert???
Hmm, Du verunsicherst mich jetzt ...
Aus der REF:
sleep <sec>
Stoppt die Befehlsabarbeitung für die angegebene Anzahl von Millisekunden.
Beispiel:
sleep 0.5
define n3 notify btn3.* set lamp toggle;;sleep 0.5;;set lamp toggle
Bemerkung: sleep gefolgt von einem weiteren Befehl und angegeben in
at/notify/etc blockiert die Abarbeitung von FHHM nicht.Da ist ein Verschreiberli bei FHHM ?
Blockiert es nun oder nicht ?
Danke, Rudi, für den Hinweis. Würde ich gern probieren, wenn ich denn verstünde, wie das funktioniert. Ein Abschreiberli habe ich bis jetzt noch nicht gefunden.
Hallo,
ZitatBemerkung: sleep gefolgt von einem weiteren Befehl und angegeben in at/notify/etc blockiert die Abarbeitung von FHHM nicht.
Dann halt ich mich mal raus.
Aber 60 (Milli)Sekunden sollten sich doch schon bemerkbar machen.
Grüße
Das FHEM eigene sleep (vgl. define/set/attr/etc) blockiert FHEM nicht, das sleep aus perl dagegen schon. Das FHEM sleep schaut ins "FHEM-Befehls-Stack" rein, und definiert mit allen nach sleep kommenden Befehlen einen unsichtbaren at, deswegen blockiert es nicht. Also "set lampe on; sleep 10; set lampe off" blockiert nicht (set lampe off wird per internen at ausgeloest), fhem("sleep 10") dagegen schon, weil hier nach sleep nichts kommt, und deswegen wird 10 Sekunden geschlafen, genauso wie mit einem sleep(10) in perl.
D.h. statt
fhem "attr Klingel do_not_notify";;\
...
sleep 60;;\
fhem "deleteattr Klingel do_not_notify";;\
sollte man
fhem "attr Klingel do_not_notify; sleep 60; deleteattr Klingel do_not_notify";;\
...
schreiben.
Oder noch einfacher: statt attr/sleep/deleteattr das Attribut
attr Klingel event-min-interval state:60
verwenden, und damit vom Klingel erst nach 60 Sekunden neue events mit state-Aenderung zulassen.
Ich bedanke mich vielmals für die Erklärungen,
hoffe sie begriffen zu haben und werde sie beherzigen.
Es ist schon nicht einfach die Ebenen Perl und FHEM auseinanderzuhalten.
Ich habe mal attr Klingel event-min-interval state:60
definiert und das vorherige aus dem notify entfernt.
Jetzt muss ich noch warten, bis wer klingelt, da ich im Moment nicht dort bin. :-)
Ich hatte vorher einfach nicht kapiert, dass das ein attr ist, daher das Unverständnis.
Danke nochmals für die Mühe.
Ralph