1 """Config flow for baf."""
3 from __future__
import annotations
5 from asyncio
import timeout
9 from aiobafi6
import Device, Service
10 from aiobafi6.discovery
import PORT
11 import voluptuous
as vol
17 from .const
import DOMAIN, RUN_TIMEOUT
18 from .models
import BAFDiscovery
20 _LOGGER = logging.getLogger(__name__)
24 """Validate we can connect to a device."""
25 device =
Device(Service(ip_addresses=[ip_address], port=PORT))
26 run_future = device.async_run()
28 async
with timeout(RUN_TIMEOUT):
29 await device.async_wait_available()
30 except TimeoutError
as ex:
31 raise CannotConnect
from ex
38 """Handle BAF discovery config flow."""
43 """Initialize the BAF config flow."""
44 self.
discoverydiscovery: BAFDiscovery |
None =
None
47 self, discovery_info: zeroconf.ZeroconfServiceInfo
48 ) -> ConfigFlowResult:
49 """Handle zeroconf discovery."""
50 if discovery_info.ip_address.version == 6:
52 properties = discovery_info.properties
53 ip_address = discovery_info.host
54 uuid = properties[
"uuid"]
55 model = properties[
"model"]
56 name = properties[
"name"]
63 self, user_input: dict[str, Any] |
None =
None
64 ) -> ConfigFlowResult:
65 """Confirm discovery."""
66 assert self.
discoverydiscovery
is not None
68 if user_input
is not None:
71 data={CONF_IP_ADDRESS: discovery.ip_address},
74 "name": discovery.name,
75 "model": discovery.model,
76 "ip_address": discovery.ip_address,
78 self.context[
"title_placeholders"] = placeholders
81 step_id=
"discovery_confirm", description_placeholders=placeholders
85 self, user_input: dict[str, Any] |
None =
None
86 ) -> ConfigFlowResult:
87 """Handle the initial step."""
89 ip_address = (user_input
or {}).
get(CONF_IP_ADDRESS,
"")
90 if user_input
is not None:
94 errors[CONF_IP_ADDRESS] =
"cannot_connect"
97 "Unknown exception during connection test to %s", ip_address
99 errors[
"base"] =
"unknown"
102 device.dns_sd_uuid, raise_on_progress=
False
105 updates={CONF_IP_ADDRESS: ip_address}
109 data={CONF_IP_ADDRESS: ip_address},
114 data_schema=vol.Schema(
115 {vol.Required(CONF_IP_ADDRESS, default=ip_address): str}
122 """Exception to raise when we cannot connect."""
ConfigFlowResult async_step_discovery_confirm(self, dict[str, Any]|None user_input=None)
ConfigFlowResult async_step_user(self, dict[str, Any]|None user_input=None)
ConfigFlowResult async_step_zeroconf(self, zeroconf.ZeroconfServiceInfo discovery_info)
None _abort_if_unique_id_configured(self, dict[str, Any]|None updates=None, bool reload_on_update=True, *str error="already_configured")
None _set_confirm_only(self)
ConfigEntry|None async_set_unique_id(self, str|None unique_id=None, *bool raise_on_progress=True)
ConfigFlowResult async_create_entry(self, *str title, Mapping[str, Any] data, str|None description=None, Mapping[str, str]|None description_placeholders=None, Mapping[str, Any]|None options=None)
ConfigFlowResult async_abort(self, *str reason, Mapping[str, str]|None description_placeholders=None)
ConfigFlowResult async_show_form(self, *str|None step_id=None, vol.Schema|None data_schema=None, dict[str, str]|None errors=None, Mapping[str, str]|None description_placeholders=None, bool|None last_step=None, str|None preview=None)
_FlowResultT async_show_form(self, *str|None step_id=None, vol.Schema|None data_schema=None, dict[str, str]|None errors=None, Mapping[str, str]|None description_placeholders=None, bool|None last_step=None, str|None preview=None)
_FlowResultT async_create_entry(self, *str|None title=None, Mapping[str, Any] data, str|None description=None, Mapping[str, str]|None description_placeholders=None)
_FlowResultT async_abort(self, *str reason, Mapping[str, str]|None description_placeholders=None)
Device async_try_connect(str ip_address)
web.Response get(self, web.Request request, str config_key)