Hat jemand einen Tipp, wie ich ein MQTT2_DEVICE so konfiguriere, dass die Namen aller Readings ausschließlich kleingeschrieben sind?
autocreate hat mir folgendes konfiguriert:
attr MQTT2_Heizung readingList Heizung:Heizung/boiler_data:.* { json2nameValue($EVENT, 'boiler_data_', $JSONMAP) }\
Heizung:Heizung/heartbeat:.* { json2nameValue($EVENT, 'heartbeat_', $JSONMAP) }\
Heizung:Heizung/status:.* status\
Heizung:Heizung/heating_active:.* heating_active\
Heizung:Heizung/sm_data:.* { json2nameValue($EVENT, 'sm_data_', $JSONMAP) }\
Heizung:Heizung/thermostat_data1:.* { json2nameValue($EVENT, 'thermostat_data1_', $JSONMAP) }\
Heizung:Heizung/tapwater_active:.* tapwater_active\
Heizung:Heizung/shower_data:.* { json2nameValue($EVENT, 'shower_data_', $JSONMAP) }\
Heizung:Heizung/info:.* { json2nameValue($EVENT, 'info_', $JSONMAP) }\
Heizung:Heizung/boiler_data_ww:.* { json2nameValue($EVENT, 'boiler_data_ww_', $JSONMAP) }\
Heizung:Heizung/solar_data:.* { json2nameValue($EVENT, 'solar_data_', $JSONMAP) }\
Heizung:Heizung/thermostat_data:.* { json2nameValue($EVENT, 'thermostat_data_', $JSONMAP) }\
Heizung:Heizung/thermostat_data_hc1:.* { json2nameValue($EVENT, 'thermostat_data_hc1_', $JSONMAP) }\
Heizung:Heizung/shower_active:.* shower_active
Das führt aber, je nach verwendeter Firmware, mal zu Readings nur in Kleinbuchstaben oder mal zu Readings, die CamelCase enthalten. Ein Beispiel:
alte Firmware:
boiler_data_burnGas
neue Firmware (man beachte das kleine g):
boiler_data_burngas
Das führt zu Problemen an Stellen, an denen ein Reading im Code ausgelesen wird bzw. für StateFormat benötigt wird.
Ich hätte daher gerne generell in diesem Device die Namen aller Readings in lowercase.
Ich habe das Gefühl, das könnte mit readingList gehen, die folgende stümperhafte Modifikation (Ergänzung der Perl-Funktion lc) hat aber nichts gebracht bzw. dazu geführt, dass es keine Readings mehr gibt:
Heizung:Heizung/boiler_data:.* { lc(json2nameValue($EVENT, 'boiler_data_', $JSONMAP)) }
Heizung:Heizung/heartbeat:.* { lc(json2nameValue($EVENT, 'heartbeat_', $JSONMAP)) }
Heizung:Heizung/status:.* status
Heizung:Heizung/heating_active:.* heating_active
Heizung:Heizung/sm_data:.* { lc(json2nameValue($EVENT, 'sm_data_', $JSONMAP)) }
Heizung:Heizung/thermostat_data1:.* { lc(json2nameValue($EVENT, 'thermostat_data1_', $JSONMAP)) }
Heizung:Heizung/tapwater_active:.* tapwater_active
Heizung:Heizung/shower_data:.* { lc(json2nameValue($EVENT, 'shower_data_', $JSONMAP)) }
Heizung:Heizung/info:.* { lc(json2nameValue($EVENT, 'info_', $JSONMAP)) }
Heizung:Heizung/boiler_data_ww:.* { lc(json2nameValue($EVENT, 'boiler_data_ww_', $JSONMAP)) }
Heizung:Heizung/solar_data:.* { lc(json2nameValue($EVENT, 'solar_data_', $JSONMAP)) }
Heizung:Heizung/thermostat_data:.* { lc(json2nameValue($EVENT, 'thermostat_data_', $JSONMAP)) }
Heizung:Heizung/thermostat_data_hc1:.* { lc(json2nameValue($EVENT, 'thermostat_data_hc1_', $JSONMAP)) }
Heizung:Heizung/shower_active:.* shower_active
Hat jemand einen Tipp?
probier mal das lc() vor $EVENT zu setzen.
{ json2nameValue(lc($EVENT), 'boiler_data_', $JSONMAP) }
Wenn das an der Stelle greift, werden dann aber auch alle alphanumerischen reading-Werte in Kleinbuchstaben abgelegt.
Danke, das funktioniert.
Zitat... werden dann aber auch alle alphanumerischen reading-Werte in Kleinbuchstaben abgelegt.
Was genau meinst du damit, ich würde diesen Hinweis gerne verstehen!
Tu ich aber nicht ::)
Würdest du das bitte erläutern welche Zeichen du da ansprichst?
Ich glaube er meint, dass dann nicht nur der Name des Readings, sondern auch der Wert des Readings kleingeschrieben wird (was ggfs. weitere Auswirkungen auf Notifys/IFs usw. hat).
Nee, er meint das in die Richtung:
- Zeichen außerhalb des ASCII-Zeichensatzes: Dies sind Zeichen, die nicht in ASCII definiert sind, z. B. Umlaute oder Sonderzeichen aus anderen Sprachen.
- Kontrollzeichen: Dies sind Zeichen, die nicht für die Ausgabe an den Benutzer bestimmt sind, z. B. Steuerzeichen oder Leerzeichen.