async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: """Set up VLC media player Telnet from a config entry.""" config = entry.data host = config[CONF_HOST] port = config[CONF_PORT] password = config[CONF_PASSWORD] vlc = Client(password=password, host=host, port=port) available = True try: await vlc.connect() except ConnectError as err: LOGGER.warning("Failed to connect to VLC: %s. Trying again", err) available = False if available: try: await vlc.login() except AuthError as err: await disconnect_vlc(vlc) raise ConfigEntryAuthFailed() from err domain_data = hass.data.setdefault(DOMAIN, {}) domain_data[entry.entry_id] = {DATA_VLC: vlc, DATA_AVAILABLE: available} await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) return True
async def validate_input(hass: core.HomeAssistant, data: dict[str, Any]) -> dict[str, str]: """Validate the user input allows us to connect.""" vlc = Client( password=data[CONF_PASSWORD], host=data[CONF_HOST], port=data[CONF_PORT], ) try: await vlc_connect(vlc) except ConnectError as err: raise CannotConnect from err except AuthError as err: raise InvalidAuth from err # CONF_NAME is only present in the imported YAML data. return {"title": data.get(CONF_NAME) or data[CONF_HOST]}