From 911aa40ca13cd9b4aff656d8e3b101d5a59bbf25 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 15 Dec 2025 16:48:33 +0100 Subject: [PATCH] fix mqtt bool output for analog, scheduler --- src/core/analogsensor.cpp | 11 ++++++----- src/web/WebCustomEntityService.cpp | 2 +- src/web/WebSchedulerService.cpp | 7 ++++--- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/core/analogsensor.cpp b/src/core/analogsensor.cpp index 565746d67..7ac9c793b 100644 --- a/src/core/analogsensor.cpp +++ b/src/core/analogsensor.cpp @@ -675,11 +675,12 @@ void AnalogSensor::publish_values(const bool force) { } JsonDocument doc; + JsonObject obj = doc.to(); for (auto & sensor : sensors_) { if (Mqtt::is_nested()) { char s[10]; - JsonObject dataSensor = doc[Helpers::smallitoa(s, sensor.gpio())].to(); + JsonObject dataSensor = obj[Helpers::smallitoa(s, sensor.gpio())].to(); dataSensor["name"] = sensor.name(); #if CONFIG_IDF_TARGET_ESP32 if (sensor.type() == AnalogType::PULSE || (sensor.type() == AnalogType::DIGITAL_OUT && sensor.gpio() != 25 && sensor.gpio() != 26)) { @@ -691,10 +692,10 @@ void AnalogSensor::publish_values(const bool force) { dataSensor["value"] = serialized(Helpers::render_value(s, sensor.value(), 2)); // double } } else if (sensor.type() == AnalogType::DIGITAL_IN || sensor.type() == AnalogType::DIGITAL_OUT || sensor.type() == AnalogType::PULSE) { - Mqtt::add_value_bool(doc.as(), sensor.name(), sensor.value() != 0); + Mqtt::add_value_bool(obj, (const char *)sensor.name(), sensor.value() != 0); } else { char s[10]; - doc[sensor.name()] = serialized(Helpers::render_value(s, sensor.value(), 2)); + obj[sensor.name()] = serialized(Helpers::render_value(s, sensor.value(), 2)); } // create HA config if hasn't already been done @@ -804,7 +805,7 @@ void AnalogSensor::publish_values(const bool force) { // add default_entity_id std::string topic_str(topic); - doc["def_ent_id"] = topic_str.substr(0, topic_str.find("/")) + "." + uniq_s; + config["def_ent_id"] = topic_str.substr(0, topic_str.find("/")) + "." + uniq_s; Mqtt::add_ha_avty_section(config.as(), stat_t, val_cond); @@ -814,7 +815,7 @@ void AnalogSensor::publish_values(const bool force) { char topic[Mqtt::MQTT_TOPIC_MAX_SIZE]; snprintf(topic, sizeof(topic), "%s_data", F_(analogsensor)); - Mqtt::queue_publish(topic, doc.as()); + Mqtt::queue_publish(topic, obj); } // called from emsesp.cpp for commands diff --git a/src/web/WebCustomEntityService.cpp b/src/web/WebCustomEntityService.cpp index 22e7df99d..9dcef0cc5 100644 --- a/src/web/WebCustomEntityService.cpp +++ b/src/web/WebCustomEntityService.cpp @@ -225,7 +225,7 @@ bool WebCustomEntityService::command_setvalue(const char * value, const int8_t i // if add_uom is true it will add the UOM string to the value void WebCustomEntityService::render_value(JsonObject output, CustomEntityItem const & entity, const bool useVal, const bool web, const bool add_uom) { char payload[20]; - const char * name = useVal ? "value" : entity.name; + const char * name = useVal ? "value" : (const char *)entity.name; switch (entity.value_type) { case DeviceValueType::BOOL: diff --git a/src/web/WebSchedulerService.cpp b/src/web/WebSchedulerService.cpp index e732f6ea6..00c8eeb7d 100644 --- a/src/web/WebSchedulerService.cpp +++ b/src/web/WebSchedulerService.cpp @@ -235,10 +235,11 @@ void WebSchedulerService::publish(const bool force) { } JsonDocument doc; + JsonObject output = doc.to(); bool ha_created = ha_registered_; for (const ScheduleItem & scheduleItem : *scheduleItems_) { - if (scheduleItem.name[0] != '\0' && !doc[scheduleItem.name].is()) { - Mqtt::add_value_bool(doc.as(), scheduleItem.name, scheduleItem.active); + if (scheduleItem.name[0] != '\0' && !output[scheduleItem.name].is()) { + Mqtt::add_value_bool(output, (const char *)scheduleItem.name, scheduleItem.active); // create HA config if (Mqtt::ha_enabled() && !ha_registered_) { @@ -290,7 +291,7 @@ void WebSchedulerService::publish(const bool force) { if (!doc.isNull()) { char topic[Mqtt::MQTT_TOPIC_MAX_SIZE]; snprintf(topic, sizeof(topic), "%s_data", F_(scheduler)); - Mqtt::queue_publish(topic, doc.as()); + Mqtt::queue_publish(topic, output); } }