From fa0778700756c648cd25beefc11642ee0d3b7953 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 8 Sep 2020 10:08:31 -0500 Subject: [PATCH] Fix cover template entities honoring titlecase True/False (#39803) --- homeassistant/components/template/cover.py | 7 ++-- homeassistant/components/template/light.py | 2 +- tests/components/template/test_cover.py | 41 ++++++++++++++++++++++ 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/template/cover.py b/homeassistant/components/template/cover.py index e0a1b2bc33c..dc9e5ead1d0 100644 --- a/homeassistant/components/template/cover.py +++ b/homeassistant/components/template/cover.py @@ -249,15 +249,16 @@ class CoverTemplate(TemplateEntity, CoverEntity): self._position = None return - if result in _VALID_STATES: - if result in ("true", STATE_OPEN): + state = result.lower() + if state in _VALID_STATES: + if state in ("true", STATE_OPEN): self._position = 100 else: self._position = 0 else: _LOGGER.error( "Received invalid cover is_on state: %s. Expected: %s", - result, + state, ", ".join(_VALID_STATES), ) self._position = None diff --git a/homeassistant/components/template/light.py b/homeassistant/components/template/light.py index 5f87301cce8..2b79846986c 100644 --- a/homeassistant/components/template/light.py +++ b/homeassistant/components/template/light.py @@ -412,7 +412,7 @@ class LightTemplate(TemplateEntity, LightEntity): self._available = True return - state = str(result).lower() + state = result.lower() if state in _VALID_STATES: self._state = state in ("true", STATE_ON) else: diff --git a/tests/components/template/test_cover.py b/tests/components/template/test_cover.py index d51d71648bf..5deb540782c 100644 --- a/tests/components/template/test_cover.py +++ b/tests/components/template/test_cover.py @@ -1079,3 +1079,44 @@ async def test_unique_id(hass): await hass.async_block_till_done() assert len(hass.states.async_all()) == 1 + + +async def test_state_gets_lowercased(hass): + """Test True/False is lowercased.""" + + hass.states.async_set("binary_sensor.garage_door_sensor", "off") + + await setup.async_setup_component( + hass, + "cover", + { + "cover": { + "platform": "template", + "covers": { + "garage_door": { + "friendly_name": "Garage Door", + "value_template": "{{ is_state('binary_sensor.garage_door_sensor', 'off') }}", + "open_cover": { + "service": "cover.open_cover", + "entity_id": "cover.test_state", + }, + "close_cover": { + "service": "cover.close_cover", + "entity_id": "cover.test_state", + }, + }, + }, + }, + }, + ) + + await hass.async_block_till_done() + await hass.async_start() + await hass.async_block_till_done() + + assert len(hass.states.async_all()) == 2 + + assert hass.states.get("cover.garage_door").state == STATE_OPEN + hass.states.async_set("binary_sensor.garage_door_sensor", "on") + await hass.async_block_till_done() + assert hass.states.get("cover.garage_door").state == STATE_CLOSED