Support Sonos announcements using websockets (#91145)
This commit is contained in:
parent
a061f56833
commit
27f3b53872
5 changed files with 51 additions and 18 deletions
|
@ -18,12 +18,14 @@ from soco.exceptions import SoCoException, SoCoUPnPException
|
|||
from soco.plugins.plex import PlexPlugin
|
||||
from soco.plugins.sharelink import ShareLinkPlugin
|
||||
from soco.snapshot import Snapshot
|
||||
from sonos_websocket import SonosWebsocket
|
||||
|
||||
from homeassistant.components.media_player import DOMAIN as MP_DOMAIN
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.exceptions import HomeAssistantError
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
||||
from homeassistant.helpers.dispatcher import (
|
||||
async_dispatcher_connect,
|
||||
async_dispatcher_send,
|
||||
|
@ -97,6 +99,7 @@ class SonosSpeaker:
|
|||
"""Initialize a SonosSpeaker."""
|
||||
self.hass = hass
|
||||
self.soco = soco
|
||||
self.websocket: SonosWebsocket | None = None
|
||||
self.household_id: str = soco.household_id
|
||||
self.media = SonosMedia(hass, soco)
|
||||
self._plex_plugin: PlexPlugin | None = None
|
||||
|
@ -170,8 +173,13 @@ class SonosSpeaker:
|
|||
self.snapshot_group: list[SonosSpeaker] = []
|
||||
self._group_members_missing: set[str] = set()
|
||||
|
||||
async def async_setup_dispatchers(self, entry: ConfigEntry) -> None:
|
||||
"""Connect dispatchers in async context during setup."""
|
||||
async def async_setup(self, entry: ConfigEntry) -> None:
|
||||
"""Complete setup in async context."""
|
||||
self.websocket = SonosWebsocket(
|
||||
self.soco.ip_address,
|
||||
player_id=self.soco.uid,
|
||||
session=async_get_clientsession(self.hass),
|
||||
)
|
||||
dispatch_pairs: tuple[tuple[str, Callable[..., Any]], ...] = (
|
||||
(SONOS_CHECK_ACTIVITY, self.async_check_activity),
|
||||
(SONOS_SPEAKER_ADDED, self.update_group_for_uid),
|
||||
|
@ -198,7 +206,7 @@ class SonosSpeaker:
|
|||
self.media.poll_media()
|
||||
|
||||
future = asyncio.run_coroutine_threadsafe(
|
||||
self.async_setup_dispatchers(entry), self.hass.loop
|
||||
self.async_setup(entry), self.hass.loop
|
||||
)
|
||||
future.result(timeout=10)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue