mkirsten/beosound5c
GitHub: mkirsten/beosound5c
用树莓派 5 和 Web 技术为经典 B&O BeoSound 5 音响提供现代化流媒体替换方案,保留原有硬件交互并集成多种音乐服务与智能家居平台。
Stars: 22 | Forks: 5
# BeoSound 5c
使用 Web 技术和 Raspberry Pi 5 现代化重塑 Bang & Olufsen BeoSound 5 体验。
**网站:[www.beosound5c.com](https://www.beosound5c.com)**
本项目用基于圆弧的触摸 UI 取代了原始的 BeoSound 5 软件,该 UI 可集成 Sonos、Bluesound 和 Denon HEOS 播放器、音乐服务(Spotify、Apple Music、TIDAL、Plex)以及 Home Assistant。它与原始的 BS5 硬件(旋转编码器、激光指示器、显示屏)兼容,并支持使用 BeoRemote One 进行无线控制。
## 快速开始
运行于 [Raspberry Pi 5 4GB](https://www.raspberrypi.com/products/raspberry-pi-5/)。有关完整的安装说明,请参阅 [beosound5c.com](https://beosound5c.com)。
### 全新安装
1. 使用 [Raspberry Pi Imager](https://www.raspberrypi.com/software/) 烧录 **Raspberry Pi OS Bookworm Lite (64-bit)**。在写入前点击设置图标(齿轮)以启用 SSH 并设置您的用户名/密码。
2. 克隆并运行安装程序:
```
git clone https://github.com/mkirsten/beosound5c.git ~/beosound5c
cd ~/beosound5c
sudo ./install/install.sh
```
安装程序会处理一切:软件包、显示配置、服务安装。不会有任何询问——它只会在完成时提示重启。
3. 重启后,设备会显示一个二维码。用手机扫描它(或在任何浏览器中打开 `http:///config`)以完成设置:设备名称、播放器、音频输出、Home Assistant 和音源。
### 更新
```
git pull && sudo ./install/install.sh update
```
更新服务文件、sudoers 和 Python 软件包。除非系统软件包发生更改,否则无需重启。
## 远程支持
如果您在故障排除时需要帮助,可以开启一个临时的远程支持会话。安装程序预装了 [Tailscale](https://tailscale.com/)(默认禁用——在您开启会话之前不会有任何后台服务运行)。
```
bs5c-support # Start session — prompts for an access key
bs5c-support stop # End session and disconnect
bs5c-support status # Check if a session is active
```
向开发者索取访问密钥,在提示时将其粘贴,并分享显示的 Tailscale IP。操作完成后,`bs5c-support stop` 会断开连接并停止 Tailscale daemon。
## 配置
安装后,在浏览器中打开 `http:///config`。配置 UI 允许您设置设备名称、播放器、音量适配器、Home Assistant 连接、传输机制以及所有音源。更改会被保存,并且服务会自动重启。
配置存放在设备上的两个文件中:
- **`/etc/beosound5c/config.json`** —— 所有设置(设备名称、播放器 IP、菜单、场景、音量、传输机制)
- **`/etc/beosound5c/secrets.env`** —— 仅限凭证(HA token、MQTT 密码)
有关字段和选项的完整列表,请参阅 **[配置 schema](docs/config.schema.json)**。
要编辑场景(名称、图标、HA 脚本),请直接编辑 `/etc/beosound5c/config.json` —— 即 `"scenes"` 数组。
## 遥测
坦白说,我只是很高兴能看到 BeoSound 5c 在世界各地出现。目前在美国、整个欧洲、这里的斯德哥尔摩、亚洲以及澳大利亚都有安装设备——每次地图上出现一个新节点,我都能开心一整天。
为了实现这一点,每台 BS5c 都会在启动时向 `beosound5c.com` 发送一个小型的匿名 ping。Web 配置 UI 中有一个对应的开关——将其关闭完全没问题,也不会影响其他任何内容。系统会使用您的公共 IP 来推断所在国家(通过 Cloudflare —— 除了国家名称外,绝不存储任何其他信息)。系统绝不会发送任何主机名、设备名称、MAC 地址或凭证。欢迎随时阅读 [`services/lib/beacon.py`](services/lib/beacon.py) 以确切了解发送了哪些内容。
| 字段 | 值 |
|---|---|
| `device_id` | 稳定的匿名 ID —— Pi 板载 MAC 地址的单向 UUIDv5 哈希值(MAC 本身绝不会被发送)。基于 MAC 派生,以便重新烧录镜像的设备能保持相同的身份,而不会被计算两次;如果不存在板载接口,则回退为随机 UUID |
| `version` | 软件版本字符串 |
| `sources` | 已启用的音源名称(例如 `spotify`、`cd`)—— 不包含任何凭证或配置值 |
| `player_type` | 播放器后端:`sonos`、`bluesound`、`heos` 或 `local` |
| `volume_type` | 音量适配器类型:`sonos`、`beolab5`、`powerlink` 等 |
如果您想选择退出,只需在仓库根目录下创建一个 `NO_TELEMETRY` 文件:
```
touch ~/beosound5c/NO_TELEMETRY
```
## 文档
- [音频、播放器与音源](docs/audio-setup.md) —— 播放器类型、音源兼容性、Spotify 设置、音量适配器
- [Home Assistant 集成](docs/home-assistant.md) —— MQTT、webhook、自动化示例
- [遥控器与 IR](docs/remotes.md) —— BeoRemote One 配对、IR 音源按钮、Beo6
- [开发与贡献](docs/CONTRIBUTING.md) —— 本地开发设置、仓库结构、部署脚本
## 致谢
`services/masterlink.py` 在很大程度上是 Tore Sinding Bekkedal 开发的 [libpc2](https://github.com/toresbe/libpc2) (GPL-3.0) 的衍生作品。`web/js/arcs.js` 中的圆弧几何源自 Lars Baunwall 开发的 [Beolyd5](https://github.com/larsbaunwall/Beolyd5) (Apache 2.0)。完整列表请参阅 [THIRDPARTY.md](THIRDPARTY.md)。
本项目不隶属于 Bang & Olufsen。"Bang & Olufsen"、"BeoSound"、"BeoRemote" 和 "MasterLink" 是 Bang & Olufsen A/S 的商标。
标签:数据可视化, 智能家居, 流媒体, 物联网, 用户界面, 逆向工具, 音频播放器