HM-PBI-4-FM -> Schalten nach 5 Sekunden Tastendruck

Begonnen von twist64, 12 Juni 2016, 10:24:03

Vorheriges Thema - Nächstes Thema

twist64

Hallo,

ich bin gerade neu eingestiegen. Mir geht es um die Haussicherung.
Ich möchte das Alarmsystem mit einem Taster (HM-PBI-4-FM) 'scharf' schalten.
Eigentlich funktioniert auch schon alles, jetzt geht es an den Feinschliff.
Hinweis: Ich habe keine Komponenten direkt gepeert - es läuft alles über den HMLAN und FHEM.

Der Taster reagiert nur auf einen langen Tastendruck. Ich habe mich an das Release-Event gehängt, weil es ansonsten zwei Auslösungen gab. Das hier hängt am Notify:

EG_FL_ALARMTASTER_1:LongRelease.* {
if (ReadingsVal("AlarmStatus.dum","state","on") eq "on") {
   fhem("set AlarmStatus.dum off");
} else {
   fhem("set AlarmStatus.dum on");
}
}

Es reichen aber auch schon knapp 2 Sekunden, was mir zu kurz ist. Ich hätte gerne, dass er erst auslöst, wenn man mind. 5 Sekunden drückt.
Wie kriege ich das hin?


betateilchen

Zitat von: twist64 am 12 Juni 2016, 10:24:03
Ich habe mich an das Release-Event gehängt, weil es ansonsten zwei Auslösungen gab.

Dann hast Du einfach eine falsche regexp für Dein notify verwendet.

So einfach, wie Du Dir das vorstellst, ist es nicht, die Dauer eines Tastendrucks auszuwerten. Im Prinzip musst Dir beim Drücken den timestamp merken. Beim Loslassen des Buttons musst den dann aktuellen timestamp verwenden, um auszurechnen, ob die Differenz zwischen beiden Ereignissen mindestens 5 Sekunden beträgt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

gui2180

Hi,

warum frägst du nicht "Long <zähler_triggerCnt>" ab? Hab jetzt nicht den gleichen Taster, aber mal schauen ob es im Eventlog das auch bei dir gibt.
Es wird ja automatisch hochgezählt solange die Taste gedrückt wird. Entspricht zwar nicht Sekunden, aber das kann man ja ausmessen.



2016-06-12 11:24:58 CUL_HM HM_4A1D1E_Btn_02 Long 1_22 (to HMLAN1)
2016-06-12 11:24:58 CUL_HM HM_4A1D1E_Btn_02 trigger: Long_22
2016-06-12 11:24:58 CUL_HM HM_4A1D1E_Btn_02 trigger_cnt: 22
2016-06-12 11:24:59 CUL_HM HM_4A1D1E_Btn_02 Long 2_22 (to HMLAN1)
2016-06-12 11:24:59 CUL_HM HM_4A1D1E_Btn_02 trigger: Long_22
2016-06-12 11:24:59 CUL_HM HM_4A1D1E_Btn_02 trigger_cnt: 22
2016-06-12 11:24:59 CUL_HM HM_4A1D1E_Btn_02 Long 3_22 (to HMLAN1)
2016-06-12 11:24:59 CUL_HM HM_4A1D1E_Btn_02 trigger: Long_22
2016-06-12 11:24:59 CUL_HM HM_4A1D1E_Btn_02 trigger_cnt: 22
2016-06-12 11:24:59 CUL_HM HM_4A1D1E_Btn_02 Long 4_22 (to HMLAN1)
2016-06-12 11:24:59 CUL_HM HM_4A1D1E_Btn_02 trigger: Long_22
2016-06-12 11:24:59 CUL_HM HM_4A1D1E_Btn_02 trigger_cnt: 22
2016-06-12 11:24:59 CUL_HM HM_4A1D1E_Btn_02 Long 5_22 (to HMLAN1)
2016-06-12 11:24:59 CUL_HM HM_4A1D1E_Btn_02 trigger: Long_22
2016-06-12 11:24:59 CUL_HM HM_4A1D1E_Btn_02 trigger_cnt: 22
2016-06-12 11:25:00 CUL_HM HM_4A1D1E_Btn_02 Long 6_22 (to HMLAN1)
2016-06-12 11:25:00 CUL_HM HM_4A1D1E_Btn_02 trigger: Long_22
2016-06-12 11:25:00 CUL_HM HM_4A1D1E_Btn_02 trigger_cnt: 22
2016-06-12 11:25:00 CUL_HM HM_4A1D1E_Btn_02 Long 7_22 (to HMLAN1)
2016-06-12 11:25:00 CUL_HM HM_4A1D1E_Btn_02 trigger: Long_22
2016-06-12 11:25:00 CUL_HM HM_4A1D1E_Btn_02 trigger_cnt: 22
2016-06-12 11:25:00 CUL_HM HM_4A1D1E_Btn_02 Long 8_22 (to HMLAN1)
2016-06-12 11:25:00 CUL_HM HM_4A1D1E_Btn_02 trigger: Long_22
2016-06-12 11:25:00 CUL_HM HM_4A1D1E_Btn_02 trigger_cnt: 22
2016-06-12 11:25:00 CUL_HM HM_4A1D1E CMDs_done


VG

twist64

Hallo,

ah, mir war nicht klar, dass es sich hier um Reguläre Ausdrücke handelt.
Das hier hat dann geholfen:

EG_FL_ALARMTASTER_1:Long.7.* {...}

--
Ciao Stephan...

automatisierer

oder mit DOIF...
Flur_og_MOD_1 ist das Taster Device
Flur_og_MOD_1_Btn_02 ist der Taster Channel

Ausgewertet wird das Event.

Der 5 Sekunden Timer startet nach dem ersten "Long" im EventMonitor.
Lässt du den Taster nach 5 Sekunden los, kommt das LongRelease und das DOIF steht auf cmd_1 - also wird cmd_2 'wahr'
Lässt du den Taster < 5 Sekunden los, kommt das LongRelease, aber das DOIF steht nicht auf cmd_1 - also wird cmd_3 'wahr'


test DOIF (["^Flur_og_MOD_1$:Flur_og_MOD_1_Btn_02.Long$"])
DOELSEIF (["^Flur_og_MOD_1$:Flur_og_MOD_1_Btn_02.LongRelease$"] and [?$SELF] eq "cmd_1") (set testdummy long)
DOELSEIF (["^Flur_og_MOD_1$:Flur_og_MOD_1_Btn_02.LongRelease$"])


mit attr:

attr test wait 5:0:0