Synchronize Sonos service calls (#23791)

This commit is contained in:
Anders Melchiorsen 2019-05-10 22:37:03 +02:00 committed by GitHub
parent e9ea5c2ccb
commit 34f6245e74
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 1 deletions

View File

@ -1,4 +1,5 @@
"""Support to embed Sonos."""
import asyncio
import voluptuous as vol
from homeassistant import config_entries
@ -80,12 +81,15 @@ SONOS_SET_OPTION_SCHEMA = vol.Schema({
vol.Optional(ATTR_SPEECH_ENHANCE): cv.boolean,
})
DATA_SERVICE_EVENT = 'sonos_service_idle'
async def async_setup(hass, config):
"""Set up the Sonos component."""
conf = config.get(DOMAIN)
hass.data[DOMAIN] = conf or {}
hass.data[DATA_SERVICE_EVENT] = asyncio.Event()
if conf is not None:
hass.async_create_task(hass.config_entries.flow.async_init(
@ -93,7 +97,9 @@ async def async_setup(hass, config):
async def service_handle(service):
"""Dispatch a service call."""
hass.data[DATA_SERVICE_EVENT].clear()
async_dispatcher_send(hass, DOMAIN, service.service, service.data)
await hass.data[DATA_SERVICE_EVENT].wait()
hass.services.async_register(
DOMAIN, SERVICE_JOIN, service_handle,

View File

@ -25,7 +25,7 @@ from homeassistant.util.dt import utcnow
from . import (
CONF_ADVERTISE_ADDR, CONF_HOSTS, CONF_INTERFACE_ADDR,
DOMAIN as SONOS_DOMAIN,
DATA_SERVICE_EVENT, DOMAIN as SONOS_DOMAIN,
ATTR_ALARM_ID, ATTR_ENABLED, ATTR_INCLUDE_LINKED_ZONES, ATTR_MASTER,
ATTR_NIGHT_SOUND, ATTR_SLEEP_TIME, ATTR_SPEECH_ENHANCE, ATTR_TIME,
ATTR_VOLUME, ATTR_WITH_GROUP,
@ -155,6 +155,9 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
hass.async_add_executor_job(call, data)
# We are ready for the next service call
hass.data[DATA_SERVICE_EVENT].set()
async_dispatcher_connect(hass, SONOS_DOMAIN, async_service_handle)