diff --git a/homeassistant/components/template/cover.py b/homeassistant/components/template/cover.py index cd552a33e5d..d985473792e 100644 --- a/homeassistant/components/template/cover.py +++ b/homeassistant/components/template/cover.py @@ -219,6 +219,8 @@ class CoverTemplate(TemplateEntity, CoverEntity): self._optimistic = optimistic or (not state_template and not position_template) self._tilt_optimistic = tilt_optimistic or not tilt_template self._position = None + self._is_opening = False + self._is_closing = False self._tilt_value = None self._unique_id = unique_id @@ -260,6 +262,9 @@ class CoverTemplate(TemplateEntity, CoverEntity): self._position = 100 else: self._position = 0 + + self._is_opening = state == STATE_OPENING + self._is_closing = state == STATE_CLOSING else: _LOGGER.error( "Received invalid cover is_on state: %s. Expected: %s", @@ -319,6 +324,16 @@ class CoverTemplate(TemplateEntity, CoverEntity): """Return if the cover is closed.""" 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 def current_cover_position(self): """Return current position of cover. diff --git a/tests/components/template/test_cover.py b/tests/components/template/test_cover.py index 08c789633fc..c1309a16e67 100644 --- a/tests/components/template/test_cover.py +++ b/tests/components/template/test_cover.py @@ -1,4 +1,4 @@ -"""The tests the cover command line platform.""" +"""The tests for the Template cover platform.""" import pytest from homeassistant import setup @@ -15,9 +15,11 @@ from homeassistant.const import ( SERVICE_TOGGLE, SERVICE_TOGGLE_COVER_TILT, STATE_CLOSED, + STATE_CLOSING, STATE_OFF, STATE_ON, STATE_OPEN, + STATE_OPENING, STATE_UNAVAILABLE, ) @@ -74,6 +76,18 @@ async def test_template_state_text(hass, calls): state = hass.states.get("cover.test_template_cover") 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): """Test the value_template attribute."""