MQTT2_DEVICE - Verwendung von Perl in der Payload der setList

Begonnen von TomLee, 01 Februar 2024, 16:24:49

Vorheriges Thema - Nächstes Thema

TomLee

Hi,

dieser von mir heute erstellte Reading setList-Eintrag:
down:noArg {my $max=maxNum(ReadingsNum($NAME,'pct',0)-10,0);return qq($DEVICETOPIC/set {"position":$max}) }hat mich an diesen Beitrag erinnert.
Ich hatte das nachvollzogen, aber nur an meiner MQTT2_Server-Definition, war davon ausgegangen dass das auch in der ReadingList klappen würde.

Machts aber nicht, alle meine Versuche scheitern, $NAME wird immer aufgelöst, ReadingsNum und maxNum bleiben aber "funktionslos".

So:
down:noArg $DEVICETOPIC/set {"position":{(maxNum(ReadingsNum($NAME,'pct',0)-10,0))}}würde ich erwarten das es klappen sollte.
Da es über publish tut, was es soll:
zigbee2mqtt/0xa4c13866c4784982/set {"position":{(maxNum(ReadingsNum("MQTT2_zigbee_0xa4c13866c4784982",'pct',0)-10,0))}}
Geht es nur in dem publish-setter ?

Gruß

Thomas

rudolfkoenig

Die Code-Stuecke klingen nach setList und nicht nach readingList.

Laut https://fhem.de/commandref_modular.html#MQTT2_DEVICE-attr-setList kann perl in setList nur in den folgenden zwei Varianten verwendet werden:
- das komplette setList Argument ist ein(!) perl Ausdruck (dessen Rueckgabe Zeile fuer Zeile ausgewertet wird)
- eine Zeile besteht aus "FHEM-Befehl {perl-Ausdruck}", wobei perl Ausdruck "topic message" zurueckliefern muss.

Das Beispiel aus dem verlinkten Beitrag kann man nicht direkt in setList uebernehmen, da
- DOIF seine eigene Auswerte-Magie hat
- der FHEM set Befehl das sog. "set-magic" implementiert (siehe https://fhem.de/commandref_modular.html#set), das setList Attribut aber nicht.

TomLee