1 """The wiz integration discovery."""
3 from __future__
import annotations
6 from dataclasses
import asdict
9 from pywizlight.discovery
import DiscoveredBulb, find_wizlights
11 from homeassistant
import config_entries
16 from .const
import DOMAIN
18 _LOGGER = logging.getLogger(__name__)
22 hass: HomeAssistant, timeout: int
23 ) -> list[DiscoveredBulb]:
24 """Discover wiz devices."""
25 broadcast_addrs = await network.async_get_ipv4_broadcast_addresses(hass)
26 targets = [
str(address)
for address
in broadcast_addrs]
27 combined_discoveries: dict[str, DiscoveredBulb] = {}
28 for idx, discovered
in enumerate(
30 *[find_wizlights(timeout, address)
for address
in targets],
31 return_exceptions=
True,
34 if isinstance(discovered, Exception):
35 _LOGGER.debug(
"Scanning %s failed with error: %s", targets[idx], discovered)
37 if isinstance(discovered, BaseException):
38 raise discovered
from None
39 for device
in discovered:
40 assert isinstance(device, DiscoveredBulb)
41 combined_discoveries[device.ip_address] = device
43 return list(combined_discoveries.values())
49 discovered_devices: list[DiscoveredBulb],
51 """Trigger config flows for discovered devices."""
52 for device
in discovered_devices:
53 discovery_flow.async_create_flow(
56 context={
"source": config_entries.SOURCE_INTEGRATION_DISCOVERY},
list[DiscoveredBulb] async_discover_devices(HomeAssistant hass, int timeout)
None async_trigger_discovery(HomeAssistant hass, list[DiscoveredBulb] discovered_devices)