MQTT2_DEVICE setlist $DEVICETOPIC nicht verfügbar?

Begonnen von nuccleon, 02 Februar 2019, 12:26:24

Vorheriges Thema - Nächstes Thema

nuccleon

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

rudolfkoenig

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.

nuccleon

deepsleep:on { "dht_easy/cmd event,deepsleep=".AttrVal($NAME,"interval","300") }

Sorry wenn ich so doof frage, aber ist das nicht die Perl Variante?

rudolfkoenig

Doch. Ist das, was ich geschrieben habe, auch anders zu lesen?

nuccleon

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?

rudolfkoenig

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.

nuccleon

Super, danke.
Ich teste dann gleich mal.
Übrigens in der Commandref ist auch nur von $EVENT usw die Rede.