From ecab30d4ac5eafbdea8d85a63f4e2462f898a8f7 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Tue, 16 Dec 2025 08:27:21 +0100 Subject: [PATCH] do not flood mqtt queue if publish on change is set --- src/core/emsesp.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/core/emsesp.cpp b/src/core/emsesp.cpp index cab2ae0b7..5a4722ea5 100644 --- a/src/core/emsesp.cpp +++ b/src/core/emsesp.cpp @@ -1191,16 +1191,20 @@ bool EMSESP::process_telegram(std::shared_ptr telegram) { found_device = emsdevice.get(); if (emsdevice->handle_telegram(telegram)) { telegram_found = true; - if (Mqtt::connected() - && ((mqtt_.get_publish_onchange(found_device->device_type()) && found_device->has_update()) - || (telegram->type_id == publish_id_ && telegram->dest == EMSbus::ems_bus_id()))) { - if (telegram->type_id == publish_id_) { + if (Mqtt::connected()) { + // publish device data if it was a validate after write + if (telegram->type_id == publish_id_ && telegram->dest == EMSbus::ems_bus_id()) { publish_id_ = 0; - } - found_device->has_update(false); // reset flag - if (!Mqtt::publish_single()) { + found_device->has_update(false); // reset flag publish_device_values(found_device->device_type()); // publish to MQTT if we explicitly have too } + // auto publish: timeinterval 0 and publish single not set, only if queue is empty + else if (mqtt_.get_publish_onchange(found_device->device_type()) && found_device->has_update() && mqtt_.publish_queued() == 0) { + found_device->has_update(false); // reset flag + if (!Mqtt::publish_single()) { + publish_device_values(found_device->device_type()); + } + } } break; // remove this to handle same telegrams on multiple devices }