[Gelöst] Wiederholte Befehlssequenzen von Taster über DOIF

Begonnen von FHEm2005, 05 Juli 2016, 13:59:08

Vorheriges Thema - Nächstes Thema

FHEm2005

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
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM, BSB-LAN

automatisierer

vielleicht weil du da nen . statt nem : gemacht hast

Per

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.

FHEm2005

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
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM, BSB-LAN

Per

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.

FHEm2005

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
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM, BSB-LAN

Ellert

Wie sieht Dein aktuelles DOIF aus? Mach mal ein Listing des DOIF und poste es.

FHEm2005

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
Raspi3: FHEM, CULV3 (V1.61), EnOcean Pi 868, nanoCUL433, HUE-Bridge; Raspi4: Node-red, MQTT, Gaszähler auslesen mit ESP32-CAM, BSB-LAN