async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up Enphase Envoy from a config entry.""" config = entry.data name = config[CONF_NAME] envoy_reader = EnvoyReader( config[CONF_HOST], config[CONF_USERNAME], config[CONF_PASSWORD], inverters=True, async_client=get_async_client(hass), ) async def async_update_data(): """Fetch data from API endpoint.""" data = {} async with async_timeout.timeout(30): try: await envoy_reader.getData() except httpx.HTTPStatusError as err: raise ConfigEntryAuthFailed from err except httpx.HTTPError as err: raise UpdateFailed( f"Error communicating with API: {err}") from err for condition in SENSORS: if condition != "inverters": data[condition] = await getattr(envoy_reader, condition)() else: data[ "inverters_production"] = await envoy_reader.inverters_production( ) _LOGGER.debug("Retrieved data from API: %s", data) return data coordinator = DataUpdateCoordinator( hass, _LOGGER, name=f"envoy {name}", update_method=async_update_data, update_interval=SCAN_INTERVAL, ) try: await coordinator.async_config_entry_first_refresh() except ConfigEntryAuthFailed: envoy_reader.get_inverters = False await coordinator.async_config_entry_first_refresh() hass.data.setdefault(DOMAIN, {})[entry.entry_id] = { COORDINATOR: coordinator, NAME: name, } hass.config_entries.async_setup_platforms(entry, PLATFORMS) return True
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up Enphase Envoy from a config entry.""" config = entry.data name = config[CONF_NAME] envoy_reader = EnvoyReader( config[CONF_HOST], config[CONF_USERNAME], config[CONF_PASSWORD], inverters=True, async_client=get_async_client(hass), ) async def async_update_data(): """Fetch data from API endpoint.""" async with async_timeout.timeout(30): try: await envoy_reader.getData() except httpx.HTTPStatusError as err: raise ConfigEntryAuthFailed from err except httpx.HTTPError as err: raise UpdateFailed(f"Error communicating with API: {err}") from err data = { description.key: await getattr(envoy_reader, description.key)() for description in SENSORS } data["inverters_production"] = await envoy_reader.inverters_production() _LOGGER.debug("Retrieved data from API: %s", data) return data coordinator = DataUpdateCoordinator( hass, _LOGGER, name=f"envoy {name}", update_method=async_update_data, update_interval=SCAN_INTERVAL, ) try: await coordinator.async_config_entry_first_refresh() except ConfigEntryAuthFailed: envoy_reader.get_inverters = False await coordinator.async_config_entry_first_refresh() if not entry.unique_id: try: serial = await envoy_reader.get_full_serial_number() except httpx.HTTPError as ex: raise ConfigEntryNotReady( f"Could not obtain serial number from envoy: {ex}" ) from ex else: hass.config_entries.async_update_entry(entry, unique_id=serial) hass.data.setdefault(DOMAIN, {})[entry.entry_id] = { COORDINATOR: coordinator, NAME: name, } await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) return True