Mehrfachfunktionen für Taster

Begonnen von Burny4600, 07 Mai 2017, 19:45:47

Vorheriges Thema - Nächstes Thema

hasselh

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

rudolfkoenig

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 :)

hasselh

#17
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

hasselh

#18
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

RomanticBoy83

Hallo rudolf
... ich fand bisher kein Gehör für meine kleine Erweiterung: Wunschliste, welche eine Strikte Reihenfolge der Sequenz erfordert und somit ein NumPad für eine Alarmanlage erst ermöglichen würde.