Ein zweifach Homatic-Taster erzeugt über einen virtuellen Aktor in einem UserReading TrigType je nach Tastendruck und je Taster vier verschiedene Zustände/Events: short_on, short_off, long_Up und long_down. Die short-Events sind single-shot und die long-Events "feuern" mehrfach bis zum Loslassen der Taste.
Es geht darum, dass die mehrfachen Events bei längerem Drücken auch mehrfache Befehle aus DOIF aussenden sollen - und genau das geht nicht. Sie agieren einmal und dann ist Feierabend. Funktion so, als würde "do always" fehlen. Deshalb hier die Angaben:
Internals:
CFGFN
DEF ([virt_Akt01_Btn1:"long_Down"]) (set SB3.Buero volumeDown)
DOELSEIF ([virt_Akt01_Btn1:"long_Up"]) (set SB3.Buero volumeUp)
DOELSEIF ([virt_Akt01_Btn1:"short_ON"]) (set SB3.Buero on)
DOELSEIF ([virt_Akt01_Btn1:"short_OFF"]) (set SB3.Buero off)
NAME di_Test
NR 1468
NTFY_ORDER 50-di_Test
STATE cmd_1
TYPE DOIF
Readings:
2016-07-05 12:26:32 Device virt_Akt01_Btn1
2016-07-05 12:26:31 cmd 1
2016-07-05 12:26:31 cmd_event virt_Akt01_Btn1
2016-07-05 12:26:31 cmd_nr 1
2016-07-05 12:26:32 e_virt_Akt01_Btn1_events virtActTrigRpt: 7,virtActTrigType: long_Release
2016-07-05 12:26:31 state cmd_1
Condition:
0 EventDoIf('virt_Akt01_Btn1',$hash,'long_Down',1)
1 EventDoIf('virt_Akt01_Btn1',$hash,'long_Up',1)
2 EventDoIf('virt_Akt01_Btn1',$hash,'short_ON',1)
3 EventDoIf('virt_Akt01_Btn1',$hash,'short_OFF',1)
Devices:
0 virt_Akt01_Btn1
1 virt_Akt01_Btn1
2 virt_Akt01_Btn1
3 virt_Akt01_Btn1
all virt_Akt01_Btn1
Do:
0:
0 set SB3.Buero volumeDown
1:
0 set SB3.Buero volumeUp
2:
0 set SB3.Buero on
3:
0 set SB3.Buero off
4:
Helper:
event virtActTrigRpt: 7,virtActTrigType: long_Release
globalinit 1
last_timer 0
sleeptimer -1
timerdev virt_Akt01_Btn1
timerevent TrigType: long_Down
triggerDev virt_Akt01_Btn1
timerevents:
ON
virtActState: ON
virtActTrigNo: 232
virtActTrigRpt: 1
virtActTrigType: long
TrigType: long_Down
timereventsState:
state: ON
virtActState: ON
virtActTrigNo: 232
virtActTrigRpt: 1
virtActTrigType: long
TrigType: long_Down
triggerEvents:
virtActTrigRpt: 7
virtActTrigType: long_Release
triggerEventsState:
virtActTrigRpt: 7
virtActTrigType: long_Release
Internals:
Itimer:
Readings:
Regexp:
0:
1:
2:
3:
All:
State:
Trigger:
all virt_Akt01_Btn1
Attributes:
do always
event-on-change-reading .*
room Schalter
repeatcmd wiederholt den Befehl bis zum Sankt-Nimmerleins-Tag: also auch nicht.
Ich habe das Forum vor und zurück durchsucht. Was auf meinen Fall passt, habe ich nicht gefunden. Was kann ich tun?
Gruß Eberhard
Lösch mal dein event-on-change-reading .*!
Hallo Per, leider keine Änderung.
Gruß Eberhard
beim DOIF ist ein event-on-change-reading nicht sinnvoll, aber auch nicht schlimm. Interessanter wäre ob das Device (virt_Akt01_Btn1) ein event-on-change-reading hat...
Hi automatisierer,
das Device virt_Akt01_Btn1 hat das attr event-on-Change-reading, weil es ja bei einer Änderung der attr TrigType (userREading) und virtActTrigRpt "feuern" soll. Dass es das macht ist auf dem EventMonitor gut zu sehen. Hier die vier events auf dem E-Monitor:
2016-07-05 15:40:05 DOIF di_Test cmd_event: virt_Akt01_Btn1
2016-07-05 15:40:05 CUL_HM virt_Akt01_Btn1 ON
2016-07-05 15:40:05 CUL_HM virt_Akt01_Btn1 virtActState: ON
2016-07-05 15:40:05 CUL_HM virt_Akt01_Btn1 virtActTrigNo: 18
2016-07-05 15:40:05 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 1
2016-07-05 15:40:05 CUL_HM virt_Akt01_Btn1 virtActTrigType: short_Release
2016-07-05 15:40:05 CUL_HM virt_Akt01_Btn1 TrigType: short_ON
2016-07-05 15:40:10 DOIF di_Test cmd_event: virt_Akt01_Btn1
2016-07-05 15:40:10 CUL_HM virt_Akt01_Btn1 OFF
2016-07-05 15:40:10 CUL_HM virt_Akt01_Btn1 virtActState: OFF
2016-07-05 15:40:10 CUL_HM virt_Akt01_Btn1 virtActTrigNo: 19
2016-07-05 15:40:10 CUL_HM virt_Akt01_Btn1 TrigType: short_OFF
2016-07-05 15:40:13 DOIF di_Test cmd_event: virt_Akt01_Btn1
2016-07-05 15:40:13 CUL_HM virt_Akt01_Btn1 ON
2016-07-05 15:40:13 CUL_HM virt_Akt01_Btn1 virtActState: ON
2016-07-05 15:40:13 CUL_HM virt_Akt01_Btn1 virtActTrigNo: 20
2016-07-05 15:40:13 CUL_HM virt_Akt01_Btn1 virtActTrigType: long
2016-07-05 15:40:13 CUL_HM virt_Akt01_Btn1 TrigType: long_Down
2016-07-05 15:40:13 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 2
2016-07-05 15:40:13 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 3
2016-07-05 15:40:14 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 4
2016-07-05 15:40:14 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 5
2016-07-05 15:40:14 CUL_HM virt_Akt01_Btn1 virtActTrigType: long_Release
2016-07-05 15:40:16 DOIF di_Test cmd_event: virt_Akt01_Btn1
2016-07-05 15:40:16 CUL_HM virt_Akt01_Btn1 OFF
2016-07-05 15:40:16 CUL_HM virt_Akt01_Btn1 virtActState: OFF
2016-07-05 15:40:16 CUL_HM virt_Akt01_Btn1 virtActTrigNo: 21
2016-07-05 15:40:16 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 1
2016-07-05 15:40:16 CUL_HM virt_Akt01_Btn1 virtActTrigType: long
2016-07-05 15:40:16 CUL_HM virt_Akt01_Btn1 TrigType: long_Up
2016-07-05 15:40:16 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 2
2016-07-05 15:40:17 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 3
2016-07-05 15:40:17 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 4
2016-07-05 15:40:17 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 5
2016-07-05 15:40:17 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 6
2016-07-05 15:40:18 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 7
2016-07-05 15:40:18 CUL_HM virt_Akt01_Btn1 virtActTrigType: long_Release
Die Leerzeilen habe ich eingefügt, damit die Events der 4 Zustände besser erkennbar sind.
Gruß Eberhard
event-on-change-reading .* unterdrückt das wiederholen eines Events - das willst du doch eigentlich nicht.
des weiteren feuert das Event ja auch nicht dauern, sondern immer genau ein mal pro Tastendruck. Entweder musst du das event-on-change-reading entfernen oder auf ein anderes Event triggern zum Beispiel ["virt_Akt01_Btn1:virtActTrigRpt"]
Hallo Automatisierer,
der Taster ist ein Homeatic HM-PB-2-WM55. Der hat zwei Tasterstellungen (oben und unten). Jeder Taster geneiert zwei Events:
1.
Short bei kurzem Tastendruck (singleshot)
2.
Long bei längerem Tastendruck; gleichzeitig wird die Wiederholung solange der Taster gedrückt ist hochgezählt Long1, long2, long3 usw.
In einem virt_Akt wird aus den Singleshots von 1. eine Toggel-Funktion ON - OFF mit den bereits erwähnten Zuständen
short_ON und
short_OFF. Die werden über das DOIF benutzt, um das Device ein- bzw. auszuschalten. Das funktioniert tadellos.
Der virt_Akt liefert auch bei längerem Tastendruck eine Toggle Funktion ON - OFF verbunden mit einem Hochzählen der empfangenen Events. Durch die Auswertung wird daraus während des längeren Tastendrucks n x
long_Up (n ist abhängig von der Dauer des Tastendruckes) oder ein n x
long_DownDu siehst diese Aussage:
Zitatdes weiteren feuert das Event ja auch nicht dauern, sondern immer genau ein mal pro Tastendruck.
ist leider falsch. Der Auszug aus dem Event-Monitor wurde durch 4 Tastendrücke erzeugt (2x Kurz und 2x Lang).
Zitatevent-on-change-reading .* unterdrückt das wiederholen eines Events - das willst du doch eigentlich nicht.
Das ist wohl richtig, aber nachdem ich das attr gelöscht habe und neu gestartet habe, besteht kein Unterschied zu vorher.
Aber auch über event-on-update-reading ist kein Erfolg zu verzeichnen.
Ich habe vier eindeutige Events, von denen also zwei während eines längeren Tastendruckes mehrfache identische Events erzeugen. Davon wird nur der erste ausgewertet, die restlichen n-1 Events bleiben unberücksichtigt. Das ist genau die Krux.
Gruß Eberhard
Jetzt verstehe ich es noch weniger: du musst doch nach [virt_Akt01_Btn1:TrigType] auswerten, nicht nach [virt_Akt01_Btn1] selbst.
Und mit
DOELSE ([virt_Akt01_Btn1:virtActTrigType] eq "long_Release")
kannst du dein DOIF nach Longpress zurücksetzen.
([virt_Akt01_Btn1:TrigType] eq "short_ON") ("do short on")
DOELSEIF ([virt_Akt01_Btn1:TrigType] eq "short_OFF") ("do short off")
DOELSEIF ([virt_Akt01_Btn1:TrigType] eq "long_Down") ("do long on")
DOELSEIF ([virt_Akt01_Btn1:TrigType] eq "long_Up") ("do long off")
DOELSE ([virt_Akt01_Btn1:virtActTrigType] eq "long_Release") ("nix")
Dazu
repeatcmd 0:0:1:1:0
Zitat von: FHEm2005 am 05 Juli 2016, 13:59:08
Ein zweifach Homatic-Taster erzeugt über einen virtuellen Aktor in einem UserReading TrigType je nach Tastendruck und je Taster vier verschiedene Zustände/Events: short_on, short_off, long_Up und long_down. Die short-Events sind single-shot und die long-Events "feuern" mehrfach bis zum Loslassen der Taste.
Es geht darum, dass die mehrfachen Events bei längerem Drücken auch mehrfache Befehle aus DOIF aussenden sollen - und genau das geht nicht. Sie agieren einmal und dann ist Feierabend. Funktion so, als würde "do always" fehlen. Deshalb hier die Angaben:
Internals:
CFGFN
DEF ([virt_Akt01_Btn1:"long_Down"]) (set SB3.Buero volumeDown)
DOELSEIF ([virt_Akt01_Btn1:"long_Up"]) (set SB3.Buero volumeUp)
DOELSEIF ([virt_Akt01_Btn1:"short_ON"]) (set SB3.Buero on)
DOELSEIF ([virt_Akt01_Btn1:"short_OFF"]) (set SB3.Buero off)
NAME di_Test
NR 1468
NTFY_ORDER 50-di_Test
STATE cmd_1
TYPE DOIF
Readings:
2016-07-05 12:26:32 Device virt_Akt01_Btn1
2016-07-05 12:26:31 cmd 1
2016-07-05 12:26:31 cmd_event virt_Akt01_Btn1
2016-07-05 12:26:31 cmd_nr 1
2016-07-05 12:26:32 e_virt_Akt01_Btn1_events virtActTrigRpt: 7,virtActTrigType: long_Release
2016-07-05 12:26:31 state cmd_1
Condition:
0 EventDoIf('virt_Akt01_Btn1',$hash,'long_Down',1)
1 EventDoIf('virt_Akt01_Btn1',$hash,'long_Up',1)
2 EventDoIf('virt_Akt01_Btn1',$hash,'short_ON',1)
3 EventDoIf('virt_Akt01_Btn1',$hash,'short_OFF',1)
Devices:
0 virt_Akt01_Btn1
1 virt_Akt01_Btn1
2 virt_Akt01_Btn1
3 virt_Akt01_Btn1
all virt_Akt01_Btn1
Do:
0:
0 set SB3.Buero volumeDown
1:
0 set SB3.Buero volumeUp
2:
0 set SB3.Buero on
3:
0 set SB3.Buero off
4:
Helper:
event virtActTrigRpt: 7,virtActTrigType: long_Release
globalinit 1
last_timer 0
sleeptimer -1
timerdev virt_Akt01_Btn1
timerevent TrigType: long_Down
triggerDev virt_Akt01_Btn1
timerevents:
ON
virtActState: ON
virtActTrigNo: 232
virtActTrigRpt: 1
virtActTrigType: long
TrigType: long_Down
timereventsState:
state: ON
virtActState: ON
virtActTrigNo: 232
virtActTrigRpt: 1
virtActTrigType: long
TrigType: long_Down
triggerEvents:
virtActTrigRpt: 7
virtActTrigType: long_Release
triggerEventsState:
virtActTrigRpt: 7
virtActTrigType: long_Release
Internals:
Itimer:
Readings:
Regexp:
0:
1:
2:
3:
All:
State:
Trigger:
all virt_Akt01_Btn1
Attributes:
do always
event-on-change-reading .*
room Schalter
repeatcmd wiederholt den Befehl bis zum Sankt-Nimmerleins-Tag: also auch nicht.
Ich habe das Forum vor und zurück durchsucht. Was auf meinen Fall passt, habe ich nicht gefunden. Was kann ich tun?
Gruß Eberhard
Bei mir triggert das DOIF bei jeder Änderung des Zählers mit diesem DOIF:
ZitatInternals:
DEF (["^HM_3B775A_Btn_01$:^Long [0-9]{0,3}_[0-9]{0,3} \(to VCCU\)$"]) ({Log 1, "Device: $DEVICE --> Event: $EVENTS"})
NAME TestStatus
NR 167
NTFY_ORDER 50-TestStatus
STATE cmd_1
TYPE DOIF
Readings:
2016-07-05 18:14:09 Device HM_3B775A_Btn_01
2016-07-05 18:14:09 cmd 1
2016-07-05 18:14:09 cmd_event HM_3B775A_Btn_01
2016-07-05 18:14:09 cmd_nr 1
2016-07-05 18:14:09 matched_event_c1_1 Long 9_155 (to VCCU)
2016-07-05 18:14:09 state cmd_1
Condition:
0 EventDoIf('^HM_3B775A_Btn_01$',$hash,'^Long [0-9]{0,3}_[0-9]{0,3} \(to VCCU\)$',0)
Devices:
Do:
0:
0 {Log 1, "Device: $DEVICE --> Event: $EVENTS"}
Helper:
event Long 9_155 (to VCCU)
globalinit 1
last_timer 0
sleeptimer -1
timerdev HM_3B775A_Btn_01
timerevent Long 9_155 (to VCCU)
triggerDev HM_3B775A_Btn_01
timerevents:
Long 9_155 (to VCCU)
trigger: Long_155
trigger_cnt: 155
timereventsState:
state: Long 9_155 (to VCCU)
trigger: Long_155
trigger_cnt: 155
triggerEvents:
Long 9_155 (to VCCU)
trigger: Long_155
trigger_cnt: 155
triggerEventsState:
state: Long 9_155 (to VCCU)
trigger: Long_155
trigger_cnt: 155
Internals:
Itimer:
Readings:
Regexp:
0:
0 ^HM_3B775A_Btn_01$:^Long [0-9]{0,3}_[0-9]{0,3} \(to VCCU\)$
All:
0 ^HM_3B775A_Btn_01$:^Long [0-9]{0,3}_[0-9]{0,3} \(to VCCU\)$
State:
Trigger:
Attributes:
disable 0
do always
group 00_Test
room 0_Test
Es wird der Taster ausgewertet, einen virtuellen Taster habe ich nicht eingerichtet.
Hier die Log-Einträge dazu:
Zitat2016.07.05 18:14:07.406 1: Device: HM_3B775A_Btn_01 --> Event: Long 1_155 (to VCCU),trigger: Long_155,trigger_cnt: 155
2016.07.05 18:14:07.654 1: Device: HM_3B775A_Btn_01 --> Event: Long 2_155 (to VCCU),trigger: Long_155,trigger_cnt: 155
2016.07.05 18:14:07.904 1: Device: HM_3B775A_Btn_01 --> Event: Long 3_155 (to VCCU),trigger: Long_155,trigger_cnt: 155
2016.07.05 18:14:08.154 1: Device: HM_3B775A_Btn_01 --> Event: Long 4_155 (to VCCU),trigger: Long_155,trigger_cnt: 155
2016.07.05 18:14:08.405 1: Device: HM_3B775A_Btn_01 --> Event: Long 5_155 (to VCCU),trigger: Long_155,trigger_cnt: 155
2016.07.05 18:14:08.654 1: Device: HM_3B775A_Btn_01 --> Event: Long 6_155 (to VCCU),trigger: Long_155,trigger_cnt: 155
2016.07.05 18:14:08.904 1: Device: HM_3B775A_Btn_01 --> Event: Long 7_155 (to VCCU),trigger: Long_155,trigger_cnt: 155
2016.07.05 18:14:09.155 1: Device: HM_3B775A_Btn_01 --> Event: Long 8_155 (to VCCU),trigger: Long_155,trigger_cnt: 155
2016.07.05 18:14:09.406 1: Device: HM_3B775A_Btn_01 --> Event: Long 9_155 (to VCCU),trigger: Long_155,trigger_cnt: 155
Am DOIF liegt es nicht.
Zitat
Was kann ich tun?
In meinem Test habe ich den Trigger vollständig per Regex beschrieben, das könntest Du auch machen, dann wird es klappen.
Zitat von: FHEm2005 am 05 Juli 2016, 16:43:54
Hallo Automatisierer,
der Taster ist ein Homeatic HM-PB-2-WM55. Der hat zwei Tasterstellungen (oben und unten). Jeder Taster geneiert zwei Events:
1. Short bei kurzem Tastendruck (singleshot)
2. Long bei längerem Tastendruck; gleichzeitig wird die Wiederholung solange der Taster gedrückt ist hochgezählt Long1, long2, long3 usw.
In einem virt_Akt wird aus den Singleshots von 1. eine Toggel-Funktion ON - OFF mit den bereits erwähnten Zuständen short_ON und short_OFF. Die werden über das DOIF benutzt, um das Device ein- bzw. auszuschalten. Das funktioniert tadellos.
Der virt_Akt liefert auch bei längerem Tastendruck eine Toggle Funktion ON - OFF verbunden mit einem Hochzählen der empfangenen Events. Durch die Auswertung wird daraus während des längeren Tastendrucks n x long_Up (n ist abhängig von der Dauer des Tastendruckes) oder ein n x long_Down
Du siehst diese Aussage:ist leider falsch. Der Auszug aus dem Event-Monitor wurde durch 4 Tastendrücke erzeugt (2x Kurz und 2x Lang).
Das ist wohl richtig, aber nachdem ich das attr gelöscht habe und neu gestartet habe, besteht kein Unterschied zu vorher.
Aber auch über event-on-update-reading ist kein Erfolg zu verzeichnen.
ist mir klar, aber dieses hier:
2016-07-05 15:40:16 CUL_HM virt_Akt01_Btn1 OFF
2016-07-05 15:40:16 CUL_HM virt_Akt01_Btn1 virtActState: OFF
2016-07-05 15:40:16 CUL_HM virt_Akt01_Btn1 virtActTrigNo: 21
2016-07-05 15:40:16 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 1
2016-07-05 15:40:16 CUL_HM virt_Akt01_Btn1 virtActTrigType: long
2016-07-05 15:40:16 CUL_HM virt_Akt01_Btn1 TrigType: long_Up
2016-07-05 15:40:16 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 2
2016-07-05 15:40:17 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 3
2016-07-05 15:40:17 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 4
2016-07-05 15:40:17 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 5
2016-07-05 15:40:17 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 6
2016-07-05 15:40:18 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 7
2016-07-05 15:40:18 CUL_HM virt_Akt01_Btn1 virtActTrigType: long_Release
ist ja nur von
einem langen Tastendruck und da kommt das event auf das du triggern möchtest nur
einmal vor - oder nicht?!?!?
was sich jedoch wiederholt, ist das hier:
2016-07-05 15:40:16 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 1
2016-07-05 15:40:16 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 2
2016-07-05 15:40:17 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 3
2016-07-05 15:40:17 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 4
2016-07-05 15:40:17 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 5
2016-07-05 15:40:17 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 6
2016-07-05 15:40:18 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 7
wenn du das, wie in meinem Vorschlag, als trigger für dein DOIF nimmst, wird es wiederholt ausgelöst werden.
Zitat
Ich habe vier eindeutige Events, von denen also zwei während eines längeren Tastendruckes mehrfache identische Events erzeugen. Davon wird nur der erste ausgewertet, die restlichen n-1 Events bleiben unberücksichtigt. Das ist genau die Krux.
Gruß Eberhard
falls das event auf du zu triggern versuchst tatsächlich bei einem langen Tastendruck mehrfach wiederholt wird, kann es natürlich sein, dass ein 'event-on-change-reading .*' das unterdrückt
Man muss allerdings auch beachten, dass das DOIF für alle Events, die in dem Bezeichner $EVENTS aufgelistet sind, nur einmal auslöst.
In $EVENTS sind alle Events enthalten, die zeitgleich gesendet werden:
Zitat
2016-07-05 20:57:25.143 CUL_HM HM_3B775A_Btn_01 Long 1_170 (to VCCU)
2016-07-05 20:57:25.143 CUL_HM HM_3B775A_Btn_01 trigger: Long_170
2016-07-05 20:57:25.143 CUL_HM HM_3B775A_Btn_01 trigger_cnt: 170
2016-07-05 20:57:25.324 CUL_HM HM_3B775A battery: ok
2016-07-05 20:57:25.324 CUL_HM HM_3B775A HM_3B775A_Btn_01 Long
2016-07-05 20:57:25.372 DOIF TestStatus cmd_nr: 1
2016-07-05 20:57:25.372 DOIF TestStatus cmd: 1
2016-07-05 20:57:25.372 DOIF TestStatus cmd_event: HM_3B775A_Btn_01
2016-07-05 20:57:25.372 DOIF TestStatus cmd_1
2016-07-05 20:57:25.391 CUL_HM HM_3B775A_Btn_01 Long 2_170 (to VCCU)
2016-07-05 20:57:25.391 CUL_HM HM_3B775A_Btn_01 trigger: Long_170
2016-07-05 20:57:25.391 CUL_HM HM_3B775A_Btn_01 trigger_cnt: 170
2016-07-05 20:57:25.575 CUL_HM HM_3B775A battery: ok
2016-07-05 20:57:25.575 CUL_HM HM_3B775A HM_3B775A_Btn_01 Long
Eine Bedingung ["
^HM_3B775A_Btn_01$:Long"] wird daher nur einmal auslösen und hat nur einen Trigger.
Das steht etwas knapper auch in der deutschsprachigen Befehlsreferenz zum DOIF:
Zitat..., $EVENTS kommagetrennt durch alle Eventzeilen des Triggers ersetzt.
Die Millisekunden können mit dem globalen Attribut mseclog eingeschaltet werden.
Zitat von: Ellert am 05 Juli 2016, 21:14:59
Man muss allerdings auch beachten, dass das DOIF für alle Events, die in dem Bezeichner $EVENTS aufgelistet sind, nur einmal auslöst.
In $EVENTS sind alle Events enthalten, die zeitgleich gesendet werden:
Eine Bedingung ["^HM_3B775A_Btn_01$:Long"] wird daher nur einmal auslösen und hat nur einen Trigger.
Das steht etwas knapper auch in der deutschsprachigen Befehlsreferenz zum DOIF:
Die Millisekunden können mit dem globalen Attribut mseclog eingeschaltet werden.
verstehe ich nicht!
ein Taster Device erzeugt bei gesetztem 'event-on-change-reading .*' folgende Events:
2016-07-05 21:51:24 CUL_HM HM_28D095 HM_28D095_Btn_01 Long
2016-07-05 21:51:24 CUL_HM HM_28D095_Btn_01 Long 1_25 (to vccu)
2016-07-05 21:51:24 CUL_HM HM_28D095_Btn_01 trigger: Long_25
2016-07-05 21:51:24 CUL_HM HM_28D095_Btn_01 trigger_cnt: 25
2016-07-05 21:51:24 CUL_HM HM_28D095_Btn_01 Long 2_25 (to vccu)
2016-07-05 21:51:24 CUL_HM HM_28D095_Btn_01 Long 3_25 (to vccu)
2016-07-05 21:51:24 CUL_HM HM_28D095_Btn_01 Long 4_25 (to vccu)
2016-07-05 21:51:25 CUL_HM HM_28D095_Btn_01 Long 5_25 (to vccu)
2016-07-05 21:51:25 CUL_HM HM_28D095_Btn_01 Long 6_25 (to vccu)
2016-07-05 21:51:25 CUL_HM HM_28D095_Btn_01 Long 7_25 (to vccu)
2016-07-05 21:51:26 CUL_HM HM_28D095_Btn_01 Long 8_25 (to vccu)
2016-07-05 21:51:26 CUL_HM HM_28D095_Btn_01 Long 9_25 (to vccu)
2016-07-05 21:51:26 CUL_HM HM_28D095_Btn_01 Long 10_25 (to vccu)
2016-07-05 21:51:26 CUL_HM HM_28D095_Btn_01 Long 11_25 (to vccu)
2016-07-05 21:51:27 CUL_HM HM_28D095_Btn_01 Long 12_25 (to vccu)
2016-07-05 21:51:27 CUL_HM HM_28D095_Btn_01 Long 13_25 (to vccu)
2016-07-05 21:51:27 CUL_HM HM_28D095_Btn_01 Long 14_25 (to vccu)
2016-07-05 21:51:27 CUL_HM HM_28D095_Btn_01 Long 15_25 (to vccu)
2016-07-05 21:51:28 CUL_HM HM_28D095_Btn_01 Long 16_25 (to vccu)
2016-07-05 21:51:28 CUL_HM HM_28D095_Btn_01 Long 17_25 (to vccu)
2016-07-05 21:51:28 CUL_HM HM_28D095 CMDs_done
2016-07-05 21:51:28 CUL_HM HM_28D095 HM_28D095_Btn_01 LongRelease
2016-07-05 21:51:28 CUL_HM HM_28D095_Btn_01 LongRelease 18_25 (to vccu)
wenn ich da jetzt mit folgendem DOIF drauf reagiere:
define testDOIF DOIF (["HM_28D095_Btn_01:Long"]) (set testdummy $EVENT)
dann wird das DOIF mit jedem Long getriggert. Im testdummy läuft der Zähler Schritt für Schritt hoch.
Wenn ich nun noch das Abschlussevent 'LongRelease' raus Filtern will, dann kommt im DOIF hinter dem Long noch ein Leerzeichen.
(["HM_28D095_Btn_01:Long "]) (set testdummy $EVENT)
Ich sehe das Problem nicht! Wenn ich auf ein Event triggere, dass nur einmal kommt, dann triggert DOIF auch nur einmal.
Das Event auf das der Threadersteller triggern möchte würde auch wiederholt werden, wenn er den Device nicht ein 'event-on-change-reading .*' spendiert hätte. Dann sieht der EventMonitor nämlich so aus:
2016-07-05 21:58:55 CUL_HM HM_28D095 HM_28D095_Btn_01 Long
2016-07-05 21:58:55 CUL_HM HM_28D095_Btn_01 Long 1_26 (to vccu)
2016-07-05 21:58:55 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:55 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:55 CUL_HM HM_28D095_Btn_01 Long 2_26 (to vccu)
2016-07-05 21:58:55 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:55 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 Long 3_26 (to vccu)
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 Long 4_26 (to vccu)
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 Long 5_26 (to vccu)
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 Long 6_26 (to vccu)
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 Long 7_26 (to vccu)
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 Long 8_26 (to vccu)
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 Long 9_26 (to vccu)
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 Long 10_26 (to vccu)
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 Long 11_26 (to vccu)
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 Long 12_26 (to vccu)
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:58 CUL_HM HM_28D095 CMDs_done
2016-07-05 21:58:58 CUL_HM HM_28D095 HM_28D095_Btn_01 LongRelease
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 LongRelease 13_26 (to vccu)
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigDst_vccu: noConfig
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
und das ganze ist ja unabhängig davon welche Devices ich benutze, also ein HM-Taster oder einen Virt-Aktor - wichtig ist das Events erzeugt werden auf die ich triggern kann.
Mir ist grad aufgefallen, dass die von mir genannte Bedingung '["virt_Akt01_Btn1:virtActTrigRpt"]' nicht funktioniert, weil sie bei allen vier Tasterzuständen gleich ist. Daher wird nichts anderes übrig bleiben, als das 'event-on-change-reading .*' zu ändern oder zu löschen.
das DOIF im ersten Post sollte mMn bessser so aussehen:
define testdoif DOIF (["virt_Akt01_Btn1:long_Down"]) (set SB3.Buero volumeDown)
DOELSEIF (["virt_Akt01_Btn1:long_Up"]) (set SB3.Buero volumeUp)
DOELSEIF (["virt_Akt01_Btn1:short_ON"]) (set SB3.Buero on)
DOELSEIF (["virt_Akt01_Btn1:short_OFF"]) (set SB3.Buero off)
und das 'attr testdoif do always' darf natürlich auch nicht fehlen.
Du hast geschrieben, dass du das 'event-on-change-rading' gelöscht und danach neu gestartet hast. Das neu starten ist nicht nötig und für den Fall, dass du vor dem Neustart vergessen hast zu speichern sogar eher kontraproduktiv.
Also bitte das 'event-on-change-reading' und auch das 'event-on-update-reading' löschen und dann nochmal testen.
Vielen Dank für die zahlreichen "Wortmeldungen". Die muss ich ersteinmal "verdauen".
@automatisierer: mit Deinem letzten Vorschlag bin ich nach der Umsetzung genau so weit wie vorher. Das Event mit
long_Up bzw.
long_Down kommt nur einmal. Das ist der Knackpunkt. Schade.
@Per: Deine Lösung mit dem
repeatcmd ist für mich verständlich und nachvollziehbar. Funktioniert so, wie ich es wünsche, aber ich bekomme ihn durch Loslassen nicht gestoppt. Nur ein neuer Tastendruck ist in der Lage ihn zu stoppen.
DOELSE ([virt_Akt01_Btn1:virtActTrigType] eq "long_Release")
kann ihn nicht stoppen. Er erkennt den Befehl auch nicht.
Auch die Abfrage
DOELSEIF ([virt_Akt01_Btn1:virtActTrigType] eq "long_Release") (set SB3.Buero stop)
erkennt er nicht.
Der Trigger kommt zwar in der Form:
2016-07-05 23:31:22 CUL_HM virt_Akt01_Btn1 virtActTrigType: long_Release
Das wars dann auch.
@Ellert: ZitatIn meinem Test habe ich den Trigger vollständig per Regex beschrieben, das könntest Du auch machen, dann wird es klappen.
Dafür reichen meine Perl-Kenntnisse nicht aus. Dein Beitrag ist schön für mich ihn durchzuarbeiten, um besser zu werden; als kurzfristige Lösung für mich leider over the top.
Viele Grüße
Eberhard
Zitat von: automatisierer am 05 Juli 2016, 22:02:34
verstehe ich nicht!
ein Taster Device erzeugt bei gesetztem 'event-on-change-reading .*' folgende Events:
2016-07-05 21:51:24 CUL_HM HM_28D095 HM_28D095_Btn_01 Long
2016-07-05 21:51:24 CUL_HM HM_28D095_Btn_01 Long 1_25 (to vccu)
2016-07-05 21:51:24 CUL_HM HM_28D095_Btn_01 trigger: Long_25
2016-07-05 21:51:24 CUL_HM HM_28D095_Btn_01 trigger_cnt: 25
2016-07-05 21:51:24 CUL_HM HM_28D095_Btn_01 Long 2_25 (to vccu)
2016-07-05 21:51:24 CUL_HM HM_28D095_Btn_01 Long 3_25 (to vccu)
2016-07-05 21:51:24 CUL_HM HM_28D095_Btn_01 Long 4_25 (to vccu)
2016-07-05 21:51:25 CUL_HM HM_28D095_Btn_01 Long 5_25 (to vccu)
2016-07-05 21:51:25 CUL_HM HM_28D095_Btn_01 Long 6_25 (to vccu)
2016-07-05 21:51:25 CUL_HM HM_28D095_Btn_01 Long 7_25 (to vccu)
2016-07-05 21:51:26 CUL_HM HM_28D095_Btn_01 Long 8_25 (to vccu)
2016-07-05 21:51:26 CUL_HM HM_28D095_Btn_01 Long 9_25 (to vccu)
2016-07-05 21:51:26 CUL_HM HM_28D095_Btn_01 Long 10_25 (to vccu)
2016-07-05 21:51:26 CUL_HM HM_28D095_Btn_01 Long 11_25 (to vccu)
2016-07-05 21:51:27 CUL_HM HM_28D095_Btn_01 Long 12_25 (to vccu)
2016-07-05 21:51:27 CUL_HM HM_28D095_Btn_01 Long 13_25 (to vccu)
2016-07-05 21:51:27 CUL_HM HM_28D095_Btn_01 Long 14_25 (to vccu)
2016-07-05 21:51:27 CUL_HM HM_28D095_Btn_01 Long 15_25 (to vccu)
2016-07-05 21:51:28 CUL_HM HM_28D095_Btn_01 Long 16_25 (to vccu)
2016-07-05 21:51:28 CUL_HM HM_28D095_Btn_01 Long 17_25 (to vccu)
2016-07-05 21:51:28 CUL_HM HM_28D095 CMDs_done
2016-07-05 21:51:28 CUL_HM HM_28D095 HM_28D095_Btn_01 LongRelease
2016-07-05 21:51:28 CUL_HM HM_28D095_Btn_01 LongRelease 18_25 (to vccu)
wenn ich da jetzt mit folgendem DOIF drauf reagiere:
define testDOIF DOIF (["HM_28D095_Btn_01:Long"]) (set testdummy $EVENT)
dann wird das DOIF mit jedem Long getriggert. Im testdummy läuft der Zähler Schritt für Schritt hoch.
Wenn ich nun noch das Abschlussevent 'LongRelease' raus Filtern will, dann kommt im DOIF hinter dem Long noch ein Leerzeichen.
(["HM_28D095_Btn_01:Long "]) (set testdummy $EVENT)
Ich sehe das Problem nicht! Wenn ich auf ein Event triggere, dass nur einmal kommt, dann triggert DOIF auch nur einmal.
Das Event auf das der Threadersteller triggern möchte würde auch wiederholt werden, wenn er den Device nicht ein 'event-on-change-reading .*' spendiert hätte. Dann sieht der EventMonitor nämlich so aus:
2016-07-05 21:58:55 CUL_HM HM_28D095 HM_28D095_Btn_01 Long
2016-07-05 21:58:55 CUL_HM HM_28D095_Btn_01 Long 1_26 (to vccu)
2016-07-05 21:58:55 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:55 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:55 CUL_HM HM_28D095_Btn_01 Long 2_26 (to vccu)
2016-07-05 21:58:55 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:55 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 Long 3_26 (to vccu)
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 Long 4_26 (to vccu)
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 Long 5_26 (to vccu)
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 Long 6_26 (to vccu)
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:56 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 Long 7_26 (to vccu)
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 Long 8_26 (to vccu)
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 Long 9_26 (to vccu)
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:57 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 Long 10_26 (to vccu)
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 Long 11_26 (to vccu)
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 Long 12_26 (to vccu)
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
2016-07-05 21:58:58 CUL_HM HM_28D095 CMDs_done
2016-07-05 21:58:58 CUL_HM HM_28D095 HM_28D095_Btn_01 LongRelease
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 LongRelease 13_26 (to vccu)
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigDst_vccu: noConfig
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigger: Long_26
2016-07-05 21:58:58 CUL_HM HM_28D095_Btn_01 trigger_cnt: 26
und das ganze ist ja unabhängig davon welche Devices ich benutze, also ein HM-Taster oder einen Virt-Aktor - wichtig ist das Events erzeugt werden auf die ich triggern kann.
An dieser Stelle:
Zitat2016-07-05 21:51:24 CUL_HM HM_28D095_Btn_01 Long 1_25 (to vccu)
2016-07-05 21:51:24 CUL_HM HM_28D095_Btn_01 trigger: Long_25
2016-07-05 21:51:24 CUL_HM HM_28D095_Btn_01 trigger_cnt: 25
triggert das DOIF einmal, obwohl "Long" zweimal vorkommt.
Es triggert nur einmal, weil die 3 Events zur gleichen Zeit gesendet werden und sie nur einen Trigger darstellen. Die Gleichzeitigkeit sieht man nur, wenn "mseclog" gesetzt ist.
Wie schon gepostet, habe ich mich für die Lösung mit repeatcmd entschieden und möchte deneinzigen offenen Punkt nochmals zusammenfassen.
Ich bekomme den repeatcmd nicht automatisch nach dem Loslassen der Taste gestoppt. Dank dem Hinweis von [Ellert] habe ich das globale attr mseclog eingeschaltet und versuche jetzt hier weiterzukommen.
Beim Loslassen der Taste trudeln folgende Events ein:
2016-07-06 09:10:08.250 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 13
2016-07-06 09:10:08.250 CUL_HM virt_Akt01_Btn1 virtActTrigType: long_Release
2016-07-06 09:10:08.250 CUL_HM virt_Akt01_Btn1 TrigType: Release
Wir haben gelernt, dass es sich in Wirklichkeit um ein Event handelt. [Ellert] erwähnte, dass die Einzelteile durch Kommata getrennt sind. Demzufolge ist der Trigger "Release" an 3. Stelle. Muss darauf Rücksicht genommen werden?
Weshalb erkennt DOIF die letzte Bedingung nach dem Loslassen nicht:
([virt_Akt01_Btn1:TrigType] eq "short_ON") (set SB3.Buero on)
DOELSEIF ([virt_Akt01_Btn1:TrigType] eq "short_OFF") (set SB3.Buero off)
DOELSEIF ([virt_Akt01_Btn1:TrigType] eq "long_Down") (set SB3.Buero volumeDown)
DOELSEIF ([virt_Akt01_Btn1:TrigType] eq "long_Up") (set SB3.Buero volumeUp)
DOELSEIF ([virt_Akt01_Btn1.TrigType] eq "Release") (set SB3.Buero dummy)
Ansonsten bin ich schon zufrieden mit der Lösung. :) :) , deshalb Danke an alle Beteiligten.
Gruß Eberhard
vielleicht weil du da nen . statt nem : gemacht hast
Zitat von: FHEm2005 am 05 Juli 2016, 23:45:57
DOELSE ([virt_Akt01_Btn1:virtActTrigType] eq "long_Release")
kann ihn nicht stoppen. Er erkennt den Befehl auch nicht.
Auch die Abfrage
DOELSEIF ([virt_Akt01_Btn1:virtActTrigType] eq "long_Release") (set SB3.Buero stop)
erkennt er nicht.
Ja, Fehler meinerseits, muss DOELSEIF heissen, hast du aber schon erkannt.
Zitat von: automatisierer am 06 Juli 2016, 09:56:19
vielleicht weil du da nen . statt nem : gemacht hast
Leider nein, wenn ich das mache gibt es eine Fehlermeldung, die da lautet
di_Test DOIF: unknown expression format: "long_Release"
@Per
Das war kein Fehler nur eine gewisse Unschärfe... ;D ;D
Gruß Eberhard
Zitat von: FHEm2005 am 06 Juli 2016, 09:46:44Wir haben gelernt, dass es sich in Wirklichkeit um ein Event handelt. [Ellert] erwähnte, dass die Einzelteile durch Kommata getrennt sind. Demzufolge ist der Trigger "Release" an 3. Stelle. Muss darauf Rücksicht genommen werden?
Ja, mit =~ statt eq (damit werden auch Leerteichen u.ä. "Füllmaterial" eliminiert.
Wobei ich auch virtActTrigType statt virtActTrig abfragen würde.
Hallo Per,
esgibt nirgendwo virtActTrig ;). Entweder virtActTrigType - ein Reading welches vom virtAkt bereitgestellt wird oder TrigType - ein userReading in dem abhänging vom Zustand des Tasters die fünf verschiedenen Inhalte (short_ON, short_Off, long_ON, long_Off, Release) bereitgestellt werden.
Diese Zeile hat nicht funktioniert:
DOELSEIF ([virt_Akt01_Btn1:virtActTrigType] =~ "Release") (set SB3.Buero stop)
Hier nochmal einen Auszug aus dem Evemt-Monitor (nur der Vollständigkeit halber):
2016-07-06 13:40:12.962 CUL_HM Sw_Test_Btn_01 Long 1_46 (to virt_Akt01)
2016-07-06 13:40:13.017 DOIF di_Test cmd_event: virt_Akt01_Btn1
2016-07-06 13:40:13.033 DOIF di_Test wait_timer: 06.07.2016 13:40:14 cmd_3 virt_Akt01_Btn1
2016-07-06 13:40:13.039 CUL_HM virt_Akt01_Btn1 ON
2016-07-06 13:40:13.039 CUL_HM virt_Akt01_Btn1 virtActState: ON
2016-07-06 13:40:13.039 CUL_HM virt_Akt01_Btn1 virtActTrigNo: 46
2016-07-06 13:40:13.039 CUL_HM virt_Akt01_Btn1 virtActTrigType: long
2016-07-06 13:40:13.039 CUL_HM virt_Akt01_Btn1 TrigType: long_Down
2016-07-06 13:40:13.188 CUL_HM Sw_Test_Btn_01 Long 2_46 (to virt_Akt01)
2016-07-06 13:40:13.205 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 2
2016-07-06 13:40:13.441 CUL_HM Sw_Test_Btn_01 Long 3_46 (to virt_Akt01)
2016-07-06 13:40:13.457 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 3
2016-07-06 13:40:13.693 CUL_HM Sw_Test_Btn_01 Long 4_46 (to virt_Akt01)
2016-07-06 13:40:13.710 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 4
2016-07-06 13:40:13.945 CUL_HM Sw_Test_Btn_01 Long 5_46 (to virt_Akt01)
2016-07-06 13:40:13.962 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 5
2016-07-06 13:40:14.070 DOIF di_Test cmd_event: virt_Akt01_Btn1
2016-07-06 13:40:14.087 DOIF di_Test wait_timer: 06.07.2016 13:40:15 cmd_3 virt_Akt01_Btn1
2016-07-06 13:40:14.219 CUL_HM Sw_Test_Btn_01 Long 6_46 (to virt_Akt01)
2016-07-06 13:40:14.243 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 6
2016-07-06 13:40:14.450 CUL_HM Sw_Test_Btn_01 Long 7_46 (to virt_Akt01)
2016-07-06 13:40:14.466 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 7
2016-07-06 13:40:14.701 CUL_HM Sw_Test_Btn_01 Long 8_46 (to virt_Akt01)
2016-07-06 13:40:14.718 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 8
2016-07-06 13:40:14.955 CUL_HM Sw_Test_Btn_01 Long 9_46 (to virt_Akt01)
2016-07-06 13:40:14.972 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 9
2016-07-06 13:40:15.124 DOIF di_Test cmd_event: virt_Akt01_Btn1
2016-07-06 13:40:15.141 DOIF di_Test wait_timer: 06.07.2016 13:40:16 cmd_3 virt_Akt01_Btn1
2016-07-06 13:40:15.214 CUL_HM Sw_Test_Btn_01 Long 10_46 (to virt_Akt01)
2016-07-06 13:40:15.231 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 10
2016-07-06 13:40:15.459 CUL_HM Sw_Test_Btn_01 Long 11_46 (to virt_Akt01)
2016-07-06 13:40:15.476 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 11
2016-07-06 13:40:15.711 CUL_HM Sw_Test_Btn_01 Long 12_46 (to virt_Akt01)
2016-07-06 13:40:15.727 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 12
2016-07-06 13:40:15.967 CUL_HM Sw_Test_Btn_01 Long 13_46 (to virt_Akt01)
2016-07-06 13:40:15.984 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 13
2016-07-06 13:40:16.179 DOIF di_Test cmd_event: virt_Akt01_Btn1
2016-07-06 13:40:16.195 DOIF di_Test wait_timer: 06.07.2016 13:40:17 cmd_3 virt_Akt01_Btn1
2016-07-06 13:40:16.247 CUL_HM Sw_Test_Btn_01 Long 14_46 (to virt_Akt01)
2016-07-06 13:40:16.264 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 14
2016-07-06 13:40:16.469 CUL_HM Sw_Test_Btn_01 Long 15_46 (to virt_Akt01)
2016-07-06 13:40:16.486 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 15
2016-07-06 13:40:16.834 CUL_HM Sw_Test_Btn_01 LongRelease 16_46 (to virt_Akt01)
2016-07-06 13:40:16.853 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 16
2016-07-06 13:40:16.853 CUL_HM virt_Akt01_Btn1 virtActTrigType: long_Release
2016-07-06 13:40:17.233 DOIF di_Test cmd_event: virt_Akt01_Btn1
2016-07-06 13:40:17.249 DOIF di_Test wait_timer: 06.07.2016 13:40:18 cmd_3 virt_Akt01_Btn1
2016-07-06 13:40:18.287 DOIF di_Test cmd_event: virt_Akt01_Btn1
2016-07-06 13:40:18.304 DOIF di_Test wait_timer: 06.07.2016 13:40:19 cmd_3 virt_Akt01_Btn1
2016-07-06 13:40:19.361 DOIF di_Test cmd_event: virt_Akt01_Btn1
2016-07-06 13:40:19.377 DOIF di_Test wait_timer: 06.07.2016 13:40:20 cmd_3 virt_Akt01_Btn1
2016-07-06 13:40:20.415 DOIF di_Test cmd_event: virt_Akt01_Btn1
2016-07-06 13:40:20.431 DOIF di_Test wait_timer: 06.07.2016 13:40:21 cmd_3 virt_Akt01_Btn1
2016-07-06 13:40:21.469 DOIF di_Test cmd_event: virt_Akt01_Btn1
2016-07-06 13:40:21.486 DOIF di_Test wait_timer: 06.07.2016 13:40:22 cmd_3 virt_Akt01_Btn1
2016-07-06 13:40:22.524 DOIF di_Test cmd_event: virt_Akt01_Btn1
2016-07-06 13:40:22.541 DOIF di_Test wait_timer: 06.07.2016 13:40:23 cmd_3 virt_Akt01_Btn1
2016-07-06 13:40:23.579 DOIF di_Test cmd_event: virt_Akt01_Btn1
2016-07-06 13:40:23.596 DOIF di_Test wait_timer: 06.07.2016 13:40:24 cmd_3 virt_Akt01_Btn1
2016-07-06 13:40:23.761 CUL_HM Sw_Test_Btn_01 Short (to virt_Akt01)
2016-07-06 13:40:23.831 DOIF di_Test cmd_event: virt_Akt01_Btn1
2016-07-06 13:40:23.838 CUL_HM virt_Akt01_Btn1 OFF
2016-07-06 13:40:23.838 CUL_HM virt_Akt01_Btn1 virtActState: OFF
2016-07-06 13:40:23.838 CUL_HM virt_Akt01_Btn1 virtActTrigNo: 47
2016-07-06 13:40:23.838 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 1
2016-07-06 13:40:23.838 CUL_HM virt_Akt01_Btn1 virtActTrigType: short_Release
2016-07-06 13:40:23.838 CUL_HM virt_Akt01_Btn1 TrigType: short_OFF
Ich versuche mal das Listing zu interpretieren. Wenn ich irgendwo falsch liege bitte dazwischengrätschen.
2016-07-06 13:40:12.962 CUL_HM Sw_Test_Btn_01 Long 1_46 (to virt_Akt01) Der Trigger vom Taster wird an den virt. Aktor01 gesendet.
2016-07-06 13:40:13.033 DOIF di_Test wait_timer: 06.07.2016 13:40:14 cmd_3 virt_Akt01_Btn1 Ab jetzt wird cmd_3 im Sekundenabstand wiederholt.
2016-07-06 13:40:13.039 das Event vom Aktor mit u.a. TrigType_long_Down trifft ein 6 ms vorher wird das erste Mal cmd_3 ausgelöst. Ich vermute das hängt mit der internen Verarbeitung zusammen.
Jetzt folgen diverse cmd_3 und virtActTrigRpt
2016-07-06 13:40:16.853 CUL_HM virt_Akt01_Btn1 virtActTrigRpt: 16
2016-07-06 13:40:16.853 CUL_HM virt_Akt01_Btn1 virtActTrigType: long_Release Bei der 16. Wiederholung des Tasters trifft long_Release ein.
2016-07-06 13:40:17.249 DOIF di_Test wait_timer: 06.07.2016 13:40:18 cmd_3 virt_Akt01_Btn1
2016-07-06 13:40:18.287 DOIF di_Test cmd_event: virt_Akt01_Btn1 DOIF feuert munter im Sekundentakt das cmd_3 raus, weil er das Event long_Release nicht gesehen bzw. ausgewertet hat.
;) ;)2016-07-06 14:22:16.853 Der Threadschreiber bricht in Tränen aus, weil er den Fehler nicht findet. ;) ;) ;)
Gruß Eberhard
Wie sieht Dein aktuelles DOIF aus? Mach mal ein Listing des DOIF und poste es.
So Leute, bitte anschnallen:
Ich habe die problematische Zeile, die an 5. Stelle war, mal spaßeshalber als Zeile zwei eingetragen. Was ist die Folge?
Es geht!!!!
Aber warum? Erklärungsversuch: Die DOIF- Bedingugskette wird solange durchlaufen, bis eine Bedingung erkannt wird. Wird eine Bedungung erkannt, wird der Rest der Bedingungskette nicht mehr abgearbeitet. Da bei langem Tastendruck auch bei der letzten Wiederholung noch auf long_Down oder long_Up erfolgreich getriggert wurde, ist die letzte Bedingung nie abgefragt worden..
Ob die Release-Bedingung an erster, zweiter oder dritter steht, ist völlig egal. Wichtig ist, dass sie vor den Abfragen zu long_Down und long_Up positioniert ist.
Bin ich froh das Thema vom Tisch zu haben, ich hätte sonst morgen nicht in Ruhe Fußball gucken können. Allen Beteiligten meinen uneingeschränkten Dank für eure Geduld und eurem Willen mir zu helfen.
Herzlichste Grüße Eberhard (bis zum nächsten Problem ;))
Gruß Eberhard