async def _handle_config_flow(self, user_input: dict[str, Any] | None = None, prepare: bool = False) -> FlowResult: """Config flow handler for ModernForms.""" source = self.context.get("source") # Request user input, unless we are preparing discovery flow if user_input is None: user_input = {} if not prepare: if source == SOURCE_ZEROCONF: return self._show_confirm_dialog() return self._show_setup_form() if source == SOURCE_ZEROCONF: user_input[CONF_HOST] = self.context.get(CONF_HOST) user_input[CONF_MAC] = self.context.get(CONF_MAC) if user_input.get(CONF_MAC) is None or not prepare: session = async_get_clientsession(self.hass) device = ModernFormsDevice(user_input[CONF_HOST], session=session) try: device = await device.update() except ModernFormsConnectionError: if source == SOURCE_ZEROCONF: return self.async_abort(reason="cannot_connect") return self._show_setup_form({"base": "cannot_connect"}) user_input[CONF_MAC] = device.info.mac_address user_input[CONF_NAME] = device.info.device_name # Check if already configured await self.async_set_unique_id(user_input[CONF_MAC]) self._abort_if_unique_id_configured( updates={CONF_HOST: user_input[CONF_HOST]}) title = device.info.device_name if source == SOURCE_ZEROCONF: title = self.context.get(CONF_NAME) if prepare: return await self.async_step_zeroconf_confirm() return self.async_create_entry( title=title, data={ CONF_HOST: user_input[CONF_HOST], CONF_MAC: user_input[CONF_MAC] }, )
def __init__( self, hass: HomeAssistant, *, host: str, ) -> None: """Initialize global Modern Forms data updater.""" self.modern_forms = ModernFormsDevice( host, session=async_get_clientsession(hass)) super().__init__( hass, _LOGGER, name=DOMAIN, update_interval=SCAN_INTERVAL, )