DOIF neue Features: Generalisierung, $DEVICE, $EVENT, Attribut notexist

Begonnen von Damian, 28 Dezember 2015, 22:06:42

Vorheriges Thema - Nächstes Thema

Freibeuter

Hallo,
warum wird mir hier für $DEVICE nichts ausgegeben ?
defmod di_Luftbefeuchter_Wasser DOIF ( ["^Luftbe:water"] ne "ok") ({prowl("Wassertank leer","Geraet:-> $DEVICE <-","1","T")})\
DOELSEIF ( ["^Luftbe:tank"] ne "installed") ({{ prowl("Wassertank fehlt","Geraet:-> $DEVICE <-","1","T")}})
attr di_Luftbefeuchter_Wasser do always


DOIF funktioniert, nur es wird kein Devicenamen übermittelt .
Vielen Dank für Eure Hife

Nighthawk

#196
Hallo zusammen,

ich habe Homematic Lichtschalter mit einer custom Firmware.

Internals:
   DEF        4594A304
   FUUID      5cb57029-f33f-357a-1f25-094fdc9b79ade7bf
   NAME       Lichtschalter_EG_Galerie
   NOTIFYDEV  global
   NR         1100
   NTFY_ORDER 50-Lichtschalter_EG_Galerie
   STATE      <div><img src="/fhem/images/default/li_wht_off.png">&nbsp;&nbsp; current:1</div>
   TYPE       CUL_HM
   chanNo     04
   device     Dev_Lichtschalter_Galerie
   peerList   self01,self02
   Helper:
     DBLOG:
       current:
         logdb:
           TIME       1611296831.68698
           VALUE      1
       deviceMsg:
         logdb:
           TIME       1611296040.29848
           VALUE      off (to VCCU)
       level:
         logdb:
           TIME       1611296040.29848
           VALUE      0
       pct:
         logdb:
           TIME       1611296040.29848
           VALUE      0
       state:
         logdb:
           TIME       1611296040.29848
           VALUE      off
       timedOn:
         logdb:
           TIME       1611296040.29848
           VALUE      off
       trigLast:
         logdb:
           TIME       1611295448.71501
           VALUE      fhem:02
   READINGS:
     2021-01-22 07:04:08   CommandAccepted
     2020-10-12 10:15:51   cfgState        ok
     2021-01-22 07:27:11   current         1
     2021-01-22 07:14:00   deviceMsg       off (to VCCU)
     2021-01-22 07:14:00   level           0 %
     2021-01-22 07:14:00   pct             0
     2021-01-22 05:18:29   peerList        self01,self02
     2021-01-22 07:14:00   recentStateType info
     2021-01-22 07:14:00   state           off
     2021-01-22 07:14:00   timedOn         off
     2021-01-22 07:04:08   trigLast        fhem:02
     2020-08-05 13:20:36   trig_Lichtschalter_Galerie_SchalterO Short_0
     2021-01-01 18:47:22   trig_Lichtschalter_Galerie_SchalterU Short_0
   helper:
     dlvl       00
     dlvlCmd    ++A0112302794594A30204000000
     peerFriend peerSens,peerVirt
     peerIDsState complete
     peerOpt    3:remoteAndSwitch
     regLst     1,3p
     cmds:
       TmplKey    self01,self02:no:1611289109.92466
       TmplTs     1611289109.92466
       cmdKey     1:0:0::Dev_Lichtschalter_Galerie:F0A9:04:self01,self02
       cmdLst:
         clear      [(readings|trigger|register|oldRegs|rssi|msgEvents|{msgErrors}|attack|all)]
         eventL     -peer- -cond-
         eventS     -peer- -cond-
         getConfig  noArg
         getRegRaw  (List0|List1|List2|List3|List4|List5|List6) [-peerChn-]
         inhibit    [(on|{off})]
         off        noArg
         on         noArg
         on-for-timer -ontime-
         on-till    -time-
         peerBulk   -peer1,peer2,...- [({set}|unset)]
         peerIODev  [IO] -btn- [({set}|unset)] 'not for future use'
         peerSmart  -peerOpt-
         press      [(long|{short})] [(-peer-|{self04})] [(-repCount-|{0})] [(-repDelay-|{0.25})]
         pressL     [(-peer-|{self04})]
         pressS     [(-peer-|{self04})]
         regBulk    -list-.-peerChn- -addr1:data1- -addr2:data2-...
         regSet     [(prep|{exec})] -regName- -value- [-peerChn-]
         sign       [(on|{off})]
         statusRequest noArg
         toggle     noArg
         tplDel     -tplDel-
         tplSet_0   -tplChan-
         tplSet_self01 -tplPeer-
         tplSet_self02 -tplPeer-
       lst:
         condition  slider,0,1,255
         peer       Names,Lichtschalter_EG_Galerie
         peerOpt    Bewegungsmelder_Eingang,Bewegungsmelder_Terasse,Bewegungsmelder_Terasse_kl,Dev_Garage_Zustand_Tr,FB_Bewaesserung_Garten_AUS,FB_Bewaesserung_Garten_EIN,FB_Bewaesserung_Vorgarten_AUS,FB_Bewaesserung_Vorgarten_EIN,Fenster_Ankleide,Fenster_Arbeitszimmer_gr,Fenster_Bad_oben,Fenster_Bad_unten,Fenster_Kueche,Fenster_Terasse_gr,Fenster_Terasse_kl,HM_51B37E_Btn_01,HM_51B37E_Btn_02,Haustuer,Lichtschalter2_KZ1_1,Lichtschalter2_KZ1_2,Lichtschalter2_KZ2_1,Lichtschalter2_KZ2_2,Lichtschalter_EZ_SchalterO,Lichtschalter_EZ_SchalterU,Lichtschalter_Galerie_SchalterO,Lichtschalter_Galerie_SchalterU,Lichtschalter_Kueche_SchalterO,Lichtschalter_Kueche_SchalterU,Multischalter_EG_Btn_01,Multischalter_EG_Btn_02,Multischalter_EG_Btn_03,Multischalter_EG_Btn_04,Multischalter_EG_Btn_05,Multischalter_EG_Btn_06,Multischalter_EG_Btn_07,Multischalter_EG_Btn_08,Multischalter_EG_Btn_09,Multischalter_EG_Btn_10,Multischalter_EG_Btn_11,Multischalter_EG_Btn_12,Multischalter_EG_Btn_13,Multischalter_EG_Btn_14,Multischalter_EG_Btn_15,Multischalter_EG_Btn_16,Multischalter_EG_Btn_17,Multischalter_EG_Btn_18,Multischalter_EG_Btn_19,Multischalter_EG_Btn_20,Steckdose_TV_SenF,Steckdose_TV_SenI,Steckdose_TV_SenPwr,Steckdose_TV_SenU,VCCU_Btn1,VCCU_Btn2,VCCU_Btn3,VCCU_Btn4,VCCU_Btn5,Zwischensteckdose_PC_SenF,Zwischensteckdose_PC_SenI,Zwischensteckdose_PC_SenPwr,Zwischensteckdose_PC_SenU
         tplChan   
         tplDel     
         tplPeer    SwCondAbove_long,SwOnCond_short,SwOff_short,SwOff_long,SwCondBelow_long,autoOff_long,SwToggle_long,SwOn_short,SwOn_long,SwOnCond_long,SwCondAbove_short,SwToggle_short,SwCondBelow_short,motionOnSw_long,autoOff_short,motionOnSw_short
       rtrvLst:
         cmdList    [({short}|long)]
         deviceInfo [({short}|long)]
         list       [({normal}|full)]
         param      -param-
         reg        -addr- -list- [-peerChn-]
         regList    noArg
         regTable   noArg
         regVal     -addr- -list- [-peerChn-]
         saveConfig [-filename-]
         tplInfo    noArg
     expert:
       def        1
       det        1
       raw        0
       tpl        0
     peerIDsH:
       00000000   broadcast
       4594A301   self01
       4594A302   self02
     role:
       chn        1
     tmpl:
Attributes:
   expert     defReg,allReg
   group      Licht
   model      HM-LC-Sw1PBU-FM-CustomFW
   peerIDs    00000000,4594A301,4594A302
   room       04_Licht
   sortby     12
   stateFormat {
  my $state = ReadingsVal($name, "state", "off");
  return '<div><img src="/fhem/images/default/li_wht_on.png">'.sprintf("&nbsp;&nbsp; current:%.0f", ReadingsVal($name,"current",0)).'</div>' if($state eq "on");
  return '<div><img src="/fhem/images/default/li_wht_off.png">'.sprintf("&nbsp;&nbsp; current:%.0f", ReadingsVal($name,"current",0)).'</div>' if($state eq "off");
}
   webCmd     statusRequest:toggle:on:off


Dieser neigt sporadisch dazu den state nicht korrekt darzustellen.
Im device gibt es ein reading "current" dieses wird zyklisch ausgegeben und erzeugt auch Events:

2021-01-22 07:08:26 CUL_HM Lichtschalter_EG_Galerie on
2021-01-22 07:08:26 CUL_HM Lichtschalter_EG_Galerie timedOn: off
2021-01-22 07:08:31 CUL_HM Lichtschalter_EG_Galerie deviceMsg: off (to VCCU)
2021-01-22 07:08:31 CUL_HM Lichtschalter_EG_Galerie level: 0 %
2021-01-22 07:08:31 CUL_HM Lichtschalter_EG_Galerie pct: 0
2021-01-22 07:08:31 CUL_HM Lichtschalter_EG_Galerie off
2021-01-22 07:08:31 CUL_HM Lichtschalter_EG_Galerie timedOn: off
2021-01-22 07:08:39 CUL_HM Lichtschalter_EG_Galerie current: 100
2021-01-22 07:08:58 CUL_HM Lichtschalter_EG_Galerie current: 298
2021-01-22 07:09:17 CUL_HM Lichtschalter_EG_Galerie current: 310
2021-01-22 07:09:36 CUL_HM Lichtschalter_EG_Galerie current: 309
2021-01-22 07:09:55 CUL_HM Lichtschalter_EG_Galerie current: 310
2021-01-22 07:10:13 CUL_HM Lichtschalter_EG_Galerie current: 309
2021-01-22 07:10:32 CUL_HM Lichtschalter_EG_Galerie current: 310
2021-01-22 07:10:51 CUL_HM Lichtschalter_EG_Galerie current: 310
2021-01-22 07:11:10 CUL_HM Lichtschalter_EG_Galerie current: 310
2021-01-22 07:11:29 CUL_HM Lichtschalter_EG_Galerie current: 311
2021-01-22 07:11:48 CUL_HM Lichtschalter_EG_Galerie current: 311
2021-01-22 07:12:07 CUL_HM Lichtschalter_EG_Galerie current: 311
2021-01-22 07:12:25 CUL_HM Lichtschalter_EG_Galerie current: 311
2021-01-22 07:12:44 CUL_HM Lichtschalter_EG_Galerie current: 312
2021-01-22 07:13:04 CUL_HM Lichtschalter_EG_Galerie current: 312
2021-01-22 07:13:22 CUL_HM Lichtschalter_EG_Galerie current: 311


Nun dachte ich, es kann ja kein Hexenwerk mit den Daten und einem DOIF den state zu korrigieren, gesagt getan:

Internals:
   DEF        (["^Lichtschalter_EG:current"] < 50 and [?$DEVICE:state] eq "on")
(set $DEVICE off)
DOELSEIF
(["^Lichtschalter_EG:current"] > 100 and [?$DEVICE:state] eq "off")
(set $DEVICE on)
   FUUID      5cb57024-f33f-357a-d9c0-fc7201f8de05324b
   MODEL      FHEM
   NAME       di.Lichtschalter_EG_Zustandskorrektur
   NOTIFYDEV  Lichtschalter_EG.*,global
   NR         100
   NTFY_ORDER 50-disabl.di.Lichtschalter_EZ_Zustandskorrektur
   STATE      initialized
   TYPE       DOIF
   VERSION    23466 2021-01-03 17:14:46
   READINGS:
     2021-01-22 07:13:04   Device          Lichtschalter_EG_Galerie
     2021-01-22 07:12:19   cmd             0
     2021-01-22 07:12:19   mode            enabled
     2021-01-22 07:12:19   state           initialized
   Regex:
     accu:
     cond:
       :
         0:
           "^Lichtschalter_EG:current" ^Lichtschalter_EG:current
         1:
           "^Lichtschalter_EG:current" ^Lichtschalter_EG:current
   attr:
     cmdState:
     wait:
       0:
         30
       1:
         30
     waitdel:
   condition:
     0          ::EventDoIf('^Lichtschalter_EG',$hash,'current',0) < 50 and ::ReadingValDoIf($hash,'$DEVICE','state') eq "on"
     1          ::EventDoIf('^Lichtschalter_EG',$hash,'current',0) > 100 and ::ReadingValDoIf($hash,'$DEVICE','state') eq "off"
   do:
     0:
       0          set $DEVICE off
     1:
       0          set $DEVICE on
     2:
   helper:
     DEVFILTER  ^global$|^Lichtschalter_EG
     NOTIFYDEV  global|Lichtschalter_EG.*
     event      current: 312
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev Lichtschalter_EG_Galerie
     triggerEvents:
       current: 312
     triggerEventsState:
       current: 312
   internals:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   disable    0
   do         always
   group      Licht_Automatisierung
   icon       helper_doif
   room       04_Licht
   sortby     64
   verbose    5
   wait       30:30


leider funktioniert es nicht so wie ich mir vorstelle, siehe Eventmonitor log, der state ist off, current ist >> 100 und das DOIF tut nichts.

cmd1 scheint halbwegs zu funktionieren, cmd2 bekomme ich einfach nicht aktiviert


Ich komme hier leider nicht weiter und hoffe hier Hilfe zu finden.

Gruß
Alex

Sany

Hallo,

ich verstehe das so: dein Trigger ["^Lichtschalter_EG:current"] < 50 macht nicht das, was Du willst. Du triggerst nur auf den Event "current", der Vergleich findet nicht statt. Genauer: der Teil in eckigen Klammern liefert nur wahr zum Zeitpunkt, wenn er eintritt: alle Devices die mit Lichtschalter_EG beginnen und current im Reading vorkommt. Entweder Du triggerst auf den Zustand:

[Lichtschalter_EG:current] < 50

oder Du must den Event-Trigger anders schreiben:

aus der cref:
Allgemeine 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

Viel Erfolg!
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Speedy


Hallo auch von mir,


ich weiß, das ist schon ein älterer Fred, allerdings passt es genau hierher und meine Frage ist identisch wie diese:

Zitat von: Freibeuter am 18 Januar 2021, 15:01:55
Hallo,
warum wird mir hier für $DEVICE nichts ausgegeben ?
defmod di_Luftbefeuchter_Wasser DOIF ( ["^Luftbe:water"] ne "ok") ({prowl("Wassertank leer","Geraet:-> $DEVICE <-","1","T")})\
DOELSEIF ( ["^Luftbe:tank"] ne "installed") ({{ prowl("Wassertank fehlt","Geraet:-> $DEVICE <-","1","T")}})
attr di_Luftbefeuchter_Wasser do always


DOIF funktioniert, nur es wird kein Devicenamen übermittelt .
Vielen Dank für Eure Hife


und leider gab es hierzu keine Antwort. Ich meine das hat mal funktioniert...

Verallgemeinert: für DOIF, sollte $DEVICE den Namen des auslösenden Gerätes zurückliefern?
Und $EVENT, bzw. $EVENTS die dazugehörigen Ereignisse?


Danke und VG - Speedy
FHEM auf Intel NUC mit Proxmox, Grafana, DbLog mit MariaDB, ZWave-/EnOcean-/HomeMatic-USB-Dongle, KNX IP-Bridge, HUE Bridge, Sonos, Avanta Gastherme, Presence via Unifi, Rolladensteuerung, Raumtemperatur-/Fussbodenheizung-Steuerung

Damian

Zitat von: Speedy am 26 Oktober 2022, 14:42:15
Hallo auch von mir,


ich weiß, das ist schon ein älterer Fred, allerdings passt es genau hierher und meine Frage ist identisch wie diese:


und leider gab es hierzu keine Antwort. Ich meine das hat mal funktioniert...

Verallgemeinert: für DOIF, sollte $DEVICE den Namen des auslösenden Gerätes zurückliefern?
Und $EVENT, bzw. $EVENTS die dazugehörigen Ereignisse?


Danke und VG - Speedy

$DEVICE, $EVENT bzw. $EVENTS ist im FHEM-Modus ein Platzhalter und wird beim Trigger eines Devices entsprechend ersetzt.

Im Perl-Modus gibt zusätzlich auch die Perlvariable $device, $event bzw. $events.

Bei Zeittriggern werden diese natürlich nicht belegt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Speedy

Hallo Damian,


das ist bekannt und wird von mir - und offensichtlich auch vom initialen Fragensteller - genauso eingesetzt. Leider werden im FHEM-Modus diese Platzhalter bei mir nicht mehr richtig belegt. Ich versuche morgen/übermorgen ein Beispiel zu bauen und das hier zu posten.


Vielen Dank für die schnelle Antwort!
FHEM auf Intel NUC mit Proxmox, Grafana, DbLog mit MariaDB, ZWave-/EnOcean-/HomeMatic-USB-Dongle, KNX IP-Bridge, HUE Bridge, Sonos, Avanta Gastherme, Presence via Unifi, Rolladensteuerung, Raumtemperatur-/Fussbodenheizung-Steuerung

Damian

Zitat von: Speedy am 26 Oktober 2022, 18:57:15
Hallo Damian,


das ist bekannt und wird von mir - und offensichtlich auch vom initialen Fragensteller - genauso eingesetzt. Leider werden im FHEM-Modus diese Platzhalter bei mir nicht mehr richtig belegt. Ich versuche morgen/übermorgen ein Beispiel zu bauen und das hier zu posten.


Vielen Dank für die schnelle Antwort!

Dann warte ich auf das Beispiel, welches nicht funktioniert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Speedy

Sorry, war leider etwas ausser Gefecht.

Beim Erstellen des Beispiels auf meinem Test-FHEM konnte ich den Fehler replizieren, allerdings ist auch klar geworden, dass die Befüllung der Platzhalter $DEVICE, $EVENT bzw. $EVENTS weiterhin funktioniert!


Es lag an den doppelten eckigen Klammern, die ich seit Jahr und Tag zur besseren Lesbarkeit um die Platzhalter setze. Nehme ich diese weg, klappt es auch wieder. Allerdings ist es tatsächlich so, daß sich hier irgendetwas geändert hat, denn das hat nachweislich vorher lange Zeit funktioniert. Nun ja - es gibt einen Workaround mit den Leerzeichen, den ich nun eben nutzen werde.

Als Beispiel ein DOIF "di" das durch ein anderes Device getriggert, ein eigenes Reading setzt:


Internals:
   CFGFN     
   DEF        ##
(["^Luftbe:water"] ne "ok") (
setreading $SELF UR_device_bislang_doppelt "triggered: [[$DEVICE]] ",
setreading $SELF UR_device_ohne "triggered: $DEVICE",
setreading $SELF UR_device_einfach "triggered: [$DEVICE]",
setreading $SELF UR_device_einfach_Abstand "triggered: [ $DEVICE ]"
)


DOELSE
   FUUID      635a2919-f33f-b86d-7b88-58d2af51c69b5502
   MODEL      FHEM
   NAME       di
   NOTIFYDEV  global,.*(^Luftbe).*
   NR         58
   NTFY_ORDER 50-di
   STATE      cmd_1
   TYPE       DOIF
   VERSION    26444 2022-09-25 16:29:19
   eventCount 94
   OLDREADINGS:
   READINGS:
     2022-11-06 15:26:28   Device          Luftbefeuchter
     2022-11-06 15:26:28   UR_device_bislang_doppelt "triggered: [???] "
     2022-11-06 15:26:28   UR_device_einfach "triggered: ???"
     2022-11-06 15:26:28   UR_device_einfach_Abstand "triggered: [ Luftbefeuchter ]"
     2022-11-06 15:26:28   UR_device_ohne  "triggered: Luftbefeuchter"
     2022-11-06 15:26:28   cmd             1
     2022-11-06 15:26:28   cmd_event       Luftbefeuchter
     2022-11-06 15:26:28   cmd_nr          1
     2022-11-06 15:25:34   mode            enabled
     2022-11-06 15:26:28   state           cmd_1
   Regex:
     accu:
     collect:
     cond:
       :
         0:
           "^Luftbe:water" ^Luftbe:water
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::EventDoIf('^Luftbe',$hash,'water',0) ne "ok"
   do:
     0:
       0            setreading di UR_device_bislang_doppelt "triggered: [[$DEVICE]] ", setreading di UR_device_ohne "triggered: $DEVICE", setreading di UR_device_einfach "triggered: [$DEVICE]", setreading di UR_device_einfach_Abstand "triggered: [ $DEVICE ]"
     1:
       0         
   helper:
     NOTIFYDEV  global,.*(^Luftbe).*
     event      water: ok
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Luftbefeuchter
     timerevent water: ok
     triggerDev Luftbefeuchter
     DOIF_eventa:
       cmd_nr: 1
       cmd: 1
       cmd_event: Luftbefeuchter
       cmd_1
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: Luftbefeuchter
       state: cmd_1
     timerevents:
       water: ok
     timereventsState:
       water: ok
     triggerEvents:
       water: ok
     triggerEventsState:
       water: ok
   internals:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always





Danke trotzdem für die Hilfe!
FHEM auf Intel NUC mit Proxmox, Grafana, DbLog mit MariaDB, ZWave-/EnOcean-/HomeMatic-USB-Dongle, KNX IP-Bridge, HUE Bridge, Sonos, Avanta Gastherme, Presence via Unifi, Rolladensteuerung, Raumtemperatur-/Fussbodenheizung-Steuerung

Damian

Wenn es mit der Doppelklammer funktioniert hatte, dann zufällig. Eckige Klammern sind ja bei DOIF reserviert und haben bestimmte Bedeutung:

[[$DEVICE]]  das ist eine indirekte Zeitangabe

[$DEVICE] das ist der STATUS von $DEVICE
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Speedy

FHEM auf Intel NUC mit Proxmox, Grafana, DbLog mit MariaDB, ZWave-/EnOcean-/HomeMatic-USB-Dongle, KNX IP-Bridge, HUE Bridge, Sonos, Avanta Gastherme, Presence via Unifi, Rolladensteuerung, Raumtemperatur-/Fussbodenheizung-Steuerung

Per

Ich wollte kein neues Thema aufmachen, zumal es hier gut reinpasst.
Eine gute Ergänzung zu $DEVICE und $EVENT empfände ich $VALUE, eine Variable, welche ausschließlich den Wert des Events beinhaltet. Vllt noch ein $VALUED (was sinnvolleres ist mir gerade nicht eingefallen) mit nur dem Zahlenwert.
Ob ein $READING nötig ist, weiß ich nicht, würde wahrscheinlich aber gleich mit abfallen, ob eine Unterscheidung zu Iternals oder so möglich/notwendig ist, müsste man dann sehen. Oder einen besseren Namen vergeben (auch wenn es zu 99% Readings sein werden).

Damian

Nicht jedes Event muss ein Reading beinhalten. Man kann sich das Reading bzw. Value auch selber basteln:

my($reading,$value)=split(": |,","$EVENT");
oder

my($reading,$value)=split(": |,",$event);
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Dass das geht, war mir klar, auch wenn es bei mir nicht sooo kompakt geworden wäre.
Allerdings fände ich eine "interne" Erzeugung eleganter, gerade für den DOIF Mode.

Damian

Zitat von: Per am 18 Oktober 2023, 23:39:56Dass das geht, war mir klar, auch wenn es bei mir nicht sooo kompakt geworden wäre.
Allerdings fände ich eine "interne" Erzeugung eleganter, gerade für den DOIF Mode.

ja, allerdings werden im $EVENT ggf. mehrere Reading mit Komma getrennt abgelegt, wenn sie in einem gemeinsamen Event-Block liegen und dann hat man evtl. das falsche Reading (falschen Wert), nämlich das erste des Eventblocks
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Wenn ein Timer der Trigger ist, hat man mit $DEVICE auch ein Problem. Und bei mehreren Readings hat man mit der split-Methode auch ein Problem. Ohne "Eigenverantwortung" kommt man so oder so nicht aus.

BTW: kann man mit [$DEVICE:reading] oder [$device:reading] bzw [$_:reading] auch im Perl-Mode im Ausführungsteil arbeiten? Ich bekomme bei den verschiedenen Versuchen entweder eine Fehlermeldung oder "komische" Werte ("HASH(xxxxxx)"...). Mit ReadingsVal geht es natürlich, ist aber viel umständlicherer Code.