MQTT2-Device erstellt keine Readings aus Attribut readingList

Begonnen von Karflyer, 08 Januar 2021, 11:28:55

Vorheriges Thema - Nächstes Thema

Karflyer

Hallo,
ich lasse mir aus einer INFLUXDB (2.0) Werte per MQTT senden. Das Topic für die einzelnen Hosts ist immer der gleiche. Der Payload der MQTT-Pakete für die einzelnen Hosts sieht dann beispielsweise so aus:
cpu_temperature,host=ttn-gateway _value=30020i 161009909000000000
cpu_temperature,host=netpi _value=50020i 161009909000000000
cpu_temperature,host=nuc _value=40020i 161009909000000000


Das Attribut 'readingList' habe ich zunächst so gebaut:
influxdb_out.* {my $t=$EVTPART1=~s/[^0-9]//rg; {cpu_temperature=>$t}}
Mit diesem Konstrukt wird ein reading 'cpu_temperature' mit dem Wert '40020' (=_value) erzeugt. Allerdings eben nur ein reading 'cpu_temperatur' mit dem Wert des zuletzt gesendeten MQTT-Pakets. Logisch.

Ich habe nun versucht mit diesem Konstrukt drei Readings entsprechend den drei MQTT-Paketen anlegen zu lassen. Das Attribut 'readingList' hat dann das folgende aussehen:
nfluxdb_out.* {my @array=split /[,=]/,$EVTPART0; my [b]$h[/b]=$array[0].'_'.$array[2]; my $t=$EVTPART1=~s/[^0-9]//rg; {[b]$h[/b]=>$t}}
Die erzeugten Readings sollten so aussehen: host_cpu_temperature z.B. netpi_cpu_temperature, nuc_cpu_temperature u.s.w.

Was hier nun nicht funktioniert ist die Zuweisung {$h=>$t}. Explizit an dem $h stört sich das Programm und wirft den folgenden Fehler:
PERL WARNING: Useless use of private variable in void context at (eval 78101) line 1.

Welchen Fehler mache ich, oder liegt es an dem Modul (MQTT2-Device), dass an dieser Stelle keine Variable verarbeiten kann?
Weiß jemand Rat?

Grüße
Stefan

rudolfkoenig

Hat weniger mit MQTT2_DEVICE zu tun, sondern mit perl:
fhem> inform log
fhem> { { BLA=>7 } }
HASH(0x555a0a884528)
fhem> { my $x="BLA";; { $x=>7 } }
2021.01.08 11:48:39.062 1 : PERL WARNING: Useless use of private variable in void context at (eval 22) line 1.
2021.01.08 11:48:39.062 3 : eval: { my $x="BLA"; { $x=>7 } }
7
fhem> { my $x="BLA";; my %h=($x=>7);; \%h }
HASH(0x555a0a884480)
fhem>


Die exakte Begruendung kenne ich nicht, wenn jemand sie kennt, bitte melden.