3 from __future__
import annotations
10 UPNP_ST =
"urn:schemas-upnp-org:device:ZonePlayer:1"
13 DATA_SONOS =
"sonos_media_player"
14 DATA_SONOS_DISCOVERY_MANAGER =
"sonos_discovery_manager"
16 Platform.BINARY_SENSOR,
17 Platform.MEDIA_PLAYER,
23 SUB_FAIL_ISSUE_ID =
"subscriptions_failed"
24 SUB_FAIL_URL =
"https://www.home-assistant.io/integrations/sonos/#network-requirements"
26 SONOS_ARTIST =
"artists"
27 SONOS_ALBUM =
"albums"
28 SONOS_PLAYLISTS =
"playlists"
29 SONOS_GENRE =
"genres"
30 SONOS_ALBUM_ARTIST =
"album_artists"
31 SONOS_TRACKS =
"tracks"
32 SONOS_COMPOSER =
"composers"
34 SONOS_OTHER_ITEM =
"other items"
36 SONOS_STATE_PLAYING =
"PLAYING"
37 SONOS_STATE_TRANSITIONING =
"TRANSITIONING"
39 EXPANDABLE_MEDIA_TYPES = [
53 SONOS_TO_MEDIA_CLASSES = {
54 SONOS_ALBUM: MediaClass.ALBUM,
55 SONOS_ALBUM_ARTIST: MediaClass.ARTIST,
56 SONOS_ARTIST: MediaClass.CONTRIBUTING_ARTIST,
57 SONOS_COMPOSER: MediaClass.COMPOSER,
58 SONOS_GENRE: MediaClass.GENRE,
59 SONOS_PLAYLISTS: MediaClass.PLAYLIST,
60 SONOS_TRACKS: MediaClass.TRACK,
61 "object.container.album.musicAlbum": MediaClass.ALBUM,
62 "object.container.genre.musicGenre": MediaClass.PLAYLIST,
63 "object.container.person.composer": MediaClass.PLAYLIST,
64 "object.container.person.musicArtist": MediaClass.ARTIST,
65 "object.container.playlistContainer.sameArtist": MediaClass.ARTIST,
66 "object.container.playlistContainer": MediaClass.PLAYLIST,
67 "object.item": MediaClass.TRACK,
68 "object.item.audioItem.musicTrack": MediaClass.TRACK,
69 "object.item.audioItem.audioBroadcast": MediaClass.GENRE,
72 SONOS_TO_MEDIA_TYPES = {
73 SONOS_ALBUM: MediaType.ALBUM,
74 SONOS_ALBUM_ARTIST: MediaType.ARTIST,
75 SONOS_ARTIST: MediaType.CONTRIBUTING_ARTIST,
76 SONOS_COMPOSER: MediaType.COMPOSER,
77 SONOS_GENRE: MediaType.GENRE,
78 SONOS_PLAYLISTS: MediaType.PLAYLIST,
79 SONOS_TRACKS: MediaType.TRACK,
80 "object.container.album.musicAlbum": MediaType.ALBUM,
81 "object.container.genre.musicGenre": MediaType.PLAYLIST,
82 "object.container.person.composer": MediaType.PLAYLIST,
83 "object.container.person.musicArtist": MediaType.ARTIST,
84 "object.container.playlistContainer.sameArtist": MediaType.ARTIST,
85 "object.container.playlistContainer": MediaType.PLAYLIST,
86 "object.item.audioItem.musicTrack": MediaType.TRACK,
89 MEDIA_TYPES_TO_SONOS: dict[MediaType | str, str] = {
90 MediaType.ALBUM: SONOS_ALBUM,
91 MediaType.ARTIST: SONOS_ALBUM_ARTIST,
92 MediaType.CONTRIBUTING_ARTIST: SONOS_ARTIST,
93 MediaType.COMPOSER: SONOS_COMPOSER,
94 MediaType.GENRE: SONOS_GENRE,
95 MediaType.PLAYLIST: SONOS_PLAYLISTS,
96 MediaType.TRACK: SONOS_TRACKS,
99 SONOS_TYPES_MAPPING = {
100 "A:ALBUM": SONOS_ALBUM,
101 "A:ALBUMARTIST": SONOS_ALBUM_ARTIST,
102 "A:ARTIST": SONOS_ARTIST,
103 "A:COMPOSER": SONOS_COMPOSER,
104 "A:GENRE": SONOS_GENRE,
105 "A:PLAYLISTS": SONOS_PLAYLISTS,
106 "A:TRACKS": SONOS_TRACKS,
107 "object.container.album.musicAlbum": SONOS_ALBUM,
108 "object.container.genre.musicGenre": SONOS_GENRE,
109 "object.container.person.composer": SONOS_COMPOSER,
110 "object.container.person.musicArtist": SONOS_ALBUM_ARTIST,
111 "object.container.playlistContainer.sameArtist": SONOS_ARTIST,
112 "object.container.playlistContainer": SONOS_PLAYLISTS,
113 "object.item": SONOS_OTHER_ITEM,
114 "object.item.audioItem.musicTrack": SONOS_TRACKS,
115 "object.item.audioItem.audioBroadcast": SONOS_RADIO,
118 LIBRARY_TITLES_MAPPING = {
120 "A:ALBUMARTIST":
"Artists",
121 "A:ARTIST":
"Contributing Artists",
122 "A:COMPOSER":
"Composers",
124 "A:PLAYLISTS":
"Playlists",
125 "A:TRACKS":
"Tracks",
128 PLAYABLE_MEDIA_TYPES = [
132 MediaType.CONTRIBUTING_ARTIST,
138 SONOS_CHECK_ACTIVITY =
"sonos_check_activity"
139 SONOS_CREATE_ALARM =
"sonos_create_alarm"
140 SONOS_CREATE_AUDIO_FORMAT_SENSOR =
"sonos_create_audio_format_sensor"
141 SONOS_CREATE_BATTERY =
"sonos_create_battery"
142 SONOS_CREATE_FAVORITES_SENSOR =
"sonos_create_favorites_sensor"
143 SONOS_CREATE_MIC_SENSOR =
"sonos_create_mic_sensor"
144 SONOS_CREATE_SWITCHES =
"sonos_create_switches"
145 SONOS_CREATE_LEVELS =
"sonos_create_levels"
146 SONOS_CREATE_MEDIA_PLAYER =
"sonos_create_media_player"
147 SONOS_FALLBACK_POLL =
"sonos_fallback_poll"
148 SONOS_ALARMS_UPDATED =
"sonos_alarms_updated"
149 SONOS_FAVORITES_UPDATED =
"sonos_favorites_updated"
150 SONOS_MEDIA_UPDATED =
"sonos_media_updated"
151 SONOS_SPEAKER_ACTIVITY =
"sonos_speaker_activity"
152 SONOS_SPEAKER_ADDED =
"sonos_speaker_added"
153 SONOS_STATE_UPDATED =
"sonos_state_updated"
154 SONOS_REBOOTED =
"sonos_rebooted"
155 SONOS_VANISHED =
"sonos_vanished"
157 SOURCE_AIRPLAY =
"AirPlay"
158 SOURCE_LINEIN =
"Line-in"
159 SOURCE_SPOTIFY_CONNECT =
"Spotify Connect"
162 MODELS_LINEIN_ONLY = (
174 MODELS_LINEIN_AND_TV = (
"AMP",)
176 AVAILABILITY_CHECK_INTERVAL = datetime.timedelta(minutes=1)
177 AVAILABILITY_TIMEOUT = AVAILABILITY_CHECK_INTERVAL.total_seconds() * 4.5
178 BATTERY_SCAN_INTERVAL = datetime.timedelta(minutes=15)
179 SCAN_INTERVAL = datetime.timedelta(seconds=10)
180 DISCOVERY_INTERVAL = datetime.timedelta(seconds=60)
181 SUBSCRIPTION_TIMEOUT = 1200