From 4c0e0b8d76619d26f1a9f0c38d1bf927460eb4cc Mon Sep 17 00:00:00 2001 From: clydebarrow <2366188+clydebarrow@users.noreply.github.com> Date: Fri, 23 Jan 2026 18:10:01 +1100 Subject: [PATCH] Add conditions --- esphome/components/cover/__init__.py | 23 +++++++++++++++++++++- tests/components/template/common-base.yaml | 11 +++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/esphome/components/cover/__init__.py b/esphome/components/cover/__init__.py index 7d1f22d737..88abfddb4e 100644 --- a/esphome/components/cover/__init__.py +++ b/esphome/components/cover/__init__.py @@ -86,7 +86,8 @@ StopAction = cover_ns.class_("StopAction", automation.Action) ToggleAction = cover_ns.class_("ToggleAction", automation.Action) ControlAction = cover_ns.class_("ControlAction", automation.Action) CoverPublishAction = cover_ns.class_("CoverPublishAction", automation.Action) -CoverIsCondition = cover_ns.class_("CoverIsCondition", Condition) +CoverIsOpenCondition = cover_ns.class_("CoverIsOpenCondition", Condition) +CoverIsClosedCondition = cover_ns.class_("CoverIsClosedCondition", Condition) CoverOpenedTrigger = cover_ns.class_( "CoverOpenedTrigger", automation.Trigger.template() ) @@ -305,6 +306,26 @@ async def cover_control_to_code(config, action_id, template_arg, args): return var +@automation.register_condition( + "cover.is_open", + CoverIsOpenCondition, + cv.maybe_simple_value({cv.Required(CONF_ID): cv.use_id(Cover)}, key=CONF_ID), +) +async def cover_is_open_to_code(config, condition_id, template_arg, args): + paren = await cg.get_variable(config[CONF_ID]) + return cg.new_Pvariable(condition_id, template_arg, paren) + + +@automation.register_condition( + "cover.is_closed", + CoverIsClosedCondition, + cv.maybe_simple_value({cv.Required(CONF_ID): cv.use_id(Cover)}, key=CONF_ID), +) +async def cover_is_closed_to_code(config, condition_id, template_arg, args): + paren = await cg.get_variable(config[CONF_ID]) + return cg.new_Pvariable(condition_id, template_arg, paren) + + @coroutine_with_priority(CoroPriority.CORE) async def to_code(config): cg.add_global(cover_ns.using) diff --git a/tests/components/template/common-base.yaml b/tests/components/template/common-base.yaml index 93672243fc..7fe63f4622 100644 --- a/tests/components/template/common-base.yaml +++ b/tests/components/template/common-base.yaml @@ -272,6 +272,17 @@ cover: - logger.log: "Cover started closing" on_idle: - logger.log: "Cover stopped moving" + - logger.log: "Cover stopped moving" + - if: + condition: + cover.is_open: template_cover_with_triggers + then: + logger.log: Cover is open + - if: + condition: + cover.is_closed: template_cover_with_triggers + then: + logger.log: Cover is closed number: - platform: template