Allow template covers to have opening and closing states (#47925)

This commit is contained in:
Brandon Rothweiler 2021-04-09 05:36:02 -04:00 committed by GitHub
parent f396804f54
commit 52e8c7166b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 1 deletions

View file

@ -219,6 +219,8 @@ class CoverTemplate(TemplateEntity, CoverEntity):
self._optimistic = optimistic or (not state_template and not position_template) self._optimistic = optimistic or (not state_template and not position_template)
self._tilt_optimistic = tilt_optimistic or not tilt_template self._tilt_optimistic = tilt_optimistic or not tilt_template
self._position = None self._position = None
self._is_opening = False
self._is_closing = False
self._tilt_value = None self._tilt_value = None
self._unique_id = unique_id self._unique_id = unique_id
@ -260,6 +262,9 @@ class CoverTemplate(TemplateEntity, CoverEntity):
self._position = 100 self._position = 100
else: else:
self._position = 0 self._position = 0
self._is_opening = state == STATE_OPENING
self._is_closing = state == STATE_CLOSING
else: else:
_LOGGER.error( _LOGGER.error(
"Received invalid cover is_on state: %s. Expected: %s", "Received invalid cover is_on state: %s. Expected: %s",
@ -319,6 +324,16 @@ class CoverTemplate(TemplateEntity, CoverEntity):
"""Return if the cover is closed.""" """Return if the cover is closed."""
return self._position == 0 return self._position == 0
@property
def is_opening(self):
"""Return if the cover is currently opening."""
return self._is_opening
@property
def is_closing(self):
"""Return if the cover is currently closing."""
return self._is_closing
@property @property
def current_cover_position(self): def current_cover_position(self):
"""Return current position of cover. """Return current position of cover.

View file

@ -1,4 +1,4 @@
"""The tests the cover command line platform.""" """The tests for the Template cover platform."""
import pytest import pytest
from homeassistant import setup from homeassistant import setup
@ -15,9 +15,11 @@ from homeassistant.const import (
SERVICE_TOGGLE, SERVICE_TOGGLE,
SERVICE_TOGGLE_COVER_TILT, SERVICE_TOGGLE_COVER_TILT,
STATE_CLOSED, STATE_CLOSED,
STATE_CLOSING,
STATE_OFF, STATE_OFF,
STATE_ON, STATE_ON,
STATE_OPEN, STATE_OPEN,
STATE_OPENING,
STATE_UNAVAILABLE, STATE_UNAVAILABLE,
) )
@ -74,6 +76,18 @@ async def test_template_state_text(hass, calls):
state = hass.states.get("cover.test_template_cover") state = hass.states.get("cover.test_template_cover")
assert state.state == STATE_CLOSED assert state.state == STATE_CLOSED
state = hass.states.async_set("cover.test_state", STATE_OPENING)
await hass.async_block_till_done()
state = hass.states.get("cover.test_template_cover")
assert state.state == STATE_OPENING
state = hass.states.async_set("cover.test_state", STATE_CLOSING)
await hass.async_block_till_done()
state = hass.states.get("cover.test_template_cover")
assert state.state == STATE_CLOSING
async def test_template_state_boolean(hass, calls): async def test_template_state_boolean(hass, calls):
"""Test the value_template attribute.""" """Test the value_template attribute."""