diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 5d697efff..775da9bb4 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -15,6 +15,7 @@ - exhaust temperature for some boilers - add back boil2hyst [#1477](https://github.com/emsesp/EMS-ESP32/issues/1477) +- subscribed MQTT topics not detecting changes by EMS-ESP [#1494](https://github.com/emsesp/EMS-ESP32/issues/1494) ## Changed diff --git a/lib/framework/ESP8266React.h b/lib/framework/ESP8266React.h index e44397c9e..2bab9e190 100644 --- a/lib/framework/ESP8266React.h +++ b/lib/framework/ESP8266React.h @@ -66,9 +66,6 @@ class ESP8266React { void setWill(const char * will_topic) { _mqttSettingsService.setWill(will_topic); } - void onMessage(espMqttClientTypes::OnMessageCallback callback) { - _mqttSettingsService.onMessage(callback); - } void factoryReset() { _factoryResetService.factoryReset(); diff --git a/lib/framework/MqttSettingsService.cpp b/lib/framework/MqttSettingsService.cpp index c601950db..eb10ef718 100644 --- a/lib/framework/MqttSettingsService.cpp +++ b/lib/framework/MqttSettingsService.cpp @@ -68,6 +68,7 @@ void MqttSettingsService::startClient() { } static_cast(_mqttClient)->onConnect(std::bind(&MqttSettingsService::onMqttConnect, this, _1)); static_cast(_mqttClient)->onDisconnect(std::bind(&MqttSettingsService::onMqttDisconnect, this, _1)); + static_cast(_mqttClient)->onMessage(std::bind(&MqttSettingsService::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); return; } #endif @@ -75,6 +76,7 @@ void MqttSettingsService::startClient() { _mqttClient = static_cast(new espMqttClient(espMqttClientTypes::UseInternalTask::NO)); static_cast(_mqttClient)->onConnect(std::bind(&MqttSettingsService::onMqttConnect, this, _1)); static_cast(_mqttClient)->onDisconnect(std::bind(&MqttSettingsService::onMqttDisconnect, this, _1)); + static_cast(_mqttClient)->onMessage(std::bind(&MqttSettingsService::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); } void MqttSettingsService::loop() { @@ -108,14 +110,13 @@ void MqttSettingsService::setWill(const char * topic) { static_cast(_mqttClient)->setWill(topic, 1, true, "offline"); } -void MqttSettingsService::onMessage(espMqttClientTypes::OnMessageCallback callback) { -#if CONFIG_IDF_TARGET_ESP32S3 - if (_state.enableTLS) { - static_cast(_mqttClient)->onMessage(callback); - return; - } -#endif - static_cast(_mqttClient)->onMessage(callback); +void MqttSettingsService::onMqttMessage(const espMqttClientTypes::MessageProperties & properties, + const char * topic, + const uint8_t * payload, + size_t len, + size_t index, + size_t total) { + emsesp::EMSESP::mqtt_.on_message(topic, payload, len); } espMqttClientTypes::DisconnectReason MqttSettingsService::getDisconnectReason() { @@ -394,4 +395,4 @@ StateUpdateResult MqttSettings::update(JsonObject & root, MqttSettings & setting } return StateUpdateResult::CHANGED; -} +} \ No newline at end of file diff --git a/lib/framework/MqttSettingsService.h b/lib/framework/MqttSettingsService.h index 84df758f5..e2541dcda 100644 --- a/lib/framework/MqttSettingsService.h +++ b/lib/framework/MqttSettingsService.h @@ -115,7 +115,6 @@ class MqttSettingsService : public StatefulService { espMqttClientTypes::DisconnectReason getDisconnectReason(); MqttClient * getMqttClient(); void setWill(const char * topic); - void onMessage(espMqttClientTypes::OnMessageCallback callback); protected: void onConfigUpdated(); @@ -145,7 +144,9 @@ class MqttSettingsService : public StatefulService { void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info); void onMqttConnect(bool sessionPresent); void onMqttDisconnect(espMqttClientTypes::DisconnectReason reason); + void + onMqttMessage(const espMqttClientTypes::MessageProperties & properties, const char * topic, const uint8_t * payload, size_t len, size_t index, size_t total); bool configureMqtt(); }; -#endif +#endif \ No newline at end of file diff --git a/src/mqtt.cpp b/src/mqtt.cpp index 9ca917724..ff2f42351 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -212,7 +212,7 @@ void Mqtt::incoming(const char * topic, const char * payload) { // received an MQTT message that we subscribed too // topic is the full path // payload is json or a single string and converted to a json with key 'value' -void Mqtt::on_message(const char * topic, const uint8_t * payload, size_t len) const { +void Mqtt::on_message(const char * topic, const uint8_t * payload, size_t len) { // the payload is not terminated // convert payload to a null-terminated char string // see https://www.emelis.net/espMqttClient/#code-samples @@ -390,11 +390,6 @@ void Mqtt::start() { } EMSESP::esp8266React.setWill(will_topic); // with qos 1, retain true - - EMSESP::esp8266React.onMessage( - [this](const espMqttClientTypes::MessageProperties & properties, const char * topic, const uint8_t * payload, size_t len, size_t index, size_t total) { - on_message(topic, payload, len); // receiving mqtt - }); } void Mqtt::set_publish_time_boiler(uint16_t publish_time) { diff --git a/src/mqtt.h b/src/mqtt.h index d02fff23c..53f4b631f 100644 --- a/src/mqtt.h +++ b/src/mqtt.h @@ -60,6 +60,7 @@ class Mqtt { static void on_connect(); static void on_disconnect(espMqttClientTypes::DisconnectReason reason); + static void on_message(const char * topic, const uint8_t * payload, size_t len); static void subscribe(const uint8_t device_type, const std::string & topic, mqtt_sub_function_p cb); static void subscribe(const std::string & topic); static void resubscribe(); @@ -231,7 +232,6 @@ class Mqtt { static void queue_unsubscribe_message(const std::string & topic); void on_publish(uint16_t packetId) const; - void on_message(const char * topic, const uint8_t * payload, size_t len) const; // function handlers for MQTT subscriptions struct MQTTSubFunction { @@ -295,4 +295,4 @@ class Mqtt { } // namespace emsesp -#endif +#endif \ No newline at end of file diff --git a/src/version.h b/src/version.h index c5e1ec57c..98c9132ab 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.6.5-dev.3" +#define EMSESP_APP_VERSION "3.6.5-dev.4"