Hallo,
DOIF soll nach einem "Longpress" eines i3 Kanals (über MQTT) eine Aktion ausführen. Leider funktioniert das bei mir nicht, da anscheinend der gemeldete Event von DOIF nur selten aktualisiert wird.
Internals:
CFGFN
DEF ([shellyix3.test:2_event] eq "L")(set testschalter on) DOELSE (set testschalter off)
FUUID 60c4833b-f33f-96e9-1959-4bcc0d550542f178
MODEL FHEM
NAME testdoif_i3
NOTIFYDEV global,shellyix3.test
NR 632
NTFY_ORDER 50-testschalteri3
STATE cmd_1
TYPE DOIF
VERSION 24100 2021-03-27 20:15:23
READINGS:
2021-06-12 13:04:42 Device shellyix3.test
2021-06-12 13:04:42 cmd 1
2021-06-12 13:04:42 cmd_event shellyix3.test
2021-06-12 13:04:42 cmd_nr 1
2021-06-12 13:04:42 e_shellyix3.test_2_event L
2021-06-12 12:09:20 mode enabled
2021-06-12 13:04:42 state cmd_1
Regex:
accu:
cond:
shellyix3.test:
0:
2_event ^shellyix3.test$:^2_event:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'shellyix3.test','2_event') eq "L"
do:
0:
0 set testschalter on
1:
0 set testschalter off
helper:
DEVFILTER ^global$|^shellyix3.test$
NOTIFYDEV global|shellyix3.test
event 2_event: L,2_event_cnt: 100
globalinit 1
last_timer 0
sleeptimer -1
timerdev shellyix3.test
timerevent 2_event: L,2_event_cnt: 100
triggerDev shellyix3.test
DOIF_eventa:
cmd_nr: 1
cmd: 1
cmd_event: shellyix3.test
cmd_1
DOIF_eventas:
cmd_nr: 1
cmd: 1
cmd_event: shellyix3.test
state: cmd_1
timerevents:
2_event: L
2_event_cnt: 100
timereventsState:
2_event: L
2_event_cnt: 100
triggerEvents:
2_event: L
2_event_cnt: 100
triggerEventsState:
2_event: L
2_event_cnt: 100
internals:
readings:
all shellyix3.test:2_event
trigger:
uiState:
uiTable:
Attributes:
do always
room test
Wie kann ich erreichen, dass der Event "e_shellyix3.test_2_event" bei jeder Tasterbetätigung aktualisiert wird? Oder gibt es einen schlaueren Befehl?
Besten Dank für Tips...
Hallo
Ich gehe davon aus, dass sich der Zusatand nicht ändert.
Also würde es Sinn ergeben das Event zu benutzen.
Statt([shellyix3.test:2_event] eq "L")(set testschalter on) DOELSE (set testschalter off)
So([shellyix3.test:2_event:"^L$"])(set testschalter on) DOELSE (set testschalter off)
Probier es mal aus.
Gruß
Danke, aber der Zustand ändert sich tatsächlich. Wenn ich alle paar Sekunden abwechselnd kurz ("S") oder lang ("L") drücke, ändert sich zwar das cmd reading sofort, aber der L/S event nur selten obwohl dieser im Event Monitor immer auftaucht:
2021-06-12 14:01:15 MQTT2_DEVICE shellyix3.test input_2: 0
2021-06-12 14:01:17 dummy testschalter on
2021-06-12 14:01:17 DOIF testdoif_i3 cmd_nr: 1
2021-06-12 14:01:17 DOIF testdoif_i3 cmd: 1
2021-06-12 14:01:17 DOIF testdoif_i3 cmd_event: shellyix3.test
2021-06-12 14:01:17 DOIF testdoif_i3 cmd_1
2021-06-12 14:01:17 MQTT2_DEVICE shellyix3.test 2_event: L
2021-06-12 14:01:17 MQTT2_DEVICE shellyix3.test 2_event_cnt: 124
2021-06-12 14:01:20 MQTT2_DEVICE shellyix3.test input_2: 1
2021-06-12 14:01:20 dummy testschalter off
2021-06-12 14:01:20 DOIF testdoif_i3 cmd_nr: 2
2021-06-12 14:01:20 DOIF testdoif_i3 cmd: 2
2021-06-12 14:01:20 DOIF testdoif_i3 cmd_event: shellyix3.test
2021-06-12 14:01:20 DOIF testdoif_i3 cmd_2
2021-06-12 14:01:20 MQTT2_DEVICE shellyix3.test 2_event: S
2021-06-12 14:01:20 MQTT2_DEVICE shellyix3.test 2_event_cnt: 125
Der event taucht übrigens einige Minuten später mit der korrekten Uhrzeit auf.
Bei Deinem Vorschlag bekomme ich übrigens einen Syntax-Fehler (runde Klammer fehlt).
Zitat von: tplus am 12 Juni 2021, 14:02:33
obwohl dieser im Event Monitor immer auftaucht:
Dann benutz doch den Event Monitor!
Ganze Zeile des Events markieren.
Greate/Modify Device auswählen.
Greate DOIF auswählen.
with exactly this event!
Im Vorschlag unten dein Event kopieren und in deinem DOIF einfügen ;)
Ist doch, es ist genau der Event. Nur DOIF bekommt zu spät davon etwas mit.
Eigentlich eine prinzipielle Frage: Auch bei anderen Geräten wird der Status einiger Events "live" aktualisiert, andere seltener. Wie ist das festgelegt?
Zitat von: tplus am 12 Juni 2021, 15:08:13
Ist doch, es ist genau der Event. Nur DOIF bekommt zu spät davon etwas mit.
Was heißt: zu spät?
Der Shelly wird halt "eine Weile" brauchen, bis er zwischen kurz gedrückt oder doch eher lang gedrückt unterscheiden kann.
Kann man das nicht sogar im Shelly konfigurieren?
Erst DANACH kann doch der Shelly die Info senden?
Zitat von: tplus am 12 Juni 2021, 15:08:13
Eigentlich eine prinzipielle Frage: Auch bei anderen Geräten wird der Status einiger Events "live" aktualisiert, andere seltener. Wie ist das festgelegt?
Es gibt da nichts "generelles"...
...außer:
zunächst mal muss nat. das physische Gerät etwas senden.
Oft kann man dort Thresholds oder Intervalle einstellen...
...manchmal auch nicht: Homematic Thermostate etc.
Dann kann nat. der Transportweg bzw. "Zwischenstationen" (Gateways) etwas "verzögern"/"sammeln" etc.
Dann kann nat. auch das fhem Modul etwas "verzögern"/"sammeln"...
Ist aber eher unüblich.
D.h. sobald fhem etwas empfängt wird ein Event erzeugt etc.
AUSSER: event-on-change etc. ist gesetzt, dann u.U. auch nicht ;)
Gruß, Joachim
Zitat von: tplus am 12 Juni 2021, 15:08:13
Ist doch, es ist genau der Event.
Das ist kein Event- Abfrage!
([shellyix3.test:2_event] eq "L")
Hast du den Event- Monitor benutzt? Fhem Oberfläche, links, gaaanz unten? Dann so wie von mir beschrieben?
Wie gesagt, bei Deinem Vorschlag bekomme ich eine Syntax Fehlermeldung (fehlende runde Klammern).
Das reading wird anscheinend korrekt erkannt denn es taucht auch in der Liste auf. Nur: Das Update in DOIF erfolgt halt nicht zum Zeitpunkt des Ereignisses sondern einige Minuten später. Zur Veranschaulichung beiliegend zwei Screenshots.
1) Um 10:10:45 Uhr habe ich "S" gedrückt, vorher (gestern, 14:20) war zuletzt "L". CMD wird sofort aktualisiert (rot) aber nicht der 2_event
2) Um 10:18 ist auch 2_event aktualisiert, Uhrzeit korrekt mit 10:10:45
Wenn auch 2_event zum Zeitpunkt des Ereignisses aktualisiert werden würde, dann würde er wohl auch schalten, vermute ich.