FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: fhem024 am 16 November 2024, 12:25:11

Titel: Umlaute im Zusammenhang mit einem MQTT2-Device - Recode-Schnittstelle gesucht
Beitrag von: fhem024 am 16 November 2024, 12:25:11
Hallo zusammen,
ich habe ein neues MQTT2-Device, welches über den internen MQTT2_FHEM_Server angebunden ist.

Das Device liefert Events / Readings wie folgendes z.B.:
TOB_0x8_R_u00FCcklauftemperatur

Soll
TOB_0x8_Rücklauftemperatur
heißen.

Der Wert wird als solcher vom MQTT-Device übergeben und ist von mir nicht beeinflussbar.

Frage:
Kann ich irgendwo ein Recode des Readings / Events durchführen, bevor es in die Datenbank geschrieben wird, so dass das Encoding am Ende passt?

Ich bin dankbar für jeden Hinweis / Tip
Gruß
fhem024
Titel: Aw: Umlaute im Zusammenhang mit einem MQTT2-Device - Recode-Schnittstelle gesucht
Beitrag von: DS_Starter am 16 November 2024, 12:37:50
Du kannst das Attr valueFn in DbLog dafür verwenden.

LG
Titel: Aw: Umlaute im Zusammenhang mit einem MQTT2-Device - Recode-Schnittstelle gesucht
Beitrag von: Beta-User am 16 November 2024, 12:47:26
Ich würde mal jsonMap als Stichwort in die Runde werfen.
Umlaute sind aber afaik in Reading-Namen nicht erlaubt, von daher müßte man halt ue schreiben.
Titel: Aw: Umlaute im Zusammenhang mit einem MQTT2-Device - Recode-Schnittstelle gesucht
Beitrag von: fhem024 am 16 November 2024, 14:11:26
Danke DB_Starter und Beta-User,

ich habe es nun vorerst mit valueFn realisiert und setze die Umlaute da mit einem Regex auf den Hex-Wert um:

  $EVENT =~ s/\x5f\x75\x30\x30\x46\x43/ü/;
  $READING =~ s/\x5f\x75\x30\x30\x46\x43/ü/;

  $EVENT =~ s/\x5f\x75\x30\x30\x44\x46/ß/;
  $READING =~ s/\x5f\x75\x30\x30\x44\x46/ß/;

  $EVENT =~ s/\x5f\x75\x30\x30\x46\x36/ö/;
  $READING =~ s/\x5f\x75\x30\x30\x46\x36/ö/;

  $EVENT =~ s/\x5f\x75\x30\x30\x45\x34/ä/;
  $READING =~ s/\x5f\x75\x30\x30\x45\x34/ä/;

Der Hinweis auf jsonMap ist mir nicht ganz klar. An welcher Stelle kann / soll das eingesetzt werden?

Witzigerweise kommt ein Wert bzw. Value sogar korrekt. Warum auch immer.

Danke!
fhem024

Update:
Nachdem die Änderungen im Beitrag unten durchgeführt wurden, sind diese Manipulationen nicht mehr nötig.
Titel: Aw: Umlaute im Zusammenhang mit einem MQTT2-Device - Recode-Schnittstelle gesucht
Beitrag von: fhem024 am 16 November 2024, 14:16:32
Hmm, zum Thema jsonMap. Das MQTT-Device wurde ja automatisch angelegt. Das Umsetzen der Readings erfolgt so:

json2nameValue($EVENT, 'DHK_BM-2_0x35_', $JSONMAP)

Ich vermute einmal, dass das jsonMap hier irgendwo angebracht wäre?

Update:
got it. jsonMap wird im MQTT2_DEVICE durchgeführt und kann zeilengetrennt mehrere Mappings verarbeiten:

Bsp.:
TOB_0x8_Kessel_u00FCbertemperatur_Sammler:TOB_0x8_Kesseluebertemperatur_Sammler
TOB_0x8_Kessel_u00FCbertemperatur_bei_Speicherladung:TOB_0x8_Kesseluebertemperatur_bei_Speicherladung

Danach mit deletereading die "falschen" Readings entfernen. Da autocreate aktiviert ist, kommen danach die Readings entsprechend jsonMap an, sobald sie das nächste mal aufschlagen.

Bsp.:
deletereading [Device] TOB_0x8_Kessel_u00FCbertemperatur_Sammler


Jetzt ist natürlich die Frage, wie sich das ganze dann verhält, wenn man das mit Parametern macht, die man schreiben möchte.