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