mirror of
https://github.com/esphome/esphome.git
synced 2025-07-28 14:16:40 +00:00
fix(MQTT): Call disconnect callback on DNS error (#9016)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
parent
5362d1a89f
commit
16860e8a30
@ -17,7 +17,8 @@ enum class MQTTClientDisconnectReason : int8_t {
|
|||||||
MQTT_MALFORMED_CREDENTIALS = 4,
|
MQTT_MALFORMED_CREDENTIALS = 4,
|
||||||
MQTT_NOT_AUTHORIZED = 5,
|
MQTT_NOT_AUTHORIZED = 5,
|
||||||
ESP8266_NOT_ENOUGH_SPACE = 6,
|
ESP8266_NOT_ENOUGH_SPACE = 6,
|
||||||
TLS_BAD_FINGERPRINT = 7
|
TLS_BAD_FINGERPRINT = 7,
|
||||||
|
DNS_RESOLVE_ERROR = 8
|
||||||
};
|
};
|
||||||
|
|
||||||
/// internal struct for MQTT messages.
|
/// internal struct for MQTT messages.
|
||||||
|
@ -229,6 +229,8 @@ void MQTTClientComponent::check_dnslookup_() {
|
|||||||
if (this->dns_resolve_error_) {
|
if (this->dns_resolve_error_) {
|
||||||
ESP_LOGW(TAG, "Couldn't resolve IP address for '%s'", this->credentials_.address.c_str());
|
ESP_LOGW(TAG, "Couldn't resolve IP address for '%s'", this->credentials_.address.c_str());
|
||||||
this->state_ = MQTT_CLIENT_DISCONNECTED;
|
this->state_ = MQTT_CLIENT_DISCONNECTED;
|
||||||
|
this->disconnect_reason_ = MQTTClientDisconnectReason::DNS_RESOLVE_ERROR;
|
||||||
|
this->on_disconnect_.call(MQTTClientDisconnectReason::DNS_RESOLVE_ERROR);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -698,7 +700,9 @@ void MQTTClientComponent::set_on_connect(mqtt_on_connect_callback_t &&callback)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MQTTClientComponent::set_on_disconnect(mqtt_on_disconnect_callback_t &&callback) {
|
void MQTTClientComponent::set_on_disconnect(mqtt_on_disconnect_callback_t &&callback) {
|
||||||
|
auto callback_copy = callback;
|
||||||
this->mqtt_backend_.set_on_disconnect(std::forward<mqtt_on_disconnect_callback_t>(callback));
|
this->mqtt_backend_.set_on_disconnect(std::forward<mqtt_on_disconnect_callback_t>(callback));
|
||||||
|
this->on_disconnect_.add(std::move(callback_copy));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ASYNC_TCP_SSL_ENABLED
|
#if ASYNC_TCP_SSL_ENABLED
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include "esphome/components/network/ip_address.h"
|
#include "esphome/components/network/ip_address.h"
|
||||||
#include "esphome/core/automation.h"
|
#include "esphome/core/automation.h"
|
||||||
#include "esphome/core/component.h"
|
#include "esphome/core/component.h"
|
||||||
|
#include "esphome/core/helpers.h"
|
||||||
#include "esphome/core/log.h"
|
#include "esphome/core/log.h"
|
||||||
#if defined(USE_ESP32)
|
#if defined(USE_ESP32)
|
||||||
#include "mqtt_backend_esp32.h"
|
#include "mqtt_backend_esp32.h"
|
||||||
@ -334,6 +335,7 @@ class MQTTClientComponent : public Component {
|
|||||||
uint32_t connect_begin_;
|
uint32_t connect_begin_;
|
||||||
uint32_t last_connected_{0};
|
uint32_t last_connected_{0};
|
||||||
optional<MQTTClientDisconnectReason> disconnect_reason_{};
|
optional<MQTTClientDisconnectReason> disconnect_reason_{};
|
||||||
|
CallbackManager<MQTTBackend::on_disconnect_callback_t> on_disconnect_;
|
||||||
|
|
||||||
bool publish_nan_as_none_{false};
|
bool publish_nan_as_none_{false};
|
||||||
bool wait_for_connection_{false};
|
bool wait_for_connection_{false};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user