Indirekte Angabe von [Device:Reading] aus Attribut möglich

Begonnen von Rewe2000, 02 März 2025, 22:10:41

Vorheriges Thema - Nächstes Thema

Rewe2000

Hallo,

gibt es die Möglichkeit in einem Doif im perl Modus, Gerätenamen und Readings von Devices, auf welches das Doif zugreift, in den Attributen abzulegen?

Ähnlich dem hier sehr einfachen Beispiels:
Internals:
   CFGFN     
   DEF        {
[+:01];
my $WindwertAVG = AttrVal("$SELF","Windstaerke","???");
set_Reading("M_Test_1",("[$WindwertAVG]"),1);
set_Reading("M_Test_2",[WindwertGewaechshaus:state],1)
}
   FUUID      67bee88f-f33f-7df9-435d-b28ff000918bf128
   MODEL      Perl
   NAME       di_Test
   NOTIFYDEV  global,WindwertGewaechshaus
   NR         689
   NTFY_ORDER 50-di_Test
   STATE      initialized
   TYPE       DOIF
   VERSION    29460 2024-12-29 20:25:48
   eventCount 488
   Helper:
     DBLOG:
       mode:
         DBLogging:
           TIME       1740564623.61581
           VALUE      enabled
   OLDREADINGS:
   READINGS:
     2025-03-02 22:03:00   M_Test_1        [WindwertGewaechshaus:state]
     2025-03-02 22:03:00   M_Test_2        0.5
     2025-03-02 22:03:00   block_01        executed
     2025-03-02 22:02:25   mode            enabled
     2025-03-02 22:02:25   state           initialized
     2025-03-02 22:03:00   timer_01_c01    02.03.2025 22:04:00
   Regex:
     accu:
     bar:
     barAvg:
     collect:
     cond:
       WindwertGewaechshaus:
         0:
           state      ^WindwertGewaechshaus$:^state:
   condition:
     0         
::DOIF_time_once($hash,0,$wday);
my $WindwertAVG = AttrVal("di_Test","Windstaerke","???");
set_Reading("M_Test_1",("[$WindwertAVG]"),1);
set_Reading("M_Test_2",::ReadingValDoIf($hash,'WindwertGewaechshaus','state'),1)

   days:
   helper:
     NOTIFYDEV  global,WindwertGewaechshaus
     event      timer_1
     globalinit 1
     last_timer 1
     sleeptimer -1
     triggerDev
     triggerEvents:
       timer_1
     triggerEventsState:
       timer_1
   hmccu:
   interval:
   intervalfunc:
   localtime:
     0          1740949440
   perlblock:
     0          block_01
   readings:
     all         WindwertGewaechshaus:state
   realtime:
     0          22:04:00
   time:
     0          +:01
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1740949440:
       localtime  1740949440
       hash:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   Windstaerke WindwertGewaechshaus:state
   disable    0
   userattr   Windstaerke

Unter dem Reading M_Test_1, sollte nicht der Variablenname vom Attribut Windstaerke als Text, sondern der Inhalt von der Device:Reading Kombination angezeigt werden, so wie unter dem Reading M_Test_2.
Ich habe für mich schon alle Schreibweisen getestet, doch leider ohne Erfolg. Auch die Suche hat mich nicht wirklich weitergebracht, vermutlich verwende ich einfach die falschen Suchbegriffe.

Hintergrund:
ich habe für die Bedienung meiner Raffstores ein Doif geschrieben, zur Anpassung an die einzelnen Raffstoredevice wäre es für mich einfacher, die Device/Readingnamen in den Attributen abzulegen als im Programmcode des Doifs selbst.

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

Damian

Wenn sie nicht triggern müssen, dann kannst du ReadingsVal mit variablen Namen benutzen. Indirekte Readings als Trigger gibt es nur für Zeittrigger.

Wenn ich variable Trigger für den gleichen Code nutzen will, dann benutze ich im Perl-Modus Templates.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF