Ich habe versucht json2nameValue zu verstehen - im Zusammenhang mit MQTT2.
MQTT2 liefert "im Automode" indiuskutabel lange Namen - und zu viel sowieso. Also muss man filtern und übersetzen.
Aktuelles Beispiel ist ein ESP32 mit (aktuell) 5 Temperatursensoren. GEht erst einmal prima. das Zerlegen der Tasmota MQTT Infos geht mit json2nameValue gut. Da nun die Namen quatsch sind muss man den Sensoren Namen geben um die Readings zu erzeugen.
json2nameValue bietet nun die Option "map" sowie einen Positiv und einen negativ filter. Ich habe keine schlüssige Dokumentation hierzu gefunden - eben so keine Beispiele.
Musss man den Code prüfen: Negativ Filter betreffen die ürsprünglichen Namen während positv-filter die "gemappten" Daten betreffen. Da ich allerding das Mapping nicht einfichten konnte ist es am Ende eh egal - ich konnte es nicht zum Laufen bekommen.
Am Ende war ich deutlich schneller, selbst eine Funktion zu erstellen. Die einfache Option, diese in MQTT readlingList einzupflegen scheitert dann wieder an der Einschrängung, ein Kommando in eine Zeile schreiben zu müssen. Da hat man ich den Trenner gespart bzw \n genutzt.
Also noch ein Umweg. Wirklich userfreindlich ist das nicht - aber möglich, wie alles.
Ich werde noch ein einer eleganteren Version arbeiten
==> gibt es schon bessere Funktionen und gibt es eine komplette Doku zu json2nameValue?
- #funktion als Reading einbauen
- # Funktion definieren "evalRead"
- # Readingslist erstellen
userattr EvalRead:textField-long
EvalRead
{
my $x= json2nameValue($EVENT);
my $mttqID ="StatusSNS_DS18B20-";
my %didH = ("000000505B1A" => "WPRaum"
,"00000051CAD9" => "WP_ein"
,"000000526D95" => "WP_aus"
,"000000544C2C" => "Wasser"
,"0000005310E3" => "Boiler");
my (%midH,%resH);
for my $n (grep/_Id$/,keys %{$x}) {
$n =~ m/.*-(.*?)_Id/;
$midH{$1."_Id"}= defined $didH{%{$x}{$n}} ? $didH{%{$x}{$n}} : $1."_undef"};
for my $n (grep/_Temperature$/,keys %{$x}){
$n =~ m/.*-(.*?)_Temp/;
$resH{"temp_".$midH{$1."_Id"}}= %{$x}{$n}};
\%resH}
readingList DVES_FB81CC:stat/tasmota_FB81CC/STATUS8:.* {eval AttrVal($NAME,"EvalRead","")}
Eventuell hilft Dir das weiter: https://forum.fhem.de/index.php?topic=132371.0
Grüße Jörg