Na so sehr manuell muss das nicht sein. Man hat an dem Device ja alles, was man benötigt. Daher können die mqttPublish-Einträge pro Geräte/Sensor-Art durchaus gleich sein.
Mein Beispiel für 'humidity' mit HomeMatic Wandthermostat. Ist nur die 'Vorstufe', die in NodeRed noch umformatiert wird, aber man könnte sicherlich so umbauen, dass es gleich AutoDiscovery-Einträge entstehen. Soll hier also nur als eine Anregung dienen.
mqttPublish ist bei alle Geräten gleich:
humidity!info:topic={"$base/usr/$roomid/sen/humidity/$num/info"}
humidity!info:expression={toJSON({manuf=>"$dev_manuf",type=>"sensor",categorie=>"clima",
reading=>"humidity",num=>"$num",unit=>"%",valuetype=>"number",format=>"00",
roomid=>"$roomid",room=>"$roomname",name=>"$device",dev_uid=>"$uid"})}
mqttDefaults enthält speziefische Variablen, könne man aber weg bekommen, indem man z.B. die 'room'-Attribute verwendet.
roomid="ka" num="01"
roomname="Kinderzimmer"
dev_manuf="HomeMatic"
Daraus entsteht folgende Topic: home/usr/ka/sen/humidity/01/info
{
"categorie": "clima",
"dev_uid": "5ce00c65-f33f-7939-1de4-f4cb0ee7ec0de2ba",
"format": "00",
"manuf": "HomeMatic",
"name": "KA_WT01_Weather",
"num": "01",
"reading": "humidity",
"room": "Kinderzimmer",
"roomid": "ka",
"type": "sensor",
"unit": "%",
"valuetype": "number"
}
NodeRed 'kennt' alle Sensor-Typen (sind ja nicht so viele) und erstellt daraus folgendes:
homeassistant/sensor/red_KA_WT01_Weather/humidity/config
{
"device": {
"identifiers": [
"red:KA_WT01_Weather"
],
"manufacturer": "HomeMatic",
"name": "KA_WT01_Weather",
"suggested_area": "Kinderzimmer"
},
"name": "ka_humidity_01",
"state_topic": "home/usr/ka/sen/humidity/01/json",
"value_template": "{{ value_json.value }}",
"unique_id": "home.usr.ka.sen.humidity.01",
"device_class": "humidity",
"state_class": "measurement",
"unit_of_measurement": "%",
"expire_after": 600
}
Etwas komplexer wird es bei Aktoren wie z.B. Thermostate, da sehen die Einträge schon so aus:
homeassistant/climate/red_KA_WT01/config
{
"name": "ka_heating_01",
"unique_id": "home.usr.ka.act.clima.heating.01",
"device": {
"identifiers": [
"red:KA_WT01",
"origin:KA_WT01_Climate"
],
"name": "KA_WT01",
"manufacturer": "HomeMatic",
"sw_version": "1.4",
"suggested_area": "Kinderzimmer",
"via_device": "Node-RED 2.1.3"
},
"temperature_command_topic": "home/usr/ka/act/clima/heating/01/set-desired-temp",
"temperature_state_topic": "home/usr/ka/act/clima/heating/01/desired-temp",
"modes": [
"off",
"heat"
],
"mode_state_topic": "home/usr/ka/act/clima/heating/01/mode",
"power_command_topic": "home/usr/ka/act/clima/heating/01/power",
"hold_modes": [
"auto",
"manual",
"boost",
"day",
"night"
],
"hold_command_topic": "home/usr/ka/act/clima/heating/01/set-control-mode",
"hold_state_topic": "home/usr/ka/act/clima/heating/01/control-mode",
"precision": 0.1,
"temp_step": 0.5,
"max_temp": 25,
"min_temp": 5,
"json_attributes_topic": "home/usr/ka/act/clima/heating/01/attributes",
"json_attributes_template": "{{value_json}}"
}
Aber auch hier bekommt man eine Automatisierung hin.
Im Anhang paar Bilder...