1 """Config flow for WMS WebControl pro API integration."""
3 from __future__
import annotations
10 import voluptuous
as vol
11 from wmspro.webcontrol
import WebControlPro
20 from .const
import DOMAIN, SUGGESTED_HOST
22 _LOGGER = logging.getLogger(__name__)
24 STEP_USER_DATA_SCHEMA = vol.Schema(
26 vol.Required(CONF_HOST): str,
32 """Handle a config flow for wmspro."""
37 self, discovery_info: dhcp.DhcpServiceInfo
38 ) -> ConfigFlowResult:
39 """Handle the DHCP discovery step."""
40 unique_id =
format_mac(discovery_info.macaddress)
43 entry = self.hass.config_entries.async_entry_for_domain_unique_id(
48 ipaddress.ip_address(entry.data[CONF_HOST])
53 updates={CONF_HOST: discovery_info.ip}
56 for entry
in self.hass.config_entries.async_entries(DOMAIN):
57 if not entry.unique_id
and entry.data[CONF_HOST]
in (
58 discovery_info.hostname,
61 self.hass.config_entries.async_update_entry(entry, unique_id=unique_id)
67 self, user_input: dict[str, Any] |
None =
None
68 ) -> ConfigFlowResult:
69 """Handle the user-based step."""
70 errors: dict[str, str] = {}
71 if user_input
is not None:
73 host = user_input[CONF_HOST]
75 hub = WebControlPro(host, session)
77 pong = await hub.ping()
78 except aiohttp.ClientError:
79 errors[
"base"] =
"cannot_connect"
81 _LOGGER.exception(
"Unexpected exception")
82 errors[
"base"] =
"unknown"
85 errors[
"base"] =
"cannot_connect"
88 rooms = set(hub.rooms.keys())
89 for entry
in self.hass.config_entries.async_loaded_entries(DOMAIN):
92 and entry.runtime_data.rooms
93 and set(entry.runtime_data.rooms.keys()) == rooms
99 discovery_info: DhcpServiceInfo = self.init_data
100 data_values = {CONF_HOST: discovery_info.ip}
102 data_values = {CONF_HOST: SUGGESTED_HOST}
104 self.context[
"title_placeholders"] = data_values
106 STEP_USER_DATA_SCHEMA, data_values
110 step_id=
"user", data_schema=data_schema, errors=errors
ConfigFlowResult async_step_dhcp(self, dhcp.DhcpServiceInfo discovery_info)
ConfigFlowResult async_step_user(self, dict[str, Any]|None user_input=None)
None _abort_if_unique_id_configured(self, dict[str, Any]|None updates=None, bool reload_on_update=True, *str error="already_configured")
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_step_user(self, dict[str, Any]|None user_input=None)
ConfigFlowResult async_abort(self, *str reason, Mapping[str, str]|None description_placeholders=None)
None _async_abort_entries_match(self, dict[str, Any]|None match_dict=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)
vol.Schema add_suggested_values_to_schema(self, vol.Schema data_schema, Mapping[str, Any]|None suggested_values)
_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)
aiohttp.ClientSession async_get_clientsession(HomeAssistant hass, bool verify_ssl=True, socket.AddressFamily family=socket.AF_UNSPEC, ssl_util.SSLCipherList ssl_cipher=ssl_util.SSLCipherList.PYTHON_DEFAULT)