Home Assistant Unofficial Reference 2024.12.1
config_flow.py
Go to the documentation of this file.
1 """Config flow for escea."""
2 
3 import asyncio
4 from contextlib import suppress
5 import logging
6 
7 from homeassistant.core import HomeAssistant, callback
8 from homeassistant.helpers import config_entry_flow
9 from homeassistant.helpers.dispatcher import async_dispatcher_connect
10 
11 from .const import (
12  DISPATCH_CONTROLLER_DISCOVERED,
13  DOMAIN,
14  ESCEA_FIREPLACE,
15  TIMEOUT_DISCOVERY,
16 )
17 from .discovery import async_start_discovery_service, async_stop_discovery_service
18 
19 _LOGGER = logging.getLogger(__name__)
20 
21 
22 async def _async_has_devices(hass: HomeAssistant) -> bool:
23  controller_ready = asyncio.Event()
24 
25  @callback
26  def dispatch_discovered(_):
27  controller_ready.set()
28 
29  remove_handler = async_dispatcher_connect(
30  hass, DISPATCH_CONTROLLER_DISCOVERED, dispatch_discovered
31  )
32 
33  discovery_service = await async_start_discovery_service(hass)
34 
35  with suppress(TimeoutError):
36  async with asyncio.timeout(TIMEOUT_DISCOVERY):
37  await controller_ready.wait()
38 
39  remove_handler()
40 
41  if not discovery_service.controllers:
43  _LOGGER.debug("No controllers found")
44  return False
45 
46  _LOGGER.debug("Controllers %s", discovery_service.controllers)
47  return True
48 
49 
50 config_entry_flow.register_discovery_flow(DOMAIN, ESCEA_FIREPLACE, _async_has_devices)
bool _async_has_devices(HomeAssistant hass)
Definition: config_flow.py:22
None async_stop_discovery_service(HomeAssistant hass)
Definition: discovery.py:69
AbstractDiscoveryService async_start_discovery_service(HomeAssistant hass)
Definition: discovery.py:52
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)
Definition: dispatcher.py:103