FHEM Forum

FHEM - Hausautomations-Systeme => EnOcean => Thema gestartet von: TOtto am 23 Mai 2013, 21:42:57

Titel: Erkennung von Kurz-/Langdruck bei Tastern
Beitrag von: TOtto am 23 Mai 2013, 21:42:57
Hallo,

ich Versuche gerade normale Enocean-Taster mit Kurz- und Langdruck zu belegen.
Die Taster senden ja nach dem BI/B0/AI/A0 beim loslassen der Taste ein released.

Über sequence geht das ganze nicht, da bei Kurzdruck beide sequence erkannt werden.

#Dachrollo per Kurzdruck vollständig öffnen
define seq1 sequence Mini_Taster:A0 1 Mini_Taster:released
define seq1_test notify seq1:trigger set Dachrollo_SZ auf

#Dachrollo per Langdruck 10 Sekunden öffnen
define seq3 sequence Mini_Taster:A0 5 Mini_Taster:released
define seq3_test notify seq3:trigger set Dachrollo_SZ auf;;sleep 10;;set Dachrollo_SZ stop

Gibt es eine eingebaute Funktion um das zu realisieren? Bin nicht fündig geworden.

Danke.
Grüße
Thomas

Titel: Aw: Erkennung von Kurz-/Langdruck bei Tastern
Beitrag von: klaus.schauer am 24 Mai 2013, 07:03:03
Zitat von: TOtto schrieb am Do, 23 Mai 2013 21:42Hallo,

ich Versuche gerade normale Enocean-Taster mit Kurz- und Langdruck zu belegen.
Die Taster senden ja nach dem BI/B0/AI/A0 beim loslassen der Taste ein released.

Über sequence geht das ganze nicht, da bei Kurzdruck beide sequence erkannt werden.

#Dachrollo per Kurzdruck vollständig öffnen
define seq1 sequence Mini_Taster:A0 1 Mini_Taster:released
define seq1_test notify seq1:trigger set Dachrollo_SZ auf

#Dachrollo per Langdruck 10 Sekunden öffnen
define seq3 sequence Mini_Taster:A0 5 Mini_Taster:released
define seq3_test notify seq3:trigger set Dachrollo_SZ auf;;sleep 10;;set Dachrollo_SZ stop

Gibt es eine eingebaute Funktion um das zu realisieren? Bin nicht fündig geworden.

Danke.
Grüße
Thomas

Normalerweise sendet Fhem nur das, was man angibt: A0, CI, released. Da manche Funktionen von den Aktoren nur ausgeführt werden, wenn nach einem Befehl auch ein released kommt, habe ich das Attribut switchMode eingeführt. Falls es auf pushbutton steht, wird nach einem Befehl sofort released gesendet. Man könnte sich natürlich auch vorstellen, diese Funktion aufzubohren und die Zeit bis zum Senden von released variabel zu machen. Mir ist aber noch keine gute Lösung für Parameterisierung bei der Eingabe eingefallen. Schließlich soll der Wert ja nicht nur fest als Attribut vorgegeben werden können.
Titel: Aw: Erkennung von Kurz-/Langdruck bei Tastern
Beitrag von: TOtto am 24 Mai 2013, 14:31:37
Hallo Klaus,

da hast du mich falsch verstanden:
1.
ich lese einen externen Schalter "Mini_Taster" ein und will abhängig davon, ob er kurz oder lang betätigt wurde, verschieden Aktionen auslösen. Leider weiss ich nicht wie ich das vernünftig umsetzen soll, da das mit sequence nicht funktioniert.

2. zu dem von dir beschriebenen Thema:
da bin ich auch gerade dran. Ich habe an ein Eltako FSR14-4x (4fach Schalter) eine Velux Kux100-Fernbedienung angebaut um die Tasterbetätigung der Fernbedienung zu simulieren. Das Relais des FSR14 wird bei der Einstellung "ER" solange angezogen bis released gesendet wird. Das geschieht bei pushbutton so schnell dass die Fernbedienung nicht immer einen Tasterdruck erkennt. Beim versenden von zwei Enocean-Telegrammen ist immer eine Pause von 0.2 Sekunden, bei pushbutton gibt es keine. Hier die Stelle:

      IOWrite ($hash, $header, $data);
      if ($switchMode eq "pushbutton") {
        $data = "F600";
        $status = "20";
        select(undef, undef, undef, 0.2);   #Entprellzeit für pushbutton
        $data = sprintf "%s%s%s", $data, $subDef, $status;
   Log $ll2, "EnOcean: set $name released";
        IOWrite ($hash, $header, $data);
      }
    }
    select(undef, undef, undef, 0.2);   # Tested by joerg. He prefers 0.3 :)

Meines erachtens wäre ein Attribut ausreichend, da das ganze schalterspezifisch ist und sich nicht dauernd ändern sollte.

Grüße
Thomas

Titel: Aw: Erkennung von Kurz-/Langdruck bei Tastern
Beitrag von: klaus.schauer am 25 Mai 2013, 08:31:03
Zitat von: TOtto schrieb am Fr, 24 Mai 2013 14:31Hallo Klaus,

da hast du mich falsch verstanden:
1.
ich lese einen externen Schalter "Mini_Taster" ein und will abhängig davon, ob er kurz oder lang betätigt wurde, verschieden Aktionen auslösen. Leider weiss ich nicht wie ich das vernünftig umsetzen soll, da das mit sequence nicht funktioniert.

2. zu dem von dir beschriebenen Thema:
da bin ich auch gerade dran. Ich habe an ein Eltako FSR14-4x (4fach Schalter) eine Velux Kux100-Fernbedienung angebaut um die Tasterbetätigung der Fernbedienung zu simulieren. Das Relais des FSR14 wird bei der Einstellung "ER" solange angezogen bis released gesendet wird. Das geschieht bei pushbutton so schnell dass die Fernbedienung nicht immer einen Tasterdruck erkennt. Beim versenden von zwei Enocean-Telegrammen ist immer eine Pause von 0.2 Sekunden, bei pushbutton gibt es keine. Hier die Stelle:

      IOWrite ($hash, $header, $data);
      if ($switchMode eq "pushbutton") {
        $data = "F600";
        $status = "20";
       select(undef, undef, undef, 0.2);   #Entprellzeit für pushbutton
        $data = sprintf "%s%s%s", $data, $subDef, $status;
   Log $ll2, "EnOcean: set $name released";
        IOWrite ($hash, $header, $data);
      }
    }
    select(undef, undef, undef, 0.2);   # Tested by joerg. He prefers 0.3 :)

Meines erachtens wäre ein Attribut ausreichend, da das ganze schalterspezifisch ist und sich nicht dauernd ändern sollte.

Grüße
Thomas

Eine feste Verzögerungszeit von 0,2 s werde ich erst einmal einbauen. Längere und individuelle Verzögerungszeiten könnten die Anwender sicherlich mit sleep <time> realisieren. Falls das unpraktisch ist, könnte man bei Bedarf individuelle Zeiten über die Funktion InternalTimer() bereitstellen. Dann wird der Programmablauf von EnOcean_Set($@) nicht blockiert.
Titel: Aw: Erkennung von Kurz-/Langdruck bei Tastern
Beitrag von: rudolfkoenig am 25 Mai 2013, 09:31:45
> Über sequence geht das ganze nicht, da bei Kurzdruck beide sequence erkannt wird.

sequenz muesste so geaendert werden, dass die Zeit-Spezifikation nicht nur Ober-, sondern auch Untergrenzen erkennt, z.Bsp. mit der Syntax
define lampseq sequence Btn1:on 0.5:1.5 Btn2:off

Falls jemand das implementiert und testet, dann checke ich es ein :)
Titel: Antw:Erkennung von Kurz-/Langdruck bei Tastern
Beitrag von: zfranz am 23 Juli 2014, 21:12:20
Zwei funktionierende Lösungsansätze zum Unterscheiden von Kurz- und Langdruck sind hier beschrieben:
http://forum.fhem.de/index.php?topic=22289.0
Titel: Antw:Erkennung von Kurz-/Langdruck bei Tastern
Beitrag von: justme1968 am 23 Juli 2014, 21:38:26
die 'zu fuss' methode den einfach klick richtig zu erkennen wäre vielleicht ein WATCHDOG für den einfach klick. der würde feuern wenn nach dem einfachen klick kein zweiter mehr kommt. der doppel klick dann über sequence.

der nachteil dabei (und jeder anderen lösung mit einfach und doppelklick bei der doppelklick nicht einfach nur eine 'erweiterung' des einfach klick ist sondern etwas komplett anderes macht) ist das die reaktion auf den einfach klick verzögert ist.

gruss
  andre