Restore manual alarm-control-panel state using async_get_last_state (#17521)
* Restore manual alarm-control-panel state using async_get_last_state This is to address issue #10793 * Added tests for restoring manual alarm state on startup * Cleaned up test formatting * Fixed more linting errors * Changed async methods to use asynch/await syntax * Removed unused asyncio import
This commit is contained in:
parent
544a3b929f
commit
3c68db32d6
2 changed files with 58 additions and 5 deletions
|
@ -21,6 +21,7 @@ from homeassistant.const import (
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.event import track_point_in_time
|
from homeassistant.helpers.event import track_point_in_time
|
||||||
import homeassistant.util.dt as dt_util
|
import homeassistant.util.dt as dt_util
|
||||||
|
from homeassistant.helpers.restore_state import async_get_last_state
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -306,3 +307,10 @@ class ManualAlarm(alarm.AlarmControlPanel):
|
||||||
state_attr[ATTR_POST_PENDING_STATE] = self._state
|
state_attr[ATTR_POST_PENDING_STATE] = self._state
|
||||||
|
|
||||||
return state_attr
|
return state_attr
|
||||||
|
|
||||||
|
async def async_added_to_hass(self):
|
||||||
|
"""Run when entity about to be added to hass."""
|
||||||
|
state = await async_get_last_state(self.hass, self.entity_id)
|
||||||
|
if state:
|
||||||
|
self._state = state.state
|
||||||
|
self._state_ts = state.last_updated
|
||||||
|
|
|
@ -3,18 +3,17 @@ from datetime import timedelta
|
||||||
import unittest
|
import unittest
|
||||||
from unittest.mock import patch, MagicMock
|
from unittest.mock import patch, MagicMock
|
||||||
from homeassistant.components.alarm_control_panel import demo
|
from homeassistant.components.alarm_control_panel import demo
|
||||||
|
from homeassistant.setup import setup_component, async_setup_component
|
||||||
|
|
||||||
from homeassistant.setup import setup_component
|
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
STATE_ALARM_DISARMED, STATE_ALARM_ARMED_HOME, STATE_ALARM_ARMED_AWAY,
|
STATE_ALARM_DISARMED, STATE_ALARM_ARMED_HOME, STATE_ALARM_ARMED_AWAY,
|
||||||
STATE_ALARM_ARMED_NIGHT, STATE_ALARM_ARMED_CUSTOM_BYPASS,
|
STATE_ALARM_ARMED_NIGHT, STATE_ALARM_ARMED_CUSTOM_BYPASS,
|
||||||
STATE_ALARM_PENDING, STATE_ALARM_TRIGGERED)
|
STATE_ALARM_PENDING, STATE_ALARM_TRIGGERED)
|
||||||
from homeassistant.components import alarm_control_panel
|
from homeassistant.components import alarm_control_panel
|
||||||
import homeassistant.util.dt as dt_util
|
import homeassistant.util.dt as dt_util
|
||||||
|
from tests.common import (fire_time_changed, get_test_home_assistant,
|
||||||
from tests.common import fire_time_changed, get_test_home_assistant
|
mock_component, mock_restore_cache)
|
||||||
from tests.components.alarm_control_panel import common
|
from tests.components.alarm_control_panel import common
|
||||||
|
from homeassistant.core import State, CoreState
|
||||||
|
|
||||||
CODE = 'HELLO_CODE'
|
CODE = 'HELLO_CODE'
|
||||||
|
|
||||||
|
@ -1319,3 +1318,49 @@ class TestAlarmControlPanelManual(unittest.TestCase):
|
||||||
|
|
||||||
state = self.hass.states.get(entity_id)
|
state = self.hass.states.get(entity_id)
|
||||||
assert STATE_ALARM_TRIGGERED == state.state
|
assert STATE_ALARM_TRIGGERED == state.state
|
||||||
|
|
||||||
|
|
||||||
|
async def test_restore_armed_state(hass):
|
||||||
|
"""Ensure armed state is restored on startup."""
|
||||||
|
mock_restore_cache(hass, (
|
||||||
|
State('alarm_control_panel.test', STATE_ALARM_ARMED_AWAY),
|
||||||
|
))
|
||||||
|
|
||||||
|
hass.state = CoreState.starting
|
||||||
|
mock_component(hass, 'recorder')
|
||||||
|
|
||||||
|
assert await async_setup_component(hass, alarm_control_panel.DOMAIN, {
|
||||||
|
'alarm_control_panel': {
|
||||||
|
'platform': 'manual',
|
||||||
|
'name': 'test',
|
||||||
|
'pending_time': 0,
|
||||||
|
'trigger_time': 0,
|
||||||
|
'disarm_after_trigger': False
|
||||||
|
}})
|
||||||
|
|
||||||
|
state = hass.states.get('alarm_control_panel.test')
|
||||||
|
assert state
|
||||||
|
assert state.state == STATE_ALARM_ARMED_AWAY
|
||||||
|
|
||||||
|
|
||||||
|
async def test_restore_disarmed_state(hass):
|
||||||
|
"""Ensure disarmed state is restored on startup."""
|
||||||
|
mock_restore_cache(hass, (
|
||||||
|
State('alarm_control_panel.test', STATE_ALARM_DISARMED),
|
||||||
|
))
|
||||||
|
|
||||||
|
hass.state = CoreState.starting
|
||||||
|
mock_component(hass, 'recorder')
|
||||||
|
|
||||||
|
assert await async_setup_component(hass, alarm_control_panel.DOMAIN, {
|
||||||
|
'alarm_control_panel': {
|
||||||
|
'platform': 'manual',
|
||||||
|
'name': 'test',
|
||||||
|
'pending_time': 0,
|
||||||
|
'trigger_time': 0,
|
||||||
|
'disarm_after_trigger': False
|
||||||
|
}})
|
||||||
|
|
||||||
|
state = hass.states.get('alarm_control_panel.test')
|
||||||
|
assert state
|
||||||
|
assert state.state == STATE_ALARM_DISARMED
|
||||||
|
|
Loading…
Add table
Reference in a new issue