mirror of
https://github.com/home-assistant/core.git
synced 2025-07-18 18:57:06 +00:00
Ensure ZHA devices load before validating device triggers (#76084)
This commit is contained in:
parent
be4f9598f9
commit
67cef0dc94
@ -35,6 +35,7 @@ from .core.const import (
|
|||||||
DOMAIN,
|
DOMAIN,
|
||||||
PLATFORMS,
|
PLATFORMS,
|
||||||
SIGNAL_ADD_ENTITIES,
|
SIGNAL_ADD_ENTITIES,
|
||||||
|
ZHA_DEVICES_LOADED_EVENT,
|
||||||
RadioType,
|
RadioType,
|
||||||
)
|
)
|
||||||
from .core.discovery import GROUP_PROBE
|
from .core.discovery import GROUP_PROBE
|
||||||
@ -75,7 +76,7 @@ _LOGGER = logging.getLogger(__name__)
|
|||||||
|
|
||||||
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
||||||
"""Set up ZHA from config."""
|
"""Set up ZHA from config."""
|
||||||
hass.data[DATA_ZHA] = {}
|
hass.data[DATA_ZHA] = {ZHA_DEVICES_LOADED_EVENT: asyncio.Event()}
|
||||||
|
|
||||||
if DOMAIN in config:
|
if DOMAIN in config:
|
||||||
conf = config[DOMAIN]
|
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)
|
zha_gateway = ZHAGateway(hass, config, config_entry)
|
||||||
await zha_gateway.async_initialize()
|
await zha_gateway.async_initialize()
|
||||||
|
hass.data[DATA_ZHA][ZHA_DEVICES_LOADED_EVENT].set()
|
||||||
|
|
||||||
device_registry = dr.async_get(hass)
|
device_registry = dr.async_get(hass)
|
||||||
device_registry.async_get_or_create(
|
device_registry.async_get_or_create(
|
||||||
@ -141,6 +143,7 @@ async def async_unload_entry(hass: HomeAssistant, config_entry: ConfigEntry) ->
|
|||||||
"""Unload ZHA config entry."""
|
"""Unload ZHA config entry."""
|
||||||
zha_gateway: ZHAGateway = hass.data[DATA_ZHA][DATA_ZHA_GATEWAY]
|
zha_gateway: ZHAGateway = hass.data[DATA_ZHA][DATA_ZHA_GATEWAY]
|
||||||
await zha_gateway.shutdown()
|
await zha_gateway.shutdown()
|
||||||
|
hass.data[DATA_ZHA][ZHA_DEVICES_LOADED_EVENT].clear()
|
||||||
|
|
||||||
GROUP_PROBE.cleanup()
|
GROUP_PROBE.cleanup()
|
||||||
api.async_unload_api(hass)
|
api.async_unload_api(hass)
|
||||||
|
@ -394,6 +394,7 @@ ZHA_GW_MSG_GROUP_REMOVED = "group_removed"
|
|||||||
ZHA_GW_MSG_LOG_ENTRY = "log_entry"
|
ZHA_GW_MSG_LOG_ENTRY = "log_entry"
|
||||||
ZHA_GW_MSG_LOG_OUTPUT = "log_output"
|
ZHA_GW_MSG_LOG_OUTPUT = "log_output"
|
||||||
ZHA_GW_MSG_RAW_INIT = "raw_device_initialized"
|
ZHA_GW_MSG_RAW_INIT = "raw_device_initialized"
|
||||||
|
ZHA_DEVICES_LOADED_EVENT = "zha_devices_loaded_event"
|
||||||
|
|
||||||
EFFECT_BLINK = 0x00
|
EFFECT_BLINK = 0x00
|
||||||
EFFECT_BREATHE = 0x01
|
EFFECT_BREATHE = 0x01
|
||||||
|
@ -16,8 +16,8 @@ from homeassistant.core import CALLBACK_TYPE, HomeAssistant
|
|||||||
from homeassistant.exceptions import HomeAssistantError, IntegrationError
|
from homeassistant.exceptions import HomeAssistantError, IntegrationError
|
||||||
from homeassistant.helpers.typing import ConfigType
|
from homeassistant.helpers.typing import ConfigType
|
||||||
|
|
||||||
from . import DOMAIN
|
from . import DOMAIN as ZHA_DOMAIN
|
||||||
from .core.const import ZHA_EVENT
|
from .core.const import DATA_ZHA, ZHA_DEVICES_LOADED_EVENT, ZHA_EVENT
|
||||||
from .core.helpers import async_get_zha_device
|
from .core.helpers import async_get_zha_device
|
||||||
|
|
||||||
CONF_SUBTYPE = "subtype"
|
CONF_SUBTYPE = "subtype"
|
||||||
@ -35,7 +35,8 @@ async def async_validate_trigger_config(
|
|||||||
"""Validate config."""
|
"""Validate config."""
|
||||||
config = TRIGGER_SCHEMA(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])
|
trigger = (config[CONF_TYPE], config[CONF_SUBTYPE])
|
||||||
try:
|
try:
|
||||||
zha_device = async_get_zha_device(hass, config[CONF_DEVICE_ID])
|
zha_device = async_get_zha_device(hass, config[CONF_DEVICE_ID])
|
||||||
@ -100,7 +101,7 @@ async def async_get_triggers(
|
|||||||
triggers.append(
|
triggers.append(
|
||||||
{
|
{
|
||||||
CONF_DEVICE_ID: device_id,
|
CONF_DEVICE_ID: device_id,
|
||||||
CONF_DOMAIN: DOMAIN,
|
CONF_DOMAIN: ZHA_DOMAIN,
|
||||||
CONF_PLATFORM: DEVICE,
|
CONF_PLATFORM: DEVICE,
|
||||||
CONF_TYPE: trigger,
|
CONF_TYPE: trigger,
|
||||||
CONF_SUBTYPE: subtype,
|
CONF_SUBTYPE: subtype,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user