Use local Sonos API for Plex music playback (#63357)
This commit is contained in:
parent
cf7148c3f8
commit
cdad1a9f27
8 changed files with 164 additions and 104 deletions
|
@ -2,7 +2,7 @@
|
|||
import json
|
||||
import logging
|
||||
|
||||
from plexapi.exceptions import BadRequest, NotFound
|
||||
from plexapi.exceptions import NotFound
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.core import HomeAssistant, ServiceCall
|
||||
|
@ -115,33 +115,14 @@ def lookup_plex_media(hass, content_type, content_id):
|
|||
raise HomeAssistantError(
|
||||
f"PlayQueue '{playqueue_id}' could not be found"
|
||||
) from err
|
||||
else:
|
||||
shuffle = content.pop("shuffle", 0)
|
||||
media = plex_server.lookup_media(content_type, **content)
|
||||
if media is None:
|
||||
raise HomeAssistantError(
|
||||
f"Plex media not found using payload: '{content_id}'"
|
||||
)
|
||||
playqueue = plex_server.create_playqueue(media, shuffle=shuffle)
|
||||
return playqueue
|
||||
|
||||
return (playqueue, plex_server)
|
||||
shuffle = content.pop("shuffle", 0)
|
||||
media = plex_server.lookup_media(content_type, **content)
|
||||
if media is None:
|
||||
raise HomeAssistantError(f"Plex media not found using payload: '{content_id}'")
|
||||
|
||||
if shuffle:
|
||||
return plex_server.create_playqueue(media, shuffle=shuffle)
|
||||
|
||||
def play_on_sonos(hass, content_type, content_id, speaker_name):
|
||||
"""Play music on a connected Sonos speaker using Plex APIs.
|
||||
|
||||
Called by Sonos 'media_player.play_media' service.
|
||||
"""
|
||||
media, plex_server = lookup_plex_media(hass, content_type, content_id)
|
||||
try:
|
||||
sonos_speaker = plex_server.account.sonos_speaker(speaker_name)
|
||||
except BadRequest as exc:
|
||||
raise HomeAssistantError(
|
||||
"Sonos speakers not linked to Plex account, complete this step in the Plex app"
|
||||
) from exc
|
||||
|
||||
if sonos_speaker is None:
|
||||
message = f"Sonos speaker '{speaker_name}' is not associated with '{plex_server.friendly_name}'"
|
||||
_LOGGER.error(message)
|
||||
raise HomeAssistantError(message)
|
||||
sonos_speaker.playMedia(media)
|
||||
return media
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue