Exemplo n.º 1
0
async def async_setup_entry(hass: HomeAssistantType,
                            entry: ConfigEntry) -> bool:
    """Set up the devolo account from a config entry."""
    conf = entry.data
    hass.data.setdefault(DOMAIN, {})
    try:
        mydevolo = Mydevolo.get_instance()
    except SyntaxError:
        mydevolo = Mydevolo()

    mydevolo.user = conf[CONF_USERNAME]
    mydevolo.password = conf[CONF_PASSWORD]
    mydevolo.url = conf[CONF_MYDEVOLO]

    credentials_valid = await hass.async_add_executor_job(
        mydevolo.credentials_valid)

    if not credentials_valid:
        return False

    if await hass.async_add_executor_job(mydevolo.maintenance):
        raise ConfigEntryNotReady

    gateway_ids = await hass.async_add_executor_job(mydevolo.get_gateway_ids)
    gateway_id = gateway_ids[0]

    try:
        zeroconf_instance = await zeroconf.async_get_instance(hass)
        hass.data[DOMAIN]["homecontrol"] = await hass.async_add_executor_job(
            partial(
                HomeControl,
                gateway_id=gateway_id,
                zeroconf_instance=zeroconf_instance,
                url=conf[CONF_HOMECONTROL],
            ))
    except ConnectionError as err:
        raise ConfigEntryNotReady from err

    for platform in PLATFORMS:
        hass.async_create_task(
            hass.config_entries.async_forward_entry_setup(entry, platform))

    def shutdown(event):
        hass.data[DOMAIN]["homecontrol"].websocket_disconnect(
            f"websocket disconnect requested by {EVENT_HOMEASSISTANT_STOP}")

    # Listen when EVENT_HOMEASSISTANT_STOP is fired
    hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, shutdown)

    return True
Exemplo n.º 2
0
    async def async_step_user(self, user_input=None):
        """Handle a flow initiated by the user."""
        if self.show_advanced_options:
            self.data_schema = {
                vol.Required(CONF_USERNAME): str,
                vol.Required(CONF_PASSWORD): str,
                vol.Required(CONF_MYDEVOLO): str,
                vol.Required(CONF_HOMECONTROL): str,
            }
        if user_input is None:
            return self._show_form(user_input)
        user = user_input[CONF_USERNAME]
        password = user_input[CONF_PASSWORD]
        try:
            mydevolo = Mydevolo.get_instance()
        except SyntaxError:
            mydevolo = Mydevolo()
        mydevolo.user = user
        mydevolo.password = password
        if self.show_advanced_options:
            mydevolo.url = user_input[CONF_MYDEVOLO]
            mydevolo.mprm = user_input[CONF_HOMECONTROL]
        else:
            mydevolo.url = DEFAULT_MYDEVOLO
            mydevolo.mprm = DEFAULT_MPRM
        credentials_valid = await self.hass.async_add_executor_job(
            mydevolo.credentials_valid)
        if not credentials_valid:
            return self._show_form({"base": "invalid_credentials"})
        _LOGGER.debug("Credentials valid")
        gateway_ids = await self.hass.async_add_executor_job(
            mydevolo.get_gateway_ids)
        await self.async_set_unique_id(gateway_ids[0])
        self._abort_if_unique_id_configured()

        return self.async_create_entry(
            title="devolo Home Control",
            data={
                CONF_PASSWORD: password,
                CONF_USERNAME: user,
                CONF_MYDEVOLO: mydevolo.url,
                CONF_HOMECONTROL: mydevolo.mprm,
            },
        )