diff --git a/homeassistant/components/bang_olufsen/const.py b/homeassistant/components/bang_olufsen/const.py index c5ee5d1a26e..b03e2f69df6 100644 --- a/homeassistant/components/bang_olufsen/const.py +++ b/homeassistant/components/bang_olufsen/const.py @@ -71,9 +71,26 @@ class BangOlufsenModel(StrEnum): BEOSOUND_BALANCE = "Beosound Balance" BEOSOUND_EMERGE = "Beosound Emerge" BEOSOUND_LEVEL = "Beosound Level" + BEOSOUND_PREMIERE = "Beosound Premiere" BEOSOUND_THEATRE = "Beosound Theatre" +# Physical "buttons" on devices +class BangOlufsenButtons(StrEnum): + """Enum for device buttons.""" + + BLUETOOTH = "Bluetooth" + MICROPHONE = "Microphone" + NEXT = "Next" + PLAY_PAUSE = "PlayPause" + PRESET_1 = "Preset1" + PRESET_2 = "Preset2" + PRESET_3 = "Preset3" + PRESET_4 = "Preset4" + PREVIOUS = "Previous" + VOLUME = "Volume" + + # Dispatcher events class WebsocketNotification(StrEnum): """Enum for WebSocket notification types.""" @@ -204,23 +221,6 @@ FALLBACK_SOURCES: Final[SourceArray] = SourceArray( ), ] ) -# Map for storing compatibility of devices. - -MODEL_SUPPORT_DEVICE_BUTTONS: Final[str] = "device_buttons" - -MODEL_SUPPORT_MAP = { - MODEL_SUPPORT_DEVICE_BUTTONS: ( - BangOlufsenModel.BEOLAB_8, - BangOlufsenModel.BEOLAB_28, - BangOlufsenModel.BEOSOUND_2, - BangOlufsenModel.BEOSOUND_A5, - BangOlufsenModel.BEOSOUND_A9, - BangOlufsenModel.BEOSOUND_BALANCE, - BangOlufsenModel.BEOSOUND_EMERGE, - BangOlufsenModel.BEOSOUND_LEVEL, - BangOlufsenModel.BEOSOUND_THEATRE, - ) -} # Device events BANG_OLUFSEN_WEBSOCKET_EVENT: Final[str] = f"{DOMAIN}_websocket_event" @@ -236,18 +236,7 @@ EVENT_TRANSLATION_MAP: dict[str, str] = { CONNECTION_STATUS: Final[str] = "CONNECTION_STATUS" -DEVICE_BUTTONS: Final[list[str]] = [ - "Bluetooth", - "Microphone", - "Next", - "PlayPause", - "Preset1", - "Preset2", - "Preset3", - "Preset4", - "Previous", - "Volume", -] +DEVICE_BUTTONS: Final[list[str]] = [x.value for x in BangOlufsenButtons] DEVICE_BUTTON_EVENTS: Final[list[str]] = [ diff --git a/homeassistant/components/bang_olufsen/diagnostics.py b/homeassistant/components/bang_olufsen/diagnostics.py index 3835de7c551..6078278061a 100644 --- a/homeassistant/components/bang_olufsen/diagnostics.py +++ b/homeassistant/components/bang_olufsen/diagnostics.py @@ -6,11 +6,13 @@ from typing import TYPE_CHECKING, Any from homeassistant.components.event import DOMAIN as EVENT_DOMAIN from homeassistant.components.media_player import DOMAIN as MEDIA_PLAYER_DOMAIN +from homeassistant.const import CONF_MODEL from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_registry as er from . import BangOlufsenConfigEntry -from .const import DEVICE_BUTTONS, DOMAIN +from .const import DOMAIN +from .util import get_device_buttons async def async_get_config_entry_diagnostics( @@ -40,7 +42,7 @@ async def async_get_config_entry_diagnostics( data["media_player"] = state_dict # Add button Event entity states (if enabled) - for device_button in DEVICE_BUTTONS: + for device_button in get_device_buttons(config_entry.data[CONF_MODEL]): if entity_id := entity_registry.async_get_entity_id( EVENT_DOMAIN, DOMAIN, f"{config_entry.unique_id}_{device_button}" ): diff --git a/homeassistant/components/bang_olufsen/event.py b/homeassistant/components/bang_olufsen/event.py index 91e04b92330..002bf87268d 100644 --- a/homeassistant/components/bang_olufsen/event.py +++ b/homeassistant/components/bang_olufsen/event.py @@ -9,15 +9,9 @@ from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from . import BangOlufsenConfigEntry -from .const import ( - CONNECTION_STATUS, - DEVICE_BUTTON_EVENTS, - DEVICE_BUTTONS, - MODEL_SUPPORT_DEVICE_BUTTONS, - MODEL_SUPPORT_MAP, - WebsocketNotification, -) +from .const import CONNECTION_STATUS, DEVICE_BUTTON_EVENTS, WebsocketNotification from .entity import BangOlufsenEntity +from .util import get_device_buttons PARALLEL_UPDATES = 0 @@ -29,11 +23,10 @@ async def async_setup_entry( ) -> None: """Set up Sensor entities from config entry.""" - if config_entry.data[CONF_MODEL] in MODEL_SUPPORT_MAP[MODEL_SUPPORT_DEVICE_BUTTONS]: - async_add_entities( - BangOlufsenButtonEvent(config_entry, button_type) - for button_type in DEVICE_BUTTONS - ) + async_add_entities( + BangOlufsenButtonEvent(config_entry, button_type) + for button_type in get_device_buttons(config_entry.data[CONF_MODEL]) + ) class BangOlufsenButtonEvent(BangOlufsenEntity, EventEntity): diff --git a/homeassistant/components/bang_olufsen/util.py b/homeassistant/components/bang_olufsen/util.py index e375b58e8ac..0a28e7e6a7c 100644 --- a/homeassistant/components/bang_olufsen/util.py +++ b/homeassistant/components/bang_olufsen/util.py @@ -6,7 +6,7 @@ from homeassistant.core import HomeAssistant from homeassistant.helpers import device_registry as dr from homeassistant.helpers.device_registry import DeviceEntry -from .const import DOMAIN +from .const import DEVICE_BUTTONS, DOMAIN, BangOlufsenButtons, BangOlufsenModel def get_device(hass: HomeAssistant, unique_id: str) -> DeviceEntry: @@ -21,3 +21,18 @@ def get_device(hass: HomeAssistant, unique_id: str) -> DeviceEntry: def get_serial_number_from_jid(jid: str) -> str: """Get serial number from Beolink JID.""" return jid.split(".")[2].split("@")[0] + + +def get_device_buttons(model: BangOlufsenModel) -> list[str]: + """Get supported buttons for a given model.""" + buttons = DEVICE_BUTTONS.copy() + + # Beosound Premiere does not have a bluetooth button + if model == BangOlufsenModel.BEOSOUND_PREMIERE: + buttons.remove(BangOlufsenButtons.BLUETOOTH) + + # Beoconnect Core does not have any buttons + elif model == BangOlufsenModel.BEOCONNECT_CORE: + buttons = [] + + return buttons diff --git a/tests/components/bang_olufsen/conftest.py b/tests/components/bang_olufsen/conftest.py index 8132882318c..c2934593e6f 100644 --- a/tests/components/bang_olufsen/conftest.py +++ b/tests/components/bang_olufsen/conftest.py @@ -34,6 +34,7 @@ from homeassistant.core import HomeAssistant from .const import ( TEST_DATA_CREATE_ENTRY, TEST_DATA_CREATE_ENTRY_2, + TEST_DATA_CREATE_ENTRY_3, TEST_FRIENDLY_NAME, TEST_FRIENDLY_NAME_3, TEST_FRIENDLY_NAME_4, @@ -44,8 +45,10 @@ from .const import ( TEST_JID_4, TEST_NAME, TEST_NAME_2, + TEST_NAME_3, TEST_SERIAL_NUMBER, TEST_SERIAL_NUMBER_2, + TEST_SERIAL_NUMBER_3, TEST_SOUND_MODE, TEST_SOUND_MODE_2, TEST_SOUND_MODE_NAME, @@ -76,6 +79,17 @@ def mock_config_entry_core() -> MockConfigEntry: ) +@pytest.fixture +def mock_config_entry_premiere() -> MockConfigEntry: + """Mock config entry for Beosound Premiere.""" + return MockConfigEntry( + domain=DOMAIN, + unique_id=TEST_SERIAL_NUMBER_3, + data=TEST_DATA_CREATE_ENTRY_3, + title=TEST_NAME_3, + ) + + async def mock_websocket_connection( hass: HomeAssistant, mock_mozart_client: AsyncMock ) -> None: diff --git a/tests/components/bang_olufsen/const.py b/tests/components/bang_olufsen/const.py index c21afb4a130..119e615304c 100644 --- a/tests/components/bang_olufsen/const.py +++ b/tests/components/bang_olufsen/const.py @@ -39,6 +39,7 @@ TEST_HOST_INVALID = "192.168.0" TEST_HOST_IPV6 = "1111:2222:3333:4444:5555:6666:7777:8888" TEST_MODEL_BALANCE = "Beosound Balance" TEST_MODEL_CORE = "Beoconnect Core" +TEST_MODEL_PREMIERE = "Beosound Premiere" TEST_MODEL_THEATRE = "Beosound Theatre" TEST_MODEL_LEVEL = "Beosound Level" TEST_SERIAL_NUMBER = "11111111" @@ -56,9 +57,11 @@ TEST_JID_2 = f"{TEST_TYPE_NUMBER}.{TEST_ITEM_NUMBER}.{TEST_SERIAL_NUMBER_2}@prod TEST_MEDIA_PLAYER_ENTITY_ID_2 = "media_player.beoconnect_core_22222222" TEST_HOST_2 = "192.168.0.2" -TEST_FRIENDLY_NAME_3 = "Lego room Balance" -TEST_JID_3 = f"{TEST_TYPE_NUMBER}.{TEST_ITEM_NUMBER}.33333333@products.bang-olufsen.com" -TEST_MEDIA_PLAYER_ENTITY_ID_3 = "media_player.beosound_balance_33333333" +TEST_FRIENDLY_NAME_3 = "Bedroom Premiere" +TEST_SERIAL_NUMBER_3 = "33333333" +TEST_NAME_3 = f"{TEST_MODEL_PREMIERE}-{TEST_SERIAL_NUMBER_3}" +TEST_JID_3 = f"{TEST_TYPE_NUMBER}.{TEST_ITEM_NUMBER}.{TEST_SERIAL_NUMBER_3}@products.bang-olufsen.com" +TEST_MEDIA_PLAYER_ENTITY_ID_3 = f"media_player.beosound_premiere_{TEST_SERIAL_NUMBER_3}" TEST_HOST_3 = "192.168.0.3" TEST_FRIENDLY_NAME_4 = "Lounge room Balance" @@ -90,6 +93,13 @@ TEST_DATA_CREATE_ENTRY_2 = { CONF_NAME: TEST_NAME_2, } +TEST_DATA_CREATE_ENTRY_3 = { + CONF_HOST: TEST_HOST_3, + CONF_MODEL: TEST_MODEL_PREMIERE, + CONF_BEOLINK_JID: TEST_JID_3, + CONF_NAME: TEST_NAME_3, +} + TEST_DATA_ZEROCONF = ZeroconfServiceInfo( ip_address=IPv4Address(TEST_HOST), ip_addresses=[IPv4Address(TEST_HOST)], diff --git a/tests/components/bang_olufsen/snapshots/test_diagnostics.ambr b/tests/components/bang_olufsen/snapshots/test_diagnostics.ambr index 80944a7112d..d78fecda8b7 100644 --- a/tests/components/bang_olufsen/snapshots/test_diagnostics.ambr +++ b/tests/components/bang_olufsen/snapshots/test_diagnostics.ambr @@ -44,11 +44,11 @@ 'attributes': dict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ diff --git a/tests/components/bang_olufsen/snapshots/test_event.ambr b/tests/components/bang_olufsen/snapshots/test_event.ambr index a7fc2c88e49..8bc887ad417 100644 --- a/tests/components/bang_olufsen/snapshots/test_event.ambr +++ b/tests/components/bang_olufsen/snapshots/test_event.ambr @@ -1,5 +1,5 @@ # serializer version: 1 -# name: test_button_event_creation +# name: test_button_event_creation_balance list([ 'event.beosound_balance_11111111_bluetooth', 'event.beosound_balance_11111111_microphone', @@ -19,3 +19,17 @@ 'media_player.beoconnect_core_22222222', ]) # --- +# name: test_button_event_creation_beosound_premiere + list([ + 'event.beosound_premiere_33333333_microphone', + 'event.beosound_premiere_33333333_next', + 'event.beosound_premiere_33333333_play_pause', + 'event.beosound_premiere_33333333_favorite_1', + 'event.beosound_premiere_33333333_favorite_2', + 'event.beosound_premiere_33333333_favorite_3', + 'event.beosound_premiere_33333333_favorite_4', + 'event.beosound_premiere_33333333_previous', + 'event.beosound_premiere_33333333_volume', + 'media_player.beosound_premiere_33333333', + ]) +# --- diff --git a/tests/components/bang_olufsen/snapshots/test_media_player.ambr b/tests/components/bang_olufsen/snapshots/test_media_player.ambr index 38b2d9b4156..4a1688f6a3c 100644 --- a/tests/components/bang_olufsen/snapshots/test_media_player.ambr +++ b/tests/components/bang_olufsen/snapshots/test_media_player.ambr @@ -4,11 +4,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -52,11 +52,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -101,11 +101,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -150,11 +150,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -199,11 +199,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -248,11 +248,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -296,11 +296,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -344,11 +344,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -392,11 +392,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -440,11 +440,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -488,11 +488,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -536,11 +536,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -584,11 +584,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -633,11 +633,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -682,11 +682,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -731,11 +731,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -780,11 +780,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -830,11 +830,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -879,11 +879,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -928,11 +928,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -977,11 +977,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -1028,7 +1028,7 @@ 'Laundry room Core': '1111.1111111.22222222@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ @@ -1071,11 +1071,11 @@ 'attributes': ReadOnlyDict({ 'beolink': dict({ 'listeners': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'peers': dict({ - 'Lego room Balance': '1111.1111111.33333333@products.bang-olufsen.com', + 'Bedroom Premiere': '1111.1111111.33333333@products.bang-olufsen.com', 'Lounge room Balance': '1111.1111111.44444444@products.bang-olufsen.com', }), 'self': dict({ diff --git a/tests/components/bang_olufsen/test_event.py b/tests/components/bang_olufsen/test_event.py index bb9c7389333..ec85017e093 100644 --- a/tests/components/bang_olufsen/test_event.py +++ b/tests/components/bang_olufsen/test_event.py @@ -10,6 +10,7 @@ from homeassistant.components.bang_olufsen.const import ( DEVICE_BUTTON_EVENTS, DEVICE_BUTTONS, EVENT_TRANSLATION_MAP, + BangOlufsenButtons, ) from homeassistant.components.event import ATTR_EVENT_TYPE, ATTR_EVENT_TYPES from homeassistant.const import STATE_UNKNOWN @@ -22,13 +23,13 @@ from .const import TEST_BUTTON_EVENT_ENTITY_ID from tests.common import MockConfigEntry -async def test_button_event_creation( +async def test_button_event_creation_balance( hass: HomeAssistant, integration: None, entity_registry: EntityRegistry, snapshot: SnapshotAssertion, ) -> None: - """Test button event entities are created.""" + """Test button event entities are created when using a Balance (Most devices support all buttons like the Balance).""" # Add Button Event entity ids entity_ids = [ @@ -72,6 +73,43 @@ async def test_button_event_creation_beoconnect_core( assert entity_ids_available == snapshot +async def test_button_event_creation_beosound_premiere( + hass: HomeAssistant, + mock_config_entry_premiere: MockConfigEntry, + mock_mozart_client: AsyncMock, + entity_registry: EntityRegistry, + snapshot: SnapshotAssertion, +) -> None: + """Test Bluetooth button event entity is not created when using a Beosound Premiere.""" + + # Load entry + mock_config_entry_premiere.add_to_hass(hass) + await hass.config_entries.async_setup(mock_config_entry_premiere.entry_id) + await mock_websocket_connection(hass, mock_mozart_client) + + # Add Button Event entity ids + premiere_buttons = DEVICE_BUTTONS.copy() + premiere_buttons.remove(BangOlufsenButtons.BLUETOOTH.value) + + entity_ids = [ + f"event.beosound_premiere_33333333_{underscore(button_type)}".replace( + "preset", "favorite_" + ) + for button_type in premiere_buttons + ] + + # Check that the entities are available + for entity_id in entity_ids: + assert entity_registry.async_get(entity_id) + + # Check number of entities + # The media_player entity and all of the button event entities (except Bluetooth) should be the only available + entity_ids_available = list(entity_registry.entities.keys()) + assert len(entity_ids_available) == 1 + len(entity_ids) + + assert entity_ids_available == snapshot + + async def test_button( hass: HomeAssistant, integration: None,