Michael 8c3dab199e
Explicitly pass in the config_entry in homewizard coordinator (#138152)
explicitly pass in the config_entry in coordinator
2025-02-09 22:10:21 +02:00

75 lines
2.4 KiB
Python

"""Update coordinator for HomeWizard."""
from __future__ import annotations
from homewizard_energy import HomeWizardEnergy
from homewizard_energy.errors import DisabledError, RequestError, UnauthorizedError
from homewizard_energy.models import CombinedModels as DeviceResponseEntry
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from .const import DOMAIN, LOGGER, UPDATE_INTERVAL
type HomeWizardConfigEntry = ConfigEntry[HWEnergyDeviceUpdateCoordinator]
class HWEnergyDeviceUpdateCoordinator(DataUpdateCoordinator[DeviceResponseEntry]):
"""Gather data for the energy device."""
api: HomeWizardEnergy
api_disabled: bool = False
config_entry: HomeWizardConfigEntry
def __init__(
self,
hass: HomeAssistant,
config_entry: HomeWizardConfigEntry,
api: HomeWizardEnergy,
) -> None:
"""Initialize update coordinator."""
super().__init__(
hass,
LOGGER,
config_entry=config_entry,
name=DOMAIN,
update_interval=UPDATE_INTERVAL,
)
self.api = api
async def _async_update_data(self) -> DeviceResponseEntry:
"""Fetch all device and sensor data from api."""
try:
data = await self.api.combined()
except RequestError as ex:
raise UpdateFailed(
ex, translation_domain=DOMAIN, translation_key="communication_error"
) from ex
except DisabledError as ex:
if not self.api_disabled:
self.api_disabled = True
# Do not reload when performing first refresh
if self.data is not None:
# Reload config entry to let init flow handle retrying and trigger repair flow
self.hass.config_entries.async_schedule_reload(
self.config_entry.entry_id
)
raise UpdateFailed(
ex, translation_domain=DOMAIN, translation_key="api_disabled"
) from ex
except UnauthorizedError as ex:
raise ConfigEntryAuthFailed from ex
self.api_disabled = False
self.data = data
return data