Ensure harmony hub is ready before importing (#33537)
If the harmony hub was not ready for connection or was busy when importing from yaml, the import validation would fail would not be retried. To mitigate this scenario we now do the validation in async_setup_platform which allows us to raise PlatformNotReady so we can retry later.
This commit is contained in:
parent
4ebbabcdd1
commit
590e714021
4 changed files with 95 additions and 51 deletions
|
@ -24,6 +24,7 @@ from homeassistant.components.remote import (
|
|||
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
|
||||
from homeassistant.const import ATTR_ENTITY_ID, CONF_HOST, CONF_NAME
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import PlatformNotReady
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||
|
||||
|
@ -33,6 +34,13 @@ from .const import (
|
|||
HARMONY_OPTIONS_UPDATE,
|
||||
SERVICE_CHANGE_CHANNEL,
|
||||
SERVICE_SYNC,
|
||||
UNIQUE_ID,
|
||||
)
|
||||
from .util import (
|
||||
find_best_name_for_remote,
|
||||
find_matching_config_entries_for_host,
|
||||
find_unique_id_for_remote,
|
||||
get_harmony_client_if_available,
|
||||
)
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
@ -51,6 +59,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
|
|||
extra=vol.ALLOW_EXTRA,
|
||||
)
|
||||
|
||||
|
||||
HARMONY_SYNC_SCHEMA = vol.Schema({vol.Optional(ATTR_ENTITY_ID): cv.entity_ids})
|
||||
|
||||
HARMONY_CHANGE_CHANNEL_SCHEMA = vol.Schema(
|
||||
|
@ -68,9 +77,25 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
|||
# Now handled by ssdp in the config flow
|
||||
return
|
||||
|
||||
if find_matching_config_entries_for_host(hass, config[CONF_HOST]):
|
||||
return
|
||||
|
||||
# We do the validation to verify we can connect
|
||||
# so we can raise PlatformNotReady to force
|
||||
# a retry so we can avoid a scenario where the config
|
||||
# entry cannot be created via import because hub
|
||||
# is not yet ready.
|
||||
harmony = await get_harmony_client_if_available(config[CONF_HOST])
|
||||
if not harmony:
|
||||
raise PlatformNotReady
|
||||
|
||||
validated_config = config.copy()
|
||||
validated_config[UNIQUE_ID] = find_unique_id_for_remote(harmony)
|
||||
validated_config[CONF_NAME] = find_best_name_for_remote(config, harmony)
|
||||
|
||||
hass.async_create_task(
|
||||
hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": SOURCE_IMPORT}, data=config
|
||||
DOMAIN, context={"source": SOURCE_IMPORT}, data=validated_config
|
||||
)
|
||||
)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue