Hallo zusammen,
gibt es einen eleganten Weg um in setlist an Internals vom Device ran zu kommen?
Konkret möchte ich folgende Zeile
setList deepsleep:on { "dht_easy/cmd event,deepsleep=".AttrVal("MQTT2_dht_easy","interval","300") }
ersetzen durch
setList deepsleep:on { "dht_easy/cmd event,deepsleep=".AttrVal($DEVICETOPIC,"interval","300") }
Das führt allerdings zu: Global symbol "$DEVICETOPIC" requires explicit package name (did you forget to declare "my $DEVICETOPIC"?) at (eval 2015) line 1.
Internals:
CFGFN
CID dht_easy
DEF dht_easy
DEVICETOPIC MQTT2_dht_easy
FUUID 5c5547a1-f33f-88d3-f961-bc0def002c55b85e
IODev mqtt_easy
LASTInputDev mqtt_easy
MSGCNT 752
NAME MQTT2_dht_easy
NR 62
STATE connected
TYPE MQTT2_DEVICE
mqtt_easy_MSGCNT 752
mqtt_easy_TIME 2019-02-02 12:17:28
READINGS:
2019-02-02 08:34:53 associatedWith MQTT2_mqtteasy
2019-02-02 12:08:56 cmd event,deepsleep=deepsleep on
2019-02-02 12:12:50 dewpoint 13.1
2019-02-02 12:12:50 humidity 53.8
2019-02-02 12:12:50 humidity_abs 11.0
2019-02-02 12:12:50 ip 192.168.178.32
2019-02-02 12:12:50 mac 60:01:94:36:05:2C
2019-02-02 12:17:28 rssi -55
2019-02-02 12:12:50 state connected
2019-02-02 12:12:50 sysbuild_date Jan 21 2019
2019-02-02 12:12:50 temperature 23.0
Attributes:
IODev mqtt_easy
interval 11
readingList dht_easy/state:.* state
dht_easy/sys/sysbuild_date:.* sysbuild_date
dht_easy/sys/ip:.* ip
dht_easy/sys/mac:.* mac
dht_easy/sys/rssi:.* rssi
dht_easy/sht30/temperature:.* temperature
dht_easy/sht30/humidity:.* humidity
dht_easy/cmd:.* cmd
room MQTT2_DEVICE
setList deepsleep:on { "dht_easy/cmd event,deepsleep=".AttrVal("MQTT2_dht_easy","interval","300") }
userattr interval
Wenn man im setList die Perl-Variante mit {} verwendet, dann hat man Zugriff auf $NAME, $EVENT, $EVTPART1 usw, Letztere sind die set Argumente.
Auf ein Internal greift man also mit $defs{$NAME}{DEVICETOPIC} zu (ungetestet).
Ich sehe gerade: $EVENT & $EVTPART wird auch in der anderen Schreibweise ersetzt.
deepsleep:on { "dht_easy/cmd event,deepsleep=".AttrVal($NAME,"interval","300") }
Sorry wenn ich so doof frage, aber ist das nicht die Perl Variante?
Doch. Ist das, was ich geschrieben habe, auch anders zu lesen?
Ok, wenn es die Perl Variante ist, dann muss es einen anderen Trick geben, denn:
Global symbol "$NAME" requires explicit package name (did you forget to declare "my $NAME"?) at (eval 499) line 1.
$EVENT wird in setlist akzeptiert. $NAME eben nicht. Bug oder Feature?
Ist wohl Bug. Es wird zwar ausgewertet, aber du darfst es nicht setzen, weil attr es nicht zulaesst :)
Habs gefixt, jetzt kann man zusaetzlich auf $NAME und $DEVICETOPIC in der Perl-Variante zugreifen, und auf $NAME in der "nicht-perl" Variante.
Damit sollten beide Versionen $NAME, $EVENT und $DEVICETOPIC direkt verstehen.
Super, danke.
Ich teste dann gleich mal.
Übrigens in der Commandref ist auch nur von $EVENT usw die Rede.