diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index 3a6d8b4d2..6502a8d21 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -86,7 +86,11 @@ void Boiler::register_mqtt_ha_config() { doc["name"] = F("Service Code"); doc["uniq_id"] = F("boiler"); doc["ic"] = F("mdi:home-thermometer-outline"); - doc["stat_t"] = F("ems-esp/boiler_data"); + + char stat_t[50]; + snprintf_P(stat_t, sizeof(stat_t), PSTR("%s/boiler_data"), System::hostname().c_str()); + doc["stat_t"] = stat_t; + doc["val_tpl"] = F("{{value_json.serviceCode}}"); JsonObject dev = doc.createNestedObject("dev"); dev["name"] = F("EMS-ESP Boiler"); diff --git a/src/devices/solar.cpp b/src/devices/solar.cpp index 98c9f77e7..6290e72a8 100644 --- a/src/devices/solar.cpp +++ b/src/devices/solar.cpp @@ -83,7 +83,7 @@ void Solar::device_info_web(JsonArray & root) { if (Helpers::hasValue(pumpWorkMin_)) { JsonObject dataElement = root.createNestedObject(); - dataElement["n"] = F_(pumpWorkMin); + dataElement["n"] = F_(pumpWorkMin); char time_str[60]; snprintf_P(time_str, sizeof(time_str), PSTR("%d days %d hours %d minutes"), pumpWorkMin_ / 1440, (pumpWorkMin_ % 1440) / 60, pumpWorkMin_ % 60); dataElement["v"] = time_str; @@ -143,13 +143,17 @@ void Solar::publish_values() { void Solar::register_mqtt_ha_config() { // Create the Master device StaticJsonDocument doc; - doc["name"] = "EMS-ESP"; - doc["uniq_id"] = "solar"; - doc["ic"] = "mdi:home-thermometer-outline"; - doc["stat_t"] = "ems-esp/solar_data"; - doc["val_tpl"] = "{{value_json.solarPump}}"; + doc["name"] = F("EMS-ESP"); + doc["uniq_id"] = F("solar"); + doc["ic"] = F("mdi:home-thermometer-outline"); + + char stat_t[50]; + snprintf_P(stat_t, sizeof(stat_t), PSTR("%s/solar_data"), System::hostname().c_str()); + doc["stat_t"] = stat_t; + + doc["val_tpl"] = F("{{value_json.solarPump}}"); JsonObject dev = doc.createNestedObject("dev"); - dev["name"] = "EMS-ESP Solar"; + dev["name"] = F("EMS-ESP Solar"); dev["sw"] = EMSESP_APP_VERSION; dev["mf"] = this->brand_to_string(); dev["mdl"] = this->name(); diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 478c0c49a..48e540c3e 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -722,13 +722,13 @@ void Thermostat::register_mqtt_ha_config(uint8_t hc_num) { snprintf_P(str2, sizeof(str2), PSTR("thermostat_hc%d"), hc_num); doc["uniq_id"] = str2; + doc["~"] = System::hostname(); // ems-esp + char str3[40]; snprintf_P(str3, sizeof(str3), PSTR("~/%s"), str2); + doc["mode_cmd_t"] = str3; + doc["temp_cmd_t"] = str3; - doc["uniq_id"] = str2; - doc["~"] = F("ems-esp"); - doc["mode_cmd_t"] = str3; - doc["temp_cmd_t"] = str3; doc["mode_stat_t"] = F("~/thermostat_data"); doc["temp_stat_t"] = F("~/thermostat_data"); doc["curr_temp_t"] = F("~/thermostat_data"); diff --git a/src/mqtt.cpp b/src/mqtt.cpp index 05dc282e7..5860141af 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -483,11 +483,13 @@ void Mqtt::on_connect() { // all the values from the heartbeat payload will be added as attributes to the entity state void Mqtt::ha_status() { StaticJsonDocument doc; + doc["name"] = F("EMS-ESP status"); doc["uniq_id"] = F("status"); - doc["avty_t"] = F("ems-esp/status"); - doc["json_attr_t"] = F("ems-esp/heartbeat"); - doc["stat_t"] = F("ems-esp/heartbeat"); + doc["~"] = System::hostname(); // ems-esp + doc["avty_t"] = F("~/status"); + doc["json_attr_t"] = F("~/heartbeat"); + doc["stat_t"] = F("~/heartbeat"); doc["val_tpl"] = F("{{value_json['status']}}"); doc["ic"] = F("mdi:home-thermometer-outline"); @@ -767,8 +769,8 @@ void Mqtt::register_mqtt_ha_sensor(const char * prefix, snprintf_P(topic, sizeof(topic), PSTR("homeassistant/sensor/ems-esp/%s/config"), uniq.c_str()); // state topic - char state_t[50]; - snprintf_P(state_t, sizeof(state_t), PSTR("%s/%s_data"), hostname_.c_str(), device_name.c_str()); + char stat_t[50]; + snprintf_P(stat_t, sizeof(stat_t), PSTR("%s/%s_data"), hostname_.c_str(), device_name.c_str()); // state template char tpl[50]; @@ -784,7 +786,7 @@ void Mqtt::register_mqtt_ha_sensor(const char * prefix, if (uom != nullptr) { doc["unit_of_meas"] = uom; } - doc["stat_t"] = state_t; + doc["stat_t"] = stat_t; doc["val_tpl"] = tpl; if (icon != nullptr) { doc["ic"] = icon; diff --git a/src/sensor.cpp b/src/sensor.cpp index de3ebd57f..0845bb88a 100644 --- a/src/sensor.cpp +++ b/src/sensor.cpp @@ -341,8 +341,12 @@ void Sensor::publish_values() { // to e.g. homeassistant/sensor/ems-esp/dallas_sensor1/config if (!(registered_ha_[i])) { StaticJsonDocument config; - config["dev_cla"] = F("temperature"); - config["stat_t"] = F("ems-esp/sensor_data"); + config["dev_cla"] = F("temperature"); + + char stat_t[50]; + snprintf_P(stat_t, sizeof(stat_t), PSTR("%s/sensor_data"), System::hostname().c_str()); + config["stat_t"] = stat_t; + config["unit_of_meas"] = F("°C"); char str[50];