Restore state of trend sensor (#100332)

* Restoring state of trend sensor

* Handle unknown state & parametrize tests
This commit is contained in:
Jan-Philipp Benecke 2023-09-27 18:28:27 +02:00 committed by GitHub
parent 4066f657d3
commit c0c02bf6bb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 2 deletions

View file

@ -25,6 +25,7 @@ from homeassistant.const import (
CONF_ENTITY_ID,
CONF_FRIENDLY_NAME,
CONF_SENSORS,
STATE_ON,
STATE_UNAVAILABLE,
STATE_UNKNOWN,
)
@ -37,6 +38,7 @@ from homeassistant.helpers.event import (
async_track_state_change_event,
)
from homeassistant.helpers.reload import async_setup_reload_service
from homeassistant.helpers.restore_state import RestoreEntity
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType, EventType
from homeassistant.util.dt import utcnow
@ -116,7 +118,7 @@ async def async_setup_platform(
async_add_entities(sensors)
class SensorTrend(BinarySensorEntity):
class SensorTrend(BinarySensorEntity, RestoreEntity):
"""Representation of a trend Sensor."""
_attr_should_poll = False
@ -194,6 +196,12 @@ class SensorTrend(BinarySensorEntity):
)
)
if not (state := await self.async_get_last_state()):
return
if state.state == STATE_UNKNOWN:
return
self._state = state.state == STATE_ON
async def async_update(self) -> None:
"""Get the latest data and update the states."""
# Remove outdated samples

View file

@ -2,16 +2,19 @@
from datetime import timedelta
from unittest.mock import patch
import pytest
from homeassistant import config as hass_config, setup
from homeassistant.components.trend.const import DOMAIN
from homeassistant.const import SERVICE_RELOAD, STATE_UNKNOWN
from homeassistant.core import HomeAssistant
from homeassistant.core import HomeAssistant, State
import homeassistant.util.dt as dt_util
from tests.common import (
assert_setup_component,
get_fixture_path,
get_test_home_assistant,
mock_restore_cache,
)
@ -413,3 +416,28 @@ async def test_reload(hass: HomeAssistant) -> None:
assert hass.states.get("binary_sensor.test_trend_sensor") is None
assert hass.states.get("binary_sensor.second_test_trend_sensor")
@pytest.mark.parametrize(
("saved_state", "restored_state"),
[("on", "on"), ("off", "off"), ("unknown", "unknown")],
)
async def test_restore_state(
hass: HomeAssistant, saved_state: str, restored_state: str
) -> None:
"""Test we restore the trend state."""
mock_restore_cache(hass, (State("binary_sensor.test_trend_sensor", saved_state),))
assert await setup.async_setup_component(
hass,
"binary_sensor",
{
"binary_sensor": {
"platform": "trend",
"sensors": {"test_trend_sensor": {"entity_id": "sensor.test_state"}},
}
},
)
await hass.async_block_till_done()
assert hass.states.get("binary_sensor.test_trend_sensor").state == restored_state