wie im DoIf einen EVENT-Teil extrahieren wenn $EVTPART nicht geht

Begonnen von dirk_69, 17 Oktober 2025, 18:39:55

Vorheriges Thema - Nächstes Thema

dirk_69

Hallo zusammen,
Ich habe ein Problem damit, dass DoIf das EVTPARTx nicht kennt/verwendet.
Dass es so ist, ist doch noch immer so?

Ich möchte innerhalb eines DoIf als Kommando einen Wert aus dem EVENT als Attribut setzen lassen.
Hier das EVENT:
2025-10-17 18:28:36 MQTT2_DEVICE MQTT2_new_Tasmota_Refoss_POW10 set_on-for-timer 44
(Es soll dabei ein Count-Down-Timer für ein "on-for-timer" erstellt werden, der die Restlaufzeit des "on-for-timer" enthält)
Mit festen Werten funktioniert das ganze bereits ...
defmod DI_TEST_OnFor DOIF ([".*:set_on-for-timer.3600$"])\
  (defmod watches_$DEVICE watches Digital)\
  (set watches_$DEVICE countDownInit 3600)\

Aber ich habe alle möglichen Werte ausser "3600" und kann nicht alles in einzelne DoIf's bauen.
Daher versuche ich den Wert aus dem EVENT zu verwenden...
z.B.
defmod DI_TEST_OnFor DOIF ([".*:set_on-for-timer"])\
 (attr watches_$DEVICE comment $EVTPART0 $EVTPART1 $EVENT {($EVENT=~ m/(.*):(.*)/;; "$1 $2")} )
 (set watches_$DEVICE countDownInit $EVENTPART0)

Die Werteübergabe im comment soll zeigen, was übergeben wird.
Resultat: comment = $EVTPART0 $EVTPART1 set_on-for-timer 44

Ich habe auch versucht, verschiedene Varianten der Werte-Extraktion, die ich hier im Forum gefunden habe, einzusetzen
z.B. {($EVENT=~ m/(.*):(.*)/;; "$1 $2")}
https://forum.fhem.de/index.php?topic=63634.0

Allerdings scheitere ich an der Einbindung.
Kann mir jemand einen Tipp geben, wie ich den Wert aus dem Event übergeben bekomme?
Ich komme hier mit den gefundenen Infos aus dem Forum einfach nicht weiter.

Vielen Dank schon mal an alle, die bis hier gelesen haben ;-)

Damian

Für sowas gibt es eigene Syntax:

ZitatAllgemeine Ereignistrigger können ebenfalls so definiert werden, dass sie nicht nur wahr zum Triggerzeitpunkt und sonst nicht wahr sind, sondern Inhalte des Ereignisses zurückliefern. Initiiert wird dieses Verhalten durch die Angabe eines Default-Wertes.

Syntax:

["regex for trigger",<default value>]

Anwendungsbeispiel:

define di_warning DOIF ([":^temperature",0] < 0) (set pushmsg danger of frost $DEVICE)
attr di_warning do always

hier z. B. attr watches_$DEVICE comment [".*:set_on-for-timer",0]

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF