Home Assistant Unofficial Reference 2024.12.1
const.py
Go to the documentation of this file.
1 """Const for Sonos."""
2 
3 from __future__ import annotations
4 
5 import datetime
6 
7 from homeassistant.components.media_player import MediaClass, MediaType
8 from homeassistant.const import Platform
9 
10 UPNP_ST = "urn:schemas-upnp-org:device:ZonePlayer:1"
11 
12 DOMAIN = "sonos"
13 DATA_SONOS = "sonos_media_player"
14 DATA_SONOS_DISCOVERY_MANAGER = "sonos_discovery_manager"
15 PLATFORMS = [
16  Platform.BINARY_SENSOR,
17  Platform.MEDIA_PLAYER,
18  Platform.NUMBER,
19  Platform.SENSOR,
20  Platform.SWITCH,
21 ]
22 
23 SUB_FAIL_ISSUE_ID = "subscriptions_failed"
24 SUB_FAIL_URL = "https://www.home-assistant.io/integrations/sonos/#network-requirements"
25 
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"
33 SONOS_RADIO = "radio"
34 SONOS_OTHER_ITEM = "other items"
35 
36 SONOS_STATE_PLAYING = "PLAYING"
37 SONOS_STATE_TRANSITIONING = "TRANSITIONING"
38 
39 EXPANDABLE_MEDIA_TYPES = [
40  MediaType.ALBUM,
41  MediaType.ARTIST,
42  MediaType.COMPOSER,
43  MediaType.GENRE,
44  MediaType.PLAYLIST,
45  SONOS_ALBUM,
46  SONOS_ALBUM_ARTIST,
47  SONOS_ARTIST,
48  SONOS_GENRE,
49  SONOS_COMPOSER,
50  SONOS_PLAYLISTS,
51 ]
52 
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,
70 }
71 
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,
87 }
88 
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,
97 }
98 
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,
116 }
117 
118 LIBRARY_TITLES_MAPPING = {
119  "A:ALBUM": "Albums",
120  "A:ALBUMARTIST": "Artists",
121  "A:ARTIST": "Contributing Artists",
122  "A:COMPOSER": "Composers",
123  "A:GENRE": "Genres",
124  "A:PLAYLISTS": "Playlists",
125  "A:TRACKS": "Tracks",
126 }
127 
128 PLAYABLE_MEDIA_TYPES = [
129  MediaType.ALBUM,
130  MediaType.ARTIST,
131  MediaType.COMPOSER,
132  MediaType.CONTRIBUTING_ARTIST,
133  MediaType.GENRE,
134  MediaType.PLAYLIST,
135  MediaType.TRACK,
136 ]
137 
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"
156 
157 SOURCE_AIRPLAY = "AirPlay"
158 SOURCE_LINEIN = "Line-in"
159 SOURCE_SPOTIFY_CONNECT = "Spotify Connect"
160 SOURCE_TV = "TV"
161 
162 MODELS_LINEIN_ONLY = (
163  "CONNECT",
164  "CONNECT:AMP",
165  "PORT",
166  "PLAY:5",
167 )
168 MODELS_TV_ONLY = (
169  "ARC",
170  "BEAM",
171  "PLAYBAR",
172  "PLAYBASE",
173 )
174 MODELS_LINEIN_AND_TV = ("AMP",)
175 
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