FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: schachti am 14 Januar 2024, 18:09:30

Titel: MQTT2_DEVICE - wie alle Reading-Namen in Kleinbuchstaben
Beitrag von: schachti am 14 Januar 2024, 18:09:30
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?
Titel: Aw: MQTT2_DEVICE - wie alle Reading-Namen in Kleinbuchstaben
Beitrag von: betateilchen am 14 Januar 2024, 18:18:16
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.
Titel: Aw: MQTT2_DEVICE - wie alle Reading-Namen in Kleinbuchstaben
Beitrag von: schachti am 14 Januar 2024, 19:47:52
Danke, das funktioniert.
Titel: Aw: MQTT2_DEVICE - wie alle Reading-Namen in Kleinbuchstaben
Beitrag von: TomLee am 14 Januar 2024, 20:17:44
 
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?
Titel: Aw: MQTT2_DEVICE - wie alle Reading-Namen in Kleinbuchstaben
Beitrag von: passibe am 14 Januar 2024, 22:55:20
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).
Titel: Aw: MQTT2_DEVICE - wie alle Reading-Namen in Kleinbuchstaben
Beitrag von: TomLee am 14 Januar 2024, 23:29:39
Nee, er meint das in die Richtung: