Fix HomeKit linked battery sensor crash (#28974)

* fix homekit linked battery sensor crash

* simplified missing linked battery

* fixed formatting

* Make if faster
This commit is contained in:
Austin Drummond 2019-11-26 11:55:33 -05:00 committed by Paulus Schoutsen
parent f9571c9637
commit c47ed743f1
2 changed files with 38 additions and 1 deletions

View file

@ -105,8 +105,18 @@ class HomeAccessory(Accessory):
battery_found = self.hass.states.get(self.entity_id).attributes.get(
ATTR_BATTERY_LEVEL
)
if self.linked_battery_sensor:
battery_found = self.hass.states.get(self.linked_battery_sensor).state
state = self.hass.states.get(self.linked_battery_sensor)
if state is not None:
battery_found = state.state
else:
self.linked_battery_sensor = None
_LOGGER.warning(
"%s: Battery sensor state missing: %s",
self.entity_id,
self.linked_battery_sensor,
)
if battery_found is None:
return

View file

@ -245,6 +245,33 @@ async def test_linked_battery_sensor(hass, hk_driver, caplog):
assert acc._char_charging.value == 0
async def test_missing_linked_battery_sensor(hass, hk_driver, caplog):
"""Test battery service with mising linked_battery_sensor."""
entity_id = "homekit.accessory"
linked_battery = "sensor.battery"
hass.states.async_set(entity_id, "open")
await hass.async_block_till_done()
acc = HomeAccessory(
hass,
hk_driver,
"Battery Service",
entity_id,
2,
{CONF_LINKED_BATTERY_SENSOR: linked_battery},
)
acc.update_state = lambda x: None
assert not acc.linked_battery_sensor
await hass.async_add_job(acc.run)
await hass.async_block_till_done()
assert not acc.linked_battery_sensor
assert not hasattr(acc, "_char_battery")
assert not hasattr(acc, "_char_low_battery")
assert not hasattr(acc, "_char_charging")
async def test_call_service(hass, hk_driver, events):
"""Test call_service method."""
entity_id = "homekit.accessory"