From 2da312bf15ca82b09e864d078de47129ec41c444 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 12 May 2025 16:29:36 +0200 Subject: [PATCH] optimistic only for writable values --- src/core/analogsensor.cpp | 2 +- src/core/mqtt.cpp | 4 ++-- src/web/WebCustomEntityService.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/analogsensor.cpp b/src/core/analogsensor.cpp index faca9c471..0ca1084fe 100644 --- a/src/core/analogsensor.cpp +++ b/src/core/analogsensor.cpp @@ -682,7 +682,7 @@ void AnalogSensor::publish_values(const bool force) { Mqtt::add_ha_sections_to_doc("analog", stat_t, config, !is_ha_device_created, val_cond); - if (Mqtt::ha_optimistic()) { + if (Mqtt::ha_optimistic() && config["cmd_t"].is()) { config["optimistic"] = true; } sensor.ha_registered = Mqtt::queue_ha(topic, config.as()); diff --git a/src/core/mqtt.cpp b/src/core/mqtt.cpp index 280649357..3eff811e8 100644 --- a/src/core/mqtt.cpp +++ b/src/core/mqtt.cpp @@ -1116,7 +1116,7 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev doc["dev"] = dev_json; - if (ha_optimistic_) { + if (ha_optimistic_ && has_cmd) { doc["optimistic"] = true; } return queue_ha(topic, doc.as()); @@ -1406,7 +1406,7 @@ void Mqtt::add_ha_sections_to_doc(const char * name, // make local copy of state, as the pointer will get derefenced char state[50]; - strcpy(state, state_t); + strlcpy(state, state_t, sizeof(state)); // skip conditional Jinja2 templates if not home assistant if (discovery_type() == discoveryType::HOMEASSISTANT) { diff --git a/src/web/WebCustomEntityService.cpp b/src/web/WebCustomEntityService.cpp index 69d9ad2b9..a96755cb2 100644 --- a/src/web/WebCustomEntityService.cpp +++ b/src/web/WebCustomEntityService.cpp @@ -452,7 +452,7 @@ void WebCustomEntityService::publish(const bool force) { Mqtt::add_ha_sections_to_doc(F_(custom), stat_t, config, !ha_created, val_cond); - if (Mqtt::ha_optimistic()) { + if (Mqtt::ha_optimistic() && (entityItem.writeable || entityItem.ram > 0)) { config["optimistic"] = true; } ha_created |= Mqtt::queue_ha(topic, config.as());