async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): """Set up Omnilogic from a config entry.""" conf = entry.data username = conf[CONF_USERNAME] password = conf[CONF_PASSWORD] polling_interval = 6 if CONF_SCAN_INTERVAL in conf: polling_interval = conf[CONF_SCAN_INTERVAL] session = aiohttp_client.async_get_clientsession(hass) api = OmniLogic(username, password, session) try: await api.connect() await api.get_telemetry_data() except LoginException as error: _LOGGER.error("Login Failed: %s", error) return False except OmniLogicException as error: _LOGGER.debug("OmniLogic API error: %s", error) raise ConfigEntryNotReady from error coordinator = OmniLogicUpdateCoordinator( hass=hass, api=api, name="Omnilogic", polling_interval=polling_interval, ) await coordinator.async_refresh() if not coordinator.last_update_success: raise ConfigEntryNotReady hass.data[DOMAIN][entry.entry_id] = { COORDINATOR: coordinator, OMNI_API: api, } for component in PLATFORMS: hass.async_create_task( hass.config_entries.async_forward_entry_setup(entry, component)) return True
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up Omnilogic from a config entry.""" conf = entry.data username = conf[CONF_USERNAME] password = conf[CONF_PASSWORD] polling_interval = conf.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL) session = aiohttp_client.async_get_clientsession(hass) api = OmniLogic(username, password, session) try: await api.connect() await api.get_telemetry_data() except LoginException as error: _LOGGER.error("Login Failed: %s", error) return False except OmniLogicException as error: _LOGGER.debug("OmniLogic API error: %s", error) raise ConfigEntryNotReady from error coordinator = OmniLogicUpdateCoordinator( hass=hass, api=api, name="Omnilogic", config_entry=entry, polling_interval=polling_interval, ) await coordinator.async_config_entry_first_refresh() hass.data.setdefault(DOMAIN, {}) hass.data[DOMAIN][entry.entry_id] = { COORDINATOR: coordinator, OMNI_API: api, } hass.config_entries.async_setup_platforms(entry, PLATFORMS) return True
async def async_step_user(self, user_input=None): """Handle the initial step.""" errors = {} config_entry = self._async_current_entries() if config_entry: return self.async_abort(reason="single_instance_allowed") errors = {} if user_input is not None: username = user_input[CONF_USERNAME] password = user_input[CONF_PASSWORD] session = aiohttp_client.async_get_clientsession(self.hass) omni = OmniLogic(username, password, session) try: await omni.connect() except LoginException: errors["base"] = "invalid_auth" except OmniLogicException: errors["base"] = "cannot_connect" except Exception: # pylint: disable=broad-except _LOGGER.exception("Unexpected exception") errors["base"] = "unknown" else: await self.async_set_unique_id(user_input["username"]) self._abort_if_unique_id_configured() return self.async_create_entry(title="Omnilogic", data=user_input) return self.async_show_form( step_id="user", data_schema=vol.Schema( { vol.Required(CONF_USERNAME): str, vol.Required(CONF_PASSWORD): str, } ), errors=errors, )