mirror of
https://github.com/esphome/esphome.git
synced 2026-06-02 19:18:20 +08:00
[mqtt] Eliminate per-entity loop overhead and heap churn (#13356)
This commit is contained in:
@@ -403,6 +403,12 @@ void MQTTClientComponent::loop() {
|
|||||||
|
|
||||||
this->last_connected_ = now;
|
this->last_connected_ = now;
|
||||||
this->resubscribe_subscriptions_();
|
this->resubscribe_subscriptions_();
|
||||||
|
|
||||||
|
// Process pending resends for all MQTT components centrally
|
||||||
|
// This is more efficient than each component polling in its own loop
|
||||||
|
for (MQTTComponent *component : this->children_) {
|
||||||
|
component->process_resend();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -308,16 +308,12 @@ void MQTTComponent::call_setup() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MQTTComponent::call_loop() {
|
void MQTTComponent::process_resend() {
|
||||||
if (this->is_internal())
|
// Called by MQTTClientComponent when connected to process pending resends
|
||||||
|
// Note: is_internal() check not needed - internal components are never registered
|
||||||
|
if (!this->resend_state_)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
this->loop();
|
|
||||||
|
|
||||||
if (!this->resend_state_ || !this->is_connected_()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this->resend_state_ = false;
|
this->resend_state_ = false;
|
||||||
if (this->is_discovery_enabled()) {
|
if (this->is_discovery_enabled()) {
|
||||||
if (!this->send_discovery_()) {
|
if (!this->send_discovery_()) {
|
||||||
|
|||||||
@@ -81,8 +81,6 @@ class MQTTComponent : public Component {
|
|||||||
/// Override setup_ so that we can call send_discovery() when needed.
|
/// Override setup_ so that we can call send_discovery() when needed.
|
||||||
void call_setup() override;
|
void call_setup() override;
|
||||||
|
|
||||||
void call_loop() override;
|
|
||||||
|
|
||||||
void call_dump_config() override;
|
void call_dump_config() override;
|
||||||
|
|
||||||
/// Send discovery info the Home Assistant, override this.
|
/// Send discovery info the Home Assistant, override this.
|
||||||
@@ -133,6 +131,9 @@ class MQTTComponent : public Component {
|
|||||||
/// Internal method for the MQTT client base to schedule a resend of the state on reconnect.
|
/// Internal method for the MQTT client base to schedule a resend of the state on reconnect.
|
||||||
void schedule_resend_state();
|
void schedule_resend_state();
|
||||||
|
|
||||||
|
/// Process pending resend if needed (called by MQTTClientComponent)
|
||||||
|
void process_resend();
|
||||||
|
|
||||||
/** Send a MQTT message.
|
/** Send a MQTT message.
|
||||||
*
|
*
|
||||||
* @param topic The topic.
|
* @param topic The topic.
|
||||||
|
|||||||
Reference in New Issue
Block a user