mirror of
https://github.com/esphome/esphome.git
synced 2026-05-30 23:54:04 +08: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")
|
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]))
|
||||||
|
|
||||||
|
|||||||
@@ -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); });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user