Ensure ZHA devices load before validating device triggers (#76084)

pull/76091/head
David F. Mulcahey 2022-08-02 11:29:32 -04:00 committed by GitHub
parent be4f9598f9
commit 67cef0dc94
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 5 deletions

View File

@ -35,6 +35,7 @@ from .core.const import (
DOMAIN,
PLATFORMS,
SIGNAL_ADD_ENTITIES,
ZHA_DEVICES_LOADED_EVENT,
RadioType,
)
from .core.discovery import GROUP_PROBE
@ -75,7 +76,7 @@ _LOGGER = logging.getLogger(__name__)
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
"""Set up ZHA from config."""
hass.data[DATA_ZHA] = {}
hass.data[DATA_ZHA] = {ZHA_DEVICES_LOADED_EVENT: asyncio.Event()}
if DOMAIN in config:
conf = config[DOMAIN]
@ -109,6 +110,7 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> b
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(
@ -141,6 +143,7 @@ async def async_unload_entry(hass: HomeAssistant, config_entry: ConfigEntry) ->
"""Unload ZHA config entry."""
zha_gateway: ZHAGateway = hass.data[DATA_ZHA][DATA_ZHA_GATEWAY]
await zha_gateway.shutdown()
hass.data[DATA_ZHA][ZHA_DEVICES_LOADED_EVENT].clear()
GROUP_PROBE.cleanup()
api.async_unload_api(hass)

View File

@ -394,6 +394,7 @@ ZHA_GW_MSG_GROUP_REMOVED = "group_removed"
ZHA_GW_MSG_LOG_ENTRY = "log_entry"
ZHA_GW_MSG_LOG_OUTPUT = "log_output"
ZHA_GW_MSG_RAW_INIT = "raw_device_initialized"
ZHA_DEVICES_LOADED_EVENT = "zha_devices_loaded_event"
EFFECT_BLINK = 0x00
EFFECT_BREATHE = 0x01

View File

@ -16,8 +16,8 @@ from homeassistant.core import CALLBACK_TYPE, HomeAssistant
from homeassistant.exceptions import HomeAssistantError, IntegrationError
from homeassistant.helpers.typing import ConfigType
from . import DOMAIN
from .core.const import ZHA_EVENT
from . import DOMAIN as ZHA_DOMAIN
from .core.const import DATA_ZHA, ZHA_DEVICES_LOADED_EVENT, ZHA_EVENT
from .core.helpers import async_get_zha_device
CONF_SUBTYPE = "subtype"
@ -35,7 +35,8 @@ async def async_validate_trigger_config(
"""Validate config."""
config = TRIGGER_SCHEMA(config)
if "zha" in hass.config.components:
if ZHA_DOMAIN in hass.config.components:
await hass.data[DATA_ZHA][ZHA_DEVICES_LOADED_EVENT].wait()
trigger = (config[CONF_TYPE], config[CONF_SUBTYPE])
try:
zha_device = async_get_zha_device(hass, config[CONF_DEVICE_ID])
@ -100,7 +101,7 @@ async def async_get_triggers(
triggers.append(
{
CONF_DEVICE_ID: device_id,
CONF_DOMAIN: DOMAIN,
CONF_DOMAIN: ZHA_DOMAIN,
CONF_PLATFORM: DEVICE,
CONF_TYPE: trigger,
CONF_SUBTYPE: subtype,