FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: nuccleon am 02 Februar 2019, 12:26:24

Titel: MQTT2_DEVICE setlist $DEVICETOPIC nicht verfügbar?
Beitrag von: nuccleon am 02 Februar 2019, 12:26:24
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
Titel: Antw:MQTT2_DEVICE setlist $DEVICETOPIC nicht verfügbar?
Beitrag von: rudolfkoenig am 02 Februar 2019, 13:00:09
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.
Titel: Antw:MQTT2_DEVICE setlist $DEVICETOPIC nicht verfügbar?
Beitrag von: nuccleon am 02 Februar 2019, 13:09:04
deepsleep:on { "dht_easy/cmd event,deepsleep=".AttrVal($NAME,"interval","300") }

Sorry wenn ich so doof frage, aber ist das nicht die Perl Variante?
Titel: Antw:MQTT2_DEVICE setlist $DEVICETOPIC nicht verfügbar?
Beitrag von: rudolfkoenig am 02 Februar 2019, 14:24:41
Doch. Ist das, was ich geschrieben habe, auch anders zu lesen?
Titel: Antw:MQTT2_DEVICE setlist $DEVICETOPIC nicht verfügbar?
Beitrag von: nuccleon am 02 Februar 2019, 14:36:45
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?
Titel: Antw:MQTT2_DEVICE setlist $DEVICETOPIC nicht verfügbar?
Beitrag von: rudolfkoenig am 02 Februar 2019, 15:22:10
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.
Titel: Antw:MQTT2_DEVICE setlist $DEVICETOPIC nicht verfügbar?
Beitrag von: nuccleon am 02 Februar 2019, 16:12:49
Super, danke.
Ich teste dann gleich mal.
Übrigens in der Commandref ist auch nur von $EVENT usw die Rede.