mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +00:00
Add service change_channel to Harmony component (#19649)
* Update requirements Updated requirements * Add attributes Add firmware and config version attributes * Small bump for aioharmony Small version bump increase for aioharmony * Order ATTR constants * Add the service Add service change_channel * Fix requirements file For some reason aioharmony ended up in there as a duplicate. Fixed it. * Updates based on review
This commit is contained in:
parent
d3f2854c89
commit
22c0733d8e
@ -26,6 +26,7 @@ REQUIREMENTS = ['aioharmony==0.1.2']
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
ATTR_CHANNEL = 'channel'
|
||||
ATTR_CURRENT_ACTIVITY = 'current_activity'
|
||||
|
||||
DEFAULT_PORT = 8088
|
||||
@ -33,6 +34,7 @@ DEVICES = []
|
||||
CONF_DEVICE_CACHE = 'harmony_device_cache'
|
||||
|
||||
SERVICE_SYNC = 'harmony_sync'
|
||||
SERVICE_CHANGE_CHANNEL = 'harmony_change_channel'
|
||||
|
||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||
vol.Optional(ATTR_ACTIVITY): cv.string,
|
||||
@ -47,6 +49,11 @@ HARMONY_SYNC_SCHEMA = vol.Schema({
|
||||
vol.Optional(ATTR_ENTITY_ID): cv.entity_ids,
|
||||
})
|
||||
|
||||
HARMONY_CHANGE_CHANNEL_SCHEMA = vol.Schema({
|
||||
vol.Required(ATTR_ENTITY_ID): cv.entity_ids,
|
||||
vol.Required(ATTR_CHANNEL): cv.positive_int
|
||||
})
|
||||
|
||||
|
||||
async def async_setup_platform(hass, config, async_add_entities,
|
||||
discovery_info=None):
|
||||
@ -112,6 +119,10 @@ def register_services(hass):
|
||||
DOMAIN, SERVICE_SYNC, _sync_service,
|
||||
schema=HARMONY_SYNC_SCHEMA)
|
||||
|
||||
hass.services.async_register(
|
||||
DOMAIN, SERVICE_CHANGE_CHANNEL, _change_channel_service,
|
||||
schema=HARMONY_CHANGE_CHANNEL_SCHEMA)
|
||||
|
||||
|
||||
async def _apply_service(service, service_func, *service_func_args):
|
||||
"""Handle services to apply."""
|
||||
@ -131,6 +142,11 @@ 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)
|
||||
|
||||
|
||||
class HarmonyRemote(remote.RemoteDevice):
|
||||
"""Remote representation used to control a Harmony device."""
|
||||
|
||||
@ -348,6 +364,19 @@ class HarmonyRemote(remote.RemoteDevice):
|
||||
result.command.msg
|
||||
)
|
||||
|
||||
async def change_channel(self, channel):
|
||||
"""Change the channel using Harmony remote."""
|
||||
import aioharmony.exceptions as aioexc
|
||||
|
||||
_LOGGER.debug("%s: Changing channel to %s",
|
||||
self.name, channel)
|
||||
try:
|
||||
await self._client.change_channel(channel)
|
||||
except aioexc.TimeOut:
|
||||
_LOGGER.error("%s: Changing channel to %s timed-out",
|
||||
self.name,
|
||||
channel)
|
||||
|
||||
async def sync(self):
|
||||
"""Sync the Harmony device with the web service."""
|
||||
import aioharmony.exceptions as aioexc
|
||||
|
Loading…
x
Reference in New Issue
Block a user