FHEM Forum

FHEM - Hausautomations-Systeme => EnOcean => Thema gestartet von: 50watt am 07 April 2014, 21:19:43

Titel: Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: 50watt am 07 April 2014, 21:19:43
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?
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: Puschel74 am 08 April 2014, 16:15:23
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
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: 50watt am 08 April 2014, 22:42:13
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
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: zfranz am 22 Juli 2014, 08:25:22
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
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 22 Juli 2014, 13:37:59
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....
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: marvin78 am 22 Juli 2014, 13:38:59
Für den Doppelklick bitte sequence in der Commandref anschauen.
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 22 Juli 2014, 13:44:58
@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.
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: zfranz am 22 Juli 2014, 22:19:24
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
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 22 Juli 2014, 22:36:05
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:
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: zfranz am 22 Juli 2014, 22:52:53
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...
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 22 Juli 2014, 23:00:06
Trockenübung, da ich gerade nicht testen kann:

define tmptest notify Schalter1:buttons:.*released  xyz
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 22 Juli 2014, 23:08:28
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
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 23 Juli 2014, 09:12:23
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...
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 23 Juli 2014, 20:27:19
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...
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: zfranz am 23 Juli 2014, 20:48:40
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.
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 24 Juli 2014, 12:03:46
Halte Deine Lösung für besser. Meine hat in der derzeitige Form die "Nebenwirkung", dass Sie B0 und BI-Events nicht unterscheidet. Hierzu müsste das notify weiter mit Abfragen für BO und BI ausgebaut werden, dann wird es mMn zu kompliziert...

Für Einfach- versus Doppelklick finde ich Andre´s (justme1968) Ansatz hier http://forum.fhem.de/index.php/topic,12965.msg186119.html#msg186119 umsetzbar.
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 25 Juli 2014, 21:38:15
"Doppelklick"

Habe Andre´s Vorschlag zur Unterscheidung von Einfach- und Doppelklick einmal umgesetzt. Folgenden Code für eine Tasterseite (B0) hat bei mir ohne erkennbare Nebenwirkungen funktioniert:

define sDoppelklickB0 sequence Taster2:channelB:.B0 1 Taster2:channelB:.B0
define nDoppelklickB0 notify DoppelklickB0:trigger { fhem "set Lampe off" }
define wEinfachklickB0 watchdog Taster2:channelB:.B0 00:00:01 SAME set Lampe on;; trigger wEinfachklickB0 .
attr wEinfachklickB0 regexp1WontReactivate 1

"Taste lange gedrückt"


Für die Unterscheidung von Kurz- und Langklick auf Timestamp-Basis habe ich meinen Code überarbeitet/korrigiert. Beide Tasterseiten (B0/BI) unterscheiden hiermit die Tastdauer:

define nklickdauer notify Taster:buttons:.released {\
my $start=time_str2num(ReadingsTimestamp("$NAME", "channelB", 0));;\
my $stop=time_str2num(ReadingsTimestamp("$NAME", "buttons", 0));;\
if (ReadingsVal("$NAME","channelB",0) eq "B0"){\
if ($stop-$start<=1) {fhem "set Raffstore 50"} else {fhem "set Raffstore 100"}}\
else {if ($stop-$start<=1) {fhem "set Raffstore 20"} else {fhem "set Raffstore 80"}}\
}


Gleichen Zweck erfüllt auch der Code von zfranz für eine Tasterseite (BI) (http://forum.fhem.de/index.php/topic,22289.msg186089.html#msg186089):

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" }


Wenn noch jemand Verbesserungsvorschläge/andere Ideen hat, dann bitte anführen.
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: crispinus am 12 September 2014, 23:15:07
Zitat von: krikan am 25 Juli 2014, 21:38:15
Für die Unterscheidung von Kurz- und Langklick auf Timestamp-Basis habe ich meinen Code überarbeitet/korrigiert. Beide Tasterseiten (B0/BI) unterscheiden hiermit die Tastdauer:

define nklickdauer notify Taster:buttons:.released {\
my $start=time_str2num(ReadingsTimestamp("$NAME", "channelB", 0));;\
my $stop=time_str2num(ReadingsTimestamp("$NAME", "buttons", 0));;\
if (ReadingsVal("$NAME","channelB",0) eq "B0"){\
if ($stop-$start<=1) {fhem "set Raffstore 50"} else {fhem "set Raffstore 100"}}\
else {if ($stop-$start<=1) {fhem "set Raffstore 20"} else {fhem "set Raffstore 80"}}\
}


Ich habe das heute mal mit meinem FT55 ausprobiert und stieß dabei auf das Problem, dass die auch noch vorhandene A-Seite vergessen wurde (also A0/AI), das führt nämlich dazu, dass das notify auch reagiert, wenn die A-Seite und nicht die B-Seite gedrückt wurde und dann eben einen langen Tastendruck annimmt (das abgefragte released-Event wird ja auch beim Drücken der A-Hälfte des Tasters erzeugt). Ich habe den Code nun wie folgt verändert und damit eine Tasterfunktion nach meinen Wünschen erhalten, bei denen sich alle vier möglichen Tasteraktionen eines FT55 je noch einmal nach lang und kurz unterscheiden und sich damit je Taster somit de facto acht Schaltaufträge unterscheiden lassen:

define nklickdauer notify Taster:buttons:.released {\
my $startA=time_str2num(ReadingsTimestamp("$NAME", "channelA", 0));;\
my $startB=time_str2num(ReadingsTimestamp("$NAME", "channelB", 0));;\
my $stop=time_str2num(ReadingsTimestamp("$NAME", "buttons", 0));;\
if($startB>$startA) { \
if (ReadingsVal("$NAME","channelB",0) eq "B0"){\
if ($stop-$start<=1) {fhem "set Raffstore 50"} else {fhem "set Raffstore 100"}}\
else {if ($stop-$start<=1) {fhem "set Raffstore 20"} else {fhem "set Raffstore 80"}}\
} else { \
if (ReadingsVal("$NAME","channelA",0) eq "A0"){\
if ($stop-$start<=1) {fhem "set AktionA0 kurz"} else {fhem "set AktionA0 lang"}}\
else {if ($stop-$start<=1) {fhem "set AktionAI kurz"} else {fhem "set AktionAI lang"}}\
} \
}


Einziger Schönheitsfehler ist nun aus meiner Sicht die geringe zeitliche Auflösung von ReadingsTimestamp (laut Commandref wohl nur sekundengenau - stimmt das?). Wünschenswert wäre für mich eine zumindest millisekundengenaue Auflösung, sodass bspw. auch ein halbsekündiger Tastendruck bereits als lang interpretiert werden kann, bei der aktuellen if-Abfrage muss man eher zwei Sekunden drücken, um wirklich sicher zu sein, dass die Aktion für langen Tastendruck ausgeführt wird. Gibt es eventuell eine Möglichkeit, die Genauigkeit von ReadingsTimestamp in den Millisekundenbereich zu erhöhen? Als Alternative wäre auch vorstellbar, dass die Aktion für langen Tastendruck nicht vom released-Event abhängt, sondern bereits ausgeführt wird, wenn die Taste nur lang genug gehalten wurde. Ich denke, das könnte man dann mit einer Kombination aus einem notify, welches ein at einrichtet (+00:00:01) sowie einer Modifikation des obigen Codes erreichen, der dann nur noch die durchzuführenden Aktionen für kurze Tastendrücke mit einem delete des zuvor angelegten ats enthält. Auch hierfür wäre aber eine größere Präzision als eine Sekunde wünschenswert.

VG
crispinus
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 12 September 2014, 23:51:14
Nun aber mal halblang.  ;)  Das haben wir nicht vergessen. Es entsprach nicht den Anforderungen. Wenn man das mit einem Einfachtaster macht ist, ist dass vollkommen korrekt so. Wenn Du natürlich das auf einem Doppeltaster haben willst, dann muss man es -wie von Dir getan- anpassen. Danke für Deinen Code.

Zu Deiner zeitlichen Auflösung kann ich nicht wirklich etwas beitragen.

Frage mich nur, ob man das nicht auch über triggerPartial irgendwie hinbekommen könnte.
http://forum.fhem.de/index.php/topic,26772.msg198050.html#msg198050

Gruß, Christian
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: crispinus am 13 September 2014, 00:27:12
Zitat von: krikan am 12 September 2014, 23:51:14
Nun aber mal halblang.  ;)  Das haben wir nicht vergessen. Es entsprach nicht den Anforderungen. Wenn man das mit einem Einfachtaster macht ist, ist dass vollkommen korrekt so. Wenn Du natürlich das auf einem Doppeltaster haben willst, dann muss man es -wie von Dir getan- anpassen. Danke für Deinen Code.

Also am Anfang des Threads war aber auch nicht davon die Rede, dass der FT55 mit der Einfachwippe betrieben wird ;). Aber ist ja auch egal - jetzt steht hier für Leute wie mich, die erst beim Ausprobieren drauf kommen, warum auf einmal alles so komisch reagiert, hier noch die Lösung für alle, die den FT55 mit Doppelwippe benutzen.

Zitat von: krikan am 12 September 2014, 23:51:14
Zu Deiner zeitlichen Auflösung kann ich nicht wirklich etwas beitragen.

das hab ich im Code zwischenzeitlich mal nachgeschaut und dabei verifiziert, dass die Timestamps tatsächlich nur Sekunden und nichts kleineres halten, eine Modifikation wäre extrem aufwändig und sicherlich auch mit zahlreichen Inkompatibilitäten in anderen Modulen verbunden. Wenn man das WIRKLICH möchte, könnte man wahrscheinlich readingsBeginUpdate so verändern, dass neben TIME auch noch MILLITIME (o.ä.) gespeichert wird, worin dann eine um Millisekunden erweiterte Zeit enthalten ist. Entsprechend würde man dann ein ReadingsTimestampMillis ergänzen. So könnte man das zumindest für neuen Code, der die Präzision benötigt, recht einfach verwenden.

Zitat von: krikan am 12 September 2014, 23:51:14
Frage mich nur, ob man das nicht auch über triggerPartial irgendwie hinbekommen könnte.
http://forum.fhem.de/index.php/topic,26772.msg198050.html#msg198050

Das sieht im Prinzip gar nicht schlecht aus, zumal hier ja auch eine bessere zeitliche Auflösung geboten wird. Als zusätzlichen Benefit hätte man hier die von mir eigentlich favorisierte Lösung, dass bei langem Tastendruck schon geschaltet wird, bevor der Button losgelassen wird (nämlich bei Ablauf des "Timeouts" für einen langen Tastendruck), das entspricht der von mir als sehr intuitiv empfundenen Funktionsweise meiner HomeMatic-Funkschalter. Ein Codebeispiel würde sich dann wohl so lesen:


define sKurzerLangerDruck sequence Taster:A0 0.5 Taster:buttons:.released
attr sKurzerLangerDruck triggerPartial
define nKurzerDruck notify sKurzerLangerDruck:trigger set Lampe an
define nLangerDruck notify sKurzerLangerDruck:partial_1 set Lampe aus


Hier müsste nach meinem Verständnis (werde das morgen dann auch mal testen) bei kurzem Druck (also A0-Event und binnen 500ms released-Event) die Lampe eingeschaltet werden (im Moment des Loslassens des Tasters) und bei langem Druck (A0-Event und released-Event jenseits des Timeouts) die Lampe ausgeschaltet werden - aber eben schon in dem Moment, wenn das Timeout erreicht ist, und nicht erst, wenn ich den Taster los lasse. Ich als Benutzer bekomme also signalisiert, wann ich lange genug für einen langen Tastendruck gedrückt habe und musst nicht im Kopf die Sekunden zählen ^^.

VG
crispinus
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: crispinus am 13 September 2014, 00:53:53
Zitat von: crispinus am 13 September 2014, 00:27:12
das hab ich im Code zwischenzeitlich mal nachgeschaut und dabei verifiziert, dass die Timestamps tatsächlich nur Sekunden und nichts kleineres halten, eine Modifikation wäre extrem aufwändig und sicherlich auch mit zahlreichen Inkompatibilitäten in anderen Modulen verbunden. Wenn man das WIRKLICH möchte, könnte man wahrscheinlich readingsBeginUpdate so verändern, dass neben TIME auch noch MILLITIME (o.ä.) gespeichert wird, worin dann eine um Millisekunden erweiterte Zeit enthalten ist. Entsprechend würde man dann ein ReadingsTimestampMillis ergänzen. So könnte man das zumindest für neuen Code, der die Präzision benötigt, recht einfach verwenden.

Habe gerade nochmal nachgesehen und muss mich korrigieren, es wird von readingsEndUpdate mit dem Key "t" auch der direkte, unformatierte Wert von gettimeofday() hinterlegt (dieser enthält auch Millisekunden), es scheint nur noch keine einfache Zugriffsfunktion wie das ReadingsTimestamp für den Key "TIME" zu geben. Gerade für solche Zeitrechnungen wie im obigen Code wäre das aber wohl ganz praktisch. Es scheint auch nicht so richtig schwer zu ergänzen - eigentlich muss man ja nur ReadingsTimestamp kopieren und stattdessen den Inhalt von "t" zurückgeben. Ein passender Name wäre dann analog zu den im Quelltext gewählten assoziativen Arraykeys ReadingsTime.


sub
ReadingsTime($$$)
{
  my ($d,$n,$default) = @_;
  if(defined($defs{$d}) &&
     defined($defs{$d}{READINGS}) &&
     defined($defs{$d}{READINGS}{$n}) &&
     defined($defs{$d}{READINGS}{$n}{t})) {
     return $defs{$d}{READINGS}{$n}{t};
  }
  return $default;
}


damit sollte man dann auch problemlos im Millisekundenbereich rechnen können, und der Umweg über time_str2num entfällt auch.
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: rudolfkoenig am 13 September 2014, 08:41:39
Der Haken an ReadingsTime ist, dass {t} nur fuer userReadings existiert.
Da die meisten kein Handbuch lesen, wuerde das zu Verwirrung fuehren.
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 13 September 2014, 12:11:21
Habe den Code für die Tastendruckdauer-Unterscheidung über sequence von crispinus mal probiert. Das funktioniert bei mir ohne erkennbare Probleme. Finde ich persönlich bisher die beste Lösung für Druckdauerunterscheidung.

@crispinus: Wenn Du es auch noch testet, gib bitte eine kurze Rückmeldung. Danke.

@Rudi: Danke für die Erweiterung von sequence um triggerPartial
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: crispinus am 14 September 2014, 00:29:57
Zitat von: rudolfkoenig am 13 September 2014, 08:41:39
Der Haken an ReadingsTime ist, dass {t} nur fuer userReadings existiert.
Da die meisten kein Handbuch lesen, wuerde das zu Verwirrung fuehren.

Stimmt. Wobei man das doch eigentlich problemlos auf alle Readings erweitern könnte, ohne die Kompatibilität zu gefährden. Es wäre dann entsprechend eine Modifikation von setReadingsVal erforderlich, sowie die Übergabe eines zusätzlichen Argumentes in Form der unformatierten gettimeofday()-Ausgabe. Da setReadingsVal nur intern in fhem.pl genutzt wird sowie in drei anderen Modulen (10_SOMFY, 00_KM271 sowie 58_GPIO4 in contrib) sollte sich das mit überschaubarem Aufwand einbauen lassen. Von readingsBeginUpdate wird ja immer eine time in .updateTime gespeichert, unabhängig davon, ob userReadings oder andere geupdatet werden, das müsste man dann in readingsBulkUpdate bloß entsprechend zusätzlich verwerten, etwa so:

sub
setReadingsVal($$$$$)
{
  my ($hash,$rname,$val,$ts,$numtime) = @_;
  $hash->{READINGS}{$rname}{VAL} = $val;
  $hash->{READINGS}{$rname}{TIME} = $ts;
  $hash->{READINGS}{$rname}{t} = $numtime;
}

# Call in readingsBulkUpdate()
setReadingsVal($hash, $reading, $value, $hash->{".updateTimestamp"}, $hash->{".updateTime"});


Oder gibt es da irgendeinen Haken, den ich gerade übersehe?
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: rudolfkoenig am 14 September 2014, 10:02:34
Ja, alle Module, die READINGS direkt aendern. Und abspeichern muss man auch, also setstate anpassen. Und der Uebergang von alten Statefile auf Neu muss auch irgendwie geloest werden.

Abgesehen davon halte ich den Nutzen dieser Feature fuer marginal. Und wenn der Benutzer anfangen muss, mit solchen Werten rumzurechnen, dann ist was grundsaetzlich kaputt, und sollte es an der richtigen Stelle gefixed werden.
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: crispinus am 14 September 2014, 23:05:49
Zitat von: krikan am 13 September 2014, 12:11:21
Habe den Code für die Tastendruckdauer-Unterscheidung über sequence von crispinus mal probiert. Das funktioniert bei mir ohne erkennbare Probleme. Finde ich persönlich bisher die beste Lösung für Druckdauerunterscheidung.

@crispinus: Wenn Du es auch noch testet, gib bitte eine kurze Rückmeldung. Danke.

Bei mir funktionierts auch genau so wie gewünscht :).
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 14 September 2014, 23:11:32
Danke für Deine Rückmeldung. Code ist dort gelandet: http://www.fhemwiki.de/wiki/EnOcean-PTM-210-Taster#.22Taste_lange_gedr.C3.BCckt.22_und_.22Taste_kurz_gedr.C3.BCckt.22_unterscheiden
Natürlich auch der Hinweis, das es für Doppeltaster hier im Thread auch etwas gibt  :).
Gruß, Christian
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: phil1283 am 18 November 2016, 13:51:39
Hallo liebe FHEMler,

ich habe nach dem Post von krikan eine Taster-Doppelklick-Steuerung realisiert (steht auch so in der Wiki). Diese funktionierte auch bis vor kurzem.
Bevor ich jetzt den ganzen Code poste wollte ich eine Frage vorab abklären.
Wie wird das erkennen eines Einzelklicks beim zweiten Klick des Doppelklicks verhindert?
Das passiert seit kurzem bei meiner Konfig.
Danke.
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 18 November 2016, 15:41:21
Hallo!
Kannst Du bitte den betroffenen Code posten und die Ausgabe "list <device>" des zugehörigen Tasters. Ich würde mir das lieber anhand des betroffenen Codes anschauen, bevor ich in die falsche Richtung renne.
Gruß, Christian
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: phil1283 am 18 November 2016, 17:47:05
Hallo und schon mal vielen Dank Christian,

hier der Code:
define doppelclick_Taster_Schlafzimmer_2 sequence Taster_Schlafzimmer_2:channelB:.B0 1 Taster_Schlafzimmer_2:channelB:.B0
define a_doppelclick_Taster_Schlafzimmer_2 notify doppelclick_Taster_Schlafzimmer_2:trigger set Rollladen_Schlafzimmer up
define a_einfachclick_Taster_Schlafzimmer_2 watchdog Taster_Schlafzimmer_2:channelB:.B0 00:00:02 SAME set

Wandleuchte_Schlafzimmer_Jessica 25;;set Rollladen_Schlafzimmer down;; trigger a_einfachclick_Taster_Schlafzimmer_2 .
attr a_einfachclick_Taster_Schlafzimmer_2 regexp1WontReactivate 1


und hier die Devicelist:
Internals:
   DEF        00001041
   IODev      TCM_ESP2_0
   LASTInputDev TCM_ESP2_0
   MSGCNT     60
   NAME       Taster_Schlafzimmer_2
   NR         113
   NTFY_ORDER 50-Taster_Schlafzimmer_2
   STATE      B0
   TCM_ESP2_0_MSGCNT 60
   TCM_ESP2_0_TIME 2016-11-18 13:12:32
   TYPE       EnOcean
   Readings:
     2016-11-18 13:12:32   buttons         released
     2016-11-18 13:12:31   channelB        B0
     2016-11-18 13:12:31   state           B0
     2016-07-26 19:00:34   teach           RPS teach-in accepted EEP F6-02-01 Manufacturer: no ID
   Helper:
Attributes:
   IODev      TCM_ESP2_0
   eep        F6-02-01
   manufID    7FF
   room       EnOcean
   subType    switch
   teachMethod RPS
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 18 November 2016, 19:13:43
Hallo!

Danke und ich kann Dein Problem nachstellen. Seit dieser Aenderung https://forum.fhem.de/index.php/topic,60414.msg518405.html#msg518405 funktioniert der Code so nicht mehr. Das Verhalten des watchdogs mit gesetztem Attribut regexp1WontReactivate hat sich geaendet. Wenn Du auf die vorherige Version von 91_watchdog.pm zurückgehst, funktioniert es wieder. Zumindest bei mir.

Mit der aktuellen Version bekomme ich es auf die Schnelle nicht gelöst und bin mir unsicher, ob man das als Fehler sehen sollte oder nicht. Die Logik hat sich nach meinem Verstaendnis insoweit geaendert, dass der 2. Tastendruck beim Doppelklick den watchdog zurücksetzt und jetzt gleichzeitig einen weiteren Tastendruck wegen SAME innerhalb einer Sekunde erwartet, damit der watchdog-Befehl nicht ausgeführt wird. Ich habe aber beim Grübeln darüber schon einen Knoten im Kopf bekommen  :-[. Also müsste jemand anderes bitte ggfs. einsteigen.

Für Dich als kurzfristige und für mich einfacher verstaendliche Lösung: Stelle es auf die neuere Lösungs-Variante mit sequence und Nutzung von triggerpartial um.

Gruß, Christian
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: rudolfkoenig am 19 November 2016, 08:13:53
ZitatFür Dich als kurzfristige und für mich einfacher verstaendliche Lösung: Stelle es auf die neuere Lösungs-Variante mit sequence und Nutzung von triggerpartial um.

Das wuerde ich auch begruessen. Wenn ich den watchdog reparieren soll/muss, dann bitte eine Liste der Events hier anhaengen, und das erwartete Verhalten auch kurz beschreiben.
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: phil1283 am 22 November 2016, 08:54:32
Vielen dank für die Hilfe.
Ich werde es auf sequence und Nutzung von triggerpartial umstellen.
Das sollte dann wohl so aussehen:
define Sequenz sequence Taster_Schlafzimmer_2:channelB:.B0 0.5 Taster_Schlafzimmer_2:channelB:.B0
attr Sequenz triggerPartial
define einfachclick_Taster_Schlafzimmer_2 notify Sequenz:partial_1 set Wandleuchte_Schlafzimmer_Jessica 25;;set Rollladen_Schlafzimmer down
define doppelclick_Taster_Schlafzimmer_2 notify Sequenz:partial_2 set Rollladen_Schlafzimmer up

werde das heute Abend mal testen.
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: phil1283 am 24 November 2016, 14:04:28
Also ein Tastendruck wird erkannt, ein doppelter Tastendruck leider nicht.
Hat jemand auf die schnelle eine Idee?
Danke.
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 24 November 2016, 14:08:00
define doppelclick_Taster_Schlafzimmer_2 notify Sequenz:partial_2 set Rollladen_Schlafzimmer up
ersetzen durch
define doppelclick_Taster_Schlafzimmer_2 notify Sequenz:trigger set Rollladen_Schlafzimmer up
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: phil1283 am 26 November 2016, 21:32:06
Danke jetzt läufts.
Das war wieder mal ein Fall von blindem und hirnlosem copy-and-paste von mir.
Mit trigger funktioniert es...
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: cabchen am 07 Mai 2019, 22:06:00
Hallo

ich bin gerade noch an Anfang mit Fhem aber bist jetz lief es Ziemlich gut und hatte alles hinbekommen aber das mit den Lang und Kurz Tasten grieg ich nicht hin

Zu mein Problem ich habe Fhem und dann per  I2C_PCF8574 als ein und Ausgangs Karten von Horter.de

ich habe das Script von crispinus und viele andere Probiert aber bei crispinus ging wenigstens kurz zu schalten zu mein Befehlen
define sKurzerLangerDruck sequence E38.1:on 0.5 E38.1:on:.released
attr sKurzerLangerDruck triggerPartial
define nKurzerDruck notify sKurzerLangerDruck:trigger set EG_Wohnzimmer_Jalousie stop
define nLangerDruck notify sKurzerLangerDruck:partial_1 set EG_Wohnzimmer_Jalousie closed


hab in der 1 zeile Jede variante probiert aber der lange Tasten Truck steh ich auf auf schlauch
mit 1 mal und 2 mal geht das Script aber mit den Langer Tastendruck nicht

könnte mir einer helfen?
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 08 Mai 2019, 08:21:15
Ist E38.1 überhaupt ein Device für einen EnOcean-Taster? Wie sehen denn die Events von E38.1 bei einem langen Tastendruck aus?

Gruß, Christian
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: cabchen am 08 Mai 2019, 19:38:05
Hallo

das ist ein PCF8574A von Horter.de (https://www.horter-shop.de/de/i2c-hutschienen-module/232-bausatz-i2c-digital-input-modul-mit-optokoppler-4260404260851.html) der low oder high erkennt und per i2c abrufbar ist ich hab den int als abrufen für alle i2c karten auf den Repeater von horter.de (https://www.horter-shop.de/de/i2c-hutschienen-module/182-bausatz-i2c-repeater-mit-taste-fur-raspberry-pi-4260404261186.html) auf Gpio 17 das wenn der GPIO an geht er Alle karten abfragen soll
2019-05-08 19:25:10 readingsProxy E38.0 off
2019-05-08 19:25:10 I2C_PCF8574 modulE38 254
2019-05-08 19:25:10 I2C_PCF8574 modulE38 Port0: off
2019-05-08 19:25:10 RPI_GPIO interupt Dblclick: off
2019-05-08 19:25:10 RPI_GPIO interupt Pinlevel: low
2019-05-08 19:25:10 RPI_GPIO interupt off
2019-05-08 19:25:10 RPI_GPIO interupt Longpress: off
2019-05-08 19:25:10 RPI_GPIO interupt Dblclick: off
2019-05-08 19:25:10 RPI_GPIO interupt Pinlevel: low
2019-05-08 19:25:10 RPI_GPIO interupt off
2019-05-08 19:25:10 RPI_GPIO interupt Longpress: off


define modulE38 I2C_PCF8574 0x38
attr modulE38 IODev myI2C
attr modulE38 InputPorts 0,1,2,3,4,5,6,7
attr modulE38 OnStartup 0=on,1=on,2=on,3=on,4=on,5=on,6=on,7=on
attr modulE38 event-on-change-reading state,Port0,Port1,Port2,Port3,Port4,Port5,Port6,Port7
attr modulE38 group ModulE38
attr modulE38 room i2c
define E38.0 readingsProxy modulE38:Port0
attr E38.0 alias E38.0
attr E38.0 devStateIcon on:off:off off:on:on
attr E38.0 group ModulE38
attr E38.0 room i2c
define E38.1 readingsProxy modulE38:Port1
attr E38.1 devStateIcon on:off:off off:on:on
attr E38.1 group ModulE38
attr E38.1 room i2c
define E38.2 readingsProxy modulE38:Port2


Doppel und einfach tasten Funktioniert


define seq sequence E38.0:on 0.5 E38.0:on
attr seq triggerPartial 1
define nA notify seq:partial_1 set A27.1 on
define nC notify seq:trigger set A27.1 off

A27.1 ist ein Ausgang auf ein 8fach relais karte für Beleuchtung
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: krikan am 09 Mai 2019, 08:54:50
OK, hat also nichts mit EnOcean zu tuen.

Mit welchen Events kann man denn jetzt die Tastendruckdauer ermitteln? Erkenne ich in Deinen Angaben nicht. Um das EnOcean-Beispiel aus dem Thread übertragen zu können, braucht man u.a. separate Events für "Taster gedrückt" und "Taster loslassen". Falls es ein besonderes Event für "Taster lange gedrückt" gibt, ist der Weg über sequence vermutlich falsch.
Titel: Antw:Taster (FT55): notify für "Taste lange gedrückt" und "Doppelklick"
Beitrag von: cabchen am 23 Mai 2019, 19:51:05
hat sich erledigt habe was gefunden in Forum
https://forum.fhem.de/index.php/topic,47219.0.html