Moin!
Verstehe ich richtig Dein Problem: Du möchtest, das die mehrfach gesendete Nachrichten (wegen langen Halten des Tasters) nicht zum mehrfachen Ausführen führen?
Ich habe gerade ggf. ein ähnliches Problem und habe dafür folgende Methode gebastelt:
###############################################################################
my $debounce_map;
###############################################################################
# Eine Art Entprellung.
# Es wird geprüft, ob der Schluessel in der angegebenen Zeit bereits
# angefragt wurde. Dann wird liefert 1 (true), sonst 0 (false).
# Damit kann z.B. sichergestellt werden, dass nur ein Befehl
# in der angegebenen Zeit ausgefuehrt. Nuetzlich bei notify-Befehlen.
#
# Parameter: Key - Schluessel; time - Zeit in Sekunden
###############################################################################
sub
debounce($$)
{
my($key, $dtime) = @_;
my $ctime = time();
my $otime = $debounce_map->{$key};
if(!defined($otime)) {
# neuer Key, Zeitstempel speichern
$debounce_map->{$key}=$ctime;
return 1;
}
# Zeitablauf pruefen
my $delta = $otime+$dtime-$ctime;
if($delta gt 0) {
# Zeitfenster noch nicht abgelaufen
return 0;
}
# Zeit abgelaufen, Zeitstempel redefinieren
$debounce_map->{$key}=$ctime;
return 1;
}
Ich benutze sie in den notify-Anweisungen:
define NX_OG_RL_DN_LN notify OG_FL_RC01.Alle_Rolladen_Dn:.*Long.* {if(debounce("og_rollo",5)) {fhem("set og_rollo runter")};;}
Hilft Dir das weiter?