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
Du kannst das Attr valueFn in DbLog dafür verwenden.
LG
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.
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.
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.