diff --git a/esphome/components/mqtt/__init__.py b/esphome/components/mqtt/__init__.py index f01c928b30..d57cedd144 100644 --- a/esphome/components/mqtt/__init__.py +++ b/esphome/components/mqtt/__init__.py @@ -113,6 +113,7 @@ MQTT_MESSAGE_SCHEMA = cv.Any( mqtt_ns = cg.esphome_ns.namespace("mqtt") MQTTMessage = mqtt_ns.struct("MQTTMessage") +MQTTClientDisconnectReason = mqtt_ns.enum("MQTTClientDisconnectReason") MQTTClientComponent = mqtt_ns.class_("MQTTClientComponent", cg.Component) MQTTPublishAction = mqtt_ns.class_("MQTTPublishAction", automation.Action) MQTTPublishJsonAction = mqtt_ns.class_("MQTTPublishJsonAction", automation.Action) @@ -124,9 +125,11 @@ MQTTMessageTrigger = mqtt_ns.class_( MQTTJsonMessageTrigger = mqtt_ns.class_( "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", automation.Trigger.template() + "MQTTDisconnectTrigger", automation.Trigger.template(MQTTClientDisconnectReason) ) MQTTComponent = mqtt_ns.class_("MQTTComponent", cg.Component) MQTTConnectedCondition = mqtt_ns.class_("MQTTConnectedCondition", Condition) @@ -475,11 +478,15 @@ async def to_code(config): for conf in config.get(CONF_ON_CONNECT, []): 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, []): 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])) diff --git a/esphome/components/mqtt/mqtt_client.h b/esphome/components/mqtt/mqtt_client.h index 4189e7ae77..9e9db03b19 100644 --- a/esphome/components/mqtt/mqtt_client.h +++ b/esphome/components/mqtt/mqtt_client.h @@ -378,17 +378,17 @@ class MQTTJsonMessageTrigger : public Trigger { } }; -class MQTTConnectTrigger : public Trigger<> { +class MQTTConnectTrigger : public Trigger { public: 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 { public: explicit MQTTDisconnectTrigger(MQTTClientComponent *&client) { - client->set_on_disconnect([this](MQTTClientDisconnectReason reason) { this->trigger(); }); + client->set_on_disconnect([this](MQTTClientDisconnectReason reason) { this->trigger(reason); }); } }; diff --git a/tests/components/mqtt/common.yaml b/tests/components/mqtt/common.yaml index 284ac30337..33988cebb4 100644 --- a/tests/components/mqtt/common.yaml +++ b/tests/components/mqtt/common.yaml @@ -57,10 +57,14 @@ mqtt: - mqtt.publish: topic: some/topic payload: Hello + - lambda: |- + ESP_LOGD("MQTT", "Session present %d", session_present); on_disconnect: - mqtt.publish: topic: some/topic payload: Good-bye + - lambda: |- + ESP_LOGD("MQTT", "Disconnect reason %d", reason); publish_nan_as_none: false binary_sensor: