Add support for bridge accessory unavailability (#52207)

Co-authored-by: Jc2k <john.carr@unrouted.co.uk>
This commit is contained in:
J. Nick Koston 2021-08-22 14:20:40 -05:00 committed by GitHub
parent 0680e9f833
commit 562212bb5e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 1 deletions

View file

@ -142,7 +142,7 @@ class HomeKitEntity(Entity):
@property @property
def available(self) -> bool: def available(self) -> bool:
"""Return True if entity is available.""" """Return True if entity is available."""
return self._accessory.available return self._accessory.available and self.service.available
@property @property
def device_info(self): def device_info(self):

View file

@ -1,6 +1,7 @@
"""Basic checks for HomeKit sensor.""" """Basic checks for HomeKit sensor."""
from aiohomekit.model.characteristics import CharacteristicsTypes from aiohomekit.model.characteristics import CharacteristicsTypes
from aiohomekit.model.services import ServicesTypes from aiohomekit.model.services import ServicesTypes
from aiohomekit.protocol.statuscodes import HapStatusCode
from homeassistant.const import ( from homeassistant.const import (
DEVICE_CLASS_BATTERY, DEVICE_CLASS_BATTERY,
@ -236,3 +237,30 @@ async def test_switch_with_sensor(hass, utcnow):
realtime_energy.value = 50 realtime_energy.value = 50
state = await energy_helper.poll_and_get_state() state = await energy_helper.poll_and_get_state()
assert state.state == "50" assert state.state == "50"
async def test_sensor_unavailable(hass, utcnow):
"""Test a sensor becoming unavailable."""
helper = await setup_test_component(hass, create_switch_with_sensor)
# Find the energy sensor and mark it as offline
outlet = helper.accessory.services.first(service_type=ServicesTypes.OUTLET)
realtime_energy = outlet[CharacteristicsTypes.Vendor.KOOGEEK_REALTIME_ENERGY]
realtime_energy.status = HapStatusCode.UNABLE_TO_COMMUNICATE
# Helper will be for the primary entity, which is the outlet. Make a helper for the sensor.
energy_helper = Helper(
hass,
"sensor.testdevice_real_time_energy",
helper.pairing,
helper.accessory,
helper.config_entry,
)
# Outlet has non-responsive characteristics so should be unavailable
state = await helper.poll_and_get_state()
assert state.state == "unavailable"
# Energy sensor has non-responsive characteristics so should be unavailable
state = await energy_helper.poll_and_get_state()
assert state.state == "unavailable"