diff --git a/homeassistant/components/fujitsu_fglair/coordinator.py b/homeassistant/components/fujitsu_fglair/coordinator.py index eac3cfd6ce5..d98464e4751 100644 --- a/homeassistant/components/fujitsu_fglair/coordinator.py +++ b/homeassistant/components/fujitsu_fglair/coordinator.py @@ -48,10 +48,16 @@ class FGLairCoordinator(DataUpdateCoordinator[dict[str, FujitsuHVAC]]): raise ConfigEntryAuthFailed("Credentials expired for Ayla IoT API") from e if not listening_entities: - devices = [dev for dev in devices if isinstance(dev, FujitsuHVAC)] + devices = [ + dev + for dev in devices + if isinstance(dev, FujitsuHVAC) and dev.is_online() + ] else: devices = [ - dev for dev in devices if dev.device_serial_number in listening_entities + dev + for dev in devices + if dev.device_serial_number in listening_entities and dev.is_online() ] try: diff --git a/homeassistant/components/fujitsu_fglair/entity.py b/homeassistant/components/fujitsu_fglair/entity.py index 54d33d0e463..5c41a8ab18e 100644 --- a/homeassistant/components/fujitsu_fglair/entity.py +++ b/homeassistant/components/fujitsu_fglair/entity.py @@ -27,6 +27,11 @@ class FGLairEntity(CoordinatorEntity[FGLairCoordinator]): sw_version=device.property_values["mcu_firmware_version"], ) + @property + def available(self) -> bool: + """Return if entity is available.""" + return super().available and self.coordinator_context in self.coordinator.data + @property def device(self) -> FujitsuHVAC: """Return the device object from the coordinator data.""" diff --git a/tests/components/fujitsu_fglair/test_init.py b/tests/components/fujitsu_fglair/test_init.py index d400d85c33a..a69610c416d 100644 --- a/tests/components/fujitsu_fglair/test_init.py +++ b/tests/components/fujitsu_fglair/test_init.py @@ -7,6 +7,7 @@ from ayla_iot_unofficial.fujitsu_consts import FGLAIR_APP_CREDENTIALS from freezegun.api import FrozenDateTimeFactory import pytest +from homeassistant.components.climate import HVACMode from homeassistant.components.fujitsu_fglair.const import ( API_REFRESH, API_TIMEOUT, @@ -124,6 +125,26 @@ async def test_device_auth_failure( assert hass.states.get(entity_id(mock_devices[1])).state == STATE_UNAVAILABLE +async def test_device_offline( + hass: HomeAssistant, + freezer: FrozenDateTimeFactory, + mock_ayla_api: AsyncMock, + mock_config_entry: MockConfigEntry, + mock_devices: list[AsyncMock], +) -> None: + """Test entities become unavailable if device if offline.""" + await setup_integration(hass, mock_config_entry) + + mock_ayla_api.async_get_devices.return_value[0].is_online.return_value = False + + freezer.tick(API_REFRESH) + async_fire_time_changed(hass) + await hass.async_block_till_done() + + assert hass.states.get(entity_id(mock_devices[0])).state == STATE_UNAVAILABLE + assert hass.states.get(entity_id(mock_devices[1])).state == HVACMode.COOL + + async def test_token_expired( hass: HomeAssistant, mock_ayla_api: AsyncMock,