From f492a7678d139df564bad4453646b23262dfab88 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 19 Apr 2020 15:33:51 -0500 Subject: [PATCH] Resolve delay sending multiple commands to harmony remotes (#34410) * Switch harmony to entity service * Fix delay between sending commands, collapse function --- homeassistant/components/harmony/remote.py | 44 +++++----------------- 1 file changed, 9 insertions(+), 35 deletions(-) diff --git a/homeassistant/components/harmony/remote.py b/homeassistant/components/harmony/remote.py index a8c3f3239b4..147ee75a863 100644 --- a/homeassistant/components/harmony/remote.py +++ b/homeassistant/components/harmony/remote.py @@ -25,6 +25,7 @@ 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 +from homeassistant.helpers import entity_platform import homeassistant.helpers.config_validation as cv from homeassistant.helpers.dispatcher import async_dispatcher_connect @@ -45,6 +46,9 @@ from .util import ( _LOGGER = logging.getLogger(__name__) +# We want to fire remote commands right away +PARALLEL_UPDATES = 0 + ATTR_CHANNEL = "channel" ATTR_CURRENT_ACTIVITY = "current_activity" @@ -110,44 +114,14 @@ async def async_setup_entry( _LOGGER.debug("Harmony Remote: %s", device) async_add_entities([device]) - register_services(hass) + platform = entity_platform.current_platform.get() -def register_services(hass): - """Register all services for harmony devices.""" - - async def _apply_service(service, service_func, *service_func_args): - """Handle services to apply.""" - entity_ids = service.data.get("entity_id") - - want_devices = [ - hass.data[DOMAIN][config_entry_id] for config_entry_id in hass.data[DOMAIN] - ] - - if entity_ids: - want_devices = [ - device for device in want_devices if device.entity_id in entity_ids - ] - - for device in want_devices: - await service_func(device, *service_func_args) - - async def _sync_service(service): - await _apply_service(service, HarmonyRemote.sync) - - async def _change_channel_service(service): - channel = service.data.get(ATTR_CHANNEL) - await _apply_service(service, HarmonyRemote.change_channel, channel) - - hass.services.async_register( - DOMAIN, SERVICE_SYNC, _sync_service, schema=HARMONY_SYNC_SCHEMA + platform.async_register_entity_service( + SERVICE_SYNC, HARMONY_SYNC_SCHEMA, "sync", ) - - hass.services.async_register( - DOMAIN, - SERVICE_CHANGE_CHANNEL, - _change_channel_service, - schema=HARMONY_CHANGE_CHANNEL_SCHEMA, + platform.async_register_entity_service( + SERVICE_CHANGE_CHANNEL, HARMONY_CHANGE_CHANNEL_SCHEMA, "change_channel" )