async def async_setup(hass, config): """Setup nibe uplink component""" store = hass.config.path('nibe.json') def save_json_local(data): save_json(store, data) from nibeuplink import Uplink scope = None if config[DOMAIN].get(CONF_WRITEACCESS): scope = ['READSYSTEM', 'WRITESYSTEM'] else: scope = ['READSYSTEM'] uplink = Uplink(client_id=config[DOMAIN].get(CONF_CLIENT_ID), client_secret=config[DOMAIN].get(CONF_CLIENT_SECRET), redirect_uri=config[DOMAIN].get(CONF_REDIRECT_URI), access_data=load_json(store), access_data_write=save_json_local, scope=scope) if not uplink.access_data: view = NibeAuthView(hass, uplink, config[DOMAIN], async_setup_systems) hass.http.register_view(view) view.async_request_config() else: hass.async_add_job(async_setup_systems(hass, config[DOMAIN], uplink)) return True
async def async_setup_entry(hass, entry: config_entries.ConfigEntry): """Set up an access point from a config entry.""" _LOGGER.debug("Setup nibe entry") scope = None if entry.data.get(CONF_WRITEACCESS): scope = ['READSYSTEM', 'WRITESYSTEM'] else: scope = ['READSYSTEM'] def access_data_write(data): hass.config_entries.async_update_entry( entry, data={ **entry.data, CONF_ACCESS_DATA: data }) uplink = Uplink( client_id=entry.data.get(CONF_CLIENT_ID), client_secret=entry.data.get(CONF_CLIENT_SECRET), redirect_uri=entry.data.get(CONF_REDIRECT_URI), access_data=entry.data.get(CONF_ACCESS_DATA), access_data_write=access_data_write, scope=scope ) data = hass.data[DATA_NIBE] data.uplink = uplink await uplink.refresh_access_token() await async_setup_systems(hass, data, entry) return True
async def async_setup_entry(hass: HomeAssistant, entry: config_entries.ConfigEntry): """Set up an access point from a config entry.""" _LOGGER.debug("Setup nibe entry") scope = None if entry.data.get(CONF_WRITEACCESS): scope = ["READSYSTEM", "WRITESYSTEM"] else: scope = ["READSYSTEM"] def access_data_write(data): hass.config_entries.async_update_entry( entry, data={**entry.data, CONF_ACCESS_DATA: data} ) session = UplinkSession( client_id=entry.data.get(CONF_CLIENT_ID), client_secret=entry.data.get(CONF_CLIENT_SECRET), redirect_uri=entry.data.get(CONF_REDIRECT_URI), access_data=entry.data.get(CONF_ACCESS_DATA), access_data_write=access_data_write, scope=scope, ) await session.open() uplink = Uplink(session) coordinator = NibeSystemsCoordinator(hass, uplink) data = NibeData(session, uplink, {}, coordinator) hass.data[DATA_NIBE_ENTRIES][entry.entry_id] = data await coordinator.async_config_entry_first_refresh() if systems_conf := entry.options.get(CONF_SYSTEMS): systems_enabled = {system_id for system_id in systems_conf}
async def async_step_user(self, user_input=None): """Handle a flow initialized by the user.""" if user_input: scope = None if user_input[CONF_WRITEACCESS]: scope = ["READSYSTEM", "WRITESYSTEM"] else: scope = ["READSYSTEM"] session = UplinkSession( client_id=user_input[CONF_CLIENT_ID], client_secret=user_input[CONF_CLIENT_SECRET], redirect_uri=user_input[CONF_REDIRECT_URI], scope=scope, ) await session.open() self.uplink = Uplink(session, throttle=0.0) self.session = session self.user_data = user_input return await self.async_step_auth() url = "{}{}".format( self.hass.helpers.network.get_url(prefer_external=True), AUTH_CALLBACK_URL ) if DATA_NIBE_CONFIG in self.hass.data: config = self.hass.data[DATA_NIBE_CONFIG] else: config = {} return self.async_show_form( step_id="user", description_placeholders={ "application": CONF_UPLINK_APPLICATION_URL, "suffix": AUTH_CALLBACK_URL, }, data_schema=vol.Schema( { vol.Required( CONF_REDIRECT_URI, default=config.get(CONF_REDIRECT_URI, url) ): str, vol.Required( CONF_CLIENT_ID, default=config.get(CONF_CLIENT_ID, None) ): str, vol.Required( CONF_CLIENT_SECRET, default=config.get(CONF_CLIENT_SECRET, None) ): str, vol.Required( CONF_WRITEACCESS, default=config.get(CONF_WRITEACCESS, False) ): bool, } ), )
async def async_step_user(self, user_input=None): """Handle a flow initialized by the user.""" if user_input: from nibeuplink import Uplink scope = None if user_input[CONF_WRITEACCESS]: scope = ['READSYSTEM', 'WRITESYSTEM'] else: scope = ['READSYSTEM'] uplink = Uplink( client_id=user_input[CONF_CLIENT_ID], client_secret=user_input[CONF_CLIENT_SECRET], redirect_uri=user_input[CONF_REDIRECT_URI], scope=scope ) self.uplink = uplink self.user_data = user_input return await self.async_step_auth() url = '{}{}'.format(self.hass.config.api.base_url, AUTH_CALLBACK_URL) config = self.hass.data[DATA_NIBE]['config'] return self.async_show_form( step_id='user', description_placeholders={ 'application': CONF_UPLINK_APPLICATION_URL, 'suffix': AUTH_CALLBACK_URL, }, data_schema=vol.Schema({ vol.Required(CONF_REDIRECT_URI, default=config.get(CONF_REDIRECT_URI, url)): str, vol.Required(CONF_CLIENT_ID, default=config.get(CONF_CLIENT_ID, None)): str, vol.Required(CONF_CLIENT_SECRET, default=config.get(CONF_CLIENT_SECRET, None)): str, vol.Required(CONF_WRITEACCESS, default=config.get(CONF_WRITEACCESS, False)): bool, }) )