async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool: """Set up ZHA. Will automatically load components to support devices found on the network. """ zha_data = hass.data.setdefault(DATA_ZHA, {}) config = zha_data.get(DATA_ZHA_CONFIG, {}) for platform in PLATFORMS: zha_data.setdefault(platform, []) if config.get(CONF_ENABLE_QUIRKS, True): setup_quirks(config) # temporary code to remove the zha storage file from disk. this will be removed in 2022.10.0 storage_path = hass.config.path(STORAGE_DIR, "zha.storage") if os.path.isfile(storage_path): _LOGGER.debug("removing ZHA storage file") await hass.async_add_executor_job(os.remove, storage_path) else: _LOGGER.debug("ZHA storage file does not exist or was already removed") zha_gateway = ZHAGateway(hass, config, config_entry) await zha_gateway.async_initialize() hass.data[DATA_ZHA][ZHA_DEVICES_LOADED_EVENT].set() device_registry = dr.async_get(hass) device_registry.async_get_or_create( config_entry_id=config_entry.entry_id, connections={(dr.CONNECTION_ZIGBEE, str(zha_gateway.coordinator_ieee)) }, identifiers={(DOMAIN, str(zha_gateway.coordinator_ieee))}, name="Zigbee Coordinator", manufacturer="ZHA", model=zha_gateway.radio_description, ) api.async_load_api(hass) async def async_zha_shutdown(event): """Handle shutdown tasks.""" zha_gateway: ZHAGateway = zha_data[DATA_ZHA_GATEWAY] await zha_gateway.shutdown() zha_data[DATA_ZHA_SHUTDOWN_TASK] = hass.bus.async_listen_once( ha_const.EVENT_HOMEASSISTANT_STOP, async_zha_shutdown) await zha_gateway.async_initialize_devices_and_entities() await hass.config_entries.async_forward_entry_setups( config_entry, PLATFORMS) async_dispatcher_send(hass, SIGNAL_ADD_ENTITIES) return True
async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool: """Set up ZHA. Will automatically load components to support devices found on the network. """ zha_data = hass.data.setdefault(DATA_ZHA, {}) config = zha_data.get(DATA_ZHA_CONFIG, {}) for platform in PLATFORMS: zha_data.setdefault(platform, []) if config.get(CONF_ENABLE_QUIRKS, True): setup_quirks(config) zha_gateway = ZHAGateway(hass, config, config_entry) await zha_gateway.async_initialize() zha_data[DATA_ZHA_PLATFORM_LOADED] = [] for platform in PLATFORMS: coro = hass.config_entries.async_forward_entry_setup( config_entry, platform) zha_data[DATA_ZHA_PLATFORM_LOADED].append(hass.async_create_task(coro)) device_registry = await hass.helpers.device_registry.async_get_registry() device_registry.async_get_or_create( config_entry_id=config_entry.entry_id, connections={ (CONNECTION_ZIGBEE, str(zha_gateway.application_controller.ieee)) }, # type: ignore[attr-defined] identifiers={(DOMAIN, str(zha_gateway.application_controller.ieee)) }, # type: ignore[attr-defined] name="Zigbee Coordinator", manufacturer="ZHA", model=zha_gateway.radio_description, ) api.async_load_api(hass) async def async_zha_shutdown(event): """Handle shutdown tasks.""" await zha_data[DATA_ZHA_GATEWAY].shutdown() await zha_data[DATA_ZHA_GATEWAY].async_update_device_storage() zha_data[DATA_ZHA_SHUTDOWN_TASK] = hass.bus.async_listen_once( ha_const.EVENT_HOMEASSISTANT_STOP, async_zha_shutdown) asyncio.create_task(async_load_entities(hass)) return True