[gelöst] Fernbedienung: "Long" kommt mehrfach

Begonnen von ujaudio, 29 Dezember 2015, 16:46:14

Vorheriges Thema - Nächstes Thema

ujaudio

Meine HM-PB-6-WM55 funktioniert einwandfrei, FHEM kann kurze und lange Tastendrücke erkennen. Nur wenn "lang" zu lang ist, dann triggered mein notify mehrfach. Kann ich das verhindern? An sich keine großes Problem, aber ich triggere damit diverse Blinkcodes, die mir eine Aussage zum Status des Hauses inkl. Alarmanlage machen - aktuell ist das halt für mich nicht nutzbar, sondern ich muss ggf. via Mobiltelefon nachschauen.
Einen lieben Gruß
Jürgen

Baumi

Hallo!

Zwei Fragen dazu:

Wie genau sieht das define fürs Notify aus?
Und was gibt der Event Monitor aus, wenn Du auf die Taste der Fernbedienung drückst?

Otto123

Das Attribute event-on-change-reading wäre Dein Freund.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

ujaudio

event-on-change-reading hatte ich schon auf dem Schirm, aber der Wert .* hatte nicht die erhoffte Wirkung. Im Wiki steht:
Um alle Readings eines Gerätes nur bei Änderungen zu protokollieren, sollte das Attribut folgendermaßen gesetzt werden:

    attr <device> event-on-change-reading .*


Wenn ich aber zu lange drücke, sind das trotzdem mehrere Ereignisse, zumindest stimmt das Blinken nicht.
Einen lieben Gruß
Jürgen

dev0

Die regex des Notify ist nicht exakt genug. Schau in den Eventmonitor oder lass die Events im Notify loggen, dann siehst du das.

ujaudio

Das regex ist aktuell
wk_bibigeht:Long.*
Ich werde mich morgen damit beschäftigen. Danke für den Hinweis!
Einen lieben Gruß
Jürgen

Otto123

Zitat von: ujaudio am 29 Dezember 2015, 18:46:42
event-on-change-reading hatte ich schon auf dem Schirm, aber der Wert .* hatte nicht die erhoffte Wirkung. Im Wiki steht:
Ich mache da immer state - habe ich mal irgendwo gelesen.
Das Problem wird sein, er sendet wahrscheinlich long_1 long_2 usw...

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

dev0


Zitat von: Otto123 am 29 Dezember 2015, 19:29:00
Ich mache da immer state - habe ich mal irgendwo gelesen.
Dann liefern diese Devices nur noch Events zu state und zu keinem anderem Reading mehr.

Otto123

Zitat von: dev0 am 29 Dezember 2015, 19:52:21
Dann liefern diese Devices nur noch Events zu state und zu keinem anderem Reading mehr.
Danke! 8)
Da hätten wir das auch mal geklärt. Ich habe das bisher nur bei devices gemacht wo mich genau nur state interessiert hat.

Gruß Otto 
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Baumi

Kannst Du es so umbauen, dass Du erst auf den Release (also das Loslassen der Taste) testest? Denn solange sie gedrückt ist, ändert sich das Event mit jeder Sekunde.

Dabei kann man dann auch noch unterschiedliche Aktionen starten, je nachdem, wie lange die Taste gedrückt wurde.

Ich benutze' z.B. folgende Routine um mit einer Taste Rollläden sowohl rauf als auch runterzufahren:

In FHEM:

define rm_button_5_pressed notify rm_button_5:LongRelease.* { toggleShades();; }

Und in der 99_myUtils.pm dann:

sub toggleShades() {
  if (Value("rm_button_5") =~ m/LongRelease [12345]_.*/) {
    shadesUp(); # fährt Rollos hoch
  } else {
    shadesDown(); # fährt Rollos runter
  }
}


Das verhält sich dann folgendermaßen:

  • Ein kurzer Tastendruck erzeugt gar kein "LongRelease"-Ereignis, d.h. beim Versehentliche n Drücken passiert gar nichts.
  • Lässt man die Taste nach 1 bis 5 Sekunden los, werden die Rolläden hochgefahren.
  • Bei längerem Tastendruck fahren sie runter.


ujaudio

Das Drücken einer Taste auf der Fernbedienung HM-PB-6-WM55 liefert jede Menge Events (ich habe nun auch gelernt mit dem Eventmonitor umzugehen, ein sehr hilfreiches Werkzeug!).

Mein notify triggerte auf Long.* - aber wenn man sieht was so alles ankommt, ist klar, dass das nicht funktioniert:
2015-12-30 08:42:15 CUL_HM wk_bibi_jar_status wk_jargeht Long
2015-12-30 08:42:16 CUL_HM wk_jargeht Long 1_53 (to xx_Zentrale)
2015-12-30 08:42:16 CUL_HM wk_jargeht trigger: Long_53
2015-12-30 08:42:16 CUL_HM wk_bibi_jar_status wk_jargeht Long
2015-12-30 08:42:16 CUL_HM wk_jargeht Long 2_53 (to xx_Zentrale)
2015-12-30 08:42:16 CUL_HM wk_jargeht trigger: Long_53
2015-12-30 08:42:16 CUL_HM wk_bibi_jar_status wk_jargeht Long
2015-12-30 08:42:17 CUL_HM wk_jargeht Long 3_53 (to xx_Zentrale)
2015-12-30 08:42:17 CUL_HM wk_jargeht trigger: Long_53
2015-12-30 08:42:17 CUL_HM wk_bibi_jar_status wk_jargeht Long
2015-12-30 08:42:17 CUL_HM wk_jargeht Long 4_53 (to xx_Zentrale)
2015-12-30 08:42:17 CUL_HM wk_jargeht trigger: Long_53
2015-12-30 08:42:17 CUL_HM wk_bibi_jar_status wk_jargeht Long
2015-12-30 08:42:17 CUL_HM wk_jargeht Long 5_53 (to xx_Zentrale)
2015-12-30 08:42:17 CUL_HM wk_jargeht trigger: Long_53
2015-12-30 08:42:18 CUL_HM wk_bibi_jar_status wk_jargeht Long
2015-12-30 08:42:18 CUL_HM wk_jargeht Long 6_53 (to xx_Zentrale)
2015-12-30 08:42:18 CUL_HM wk_jargeht trigger: Long_53
2015-12-30 08:42:18 CUL_HM wk_bibi_jar_status wk_jargeht Long
2015-12-30 08:42:18 CUL_HM wk_jargeht Long 7_53 (to xx_Zentrale)
2015-12-30 08:42:18 CUL_HM wk_jargeht trigger: Long_53
2015-12-30 08:42:19 CUL_HM wk_bibi_jar_status wk_jargeht Long
2015-12-30 08:42:19 CUL_HM wk_jargeht Long 8_53 (to xx_Zentrale)
2015-12-30 08:42:19 CUL_HM wk_jargeht trigger: Long_53
2015-12-30 08:42:19 CUL_HM wk_bibi_jar_status wk_jargeht Long
2015-12-30 08:42:19 CUL_HM wk_jargeht Long 9_53 (to xx_Zentrale)
2015-12-30 08:42:19 CUL_HM wk_jargeht trigger: Long_53
2015-12-30 08:42:24 CUL_HM wk_bibi_jar_status wk_jargeht Long
2015-12-30 08:42:24 CUL_HM wk_jargeht Long 10_53 (to xx_Zentrale)
2015-12-30 08:42:24 CUL_HM wk_jargeht trigger: Long_53
2015-12-30 08:42:24 CUL_HM wk_bibi_jar_status wk_jargeht Long
2015-12-30 08:42:24 CUL_HM wk_jargeht Long 11_53 (to xx_Zentrale)
2015-12-30 08:42:24 CUL_HM wk_jargeht trigger: Long_53
2015-12-30 08:42:24 CUL_HM wk_bibi_jar_status wk_jargeht Long
2015-12-30 08:42:25 CUL_HM wk_jargeht Long 12_53 (to xx_Zentrale)
2015-12-30 08:42:25 CUL_HM wk_jargeht trigger: Long_53
2015-12-30 08:42:25 CUL_HM wk_bibi_jar_status wk_jargeht LongRelease
2015-12-30 08:42:25 CUL_HM wk_jargeht LongRelease 13_53 (to xx_Zentrale)
2015-12-30 08:42:25 CUL_HM wk_jargeht trigger: Long_53

Es wird nämlich jede Sekunde ein Event erzeugt - im Beispiel habe ich halt sehr lange gedrückt  :)
Sobald man das weiß und auch, dass beim Loslassen ein letztes Event kommt, dann kann man sein Programm auch richtig schreiben: mein notify triggered jetzt auf LongRelease.* und alles funktioniert bestens.
Einen lieben Gruß
Jürgen

rapster


Baumi

Dazu hab' ich eine Frage (ich hoffe, es ist okay, wen ich die hier stelle, um nicht den alten Thread aus dem Grab zu holen):

Den Punkt "es wird erst beim Loslassen ausgeführt" kann ich nachvollziehen. Je nach Anwendungsfall kann das wirklich unpraktisch sein.

Aber der andere Nachteil – "Du musst aufpassen, dass Du lange genug drückst" – hat doch nichts mit dem Release zu tun, oder? Das muss man doch auch, wenn man statt dessen Long\s1.* benutzt. Oder gibt es Fälle, in denen zwar ein Long-Tastendruck aber kein Release-Event generiert wird?

rapster

Nein, noch einem long wird natürlich immer ein Long-Release getriggert, aber wenn du zu kürz drückst hast du ein "Short" ;)

Mit verlinkter Lösung, bleibst einfach auf dem Taster bis die Aktion ausgeführt ist was du möchtest und fertig :)

Baumi

Ach so, jetzt verstehe ich: Man kriegt eine Rückmeldung, dass es lange genug war, weil die Aktion startet.

Danke für die Erklärung.