1 """Constants for the Bang & Olufsen integration."""
3 from __future__
import annotations
5 from enum
import StrEnum
6 from typing
import Final
8 from mozart_api.models
import Source, SourceArray, SourceTypeEnum
18 """Class used for associating device source ids with friendly names. May not include all sources."""
20 LINE_IN: Final[Source] = Source(name=
"Line-In", id=
"lineIn")
21 SPDIF: Final[Source] = Source(name=
"Optical", id=
"spdif")
22 URI_STREAMER: Final[Source] = Source(name=
"Audio Streamer", id=
"uriStreamer")
25 BANG_OLUFSEN_STATES: dict[str, MediaPlayerState] = {
27 "started": MediaPlayerState.PLAYING,
28 "buffering": MediaPlayerState.PLAYING,
29 "idle": MediaPlayerState.IDLE,
30 "paused": MediaPlayerState.PAUSED,
31 "stopped": MediaPlayerState.PAUSED,
32 "ended": MediaPlayerState.PAUSED,
33 "error": MediaPlayerState.IDLE,
35 "unknown": MediaPlayerState.IDLE,
39 BANG_OLUFSEN_REPEAT_FROM_HA: dict[RepeatMode, str] = {
40 RepeatMode.ALL:
"all",
41 RepeatMode.ONE:
"track",
42 RepeatMode.OFF:
"none",
45 BANG_OLUFSEN_REPEAT_TO_HA: dict[str, RepeatMode] = {
46 value: key
for key, value
in BANG_OLUFSEN_REPEAT_FROM_HA.items()
52 """Bang & Olufsen specific media types."""
54 FAVOURITE =
"favourite"
59 OVERLAY_TTS =
"overlay_tts"
63 """Enum for compatible model names."""
65 BEOCONNECT_CORE =
"Beoconnect Core"
67 BEOLAB_28 =
"BeoLab 28"
68 BEOSOUND_2 =
"Beosound 2 3rd Gen"
69 BEOSOUND_A5 =
"Beosound A5"
70 BEOSOUND_A9 =
"Beosound A9 5th Gen"
71 BEOSOUND_BALANCE =
"Beosound Balance"
72 BEOSOUND_EMERGE =
"Beosound Emerge"
73 BEOSOUND_LEVEL =
"Beosound Level"
74 BEOSOUND_THEATRE =
"Beosound Theatre"
79 """Enum for WebSocket notification types."""
81 ACTIVE_LISTENING_MODE =
"active_listening_mode"
82 PLAYBACK_ERROR =
"playback_error"
83 PLAYBACK_METADATA =
"playback_metadata"
84 PLAYBACK_PROGRESS =
"playback_progress"
85 PLAYBACK_SOURCE =
"playback_source"
86 PLAYBACK_STATE =
"playback_state"
87 SOFTWARE_UPDATE_STATE =
"software_update_state"
88 SOURCE_CHANGE =
"source_change"
93 BEOLINK_PEERS =
"beolinkPeers"
94 BEOLINK_LISTENERS =
"beolinkListeners"
95 BEOLINK_AVAILABLE_LISTENERS =
"beolinkAvailableListeners"
96 CONFIGURATION =
"configuration"
97 NOTIFICATION =
"notification"
98 REMOTE_MENU_CHANGED =
"remoteMenuChanged"
103 DOMAIN: Final[str] =
"bang_olufsen"
106 DEFAULT_MODEL: Final[str] = BangOlufsenModel.BEOSOUND_BALANCE
109 CONF_SERIAL_NUMBER: Final =
"serial_number"
110 CONF_BEOLINK_JID: Final =
"jid"
113 COMPATIBLE_MODELS: list[str] = [x.value
for x
in BangOlufsenModel]
116 ATTR_TYPE_NUMBER: Final[str] =
"tn"
117 ATTR_SERIAL_NUMBER: Final[str] =
"sn"
118 ATTR_ITEM_NUMBER: Final[str] =
"in"
119 ATTR_FRIENDLY_NAME: Final[str] =
"fn"
122 BANG_OLUFSEN_ON: Final[str] =
"on"
124 VALID_MEDIA_TYPES: Final[tuple] = (
125 BangOlufsenMediaType.FAVOURITE,
126 BangOlufsenMediaType.DEEZER,
127 BangOlufsenMediaType.RADIO,
128 BangOlufsenMediaType.TTS,
129 BangOlufsenMediaType.TIDAL,
130 BangOlufsenMediaType.OVERLAY_TTS,
138 FALLBACK_SOURCES: Final[SourceArray] = SourceArray(
144 name=
"Audio Streamer",
145 type=SourceTypeEnum(value=
"uriStreamer"),
153 type=SourceTypeEnum(value=
"bluetooth"),
160 name=
"Spotify Connect",
161 type=SourceTypeEnum(value=
"spotify"),
169 type=SourceTypeEnum(value=
"lineIn"),
177 type=SourceTypeEnum(value=
"spdif"),
185 type=SourceTypeEnum(value=
"netRadio"),
193 type=SourceTypeEnum(value=
"deezer"),
200 name=
"Tidal Connect",
201 type=SourceTypeEnum(value=
"tidalConnect"),
209 BANG_OLUFSEN_WEBSOCKET_EVENT: Final[str] = f
"{DOMAIN}_websocket_event"
212 CONNECTION_STATUS: Final[str] =
"CONNECTION_STATUS"