Prevent scene from restoring unavailable states (#67836)

This commit is contained in:
J. Nick Koston 2022-03-08 05:43:19 +01:00 committed by GitHub
parent a75bbc79a2
commit c9ac0b49f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 2 deletions

View File

@ -10,7 +10,7 @@ import voluptuous as vol
from homeassistant.components.light import ATTR_TRANSITION from homeassistant.components.light import ATTR_TRANSITION
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_PLATFORM, SERVICE_TURN_ON from homeassistant.const import CONF_PLATFORM, SERVICE_TURN_ON, STATE_UNAVAILABLE
from homeassistant.core import DOMAIN as HA_DOMAIN, HomeAssistant from homeassistant.core import DOMAIN as HA_DOMAIN, HomeAssistant
from homeassistant.helpers.entity_component import EntityComponent from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.helpers.restore_state import RestoreEntity from homeassistant.helpers.restore_state import RestoreEntity
@ -117,7 +117,11 @@ class Scene(RestoreEntity):
"""Call when the scene is added to hass.""" """Call when the scene is added to hass."""
await super().async_internal_added_to_hass() await super().async_internal_added_to_hass()
state = await self.async_get_last_state() state = await self.async_get_last_state()
if state is not None and state.state is not None: if (
state is not None
and state.state is not None
and state.state != STATE_UNAVAILABLE
):
self.__last_activated = state.state self.__last_activated = state.state
def activate(self, **kwargs: Any) -> None: def activate(self, **kwargs: Any) -> None:

View File

@ -9,6 +9,7 @@ from homeassistant.const import (
ATTR_ENTITY_ID, ATTR_ENTITY_ID,
ENTITY_MATCH_ALL, ENTITY_MATCH_ALL,
SERVICE_TURN_ON, SERVICE_TURN_ON,
STATE_UNAVAILABLE,
STATE_UNKNOWN, STATE_UNKNOWN,
) )
from homeassistant.core import State from homeassistant.core import State
@ -177,6 +178,34 @@ async def test_restore_state(hass, entities, enable_custom_integrations):
assert hass.states.get("scene.test").state == "2021-01-01T23:59:59+00:00" assert hass.states.get("scene.test").state == "2021-01-01T23:59:59+00:00"
async def test_restore_state_does_not_restore_unavailable(
hass, entities, enable_custom_integrations
):
"""Test we restore state integration but ignore unavailable."""
mock_restore_cache(hass, (State("scene.test", STATE_UNAVAILABLE),))
light_1, light_2 = await setup_lights(hass, entities)
assert await async_setup_component(
hass,
scene.DOMAIN,
{
"scene": [
{
"name": "test",
"entities": {
light_1.entity_id: "on",
light_2.entity_id: "on",
},
}
]
},
)
await hass.async_block_till_done()
assert hass.states.get("scene.test").state == STATE_UNKNOWN
async def activate(hass, entity_id=ENTITY_MATCH_ALL): async def activate(hass, entity_id=ENTITY_MATCH_ALL):
"""Activate a scene.""" """Activate a scene."""
data = {} data = {}