[mqtt] Include session_present and reason parameters in connection callbacks (#12413)

Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
Rodrigo Martín
2026-01-08 23:05:53 +01:00
committed by GitHub
parent d4969f581a
commit 012a1e2afd
3 changed files with 19 additions and 8 deletions
+11 -4
View File
@@ -113,6 +113,7 @@ MQTT_MESSAGE_SCHEMA = cv.Any(
mqtt_ns = cg.esphome_ns.namespace("mqtt") mqtt_ns = cg.esphome_ns.namespace("mqtt")
MQTTMessage = mqtt_ns.struct("MQTTMessage") MQTTMessage = mqtt_ns.struct("MQTTMessage")
MQTTClientDisconnectReason = mqtt_ns.enum("MQTTClientDisconnectReason")
MQTTClientComponent = mqtt_ns.class_("MQTTClientComponent", cg.Component) MQTTClientComponent = mqtt_ns.class_("MQTTClientComponent", cg.Component)
MQTTPublishAction = mqtt_ns.class_("MQTTPublishAction", automation.Action) MQTTPublishAction = mqtt_ns.class_("MQTTPublishAction", automation.Action)
MQTTPublishJsonAction = mqtt_ns.class_("MQTTPublishJsonAction", automation.Action) MQTTPublishJsonAction = mqtt_ns.class_("MQTTPublishJsonAction", automation.Action)
@@ -124,9 +125,11 @@ MQTTMessageTrigger = mqtt_ns.class_(
MQTTJsonMessageTrigger = mqtt_ns.class_( MQTTJsonMessageTrigger = mqtt_ns.class_(
"MQTTJsonMessageTrigger", automation.Trigger.template(cg.JsonObjectConst) "MQTTJsonMessageTrigger", automation.Trigger.template(cg.JsonObjectConst)
) )
MQTTConnectTrigger = mqtt_ns.class_("MQTTConnectTrigger", automation.Trigger.template()) MQTTConnectTrigger = mqtt_ns.class_(
"MQTTConnectTrigger", automation.Trigger.template(cg.bool_)
)
MQTTDisconnectTrigger = mqtt_ns.class_( MQTTDisconnectTrigger = mqtt_ns.class_(
"MQTTDisconnectTrigger", automation.Trigger.template() "MQTTDisconnectTrigger", automation.Trigger.template(MQTTClientDisconnectReason)
) )
MQTTComponent = mqtt_ns.class_("MQTTComponent", cg.Component) MQTTComponent = mqtt_ns.class_("MQTTComponent", cg.Component)
MQTTConnectedCondition = mqtt_ns.class_("MQTTConnectedCondition", Condition) MQTTConnectedCondition = mqtt_ns.class_("MQTTConnectedCondition", Condition)
@@ -475,11 +478,15 @@ async def to_code(config):
for conf in config.get(CONF_ON_CONNECT, []): for conf in config.get(CONF_ON_CONNECT, []):
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
await automation.build_automation(trigger, [], conf) await automation.build_automation(
trigger, [(cg.bool_, "session_present")], conf
)
for conf in config.get(CONF_ON_DISCONNECT, []): for conf in config.get(CONF_ON_DISCONNECT, []):
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
await automation.build_automation(trigger, [], conf) await automation.build_automation(
trigger, [(MQTTClientDisconnectReason, "reason")], conf
)
cg.add(var.set_publish_nan_as_none(config[CONF_PUBLISH_NAN_AS_NONE])) cg.add(var.set_publish_nan_as_none(config[CONF_PUBLISH_NAN_AS_NONE]))
+4 -4
View File
@@ -378,17 +378,17 @@ class MQTTJsonMessageTrigger : public Trigger<JsonObjectConst> {
} }
}; };
class MQTTConnectTrigger : public Trigger<> { class MQTTConnectTrigger : public Trigger<bool> {
public: public:
explicit MQTTConnectTrigger(MQTTClientComponent *&client) { explicit MQTTConnectTrigger(MQTTClientComponent *&client) {
client->set_on_connect([this](bool session_present) { this->trigger(); }); client->set_on_connect([this](bool session_present) { this->trigger(session_present); });
} }
}; };
class MQTTDisconnectTrigger : public Trigger<> { class MQTTDisconnectTrigger : public Trigger<MQTTClientDisconnectReason> {
public: public:
explicit MQTTDisconnectTrigger(MQTTClientComponent *&client) { explicit MQTTDisconnectTrigger(MQTTClientComponent *&client) {
client->set_on_disconnect([this](MQTTClientDisconnectReason reason) { this->trigger(); }); client->set_on_disconnect([this](MQTTClientDisconnectReason reason) { this->trigger(reason); });
} }
}; };
+4
View File
@@ -57,10 +57,14 @@ mqtt:
- mqtt.publish: - mqtt.publish:
topic: some/topic topic: some/topic
payload: Hello payload: Hello
- lambda: |-
ESP_LOGD("MQTT", "Session present %d", session_present);
on_disconnect: on_disconnect:
- mqtt.publish: - mqtt.publish:
topic: some/topic topic: some/topic
payload: Good-bye payload: Good-bye
- lambda: |-
ESP_LOGD("MQTT", "Disconnect reason %d", reason);
publish_nan_as_none: false publish_nan_as_none: false
binary_sensor: binary_sensor: