Shelly i3: "Longpress" mit DOIF auswerten

Begonnen von tplus, 12 Juni 2021, 13:11:05

Vorheriges Thema - Nächstes Thema

tplus

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...

kabanett

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ß
Hardware: Fhem auf Raspi3 / selbtsbau CUL 433 und 868 MHz / MAX Thermostate / IT-Dosen nur noch Weihnachten / diverse ESP Aktoren/Sensoren / X10 Fernbedienung / Shelly 1, 1L, 2, 2.5, Dimmer, RGB2 / LaCrosseGateway / Zigbee2531 / diverse Zigbee Aktoren/Sensoren

tplus

#2
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).

kabanett

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 ;)

Hardware: Fhem auf Raspi3 / selbtsbau CUL 433 und 868 MHz / MAX Thermostate / IT-Dosen nur noch Weihnachten / diverse ESP Aktoren/Sensoren / X10 Fernbedienung / Shelly 1, 1L, 2, 2.5, Dimmer, RGB2 / LaCrosseGateway / Zigbee2531 / diverse Zigbee Aktoren/Sensoren

tplus

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?

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

kabanett

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?
Hardware: Fhem auf Raspi3 / selbtsbau CUL 433 und 868 MHz / MAX Thermostate / IT-Dosen nur noch Weihnachten / diverse ESP Aktoren/Sensoren / X10 Fernbedienung / Shelly 1, 1L, 2, 2.5, Dimmer, RGB2 / LaCrosseGateway / Zigbee2531 / diverse Zigbee Aktoren/Sensoren

tplus

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.