Hi,
ich möchte bei meinem FS20 Klingelsignal-Erkenner, nachdem er einmal "On" geschickt hat alle weiteren "On"s für 60 Sekunden ignorieren.
Ich habs mit event-min-interval probiert musste aber nach nochmaligem Lesen der Doku feststellen dass ich damit auf dem Holzweg bin :-)
Kann ich das irgendwie anders lösen?
Danke und Gruß
Stefan·
Hi Stefan,
bei mir war die Aufgabe die KSE so lange zu ignorieren, bis der Rufaufbau (Türsprechstelle) erfolgt ist und nicht durch 2x Klingeln abgebrochen und erneut gestartet wird. Ausserdem braucht meine Türsprechstelle etwas Zeit, wieder anrufbereit zu sein, nachdem geklingelt wurde. Das Problem ist sicher auch viel einfacher zu lösen, aber da es ja schon länger zuverlässig funktioniert, stelle ich das Beispiel mal rein:
Es wird ein Dummy der normalerweise auf "off" steht, nach dem ersten Klingeln auf "off" abgefragt. Wenn er "off" ist, wird der Code abgearbeitet, wenn er "on" ist nicht. Am Ende der Funktion wird der Dummy für einige Sek. auf "on" gesetzt und verhindert so, dass mehrmaliges Klingeln störend wirkt.
Der Code "if ($H_Status eq "Garten" and $Sperre eq "off")..." ist hier ein Beispiel für Ausf. von Befehlen, wenn das Klingelnotify nicht gesperrt ist. Alle weitern if- Abfragen müssten dann ebenfalls auf "and $Sperre eq "off"" abgefragt werden. Warum ich die KSE ("Klingel") im Notify auf "off" abgefragt habe, weiß ich nicht mehr genau, aber es muss einen Sinn gehabt haben ;o)
# Dummy zum "Entprellen" der Klingel, wird zum initialisieren
# beim Systemstart auf "off" gesetzt
define Dum_Kl_Sperr_D dummy
set Dum_Kl_Sperr_D off
# Erkennung Türklingel mit anschließendem "Entprellen"
define Func_Tuerklingel_N notify Klingel:off { \
\
my $Sperre = (Value("Dum_Kl_Sperr_D"));;\
my $H_Status = (Value("Haus_Status"));;\
\
if ($Sperre eq "off") { \
Log 1, 'Haustür Klingelsignal erkannt';; \
}\
if ($H_Status eq "Garten" and $Sperre eq "off") { \
Log 1, 'Türsprechstelle verbinden mit Schnurlostelefon';; \
fhem("set Dum_Telnum_D **777");;\
}\
.
. individueller auszuführender Code nach obigem Beispiel
.
if ($Sperre eq "off") { \
fhem("set Dum_Kl_Sperr_D on");;\
fhem("define Reset_Kl_Sperr_A at +00:00:07 set Dum_Kl_Sperr_D off");;\
}\
}
# bei Ende der Sperrzeit, Aufbau der Verbindung (Beispiel von mir -> Rufaufbau
# auf entfernter Fritzbox mittels "Fritzbox API":
define Func_Waehle_N notify Dum_Kl_Sperr_D:off { \
\
my $TelNum = (Value("Dum_Telnum_D"));;\
my $Start = (OldValue("Dum_Kl_Sperr_D"));;\
\
if ($TelNum ne "000" and $Start eq "on") { \
Log 1, "Waehle: $TelNum";; \
system("/usr/bin/php /media/card/fritzbox_api/fritzbox_call_phone.php $TelNum");;\
fhem("set Dum_Telnum_D 000");;\
}\
}
Hoffe es hilft dir ein wenig weiter...
Gruß
Frank
Hi Frank,
vielen Dank für Deine Antwort. Ich mach es zwar jetzt etwas anders, aber Du hast mich in die richtige Richtung geschubst :-)
Ich schalte bei erkanntem Klingelsignal sowieso ein Device (FS20ST) auf on-for-timer 60 (Lampe), das nehm ich jetzt da wo Du den Dummy einsetzt (wäre ja sonst redundant).
Eigentlich total einfach, man muss nur erstmal drauf kommen.
Danke nochmal
Gruß
Stefan