mirror of
https://github.com/home-assistant/core.git
synced 2026-10-06 22:38:02 -04:00
Fix Teslemetry streaming binary sensors restoring unknown as off (#183451)
This commit is contained in:
@@ -12,7 +12,7 @@ from homeassistant.components.binary_sensor import (
|
||||
BinarySensorEntity,
|
||||
BinarySensorEntityDescription,
|
||||
)
|
||||
from homeassistant.const import STATE_ON, EntityCategory, Platform
|
||||
from homeassistant.const import STATE_OFF, STATE_ON, EntityCategory, Platform
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
||||
from homeassistant.helpers.restore_state import RestoreEntity
|
||||
@@ -644,7 +644,10 @@ class TeslemetryVehicleStreamingBinarySensorEntity(
|
||||
"""Handle entity which will be added."""
|
||||
await super().async_added_to_hass()
|
||||
if (state := await self.async_get_last_state()) is not None:
|
||||
self._attr_is_on = state.state == STATE_ON
|
||||
if state.state == STATE_ON:
|
||||
self._attr_is_on = True
|
||||
elif state.state == STATE_OFF:
|
||||
self._attr_is_on = False
|
||||
|
||||
assert self.entity_description.streaming_listener
|
||||
self.async_on_remove(
|
||||
|
||||
@@ -8,14 +8,14 @@ from syrupy.assertion import SnapshotAssertion
|
||||
from teslemetry_stream import Signal
|
||||
|
||||
from homeassistant.components.teslemetry.coordinator import VEHICLE_INTERVAL
|
||||
from homeassistant.const import Platform
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.const import STATE_UNAVAILABLE, STATE_UNKNOWN, Platform
|
||||
from homeassistant.core import HomeAssistant, State
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
|
||||
from . import assert_entities, assert_entities_alt, setup_platform
|
||||
from .const import VEHICLE_DATA_ALT
|
||||
|
||||
from tests.common import async_fire_time_changed
|
||||
from tests.common import async_fire_time_changed, mock_restore_cache
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
|
||||
@@ -76,14 +76,12 @@ async def test_binary_sensors_streaming(
|
||||
Signal.RD_WINDOW: "WindowStateClosed",
|
||||
Signal.RP_WINDOW: "WindowStatePartiallyOpen",
|
||||
Signal.DOOR_STATE: {
|
||||
"DoorState": {
|
||||
"DriverFront": True,
|
||||
"DriverRear": False,
|
||||
"PassengerFront": False,
|
||||
"PassengerRear": False,
|
||||
"TrunkFront": False,
|
||||
"TrunkRear": False,
|
||||
}
|
||||
"DriverFront": True,
|
||||
"DriverRear": False,
|
||||
"PassengerFront": False,
|
||||
"PassengerRear": False,
|
||||
"TrunkFront": False,
|
||||
"TrunkRear": False,
|
||||
},
|
||||
Signal.DRIVER_SEAT_BELT: None,
|
||||
Signal.REAR_DEFROST_ENABLED: True,
|
||||
@@ -99,15 +97,37 @@ async def test_binary_sensors_streaming(
|
||||
|
||||
# Assert the entities restored their values with concrete assertions
|
||||
assert hass.states.get("binary_sensor.test_front_driver_window").state == "on"
|
||||
assert hass.states.get("binary_sensor.test_front_passenger_window").state == "off"
|
||||
assert (
|
||||
hass.states.get("binary_sensor.test_front_passenger_window").state
|
||||
== STATE_UNKNOWN
|
||||
)
|
||||
assert hass.states.get("binary_sensor.test_rear_driver_window").state == "off"
|
||||
assert hass.states.get("binary_sensor.test_rear_passenger_window").state == "on"
|
||||
assert hass.states.get("binary_sensor.test_front_driver_door").state == "off"
|
||||
assert hass.states.get("binary_sensor.test_front_driver_door").state == "on"
|
||||
assert hass.states.get("binary_sensor.test_front_passenger_door").state == "off"
|
||||
assert hass.states.get("binary_sensor.test_driver_seat_belt").state == "off"
|
||||
assert hass.states.get("binary_sensor.test_driver_seat_belt").state == STATE_UNKNOWN
|
||||
assert hass.states.get("binary_sensor.test_rear_defroster").state == "on"
|
||||
|
||||
|
||||
@pytest.mark.parametrize("restored_state", [STATE_UNKNOWN, STATE_UNAVAILABLE])
|
||||
@pytest.mark.parametrize(
|
||||
"entity_id",
|
||||
["binary_sensor.test_front_driver_window", "binary_sensor.test_charge_cable"],
|
||||
)
|
||||
async def test_binary_sensors_streaming_restore_unknown(
|
||||
hass: HomeAssistant,
|
||||
entity_id: str,
|
||||
restored_state: str,
|
||||
) -> None:
|
||||
"""Tests that a restored unknown or unavailable state is not restored as off."""
|
||||
|
||||
mock_restore_cache(hass, (State(entity_id, restored_state),))
|
||||
|
||||
await setup_platform(hass, [Platform.BINARY_SENSOR])
|
||||
|
||||
assert hass.states.get(entity_id).state == STATE_UNKNOWN
|
||||
|
||||
|
||||
async def test_binary_sensors_connectivity(
|
||||
hass: HomeAssistant,
|
||||
freezer: FrozenDateTimeFactory,
|
||||
|
||||
Reference in New Issue
Block a user