FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: martinp876 am 19 April 2026, 19:50:07

Titel: json2nameValue verstehen - einsatz fpr MQTT2
Beitrag von: martinp876 am 19 April 2026, 19:50:07
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?

  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","")}
Titel: Aw: json2nameValue verstehen - einsatz fpr MQTT2
Beitrag von: JoWiemann am 19 April 2026, 20:26:52
Eventuell hilft Dir das weiter: https://forum.fhem.de/index.php?topic=132371.0

Grüße Jörg
Titel: Aw: json2nameValue verstehen - einsatz fpr MQTT2
Beitrag von: TomLee am 19 April 2026, 23:10:20
Oder:

https://wiki.fhem.de/wiki/AttrTemplate

dann:

set <Device-Name> attrTemplate ?
dann:
set <Device-Name> attrTemplate tasmota_use_DS18x20_id
?