Bang & Olufsen

Bang & Olufsen 集成允许通过 Home Assistant 控制某些 Bang & Olufsen 设备的部分功能。

兼容设备

已测试且_应该_无故障工作的设备:

以及任何其他基于 Mozart 的产品。这意味着所有在 2020 年之后推出的 Connected Speakers

配置

此集成可通过 UI 配置。前往 设置 > 设备与服务 添加。

IP Address:
  description: 您设备的 IP 地址。可以通过 [Bang & Olufsen 应用程序](https://www.bang-olufsen.com/en/dk/story/apps) 导航到设备并选择 `Settings` → `About` → `IP address` 找到。
Device model:
  description: 您的 Bang & Olufsen 设备的型号名称。用于确定设备的某些功能。如果设备尚不在列表中,请选择与您的产品类似的产品。

数据更新

Bang & Olufsen 集成使用 Mozart API,这是一个本地 REST API,具有 WebSocket 通知通道,可提供媒体元数据、播放进度、音量等的即时状态信息。唯一的例外是重复和随机播放控件,它们每 30 秒轮询一次。

支持的功能

目前,对于每个添加的物理设备,会创建一个设备,包括一个 media_player 实体和(如果可用)event 实体。

媒体播放器

通过媒体播放器实体可以使用许多功能:

  • 查看当前元数据、进度、音量等。
  • 控制下一首/上一首、播放/暂停、随机/重复设置、音量、声音模式、音频和视频源等。
  • 通过 play_media 动作 播放各种媒体。
  • 通过 Beolink 控制多房间音频:
    • 使用 Home Assistant media_player 分组控制。
    • 通过媒体播放器属性监控当前 Beolink 状态
    • 对于更高级的用法,已定义 自定义 Beolink 服务
      • 连接或扩展到 Home Assistant 中不可用的 ASE 产品。
      • 将会话扩展到所有发现的设备。
      • 连接到、扩展到或取消扩展设备。
      • 将所有连接的 Beolink 设备设置为待机。

事件

Mozart 设备控件

为设备上每个可用的物理控件创建事件实体。这些控件通常有自己的行为,因此将它们用于自动化并不总是理想的。 可用的事件实体:

  • 蓝牙(Beosound Premiere 上不可用)
  • 麦克风
  • 下一首
  • 播放/暂停
  • 收藏 1
  • 收藏 2
  • 收藏 3
  • 收藏 4
  • 上一首
  • 音量

所有这些事件实体都支持以下事件类型:

  • 短按释放
  • 长按
  • 长按释放
  • 超长按
  • 超长按释放
按钮变体

许多设备具有相同的按钮布局,但并非所有设备都如此。以下是差异:

Beoremote One

为每个配对的 Beoremote One 通过其配对的 Mozart 设备创建一个 Home Assistant 设备。为遥控器上每个兼容按键创建事件实体。这些事件实体默认禁用。

Beoremote One 设备在检测到时自动添加。

触发事件

有 4 种不同类型的按键事件:

  • 控制功能
  • 控制键
  • 灯光功能
  • 灯光键

可以通过在 ControlLight 高亮显示时按 Right 键访问功能,并可以通过按 Select 触发。

可以通过在 ControlLight 高亮显示时按 Select 键触发按键,然后按其中一个兼容按键。也可以跳过 Select 按,只需在所需子菜单高亮显示时按其中一个兼容按键即可。

每个触发器有两种不同的事件状态:

  • key_press
  • key_release

总共,每个遥控器有 90 个不同的遥控按键事件实体。

配置灯光和控制功能

Beoremote One 上有许多功能可用。这些功能作为 Light 子菜单的 function 1-17 和 Control 子菜单的 1-27 可用。

默认情况下只启用这些功能的子集。按照以下步骤更改 ControlLight 子菜单的设置:

  • 按上并选择当前选择的配对设备的名称。这将显示配对设备的列表。
  • 选择 Beovision
  • 导航到 Settings > Advanced > Light menu / Control menu
    • 使用 Show 设置更改可见的功能。
    • 使用 Rename 设置重命名可见的功能。
    • 使用 Move 设置重新排序可见的功能。

功能名称对 Mozart 设备不可用,因此启用 调试日志 并触发功能以查看哪些功能 ID 与遥控器上的哪些功能相关联。

传感器

Mozart 电池电量

具有内置电池的 Mozart 设备,如 Beosound A5Beosound Level,将有电池电量传感器。

Beoremote One 电池电量

任何配对的 Beoremote One 遥控器都将有关联的电池电量传感器。来自遥控器的电池电量报告目前不太准确,但仍可使用。

二值传感器

Mozart 电池充电

具有内置电池的 Mozart 设备,如 Beosound A5Beosound Level,有电池充电二值传感器。

限制

目前,Mozart 平台的某些功能通过 公共 API 不可用。有些可能稍后可用,但在此之前,可以使用 Bang & Olufsen 应用程序 配置这些设置和功能:

  • 创建定时器和闹钟
  • 检索详细的闹钟和定时器信息

以及更高级的以应用为中心的功能,如:

  • 创建预设
  • 创建聆听位置
  • 创建声音模式
  • 创建立体声对
  • 调整特定声音设置
  • 配对遥控器

Beoremote One

多个遥控器可以配对到同一个 Mozart 设备,并且仍然创建为 Home Assistant 设备和事件实体。这些遥控器将触发相同的 WebSocket 通知,这意味着按下遥控器 A 也会触发遥控器 B 的关联事件实体。

这有利于能够使用遥控器 B 触发映射到遥控器 A 的自动化,但也意味着每个 Mozart 设备_仅_支持单个遥控器提供的 90 个事件实体。

动作

play_media 动作

Bang & Olufsen 集成支持 media_player.play_media 动作中的不同播放类型:从 URL 播放、激活收藏、从本地文件播放、播放广播电台、激活 Deezer flow 和 Deezer 播放列表、专辑、曲目,以及作为叠加播放文件和文本转语音(TTS)。

play_media 示例

从 URL 播放 DR P1

action: media_player.play_media
target:
  entity_id: media_player.beosound_balance_12345678
data:
  media_content_type: url
  media_content_id: http://live-icy.dr.dk/A/A03H.mp3

激活第一个收藏:

action: media_player.play_media
target:
  entity_id: media_player.beosound_balance_12345678
data:
  media_content_type: favourite
  media_content_id: 1

播放本地文件:

action: media_player.play_media
target:
  entity_id: media_player.beosound_balance_12345678
data:
  media_content_id: media-source://media_source/local/example.mp3
  media_content_type: music

播放广播电台:

action: media_player.play_media
target:
  entity_id: media_player.beosound_balance_12345678
data:
  media_content_id: 1234567890123456
  media_content_type: radio

播放 Deezer flow。可选定义 Deezer 用户 ID:

action: media_player.play_media
target:
  entity_id: media_player.beosound_balance_12345678
data:
  media_content_type: deezer
  media_content_id: flow
  extra:
    id: 1234567890

播放 Deezer 播放列表。可选定义播放列表的起始位置:

action: media_player.play_media
target:
  entity_id: media_player.beosound_balance_12345678
data:
  media_content_type: deezer
  media_content_id: playlist:1234567890
  extra:
    start_from: 123

播放 Deezer 专辑。可选定义专辑的起始位置:

action: media_player.play_media
target:
  entity_id: media_player.beosound_balance_12345678
data:
  media_content_type: deezer
  media_content_id: album:1234567890
  extra:
    start_from: 123

播放 Deezer 曲目:

action: media_player.play_media
target:
  entity_id: media_player.beosound_balance_12345678
data:
  media_content_type: deezer
  media_content_id: 1234567890

播放 Tidal 播放列表。可选定义播放列表的起始位置:

action: media_player.play_media
target:
  entity_id: media_player.beosound_balance_12345678
data:
  media_content_type: tidal
  media_content_id: playlist:01234567-89ab-cdfe-0123-456789abcdef
  extra:
    start_from: 123

播放 Tidal 专辑。可选定义专辑的起始位置:

action: media_player.play_media
target:
  entity_id: media_player.beosound_balance_12345678
data:
  media_content_type: tidal
  media_content_id: album:123456789
  extra:
    start_from: 123

播放 Tidal 曲目:

action: media_player.play_media
target:
  entity_id: media_player.beosound_balance_12345678
data:
  media_content_type: tidal
  media_content_id: 123456789
叠加

中断当前播放的媒体以播放音频消息。

要使用 Bang & Olufsen 云 TTS,请使用 overlay_tts 作为 media_content_type,并在 media_content_id 字段中输入消息。 Bang & Olufsen 云 TTS 消息每天限制 100 条唯一消息,并缓存 24 小时。

可用的额外键:

数据属性可选描述
overlay_absolute_volume为叠加指定绝对音量。
overlay_offset_volume指定要添加到当前音量级别的音量偏移。
overlay_tts_language指定用于文本转语音的语言。使用 BCP 47 标准。默认值为"en-us"。
示例:

以绝对音量作为叠加播放本地文件:

action: media_player.play_media
target:
  entity_id: media_player.beosound_balance_12345678
data:
  media_content_type: music
  media_content_id: media-source://media_source/local/doorbell.mp3
  announce: true
  extra:
    overlay_absolute_volume: 60

以偏移音量播放 Bang & Olufsen 云 TTS 消息(因为 TTS 消息可能很安静):

action: media_player.play_media
target:
  entity_id: media_player.beosound_balance_12345678
data:
  media_content_type: overlay_tts
  media_content_id: This is a test
  announce: true
  extra:
    overlay_offset_volume: 10

以本地语言播放 Bang & Olufsen 云 TTS 消息:

action: media_player.play_media
target:
  entity_id: media_player.beosound_balance_12345678
data:
  media_content_type: overlay_tts
  media_content_id: Dette er en test
  announce: true
  extra:
    overlay_tts_language: da-dk

自定义动作

Bang & Olufsen 集成还支持 Beolink 的不同自定义动作。

Beolink 是 Bang & Olufsen 的高级多房间音频解决方案。此集成支持 Home Assistant 的 media_player 分组,但为了充分利用 Beolink,例如能够加入未添加到 Home Assistant 的传统设备,已定义自定义动作。

尝试执行无效的 Beolink 动作将导致 Home Assistant 错误或设备发出可听错误指示。

加入 Beolink 体验。

动作数据属性可选描述
beolink_jid手动指定要加入的 Beolink JID。
source_id指定要加入的源,行为因硬件平台而异。源名称前缀为平台名称的只能在连接到该平台时使用。例如,"ASE Beoradio" 只能在加入 ASE 设备时使用,而"ASE / Mozart Deezer" 可以与 ASE 或 Mozart 设备一起使用。需要定义的 Beolink JID。
action: bang_olufsen.beolink_join
target:
  entity_id: media_player.beosound_balance_12345678

重复调用将循环遍历可用设备。

也可以通过使用空的 group_members 列表调用 media_player.join 动作来触发:

action: media_player.join
target:
  entity_id: media_player.beosound_balance_12345678
data:
  group_members:
action: bang_olufsen.beolink_join
target:
  entity_id: media_player.beosound_balance_12345678
data:
  beolink_jid: 1111.2222222.33333333@products.bang-olufsen.com
action: bang_olufsen.beolink_join
target:
  entity_id: media_player.beosound_balance_12345678
data:
  beolink_jid: 1111.2222222.33333333@products.bang-olufsen.com
  source_id: radio

只有有限选择的 source_id 可用。下表显示哪些 source_id 可以在哪些硬件平台上加入:

硬件平台兼容的 source_ids
ASEbeoradio
ASE 和 Mozartdeezerspotify
Mozarttidal
Beolink Converter NL/MLradiotp1tp2cdaux_aph

扩展当前 Beolink 体验。

动作数据属性可选描述
all_discovered将 Beolink 体验扩展到所有发现的设备。
beolink_jids指定哪些 Beolink JID 将加入当前 Beolink 体验。
action: bang_olufsen.beolink_expand
target:
  entity_id: media_player.beosound_balance_12345678
data:
  all_discovered: true
action: bang_olufsen.beolink_expand
target:
  entity_id: media_player.beosound_balance_12345678
data:
  beolink_jids:
    - 1111.2222222.33333333@products.bang-olufsen.com

也可以通过在 group_members 中使用此集成的 media_player 实体的 entity_id 调用 media_player.join 动作来触发:

action: media_player.join
target:
  entity_id: media_player.beosound_balance_12345678
data:
  group_members:
    - media_player.beosound_balance_33333333
action: bang_olufsen.beolink_expand
target:
  entity_id: media_player.beosound_balance_12345678
data:
  beolink_jids:
    - 1111.2222222.33333333@products.bang-olufsen.com
    - 4444.5555555.66666666@products.bang-olufsen.com

也可以通过在 group_members 中使用此集成的 media_player 实体的 entity_id 调用 media_player.join 动作来触发:

action: media_player.join
target:
  entity_id: media_player.beosound_balance_12345678
data:
  group_members:
    - media_player.beosound_balance_33333333
    - media_player.beosound_balance_66666666

从当前 Beolink 体验中取消扩展。

动作数据属性可选描述
beolink_jids指定哪些 Beolink JID 将从当前 Beolink 体验中离开。
action: bang_olufsen.beolink_unexpand
target:
  entity_id: media_player.beosound_balance_12345678
data:
  beolink_jids:
    - 1111.2222222.33333333@products.bang-olufsen.com
action: bang_olufsen.beolink_unexpand
target:
  entity_id: media_player.beosound_balance_12345678
data:
  beolink_jids:
    - 1111.2222222.33333333@products.bang-olufsen.com
    - 4444.5555555.66666666@products.bang-olufsen.com

离开 Beolink 体验。

动作用法示例
action: bang_olufsen.beolink_leave
target:
  entity_id: media_player.beosound_balance_12345678

与调用 media_player.unjoin 动作相同:

action: media_player.unjoin
target:
  entity_id: media_player.beosound_balance_12345678

将所有连接的 Beolink 设备设置为待机。

动作用法示例
action: bang_olufsen.beolink_allstandby
target:
  entity_id: media_player.beosound_balance_12345678

自动化

从设备接收的 WebSocket 通知在 Home Assistant 中作为事件触发。可以通过监听 bang_olufsen_websocket_event 事件类型来接收这些事件,其中 device_idserial_number 可用于区分设备。

获取 Deezer URI

要查找 Deezer 播放列表、专辑 URI 和 Deezer flow 的用户 ID,必须访问 Deezer 网站。导航到专辑时,URL 将类似于:https://www.deezer.com/en/album/ALBUM_ID,这需要转换为:album:ALBUM_ID,播放列表也一样,格式为:playlist:PLAYLIST_ID

可以通过在 Web 浏览器中选择活动用户,在 https://www.deezer.com/en/profile/USER_ID 找到 Deezer 用户 ID。

此外,可以在 media_player 实体的 media_content_id 属性中找到当前播放曲目的 Deezer ID。

获取 Tidal URI

Tidal 播放列表、专辑 URI 和曲目 ID 可通过 Tidal 网站获取。导航到专辑时,URL 将类似于 https://listen.tidal.com/album/ALBUM_ID/,这需要转换为 album:ALBUM_ID。播放列表也一样,格式为 playlist:PLAYLIST_ID。可以通过分享曲目并选择 Copy track link 方法找到单个曲目,这应该产生格式为 https://tidal.com/browse/track/TRACK_ID?u 的链接,可以通过提取曲目 id TRACK_ID 来播放。

此外,可以在 media_player 实体的 media_content_id 属性中找到当前播放曲目的 Tidal ID。

获取 B&O 广播电台 ID

可以在 media_player 实体的 media_content_id 属性中找到当前播放电台的广播电台 ID。

发现的设备和活动 Beolink 体验中的设备在 media_player 实体的属性中可用。设备由其友好名称和 JID 表示,用于连接设备。

beolink:
  self: 当前设备
  leader: Beolink 主设备(如果可用)
  listeners: Beolink 监听器(如果可用)
  peers: Beolink 对等设备(如果可用)

诊断和故障排除

Bang & Olufsen 集成支持 Home Assistant 调试日志和诊断。 所有接收到的 WebSocket 事件都通过调试日志提供,诊断中提供以下内容:

  • 配置条目
  • Mozart 设备
    • WebSocket 连接状态
    • 媒体播放器状态
    • 按钮事件状态(如果可用)
    • 电池电量传感器(如果可用)
    • 电池充电二值传感器(如果可用)
  • Beoremote One 遥控器(如果可用)
    • 按键事件状态(如果可用)
    • 整体状态
    • 电池电量传感器(如果可用)

移除集成

此集成遵循标准集成移除流程。无需额外步骤。

To remove an integration instance from Home Assistant

  1. Go to Settings > Devices & services and select the integration card.
  2. From the list of devices, select the integration instance you want to remove.
  3. Next to the entry, select the three-dot menu. Then, select Delete.