Szenario-Steuerung: Aktion ausführen, wenn Taster 3 Mal betätigt wurde

Begonnen von zYloriC, 04 September 2014, 16:27:11

Vorheriges Thema - Nächstes Thema

zYloriC

Hallo fHem-Forum,
ich möchte mit Hilfe von fHem und einigen HomeMatic Jalousie-Aktoren verschiedene Szenarien realisieren.
Das Besondere dabei ist, dass diese verschiedenen Szenarien über einen Taster (aktuell mit dem Funk-Schaltaktor HM-LC-SW1-BA-PCB) auswählen will.
Wenn ich den Taster ein mal betätige, soll er Szenario A ausführen, bei zwei mal Szenario B, bei 3 Mal Szenario C ... etc.

Meine Frage ist nun, wie ich so etwas in fhem realisieren kann? Sollte man nach dem ersten Tasten-Druck noch etwa 5 Sekunden warten, bis ggf ein weiterer Tastendruck "hinzukommt"? Das würde bedeuten, dass nach dem ersten Taster-Druck mindestens eine Verzögerung von 5 Sekunden entsteht, richtig?

Leider konnte ich im Forum noch keinen hilfreiche Lösung dazu finden. Habt ihr eine Idee oder einen Tipp. Vielen Dank.
Viele Grüße, Florian

Elektrolurch

Hallo,

ich habe so was für Einfach-Druck und Doppeldruck implementiert.
Dabei ist schon mal folgendes zu beachten:
Wenn Du mehr als einen Funkempfänger hast, so kommt das Funksignal auch mehrfach bei fhem an. Du musst Dir also bei jedem Tastendruck merken, wann er ankam.

Um einfacher rechnen zu können, benutze ich in der sub, die vom notify der Taste aufgerufen wird, time() als Zeitstempel und nicht die Darstellung von fhem, denn die musst Du ja immer hin und her konvertieren, wenn Du Differenzen ausrechnen willst.
Den Zeitwert speichere ich ganz einfach in einem reading des devices.
Bevor ich alerdings den dort ablege, schaue ich mir den alten Wert an und in Abhängigkeit der Differenz tue ich was.
So, da Du nun ja drei SSzenarien haben willst, musst Du das also kaskadieren, d.h. sagen wir mal das erste event kommt -> abspeichern.
Nun kommt das zweite Event -> nachschauen, ob ein erstes event schon abgelegt ist, wenn ja, wie groß ist die Zeitdifferenz. Erfüllt die Dein Kriterium, dann auf das dritte Event warten.
In welcher Stufe der Kaskade Du gerade bist, musst Du natürlich dann auch in einem reading ablegen.

So, nun Schritt zwei:
Beim ersten Event startest Du einen timer, sagen wir mal mit 5 Sekunden.
Wenn der abgelaufen ist, schaut der nach, in welcher Stufe Deine Kaskade ist.
Bei Stufe 1 machst Du Deine Szene 1,
bei Stufe 2 deine Szene 2.

Die Szene 3 hast Du ja schon gleich starten können wenn innerhalb der 5 Sekunden dreimal gedrückt wurde -> nicht vergessen, dann den Kaskadenstatus wieder auf 0 zu setzen.

Klingt jetzt etwas kompliziert, sind aber vielleicht nur 10 Zeilen perl-Code.

Hoffe, dass hilft Dir weiter

Gruß

Elektrolurch
configDB und Windows befreite Zone!

rudolfkoenig

#2
Ich habe sequence mit dem Attribut triggerPartial erweitert (und eine deutsche Doku spendiert).

Damit kann man das urspruengliche Problem folgendermassen loesen:
define seq sequence PCB:on 0.5 PCB:on 0.5 PCB:on
attr seq triggerPartial
define nA notify seq:partial_1 set scene A
define nB notify seq:partial_2 set scene B
define nC notify seq:trigger set scene C


partial_1 (bzw. partial_2) wird 0.5 Sekunden nach dem letzten Tastendruck generiert.

zYloriC

Nachdem ich lange nichts an dem Taster-Thema machen konnte habe ich mir nun eine Buzzer-Taster gekauft und an den Homematic Batterie-Funk-Schaltaktor (HM-LC-SW1-BA-PCB) angeschlossen.

Dank Rudolf habe ich auch sequence getestet, habe aber das Problem, dass der Schaltaktor nur sehr träge an fHem antwortet. Das hat zur folge dass ich  "define seq sequence PCB:on 0.5 PCB:on 0.5 PCB:on" mit 0.5sek Verzögerung nicht nutzen kann bzw. immer nur "partial_1" hinbekomme.
Wenn ich die Verzögerung auf 5 sek erhöhe klappt es zwar, aber fHem verzögert den "partial_1" Befehl um min. 5 Sekunden, da es auf den zweiten Tastendruck wartet....

Meine Frage ist daher, ob man HM-LC-SW1-BA-PCB irgendwie beschleunigen kann oder ob der Aktor einen Status "double-press" oder "Long-press" übermitteln kann, den man direkt ausließt. Somit hätte ich direkt die 3 Auslöser "single-press", "double-press" oder "Long-press" und könnte 3 Aktionen auslösen.

Wer kann mir da mit HM-LC-SW1-BA-PCB helfen?? Danke.
Gruß zYloriC