1 """Support for deCONZ devices."""
3 from __future__
import annotations
12 from .config_flow
import get_master_hub
13 from .const
import CONF_MASTER_GATEWAY, DOMAIN, PLATFORMS
14 from .deconz_event
import async_setup_events, async_unload_events
15 from .errors
import AuthenticationRequired, CannotConnect
16 from .hub
import DeconzHub, get_deconz_api
17 from .services
import async_setup_services
19 CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)
22 async
def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
23 """Set up services."""
29 """Set up a deCONZ bridge for a config entry.
31 Load config, group, light and sensor data for server information.
32 Start websocket for push notification of state changes from deCONZ.
34 hass.data.setdefault(DOMAIN, {})
36 if not config_entry.options:
41 except CannotConnect
as err:
42 raise ConfigEntryNotReady
from err
43 except AuthenticationRequired
as err:
44 raise ConfigEntryAuthFailed
from err
46 hub = hass.data[DOMAIN][config_entry.entry_id] = DeconzHub(hass, config_entry, api)
47 await hub.async_update_device_registry()
49 config_entry.add_update_listener(hub.async_config_entry_updated)
52 await hass.config_entries.async_forward_entry_setups(config_entry, PLATFORMS)
56 config_entry.async_on_unload(
57 hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, hub.shutdown)
64 """Unload deCONZ config entry."""
65 hub: DeconzHub = hass.data[DOMAIN].pop(config_entry.entry_id)
68 if hass.data[DOMAIN]
and hub.master:
70 new_master_hub = next(iter(hass.data[DOMAIN].values()))
73 return await hub.async_reset()
77 hass: HomeAssistant, config_entry: ConfigEntry
79 """Update master hub boolean.
81 Called by setup_entry and unload_entry.
82 Makes sure there is always one master available.
86 master = master_hub.config_entry == config_entry
90 options = {**config_entry.options, CONF_MASTER_GATEWAY: master}
92 hass.config_entries.async_update_entry(config_entry, options=options)
DeconzHub get_master_hub(HomeAssistant hass)
None async_setup_events(DeconzHub hub)
None async_unload_events(DeconzHub hub)
DeconzSession get_deconz_api(HomeAssistant hass, ConfigEntry config_entry)
bool async_unload_entry(HomeAssistant hass, ConfigEntry config_entry)
None async_update_master_hub(HomeAssistant hass, ConfigEntry config_entry)
bool async_setup(HomeAssistant hass, ConfigType config)
bool async_setup_entry(HomeAssistant hass, ConfigEntry config_entry)
None async_setup_services(HomeAssistant hass)