diff --git a/src/core/analogsensor.cpp b/src/core/analogsensor.cpp index e6718626b..0723f1419 100644 --- a/src/core/analogsensor.cpp +++ b/src/core/analogsensor.cpp @@ -804,7 +804,7 @@ void AnalogSensor::publish_values(const bool force) { config["def_ent_id"] = topic_str.substr(0, topic_str.find("/")) + "." + uniq_s; // dev section with model is only created on the 1st sensor - Mqtt::add_ha_dev_section(config.as(), "Analog Sensors", nullptr, "EMS-ESP", EMSESP_APP_VERSION, !ha_dev_created); + Mqtt::add_ha_dev_section(config.as(), "Analog Sensors", !ha_dev_created); Mqtt::add_ha_avty_section(config.as(), stat_t, val_cond); sensor.ha_registered = Mqtt::queue_ha(topic, config.as()); diff --git a/src/core/mqtt.cpp b/src/core/mqtt.cpp index d4ca0eb5b..f5400cc3e 100644 --- a/src/core/mqtt.cpp +++ b/src/core/mqtt.cpp @@ -1106,14 +1106,14 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev // add origin JsonObject origin_json = doc["o"].to(); origin_json["name"] = "EMS-ESP"; - origin_json["sw"] = EMSESP_APP_VERSION; + origin_json["sw"] = "v" + std::string(EMSESP_APP_VERSION); origin_json["url"] = "https://emsesp.org"; // add dev section if (device_type == EMSdevice::DeviceType::SYSTEM) { - add_ha_dev_section(doc.as(), nullptr, nullptr, nullptr, nullptr, false); + add_ha_dev_section(doc.as()); } else { - add_ha_dev_section(doc.as(), EMSdevice::device_type_2_device_name(device_type), model, brand, version, create_device_config); + add_ha_dev_section(doc.as(), EMSdevice::device_type_2_device_name(device_type), create_device_config, model, brand, version); } return queue_ha(topic, doc.as()); @@ -1414,8 +1414,8 @@ bool Mqtt::publish_ha_climate_config(const DeviceValue & dv, const bool has_room doc["ic"] = icon; } - add_ha_dev_section(doc.as(), devicename, nullptr, nullptr, nullptr, false); // add dev section - add_ha_avty_section(doc.as(), topic_t, seltemp_cond, has_roomtemp ? currtemp_cond : nullptr, hc_mode_cond); // add availability section + add_ha_dev_section(doc.as(), devicename); + add_ha_avty_section(doc.as(), topic_t, seltemp_cond, has_roomtemp ? currtemp_cond : nullptr, hc_mode_cond); return queue_ha(topic, doc.as()); // publish the config payload with retain flag } @@ -1442,7 +1442,7 @@ std::string Mqtt::tag_to_topic(uint8_t device_type, int8_t tag) { // add devs section to an existing doc, only for HA // under devs node it will create ids and name and optional mf, mdl, via_device // name could be EMSdevice::device_type_2_device_name(dv.device_type)); -void Mqtt::add_ha_dev_section(JsonObject doc, const char * name, const char * model, const char * brand, const char * version, const bool create_model) { +void Mqtt::add_ha_dev_section(JsonObject doc, const char * name, const bool create_model, const char * model, const char * brand, const char * version) { // only works for HA if (discovery_type() != discoveryType::HOMEASSISTANT) { return; @@ -1472,14 +1472,12 @@ void Mqtt::add_ha_dev_section(JsonObject doc, const char * name, const char * mo dev_json["name"] = Mqtt::basename(); } - // add mf, mdl, sw and via_device + // add mf (manufacturer/brand), mdl (model), sw (software version) and via_device dev_json["mf"] = brand != nullptr ? brand : "EMS-ESP"; if (model != nullptr) { dev_json["mdl"] = model; } - if (version != nullptr) { - dev_json["sw"] = version; - } + dev_json["sw"] = version != nullptr ? version : "v" + std::string(EMSESP_APP_VERSION); dev_json["via_device"] = Mqtt::basename(); } } diff --git a/src/core/mqtt.h b/src/core/mqtt.h index b55000407..e51e16fac 100644 --- a/src/core/mqtt.h +++ b/src/core/mqtt.h @@ -259,7 +259,12 @@ class Mqtt { static void add_ha_classes(JsonObject doc, const uint8_t device_type, const uint8_t type, const uint8_t uom, const char * entity = nullptr, bool is_discovery = true); - static void add_ha_dev_section(JsonObject doc, const char * name, const char * model, const char * brand, const char * version, const bool create_model); + static void add_ha_dev_section(JsonObject doc, + const char * name = nullptr, + const bool create_model = false, + const char * model = nullptr, + const char * brand = nullptr, + const char * version = nullptr); static void add_ha_avty_section(JsonObject doc, const char * state_t = nullptr, const char * cond1 = nullptr, diff --git a/src/core/shower.cpp b/src/core/shower.cpp index 18ef444f5..ee9d3fc1a 100644 --- a/src/core/shower.cpp +++ b/src/core/shower.cpp @@ -210,7 +210,7 @@ void Shower::create_ha_discovery() { doc["stat_t"] = "~/shower_active"; Mqtt::add_ha_bool(doc.as()); - Mqtt::add_ha_dev_section(doc.as(), "Shower Sensors", nullptr, nullptr, nullptr, false); + Mqtt::add_ha_dev_section(doc.as(), "Shower Sensors", true); Mqtt::add_ha_avty_section(doc.as()); // no conditions snprintf(topic, sizeof(topic), "binary_sensor/%s/shower_active/config", Mqtt::basename().c_str()); @@ -239,7 +239,7 @@ void Shower::create_ha_discovery() { doc["dev_cla"] = "duration"; // doc["ent_cat"] = "diagnostic"; - Mqtt::add_ha_dev_section(doc.as(), "Shower Sensors", nullptr, "EMS-ESP", EMSESP_APP_VERSION, true); + Mqtt::add_ha_dev_section(doc.as(), "Shower Sensors"); Mqtt::add_ha_avty_section(doc.as(), "~/shower_data", "value_json.duration is defined"); snprintf(topic, sizeof(topic), "sensor/%s/shower_duration/config", Mqtt::basename().c_str()); diff --git a/src/core/temperaturesensor.cpp b/src/core/temperaturesensor.cpp index d58cfe442..c3820d3e6 100644 --- a/src/core/temperaturesensor.cpp +++ b/src/core/temperaturesensor.cpp @@ -545,7 +545,7 @@ void TemperatureSensor::publish_values(const bool force) { config["name"] = (const char *)sensor.name(); // dev section with model is only created on the 1st sensor - Mqtt::add_ha_dev_section(config.as(), "Temperature Sensors", nullptr, "EMS-ESP", EMSESP_APP_VERSION, !ha_dev_created); + Mqtt::add_ha_dev_section(config.as(), "Temperature Sensors", !ha_dev_created); Mqtt::add_ha_avty_section(config.as(), stat_t, val_cond); char topic[Mqtt::MQTT_TOPIC_MAX_SIZE]; diff --git a/src/web/WebCustomEntityService.cpp b/src/web/WebCustomEntityService.cpp index 9f6fce797..ab74f0a0d 100644 --- a/src/web/WebCustomEntityService.cpp +++ b/src/web/WebCustomEntityService.cpp @@ -457,7 +457,7 @@ void WebCustomEntityService::publish() { config["def_ent_id"] = topic_str.substr(0, topic_str.find("/")) + "." + uniq_s; Mqtt::add_ha_classes(config.as(), EMSdevice::DeviceType::SYSTEM, entityItem.value_type, entityItem.uom); - Mqtt::add_ha_dev_section(config.as(), "Custom Entities", nullptr, "EMS-ESP", EMSESP_APP_VERSION, !ha_created); + Mqtt::add_ha_dev_section(config.as(), "Custom Entities", !ha_created); Mqtt::add_ha_avty_section(config.as(), stat_t, val_cond); ha_created |= Mqtt::queue_ha(topic, config.as());