1 """Config flow for bluesound."""
6 from pyblu
import Player, SyncStatus
7 from pyblu.errors
import PlayerUnreachableError
8 import voluptuous
as vol
15 from .const
import DOMAIN
16 from .media_player
import DEFAULT_PORT
17 from .utils
import format_unique_id
19 _LOGGER = logging.getLogger(__name__)
23 """Bluesound config flow."""
29 """Initialize the config flow."""
30 self.
_host_host: str |
None =
None
35 self, user_input: dict[str, Any] |
None =
None
36 ) -> ConfigFlowResult:
37 """Handle a flow initiated by the user."""
38 errors: dict[str, str] = {}
39 if user_input
is not None:
42 user_input[CONF_HOST], user_input[CONF_PORT], session=session
45 sync_status = await player.sync_status(timeout=1)
46 except PlayerUnreachableError:
47 errors[
"base"] =
"cannot_connect"
54 CONF_HOST: user_input[CONF_HOST],
59 title=sync_status.name,
66 data_schema=vol.Schema(
68 vol.Required(CONF_HOST): str,
69 vol.Optional(CONF_PORT, default=11000): int,
75 """Import bluesound config entry from configuration.yaml."""
78 import_data[CONF_HOST], import_data[CONF_PORT], session=session
81 sync_status = await player.sync_status(timeout=1)
82 except PlayerUnreachableError:
91 title=sync_status.name,
96 self, discovery_info: zeroconf.ZeroconfServiceInfo
97 ) -> ConfigFlowResult:
98 """Handle a flow initialized by zeroconf discovery."""
99 if discovery_info.port
is not None:
100 self.
_port_port = discovery_info.port
105 discovery_info.host, self.
_port_port, session=session
107 sync_status = await player.sync_status(timeout=1)
108 except PlayerUnreachableError:
113 self.
_host_host = discovery_info.host
118 CONF_HOST: self.
_host_host,
124 "title_placeholders": {
"name": sync_status.name},
125 "configuration_url": f
"http://{discovery_info.host}",
131 self, user_input: dict[str, Any] |
None =
None
132 ) -> ConfigFlowResult:
133 """Confirm the zeroconf setup."""
135 assert self.
_host_host
is not None
137 if user_input
is not None:
141 CONF_HOST: self.
_host_host,
142 CONF_PORT: self.
_port_port,
148 description_placeholders={
150 "host": self.
_host_host,
ConfigFlowResult async_step_confirm(self, dict[str, Any]|None user_input=None)
ConfigFlowResult async_step_user(self, dict[str, Any]|None user_input=None)
ConfigFlowResult async_step_import(self, dict[str, Any] import_data)
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")
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)
IssData update(pyiss.ISS iss)
str format_unique_id(str address)
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)