mirror of
https://github.com/esphome/esphome.git
synced 2024-12-22 13:34:54 +01:00
Add on_open and on_closed triggers to cover (#2488)
This commit is contained in:
parent
6a5eb43454
commit
b4f57972fb
3 changed files with 56 additions and 0 deletions
|
@ -15,6 +15,7 @@ from esphome.const import (
|
||||||
CONF_TILT_STATE_TOPIC,
|
CONF_TILT_STATE_TOPIC,
|
||||||
CONF_STOP,
|
CONF_STOP,
|
||||||
CONF_MQTT_ID,
|
CONF_MQTT_ID,
|
||||||
|
CONF_TRIGGER_ID,
|
||||||
)
|
)
|
||||||
from esphome.core import CORE, coroutine_with_priority
|
from esphome.core import CORE, coroutine_with_priority
|
||||||
from esphome.cpp_helpers import setup_entity
|
from esphome.cpp_helpers import setup_entity
|
||||||
|
@ -67,6 +68,15 @@ CoverPublishAction = cover_ns.class_("CoverPublishAction", automation.Action)
|
||||||
CoverIsOpenCondition = cover_ns.class_("CoverIsOpenCondition", Condition)
|
CoverIsOpenCondition = cover_ns.class_("CoverIsOpenCondition", Condition)
|
||||||
CoverIsClosedCondition = cover_ns.class_("CoverIsClosedCondition", Condition)
|
CoverIsClosedCondition = cover_ns.class_("CoverIsClosedCondition", Condition)
|
||||||
|
|
||||||
|
# Triggers
|
||||||
|
CoverOpenTrigger = cover_ns.class_("CoverOpenTrigger", automation.Trigger.template())
|
||||||
|
CoverClosedTrigger = cover_ns.class_(
|
||||||
|
"CoverClosedTrigger", automation.Trigger.template()
|
||||||
|
)
|
||||||
|
|
||||||
|
CONF_ON_OPEN = "on_open"
|
||||||
|
CONF_ON_CLOSED = "on_closed"
|
||||||
|
|
||||||
COVER_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend(
|
COVER_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend(
|
||||||
{
|
{
|
||||||
cv.GenerateID(): cv.declare_id(Cover),
|
cv.GenerateID(): cv.declare_id(Cover),
|
||||||
|
@ -84,6 +94,16 @@ COVER_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).ex
|
||||||
cv.Optional(CONF_TILT_STATE_TOPIC): cv.All(
|
cv.Optional(CONF_TILT_STATE_TOPIC): cv.All(
|
||||||
cv.requires_component("mqtt"), cv.subscribe_topic
|
cv.requires_component("mqtt"), cv.subscribe_topic
|
||||||
),
|
),
|
||||||
|
cv.Optional(CONF_ON_OPEN): automation.validate_automation(
|
||||||
|
{
|
||||||
|
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(CoverOpenTrigger),
|
||||||
|
}
|
||||||
|
),
|
||||||
|
cv.Optional(CONF_ON_CLOSED): automation.validate_automation(
|
||||||
|
{
|
||||||
|
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(CoverClosedTrigger),
|
||||||
|
}
|
||||||
|
),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -94,6 +114,13 @@ async def setup_cover_core_(var, config):
|
||||||
if CONF_DEVICE_CLASS in config:
|
if CONF_DEVICE_CLASS in config:
|
||||||
cg.add(var.set_device_class(config[CONF_DEVICE_CLASS]))
|
cg.add(var.set_device_class(config[CONF_DEVICE_CLASS]))
|
||||||
|
|
||||||
|
for conf in config.get(CONF_ON_OPEN, []):
|
||||||
|
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
||||||
|
await automation.build_automation(trigger, [], conf)
|
||||||
|
for conf in config.get(CONF_ON_CLOSED, []):
|
||||||
|
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
||||||
|
await automation.build_automation(trigger, [], conf)
|
||||||
|
|
||||||
if CONF_MQTT_ID in config:
|
if CONF_MQTT_ID in config:
|
||||||
mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var)
|
mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var)
|
||||||
await mqtt.register_mqtt_component(mqtt_, config)
|
await mqtt.register_mqtt_component(mqtt_, config)
|
||||||
|
|
|
@ -99,6 +99,7 @@ template<typename... Ts> class CoverIsOpenCondition : public Condition<Ts...> {
|
||||||
protected:
|
protected:
|
||||||
Cover *cover_;
|
Cover *cover_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class CoverIsClosedCondition : public Condition<Ts...> {
|
template<typename... Ts> class CoverIsClosedCondition : public Condition<Ts...> {
|
||||||
public:
|
public:
|
||||||
CoverIsClosedCondition(Cover *cover) : cover_(cover) {}
|
CoverIsClosedCondition(Cover *cover) : cover_(cover) {}
|
||||||
|
@ -108,5 +109,27 @@ template<typename... Ts> class CoverIsClosedCondition : public Condition<Ts...>
|
||||||
Cover *cover_;
|
Cover *cover_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class CoverOpenTrigger : public Trigger<> {
|
||||||
|
public:
|
||||||
|
CoverOpenTrigger(Cover *a_cover) {
|
||||||
|
a_cover->add_on_state_callback([this, a_cover]() {
|
||||||
|
if (a_cover->is_fully_open()) {
|
||||||
|
this->trigger();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class CoverClosedTrigger : public Trigger<> {
|
||||||
|
public:
|
||||||
|
CoverClosedTrigger(Cover *a_cover) {
|
||||||
|
a_cover->add_on_state_callback([this, a_cover]() {
|
||||||
|
if (a_cover->is_fully_closed()) {
|
||||||
|
this->trigger();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace cover
|
} // namespace cover
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
|
|
|
@ -2307,6 +2307,12 @@ cover:
|
||||||
tilt_lambda: !lambda 'return 0.5;'
|
tilt_lambda: !lambda 'return 0.5;'
|
||||||
tilt_state_topic: tilt/state/topic
|
tilt_state_topic: tilt/state/topic
|
||||||
tilt_command_topic: tilt/command/topic
|
tilt_command_topic: tilt/command/topic
|
||||||
|
on_open:
|
||||||
|
then:
|
||||||
|
- lambda: 'ESP_LOGD("cover", "open");'
|
||||||
|
on_closed:
|
||||||
|
then:
|
||||||
|
- lambda: 'ESP_LOGD("cover", "closed");'
|
||||||
- platform: am43
|
- platform: am43
|
||||||
name: 'Test AM43'
|
name: 'Test AM43'
|
||||||
id: am43_test
|
id: am43_test
|
||||||
|
|
Loading…
Reference in a new issue