From 0c2772e0be7f53c034b565096b31ce41845b4218 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 3 Sep 2021 00:02:45 -0700 Subject: [PATCH] Fix template sensor availability (#55635) --- .../components/template/trigger_entity.py | 2 +- tests/components/template/test_sensor.py | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/template/trigger_entity.py b/homeassistant/components/template/trigger_entity.py index 84ad4072b66..c80620b0453 100644 --- a/homeassistant/components/template/trigger_entity.py +++ b/homeassistant/components/template/trigger_entity.py @@ -69,7 +69,7 @@ class TriggerEntity(update_coordinator.CoordinatorEntity): # We make a copy so our initial render is 'unknown' and not 'unavailable' self._rendered = dict(self._static_rendered) - self._parse_result = set() + self._parse_result = {CONF_AVAILABILITY} @property def name(self): diff --git a/tests/components/template/test_sensor.py b/tests/components/template/test_sensor.py index df5c43aa58b..a606c2ec62b 100644 --- a/tests/components/template/test_sensor.py +++ b/tests/components/template/test_sensor.py @@ -1038,6 +1038,7 @@ async def test_trigger_entity(hass): "unique_id": "via_list-id", "device_class": "battery", "unit_of_measurement": "%", + "availability": "{{ True }}", "state": "{{ trigger.event.data.beer + 1 }}", "picture": "{{ '/local/dogs.png' }}", "icon": "{{ 'mdi:pirate' }}", @@ -1197,3 +1198,44 @@ async def test_config_top_level(hass): assert state.state == "5" assert state.attributes["device_class"] == "battery" assert state.attributes["state_class"] == "measurement" + + +async def test_trigger_entity_available(hass): + """Test trigger entity availability works.""" + assert await async_setup_component( + hass, + "template", + { + "template": [ + { + "trigger": {"platform": "event", "event_type": "test_event"}, + "sensor": [ + { + "name": "Maybe Available", + "availability": "{{ trigger and trigger.event.data.beer == 2 }}", + "state": "{{ trigger.event.data.beer }}", + }, + ], + }, + ], + }, + ) + + await hass.async_block_till_done() + + # Sensors are unknown if never triggered + state = hass.states.get("sensor.maybe_available") + assert state is not None + assert state.state == STATE_UNKNOWN + + hass.bus.async_fire("test_event", {"beer": 2}) + await hass.async_block_till_done() + + state = hass.states.get("sensor.maybe_available") + assert state.state == "2" + + hass.bus.async_fire("test_event", {"beer": 1}) + await hass.async_block_till_done() + + state = hass.states.get("sensor.maybe_available") + assert state.state == "unavailable"