Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"

Begonnen von 50watt, 07 April 2014, 21:19:43

Vorheriges Thema - Nächstes Thema

50watt

Welchen Code verwendet man, damit Fhem auf eine lange gedrückte Taste (Taste ist für 1-3 Sekunden gedrückt) und/oder auf einen Doppelklick (2x die gleiche Taste gedrückt innerhalb z.B. einer Sekunde) reagiert, wenn es sich um einen Enocean Taster (z.B. FT55) handelt?
RaspberryPi, EnOcean PI
Sonos Play1, Connect
Eltako FT55, FSB61, FAM12, FSR12-4x

Puschel74

Hallo,

so wie für jeden anderen Sensor auch.

notify oder sequence (wenn ich das richtig im Kopf habe).
Das nötige regexp findest du über den EventMonitor raus.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

50watt

Hallo!
Vielen Dank für die rasche Antwort.
EnOcean Taster definieren:
define EnO_switch_FEFF1111 EnOcean FEFF1111
attr EnO_switch_FEFF1111 IODev TCM310_0
attr EnO_switch_FEFF1111 eventMap AI:aus A0:ein BI:off B0:on
attr EnO_switch_FEFF1111 model FT55
attr EnO_switch_FEFF1111 room EnOcean
attr EnO_switch_FEFF1111 subType switch


Doppelklick:
define sq_doppelklick sequence EnO_switch_FEFF1111:on 0.5 EnO_switch_FEFF1111:on
define n_doppelklick notify sq_doppelklick:trigger set lampe2 on


Wie triggere ich nun, wenn der Taster nur einmal gedrückt wird?
Untenstehende notify-Zeile löst ja auch bei einem Doppelklick aus (2x ... gewünscht wäre jedoch, dass nur bei einfachem Klick ausgelöst wird)
define n_einmalklick notify EnO_switch_FEFF1111:on set lampe1 on
RaspberryPi, EnOcean PI
Sonos Play1, Connect
Eltako FT55, FSB61, FAM12, FSR12-4x

zfranz

Guten Morgen,
ZitatUntenstehende notify-Zeile löst ja auch bei einem Doppelklick aus (2x ... gewünscht wäre jedoch, dass nur bei einfachem Klick ausgelöst wird)
Hast du mittlerweile eine Lösung für das Problem gefunden? Würde mich auch interessieren...

Gruss

krikan

Auch wenn ich nicht 50watt bin, der sich aber sicherlich noch meldet, würde ich folgendermaßen vorgehen:

Im notify für 1xKlick ein "at" definieren, dass nach 3 Sekunden erst den Schalt-Befehl für 1xKlick ausführt.
In notify für 2xKlick (welches durch sequence ausgelöst wird) dieses "at" für 1xKlick löschen und dann den Schaltbefehl für 2xKlick ausführen.

Mir fehlt aber ein wenig der praktische Hintergrund....

marvin78

Für den Doppelklick bitte sequence in der Commandref anschauen.

krikan

@marvin78: Das Problem ist anscheinend, dass alles durch einen Taster ausgelöst werden soll. Wüsste aber nicht wie dies allein durch sequence lösbar ist.

zfranz

Wie könnte ich denn das Loslassen der Taste mittels notify feststellen?

define temptest notify Schalter1:released set Alles on

funktioniert bei mir nicht, auch wenn im event monitor

2014-07-22 21:58:24 EnOcean Schalter1 buttons: released

erscheint. So könnte ich die von krikan vorgeschlagene Lösung mit "at", sequence und wieder löschen umsetzen.

Grüsse

krikan

ZitatSchalter1 buttons: released
Warum nimmst Du nicht das Event Schalter1:on wie oben im Thread angegeben?

Edit:
Es funktioniert nicht, da Dein Event im notify falsch ist:

zfranz

Ich möchte eben lange Tastendrücke erkennen und mit deiner Idee umsetzen, nicht Doppelklicks.
Ich habe verschiedene Varianten ausprobiert, wie müsste es denn genau heissen?
notify Schalter1 buttons: released funktioniert ja auch nicht...

krikan

Trockenübung, da ich gerade nicht testen kann:

define tmptest notify Schalter1:buttons:.*released  xyz

krikan

Vorsicht: Event "..buttons: released" hat bei meinen Tastern den Nachteil, das es beim Loslassen 2x gesendet wird. Siehe mein Beispiel-Log hier: http://forum.fhem.de/index.php/topic,21201.msg164872.html#msg164872

krikan

Nach nochmaligen Überdenken:
Da es Dir um die Tastendruckdauer (bspw. Zeitdifferenz zwischen Events :A0 und :buttons: released) geht, würde ich eher nicht mit sequence arbeiten. Stattdessen im notify die Zeitdifferenzen aus ReadingsTimestamp(...) (vgl. commandref Perl Specials) auswerten und mit if-Abfrage darauf reagieren. Sobald ich wieder testen kann, probiere ich es mal.

Vielleicht gibt es aber noch andere Ideen...

krikan

Für einen Taster mit 1 Wippe funktioniert im Kurztest zur Unterscheidung von Kurz- und Langklick:

define klickdauer notify EnO_switch_:buttons:.released {\
my $start=time_str2num(ReadingsTimestamp("%NAME", "channelB", 0));;\
my $stop=time_str2num(ReadingsTimestamp("%NAME", "buttons", 0));;\
if ($stop-$start<=1) {fhem "setstate Raffstore 50"} else {fhem "setstate Raffstore 100"}}


Bei einem Taster mit 2 Wippen müsste man das weiter ausbauen...

zfranz

Super, vielen Dank!

Ich hab's bis jetzt so gelöst:

define Schalter1BIlongclick notify Schalter1:BI { fhem "define Test at +00:00:01 set Alles off" }
define sSchalter1BIlongclick sequence Schalter1:BI 1 Schalter1:buttons:.*released
define nSchalter1BIlongclick notify sSchalter1BIlongclick:trigger { fhem "delete Test" }


Deine (zweite) Lösung scheint mir aber eleganter.