FHEM Forum

FHEM => Sonstiges => Thema gestartet von: Burny4600 am 07 Mai 2017, 19:45:47

Titel: Mehrfachfunktionen für Taster
Beitrag von: Burny4600 am 07 Mai 2017, 19:45:47
Gibt es ein fertiges Modul mit dem ich einem Taster zwei oder mehr Funktionen zuweisen kann?

ZB. Start und nochmalige Betätigung Stop.
Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: RaspiLED am 07 Mai 2017, 20:21:33
Hi,
meinst Du so?
https://forum.fhem.de/index.php/topic,36393.msg286851.html#msg286851
Gruß Arnd


Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: rudolfkoenig am 08 Mai 2017, 09:40:14
Es gibt sequence, um einer Reihe von kurz hintereinander gedrueckten Tasten unterschiedliche Events zuzuweisen.

Wenn man je nach Status unterschiedliche Events generieren will, dann muss man auf notify zugreifen, oder man versucht es mit eventMap oder readingsChange.
Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: Burny4600 am 08 Mai 2017, 10:21:28
So richtig fehlt mir momentan der Durchblick, aber das im Commandref kann so auch nicht stimmen.
Ein sequence kann verwendet werden, um ein neues Event zu generieren, wenn eine bestimmte Folge von anderen Events in einem festgelegten Zeitraum eingetroffen ist.
Z.Bsp. um eine Lampe dann einzuschalten, falls Btn1:on, dann Btn2:off und zum Schluss Btn3:on innerhalb einer Sekunde gedrückt wurde, definiert man folgendes:
define lampseq sequence Btn1:on 0.5 Btn2:off 0.5 Btn1:on
define lampon notify lampseq:trigger set lamp on

Soll der Schluss Btn3:on Btn1 heisen oder stimmt das define define lampseq sequence Btn1:on 0.5 Btn2:off 0.5 Btn1:on nicht.
Als Test werden zwei oder drei Dummys (Btn) benötigt?
Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: rudolfkoenig am 08 Mai 2017, 10:35:27
Danke fuer den Hinweis, die deutsche Uebersetzung war kaputt, bitte Btn3 durch Btn1 ersetzen.

BtnX ist nicht als dummy sondern als "echtes" Geraet gedacht. Dummy geht natuerlich auch, ich stelle mir nur das schnelle druecken etwas unpraktisch vor.
Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: Burny4600 am 08 Mai 2017, 13:05:57
Das heist aber, dass zb. für einen Rollladen für eine Richtung trotzdem zwei Taster notwendig sind für diesen sequence Modus.
Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: rudolfkoenig am 08 Mai 2017, 13:10:11
Du kannst auch mit eine Taste morsen: sequence mit btn1 0.5 btn1, und entweder auf dem trigger Event von sequence reagieren, oder auf partial_1 (dafuer muss triggerPartial aktiviert sein).
Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: Burny4600 am 08 Mai 2017, 15:37:24
Eigentlich dachte ich mehr an einen Taster der bei jeder Betätigung den Zustand zwischen AUS und EIN wechselt.

Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: RaspiLED am 08 Mai 2017, 20:00:37
Hi,
Ja aus und ein gleich toggle in meinem verlinkten Beitrag oben!
Gruß Arnd



Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: fireball am 21 Dezember 2019, 12:08:50
Hi, eine Frage,

kann das notify auch das auslösende Gerät schalten? Ich bekomme es nicht hin...
Ziel ist es ein Doppelklick bei meinen Rolllädenschaltern ist ein stop.

Sequenze funktioniert:
Internals:
   CFGFN     
   DEF        Rollladen_.*:(0|1) 0.5 :(0|1)
   FUUID      5dfde9bb-f33f-0804-a49f-0ca4982dad3f1e8e
   IDX        0
   MAX        3
   NAME       Rolladen_Stop
   NR         11254
   NTFY_ORDER 50-Rolladen_Stop
   RE         Rollladen_.*:(0|1)
   STATE      active
   TS         0
   TYPE       sequence
   READINGS:
     2019-12-21 11:45:09   state           active
Attributes:
   reportEvents 1
   room       FENSTER_TÜREN
   verbose    5


Im notify wollte ich jetzt:
Rolladen_Stop:trigger set $NAME 2
setzen. Es kennt aber $NAME nicht.

Ich dachte über den Paramter in Sequenze  reportEvents 1 bekomme ich das auslösende Event. Aber dann funktioniert das notify über haupt nicht mehr.

Jemand eine Idee, wo mein Problem liegt?
VG
René

Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: rudolfkoenig am 21 Dezember 2019, 12:24:09
ZitatEs kennt aber $NAME nicht.
$NAME sollte Rolladen_Stop sein, vmtl. nicht das was du willst.
Sieht man gut mit "attr global verbose 5".
Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: fireball am 21 Dezember 2019, 14:39:21
Hi Rudolf, ja I'm log hab ich das auch schon mitbekommen.
gibt's denn überhaupt eine Möglichkeit an die Infos vom auslösenden Devices zu kommen? Welches bei der Sequenz gedrückt wurde? Ich möchte ja nicht 14 notify anlegen.

VG René
Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: rudolfkoenig am 21 Dezember 2019, 19:55:40
Zitatgibt's denn überhaupt eine Möglichkeit an die Infos vom auslösenden Devices zu kommen?
Bisher nicht.

Ich habe aber gerade das Modul ergaenzt, damit $data{sequence_source} beim Ausloesen von trigger den Namen des Geraetes enthaelt, das das aktuelle Event ausloest. Damit muss aber dein notify leider auf perl umgestellt werden:
define stopNotify notify Rolladen_Stop:trigger { fhem "set $data{sequence_source} 2" }
Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: fireball am 22 Dezember 2019, 10:24:02
Moin Moin Rudolf,

sehr sehr coole Sache, habs getestet und für gut befunden. Funktioniert tadellos.
Wieso schreibst du leider auf perl? Weil perl mehr Ressourcen frist?

Ansonsten hätte ich es heute ausprobiert, ein Reading "stpp_counter" einzuführen, welche ich beim ersten schalten auf 1 gesetzt hätte. Dann den Befehl ausgeführt hätte und dann ein sleep 2sek, dann den stop_counter wieder auf 0. Beim zweiten schalten innerhalb der zwei Sekunden wäre der Zähler noch auf 1 und damit wäre der Befehl dann per If Schleife auf stop Gesetz.

Deine Verbesserungen ist jetzt deutlich einfacher.

VG und danke René
Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: rudolfkoenig am 22 Dezember 2019, 12:00:45
ZitatWieso schreibst du leider auf perl? Weil perl mehr Ressourcen frist?
Nein, sondern weil es etwas weniger elegant ist (vulgo laenger), und Anfaenger zu Fehler verleitet.
Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: hasselh am 20 September 2020, 09:11:15
Hi Rudolf,

Zitat von: rudolfkoenig am 21 Dezember 2019, 19:55:40
Ich habe aber gerade das Modul ergaenzt, damit $data{sequence_source} beim Ausloesen von trigger den Namen des Geraetes enthaelt, das das aktuelle Event ausloest.

Ojeh, mein erster Post im FHEM Forum...  ich hoffe ich mache alles richtig 8)

Die Ergänzumg mit $data{sequence_source} ist für mich suuper hilfreich!! Leider funktioniert sie (noch) nicht bei triggerPartial... Und genau da bräuchte ich sie leider ebenfalls. Spricht irgendwas dagegen das auch für triggerPartial einzubauen. Ich habe gerade mal die 91_sequence.pm angepasst... aber vielleicht nicht gerade auf die intelligenteste Weise


*** 91_sequence.pm.0    2020-08-21 14:14:59.975503687 +0200
--- 91_sequence.pm      2020-09-20 08:15:09.000000000 +0200
***************
**** 94,99 ****
--- 94,100 ----
      my @d = split("[ \t]+", $hash->{DEF});
      $hash->{EVENTS} = "" if(!$hash->{EVENTS});
      $hash->{EVENTS} .= " $n:$s";
+     $data{sequence_source} = $dev->{NAME};

      if($idx > $hash->{MAX}) {   # Last element reached

***************
*** 103,111 ****

        Log3 $ln, 5, "sequence $ln $tt";
        setReadingsVal($hash, "state", "active", TimeNow());
-       $data{sequence_source} = $dev->{NAME};
        DoTrigger($ln, $tt);
-       delete($data{sequence_source});
        $idx  = 0;
        $hash->{TS} = 0;

--- 104,110 ----


Liebe Grüße und DANKE schon mal im Voraus,  Hayo
Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: rudolfkoenig am 21 September 2020, 12:23:42
Ich habe die Funktionalitaet etwas modifiziert eingebaut, bitte testen.
Modifiziert deswegen, weil ich nicht will, dass im $data was uebrig bleibt.
Und wenn ich schon dabei war, addStateEvent implementiert.

Die Aufgabe wuerde ich eher mit dem reportEvent Attribut loesen, aus Architektursicht schaut das weniger nach Pfusch aus :)
Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: hasselh am 21 September 2020, 22:36:46
Zitat von: rudolfkoenig am 21 September 2020, 12:23:42
Ich habe die Funktionalitaet etwas modifiziert eingebaut, bitte testen.

Ich hab's ausgiebig getestet und für gut befunden. Danke für Deine suuper schnelle Antwort :) :) :)

Zitat von: rudolfkoenig am 21 September 2020, 12:23:42
Die Aufgabe wuerde ich eher mit dem reportEvent Attribut loesen, aus Architektursicht schaut das weniger nach Pfusch aus :)

Und auch damit hast Du völlig Recht. Da ich sowohl auf der Device- als auch auf der Event-Seite mit Wildcards arbeite...

defmod seq1 sequence [dek]g_s[0-9][0-9]:[AB][0I] 0.5 :[AB][0I]

...kann ich mit reportEvent so auch erkennen ob das Event wirklich ein "Doppelklick" von dem gleichen Taster war :)

Gruss und Danke,  Hayo
Titel: Antw:Mehrfachfunktionen für Taster
Beitrag von: hasselh am 04 Oktober 2020, 11:04:16
OK, jetzt ist es an mir etwas an diese tolle Community zurückzugeben...  :)

Das von Rudolf eingebaute Value($device) kann man relativ einfach verwenden, um so "Sonderfunktionen" für alle Schalter zu setzen, ohne die Konfiguration mit redudanten triggerPartial notify Definitionen zu "fluten".

Hintergrund (bei mir): Eltako Enocean mit 20+ Schaltern, bei denen ich die folgende Funktionen implementieren wollte:

Aus -> 1x Klick: fest definierter (Start-) Dimmwert (jede Lampe anders - evtl. auch abhängig von der Tageszeit)
-> 2x Klick: volle Helligkeit
-> 3x Klick: volle Helligkeit aller Leuchten im Raum
Ansonsten sollte das "normale" Dimmen per Taster nicht beeinflusst werden

Zuerst einmal die sequence (mit Wildcards für das Device):


define n_klick sequence [dek]g_s[0-9][0-9]:buttons:.pressed 0.5 :buttons:.released 0.5 :buttons:.released 0.5 :buttons:.released


Jetzt einen notify pro Anzahl der Tasterdrücke definiert:


define 1_klick notify n_klick:partial_2 {my ($device,$cmd)= (split(/\|/,AttrVal($data{sequence_source},"userattr","")))[0,1];; if (Value($device) eq "off" ) {fhem("$cmd")}}
define 2_klick notify n_klick:partial_3 {my ($device,$cmd)= (split(/\|/,AttrVal($data{sequence_source},"userattr","")))[0,2];; fhem("$cmd")}
define 3_klick notify n_klick:trigger   {my ($device,$cmd)= (split(/\|/,AttrVal($data{sequence_source},"userattr","")))[0,3];; fhem("$cmd")}


und jetzt braucht man nur noch 1x per Schalter festlegen was denn denn geschehen soll:


#Logik: attr <schalter> userattr <aktor>|<1-Klick Aktion>|<2-Klick Aktion>|<3-Klick Aktion>
attr eg_s01 userattr eg_d02|set eg_d01,eg_d02 dim 35|set eg_d01,eg_d02 on|set eg_d01,eg_d02,eg_d03 on
attr eg_s02 userattr eg_d03|set eg_d03 dim 40|set eg_d03 on|set eg_d01,eg_d02,eg_d03 on
[...]


P.S.: ich hab mich für das etwas ungewöhnliche "|" als Trennzeichen entschieden, um so auch Perl Code hinterlegen zu können

Gruss,  Hayo
Titel: Aw: Mehrfachfunktionen für Taster
Beitrag von: RomanticBoy83 am 16 Juni 2023, 20:25:45
Hallo rudolf
... ich fand bisher kein Gehör für meine kleine Erweiterung: Wunschliste (https://forum.fhem.de/index.php?topic=121953.0#msg1279080), welche eine Strikte Reihenfolge der Sequenz erfordert und somit ein NumPad für eine Alarmanlage erst ermöglichen würde.