Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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}
Beispiel #4
0
    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,
                }
            ),
        )
Beispiel #5
0
    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,
            })
        )