fix mqtt::on_message, #1494

This commit is contained in:
MichaelDvP
2023-12-12 10:09:02 +01:00
parent b9af4325c9
commit d1f3ead8b9
5 changed files with 7 additions and 19 deletions

View File

@@ -66,9 +66,6 @@ class ESP8266React {
void setWill(const char * will_topic) { void setWill(const char * will_topic) {
_mqttSettingsService.setWill(will_topic); _mqttSettingsService.setWill(will_topic);
} }
void onMessage(espMqttClientTypes::OnMessageCallback callback) {
_mqttSettingsService.onMessage(callback);
}
void factoryReset() { void factoryReset() {
_factoryResetService.factoryReset(); _factoryResetService.factoryReset();

View File

@@ -68,6 +68,7 @@ void MqttSettingsService::startClient() {
} }
static_cast<espMqttClientSecure *>(_mqttClient)->onConnect(std::bind(&MqttSettingsService::onMqttConnect, this, _1)); static_cast<espMqttClientSecure *>(_mqttClient)->onConnect(std::bind(&MqttSettingsService::onMqttConnect, this, _1));
static_cast<espMqttClientSecure *>(_mqttClient)->onDisconnect(std::bind(&MqttSettingsService::onMqttDisconnect, this, _1)); static_cast<espMqttClientSecure *>(_mqttClient)->onDisconnect(std::bind(&MqttSettingsService::onMqttDisconnect, this, _1));
static_cast<espMqttClientSecure *>(_mqttClient)->onMessage(std::bind(&MqttSettingsService::onMqttMessage, this, _1, _2, _3, _4, _5, _6));
return; return;
} }
#endif #endif
@@ -75,6 +76,7 @@ void MqttSettingsService::startClient() {
_mqttClient = static_cast<MqttClient *>(new espMqttClient(espMqttClientTypes::UseInternalTask::NO)); _mqttClient = static_cast<MqttClient *>(new espMqttClient(espMqttClientTypes::UseInternalTask::NO));
static_cast<espMqttClient *>(_mqttClient)->onConnect(std::bind(&MqttSettingsService::onMqttConnect, this, _1)); static_cast<espMqttClient *>(_mqttClient)->onConnect(std::bind(&MqttSettingsService::onMqttConnect, this, _1));
static_cast<espMqttClient *>(_mqttClient)->onDisconnect(std::bind(&MqttSettingsService::onMqttDisconnect, this, _1)); static_cast<espMqttClient *>(_mqttClient)->onDisconnect(std::bind(&MqttSettingsService::onMqttDisconnect, this, _1));
static_cast<espMqttClient *>(_mqttClient)->onMessage(std::bind(&MqttSettingsService::onMqttMessage, this, _1, _2, _3, _4, _5, _6));
} }
void MqttSettingsService::loop() { void MqttSettingsService::loop() {
@@ -108,14 +110,8 @@ void MqttSettingsService::setWill(const char * topic) {
static_cast<espMqttClient *>(_mqttClient)->setWill(topic, 1, true, "offline"); static_cast<espMqttClient *>(_mqttClient)->setWill(topic, 1, true, "offline");
} }
void MqttSettingsService::onMessage(espMqttClientTypes::OnMessageCallback callback) { void MqttSettingsService::onMqttMessage(const espMqttClientTypes::MessageProperties& properties, const char* topic, const uint8_t* payload, size_t len, size_t index, size_t total) {
#if CONFIG_IDF_TARGET_ESP32S3 emsesp::EMSESP::mqtt_.on_message(topic, payload, len);
if (_state.enableTLS) {
static_cast<espMqttClientSecure *>(_mqttClient)->onMessage(callback);
return;
}
#endif
static_cast<espMqttClient *>(_mqttClient)->onMessage(callback);
} }
espMqttClientTypes::DisconnectReason MqttSettingsService::getDisconnectReason() { espMqttClientTypes::DisconnectReason MqttSettingsService::getDisconnectReason() {

View File

@@ -115,7 +115,6 @@ class MqttSettingsService : public StatefulService<MqttSettings> {
espMqttClientTypes::DisconnectReason getDisconnectReason(); espMqttClientTypes::DisconnectReason getDisconnectReason();
MqttClient * getMqttClient(); MqttClient * getMqttClient();
void setWill(const char * topic); void setWill(const char * topic);
void onMessage(espMqttClientTypes::OnMessageCallback callback);
protected: protected:
void onConfigUpdated(); void onConfigUpdated();
@@ -145,6 +144,7 @@ class MqttSettingsService : public StatefulService<MqttSettings> {
void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info); void WiFiEvent(WiFiEvent_t event, WiFiEventInfo_t info);
void onMqttConnect(bool sessionPresent); void onMqttConnect(bool sessionPresent);
void onMqttDisconnect(espMqttClientTypes::DisconnectReason reason); 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(); bool configureMqtt();
}; };

View File

@@ -212,7 +212,7 @@ void Mqtt::incoming(const char * topic, const char * payload) {
// received an MQTT message that we subscribed too // received an MQTT message that we subscribed too
// topic is the full path // topic is the full path
// payload is json or a single string and converted to a json with key 'value' // 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 // the payload is not terminated
// convert payload to a null-terminated char string // convert payload to a null-terminated char string
// see https://www.emelis.net/espMqttClient/#code-samples // 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.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) { void Mqtt::set_publish_time_boiler(uint16_t publish_time) {

View File

@@ -60,6 +60,7 @@ class Mqtt {
static void on_connect(); static void on_connect();
static void on_disconnect(espMqttClientTypes::DisconnectReason reason); 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 uint8_t device_type, const std::string & topic, mqtt_sub_function_p cb);
static void subscribe(const std::string & topic); static void subscribe(const std::string & topic);
static void resubscribe(); static void resubscribe();
@@ -231,7 +232,6 @@ class Mqtt {
static void queue_unsubscribe_message(const std::string & topic); static void queue_unsubscribe_message(const std::string & topic);
void on_publish(uint16_t packetId) const; 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 // function handlers for MQTT subscriptions
struct MQTTSubFunction { struct MQTTSubFunction {