mirror of
https://github.com/esphome/esphome.git
synced 2026-02-08 08:41:59 +00:00
[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:
@@ -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]))
|
||||
|
||||
|
||||
@@ -378,17 +378,17 @@ class MQTTJsonMessageTrigger : public Trigger<JsonObjectConst> {
|
||||
}
|
||||
};
|
||||
|
||||
class MQTTConnectTrigger : public Trigger<> {
|
||||
class MQTTConnectTrigger : public Trigger<bool> {
|
||||
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<MQTTClientDisconnectReason> {
|
||||
public:
|
||||
explicit MQTTDisconnectTrigger(MQTTClientComponent *&client) {
|
||||
client->set_on_disconnect([this](MQTTClientDisconnectReason reason) { this->trigger(); });
|
||||
client->set_on_disconnect([this](MQTTClientDisconnectReason reason) { this->trigger(reason); });
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user