diff --git a/src/analogsensor.cpp b/src/analogsensor.cpp index d317c2844..942c6e0e5 100644 --- a/src/analogsensor.cpp +++ b/src/analogsensor.cpp @@ -572,17 +572,7 @@ void AnalogSensor::publish_values(const bool force) { snprintf(topic, sizeof(topic), "switch/%s/%s_%02d/config", Mqtt::basename().c_str(), F_(analogsensor), sensor.gpio()); snprintf(command_topic, sizeof(command_topic), "%s/%s/%s", Mqtt::base().c_str(), F_(analogsensor), sensor.name().c_str()); config["cmd_t"] = command_topic; - if (EMSESP::system_.bool_format() == BOOL_FORMAT_TRUEFALSE) { - config["pl_on"] = true; - config["pl_off"] = false; - } else if (EMSESP::system_.bool_format() == BOOL_FORMAT_10) { - config["pl_on"] = 1; - config["pl_off"] = 0; - } else { - char result[12]; - config["pl_on"] = Helpers::render_boolean(result, true); - config["pl_off"] = Helpers::render_boolean(result, false); - } + Mqtt::add_ha_bool(config); } else if (sensor.type() == AnalogType::DIGITAL_OUT) { // DAC snprintf(topic, sizeof(topic), "number/%s/%s_%02d/config", Mqtt::basename().c_str(), F_(analogsensor), sensor.gpio()); snprintf(command_topic, sizeof(command_topic), "%s/%s/%s", Mqtt::base().c_str(), F_(analogsensor), sensor.name().c_str()); @@ -608,17 +598,7 @@ void AnalogSensor::publish_values(const bool force) { // config["step"] = sensor.factor(); } else if (sensor.type() == AnalogType::DIGITAL_IN) { snprintf(topic, sizeof(topic), "binary_sensor/%s/%s_%02d/config", Mqtt::basename().c_str(), F_(analogsensor), sensor.gpio()); - if (EMSESP::system_.bool_format() == BOOL_FORMAT_TRUEFALSE) { - config["pl_on"] = true; - config["pl_off"] = false; - } else if (EMSESP::system_.bool_format() == BOOL_FORMAT_10) { - config["pl_on"] = 1; - config["pl_off"] = 0; - } else { - char result[12]; - config["pl_on"] = Helpers::render_boolean(result, true); - config["pl_off"] = Helpers::render_boolean(result, false); - } + Mqtt::add_ha_bool(config); } else { snprintf(topic, sizeof(topic), "sensor/%s/%s_%02d/config", Mqtt::basename().c_str(), F_(analogsensor), sensor.gpio()); config["stat_cla"] = "measurement"; diff --git a/src/mqtt.cpp b/src/mqtt.cpp index c161b3e49..8f044bd14 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -1113,19 +1113,8 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev // applies to both Binary Sensor (read only) and a Switch (for a command) // has no unit of measure or icon if (type == DeviceValueType::BOOL) { - if (EMSESP::system_.bool_format() == BOOL_FORMAT_TRUEFALSE) { - doc["pl_on"] = true; - doc["pl_off"] = false; - snprintf(sample_val, sizeof(sample_val), "false"); - } else if (EMSESP::system_.bool_format() == BOOL_FORMAT_10) { - doc["pl_on"] = 1; - doc["pl_off"] = 0; - } else { - char result[12]; - doc["pl_on"] = Helpers::render_boolean(result, true); - doc["pl_off"] = Helpers::render_boolean(result, false); - snprintf(sample_val, sizeof(sample_val), "'%s'", Helpers::render_boolean(result, false)); - } + add_ha_bool(doc); + Helpers::render_boolean(sample_val, false); } doc["val_tpl"] = (std::string) "{{" + val_obj + " if " + val_cond + " else " + sample_val + "}}"; @@ -1449,4 +1438,20 @@ void Mqtt::add_ha_sections_to_doc(const char * name, } } +void Mqtt::add_ha_bool(JsonDocument & config) { + const char * pl_on = "pl_on"; + const char * pl_off = "pl_off"; + if (EMSESP::system_.bool_format() == BOOL_FORMAT_TRUEFALSE) { + config[pl_on] = true; + config[pl_off] = false; + } else if (EMSESP::system_.bool_format() == BOOL_FORMAT_10) { + config[pl_on] = 1; + config[pl_off] = 0; + } else { + char result[12]; + config[pl_on] = Helpers::render_boolean(result, true); + config[pl_off] = Helpers::render_boolean(result, false); + } +} + } // namespace emsesp \ No newline at end of file diff --git a/src/mqtt.h b/src/mqtt.h index c4acca9de..7a1688b78 100644 --- a/src/mqtt.h +++ b/src/mqtt.h @@ -231,6 +231,7 @@ class Mqtt { const char * cond1 = nullptr, const char * cond2 = nullptr, const char * negcond = nullptr); + static void add_ha_bool(JsonDocument & config); private: static uuid::log::Logger logger_; diff --git a/src/shower.cpp b/src/shower.cpp index 729ee2dfc..3d33b4ad3 100644 --- a/src/shower.cpp +++ b/src/shower.cpp @@ -202,17 +202,7 @@ void Shower::set_shower_state(bool state, bool force) { snprintf(stat_t, sizeof(stat_t), "%s/shower_active", Mqtt::base().c_str()); doc["stat_t"] = stat_t; - if (EMSESP::system_.bool_format() == BOOL_FORMAT_TRUEFALSE) { - doc["pl_on"] = "true"; - doc["pl_off"] = "false"; - } else if (EMSESP::system_.bool_format() == BOOL_FORMAT_10) { - doc["pl_on"] = 1; - doc["pl_off"] = 0; - } else { - char result[12]; - doc["pl_on"] = Helpers::render_boolean(result, true); - doc["pl_off"] = Helpers::render_boolean(result, false); - } + Mqtt::add_ha_bool(doc); Mqtt::add_ha_sections_to_doc("shower", stat_t, doc, true); // create first dev & ids diff --git a/src/web/WebCustomEntityService.cpp b/src/web/WebCustomEntityService.cpp index 989f760da..4ddacf70a 100644 --- a/src/web/WebCustomEntityService.cpp +++ b/src/web/WebCustomEntityService.cpp @@ -405,17 +405,7 @@ void WebCustomEntityService::publish(const bool force) { if (entityItem.value_type == DeviceValueType::BOOL) { // applies to both Binary Sensor (read only) and a Switch (for a command) - if (EMSESP::system_.bool_format() == BOOL_FORMAT_TRUEFALSE) { - config["pl_on"] = true; - config["pl_off"] = false; - } else if (EMSESP::system_.bool_format() == BOOL_FORMAT_10) { - config["pl_on"] = 1; - config["pl_off"] = 0; - } else { - char result[12]; - config["pl_on"] = Helpers::render_boolean(result, true); - config["pl_off"] = Helpers::render_boolean(result, false); - } + Mqtt::add_ha_bool(config); } Mqtt::add_ha_uom(config.as(), entityItem.value_type, entityItem.uom); // add uom diff --git a/src/web/WebSchedulerService.cpp b/src/web/WebSchedulerService.cpp index 5296e46f8..0b60ad849 100644 --- a/src/web/WebSchedulerService.cpp +++ b/src/web/WebSchedulerService.cpp @@ -280,18 +280,7 @@ void WebSchedulerService::publish(const bool force) { snprintf(command_topic, sizeof(command_topic), "%s/%s/%s", Mqtt::base().c_str(), F_(scheduler), scheduleItem.name.c_str()); config["cmd_t"] = command_topic; - if (EMSESP::system_.bool_format() == BOOL_FORMAT_TRUEFALSE) { - config["pl_on"] = true; - config["pl_off"] = false; - } else if (EMSESP::system_.bool_format() == BOOL_FORMAT_10) { - config["pl_on"] = 1; - config["pl_off"] = 0; - } else { - char result[12]; - config["pl_on"] = Helpers::render_boolean(result, true); - config["pl_off"] = Helpers::render_boolean(result, false); - } - + Mqtt::add_ha_bool(config); Mqtt::add_ha_sections_to_doc(F_(scheduler), stat_t, config, !ha_created, val_cond); ha_created |= Mqtt::queue_ha(topic, config.as());