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..ca1c0bdfc 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,8 @@ 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() { diff --git a/lib/framework/MqttSettingsService.h b/lib/framework/MqttSettingsService.h index 84df758f5..6fbd1e296 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,6 +144,7 @@ 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(); }; 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..f82ef3e00 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 {