HM-4DIS: Probleme mit mehrfachen lg-press events bei einem langen Tastendruck

Begonnen von rainer042, 14 September 2014, 11:40:02

Vorheriges Thema - Nächstes Thema

rainer042

Hallo,

ich habe ein für mich nicht recht erklärliches Problem mit einem long-press auf einen 4DIS HM Schalter
das zu mehreren LongRelease events führt obwohl es nur eines sein sollte.

Hintergrund ist folgender Aufbau: Ich habe einen HM-Schalter "Schalter_FLOG", der die Spannung für einen herkömmlichen Bewegungsmelder mit Lampe daran schaltet. Der Bewegungsmelder hat ein "extra" Feature. Man kann durch den Schaltvorgang Aus/An/Aus/An die daran hängende Lampe für 4h auf dauer-an schalten. Jeder dieser An/Aus Schaltvorgang muß dabei zwischen 1-2sec dauern, nicht mehr und nicht weniger, sonst erkennt der externe Bewegungsmelder nicht das Kommando.

Mit fhem und dem HM Schalter Schalter_FLOG kann ich das Licht jetzt natürlich flexibel steuern mit verschiedenen Modi, z.B. automatisch durch den Bewegungsmelder, dauherhaft "an" für z.B. 1h, 2h oder 4h.
Damit das ganze komfortabel wird, will ich das auch über einen HM-4DIS Display-Schalter "Schalter_WZ" machen können. Dabei bedeutet Wippe oben schalte in Modus: "Bewegungsmelder", Wippe unten kurz bedeutet Lampe dauer "an" für 1h, und Wippe unten lang bedeutet Lampe "an" für 4h.

Dafür habe ich folgende Config gebaut (nur Auszüge mit dem Wichtigsten):

# virt aktor fuer 4DIS
define virtAktorSchalter_WZ CUL_HM 123450
attr virtAktorSchalter_WZ IODev COC
attr virtAktorSchalter_WZ model virtual_20
attr virtAktorSchalter_WZ subType virtual
attr virtAktorSchalter_WZ webCmd virtual
...
define virtAktorSchalter_WZ_Btn11 CUL_HM 1234500B
attr virtAktorSchalter_WZ_Btn11 model virtual_2
attr virtAktorSchalter_WZ_Btn11 peerIDs 1EAF5D0B,
attr virtAktorSchalter_WZ_Btn11 webCmd press short:press long
define virtAktorSchalter_WZ_Btn12 CUL_HM 1234500C
attr virtAktorSchalter_WZ_Btn12 model virtual_2
attr virtAktorSchalter_WZ_Btn12 peerIDs 1EAF5D0C,
attr virtAktorSchalter_WZ_Btn12 webCmd press short:press long

#
# Notifys für 4DIS Schalter in Wohnzimmer zur Auswertung der 4DIS-Events
define ntSchalter_WZ_Button11 notify Schalter_WZ_Btn_11:Short.* trigger Vswitch_EIGO_Lamp1 1h
attr ntSchalter_WZ_Button11 room notify
define ntSchalter_WZ_Button12 notify Schalter_WZ_Btn_12:Short.* trigger Vswitch_EIGO_Lamp1 auto
attr ntSchalter_WZ_Button12 room notify
define ntSchalter_WZ_Button11_lg notify Schalter_WZ_Btn_11:Long.* trigger Vswitch_EIGO_Lamp1 4h
define ntSchalter_WZ_Button12_lg notify Schalter_WZ_Btn_12:Long.* trigger Vswitch_EIGO_Lamp1 off


# Virt aktor zur Außen-Lichtsteuerung EIngang Oben mit webCmds
define Vswitch_EIGO_Lamp1 dummy
attr Vswitch_EIGO_Lamp1 group switch
attr Vswitch_EIGO_Lamp1 setList auto on off 15m 1h 2h 4h
attr Vswitch_EIGO_Lamp1 toggleDevice true
attr Vswitch_EIGO_Lamp1 webCmd auto:on:off:15m:1h:2h:4h
attr Vswitch_EIGO_Lamp1 webcmdDevice true


# Auszug aus notify für virt aktor um die eigentliche Schaltaktion auszufuehren
# Schalter_FLOG ist der Funkschalter der die Spannung fuer Bewegungsmelder+Lampe schaltet
define ntVswitch_EIGO_Lamp1 notify Vswitch_EIGO_Lamp1 { \
   ...
   if( $EVENT =~ /[0-9]+[hms]*/io ){\
       ...
       # Schalter ist hier im Status "on"
       fhem("set Schalter_FLOG off");; \
       fhem("sleep 1");; \
       fhem("set Schalter_FLOG on");; \
       fhem("sleep 1");; \
       fhem("set Schalter_FLOG off");; \
       fhem("sleep 1");; \
       fhem("set Schalter_FLOG on");; \
       # Jetzt schaltet der externe Bewegungsmelder auf 4h dauer-an und das Licht geht an.
       ...
       # Abschalten erfolgt über ein at nach gewünschter Zeit in $timespec berechnet aus $EVENT
       fhem("define atSchalter_FLOGOff at $timeSpec trigger Vswitch_EIGO_Lamp1 auto");;\
    }\
    ...
}



Im Web-Interface klappt das alles. Beim 4DIS klappt abgesehen von dem long-Press auch alles. Das Problem mit dem long Press ist, das nicht nur ein Event "LongRelease" gesendet wird, sondern bis zu 3 hintereinander. Das führt dann dazu, das die entsprechenden Schaltaktionen  auch dreimal hintereinander ausgeführt werden und der Bewegungsmelder "verwirrt" ist und das Licht aus bleibt. Zudem meldet der 4DIS mit "roter Lampe" das Fehlen des Ack vom virtuellen Aktor. Beim short-Press klappt das alles und der 4DIS leuchtet auch grün. Hier das log einen long-press:

# Log des 4DIS bei long press von Btn 11 für ca. 2sec
2014-09-13_17:54:40 Schalter_WZ battery: ok
2014-09-13_17:54:40 Schalter_WZ Schalter_WZ_Btn_11 LongRelease 1-A440- (to virtAktorSchalter_WZ)
2014-09-13_17:54:40 Schalter_WZ CMDs_done
2014-09-13_17:54:43 Schalter_WZ battery: ok
2014-09-13_17:54:43 Schalter_WZ Schalter_WZ_Btn_11 LongRelease 2-A440- (to virtAktorSchalter_WZ)
2014-09-13_17:54:43 Schalter_WZ CMDs_done
2014-09-13_17:54:47 Schalter_WZ battery: ok
2014-09-13_17:54:47 Schalter_WZ Schalter_WZ_Btn_11 LongRelease 3-A040- (to virtAktorSchalter_WZ)
2014-09-13_17:54:47 Schalter_WZ CMDs_done
2014-09-13_17:54:50 Schalter_WZ CMDs_done

Das muß wohl etwas mit der Ausführungszeit des notifys "ntVswitch_EIGO_Lamp1" zu tun haben, das den eigentlichen Schaltvorgang ausführt. Der dauert ja wegen der mehrfachen An/Aus Schaltvorgänge, die mindestens 1sec lang sein müssen, insgesamt mindestens 3sec. Wenn ich diese Schaltvorgänge im Notify einfach weglasse ist der 4DIS zufrieden und meldet "grünes Licht" als Feedback. Natürlich wird dann eben einfach nichts gemacht und das Licht bleibt aus  ;)

Daher vermute ich mal, das es eine maximale Wartezeit für die Beendigung eines notifys gibt. Wird die überschritten, würde ein Fehler erkannt und das Kommando wiederholt werden.

Die Frage ist, ob was dran ist an meiner Theorie und falls ja, ob man die Wartezeit für das Ack verlängern kann? Hat jemand eine Idee?

Vielen Dank
Rainer

martinp876


rainer042

Zitat von: martinp876 am 14 September 2014, 18:05:25
kannst du die messages aufzeichnen?
wie oft sendest du press?

Hallo Martin,

das mit den Messages werde ich mal machen.

Für das log das ich oben gepostet hatte(Schalter_WZ)  habe ich die Wippe auf dem 4-DIS genau einmal gedrückt und für ca. 2sec gehalten und dann los gelassen. Quittiert wird das mit einer roten Lampe und dann legt der HM-Schalter los und führt eben mehrfach hintereinander die Aus/An/Aus/An Schaltvorgänge aus, die eigentlich nur einmal ausgeführt werden sollten.

Grüße
Rainer

rainer042

Hallo Martin,

so hier jetzt die Messages im Anhang. Ich hoffe ich die Settings dazu richtig gesetzt, so das Du sehen kannst was Du sehen wolltest... Falls nicht sag bitte Bescheid


Vielen Dank
Rainer

rainer042

Hallo,

ich habe das Problem inzwischen umschifft. Ausgangspunkt der Lösung war das Funktionieren wenn ich den eigentlichen 3sec dauernden Schaltvorgang aus dem Notify des virtuellen Aktors heraus genommen hatte.

Den eigentlichen Schavorang habe ich nun als notify-"Makro" geschrieben. Zunächst habe ich mittels trigger dieses notify.Makro aus dem notify für den virtuellen Aktor angestossen. Was nicht half. Dann habe ich innerhalb des notify des virtuellen Aktors ein at +00:00:01 trigger ... geschrieben, wodurch das notify des virtuellen Aktors jetzt asynchron zum Schaltvorhang laufen kann, es muß eben nicht mehr warten bis der Schaltvorgang abgeschlossen ist.

Mit dieser Lösung klappts jetzt. Deutet auf ein timelimit bei der Ausführung eines  notifys hin, das bei Überschreiten zu einem NACK an den auslösenden Schalter (bei mir der 4DIS) führt.

Anyway, jetzt klappts.

Grüße
Rainer