这是一个给飞智 BS3 Pro 笔记本散热器用的 Linux 控制程序。它通过 BlueZ 的 D-Bus 接口直接与散热器通信,提供网页看板、风扇控制、温度曲线和 RGB 灯效设置。
项目目前在 Fedora 44 和 BS3 Pro 37D7:1004 上开发、测试。它不是飞智官方软件,也没有覆盖其他批次或型号。
- 查看散热器的当前转速、目标转速和工作模式
- 切换静音、标准、强劲、超频四个固定档位
- 在 1000-4000 RPM 范围内设置实时目标转速
- 根据 Linux CPU 封装温度运行自定义风扇曲线
- 编辑 2-8 个温度与转速控制点
- 使用温度平滑、100 RPM 死区和 90°C 满速保护
- 设置单色、多色、旋转、流光、呼吸和温控灯效
- 使用六组颜色、五套预设色板、亮度和速度设置
- 在桌面和手机浏览器中使用同一套看板
需要:
- Linux 和正在运行的 BlueZ
- Python 3.11 或更高版本
- 已通过系统蓝牙配对的 FlyDigi BS3 Pro
- 可读取的
/sys/class/thermalCPU 温度源
先确认系统能看到设备:
bluetoothctl devices | grep 'FlyDigi BS3PRO'设备地址可能与示例不同。重新配对后,随机地址也可能变化。
git clone https://github.com/starboykm/flydigi-bs3-linux.git
cd flydigi-bs3-linux
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
./bs3_dashboard.py程序默认按设备名 FlyDigi BS3PRO 自动发现。如果系统里有多个同名设备,可以显式指定:
./bs3_dashboard.py --address AA:BB:CC:DD:EE:FF浏览器打开:
http://127.0.0.1:8765
看板默认只监听本机地址,不会暴露到局域网。
./bs3ctl.py status
./bs3ctl.py gear quiet
./bs3ctl.py gear standard
./bs3ctl.py gear performance
./bs3ctl.py gear extreme
./bs3ctl.py rpm 2400
./bs3ctl.py rgb off
./bs3ctl.py rgb on蓝牙控制不是一个完全隔离的容器工作负载。容器需要访问宿主机的 BlueZ D-Bus socket,并只读访问温度目录。仓库里的 Compose 配置已经声明这些挂载。
Docker Compose:
docker compose up -d --buildPodman Compose:
podman compose up -d --build在 Fedora、Silverblue 等启用 SELinux 的系统上,compose.yaml 使用 label=disable,避免容器运行时尝试重新标记系统 D-Bus socket。这个设置只应用于该容器。
容器仍然只监听宿主机的 127.0.0.1:8765。自动曲线配置保存在 ./data/bs3-dashboard-config.json。
如果不使用 Compose,可以手动运行:
docker build -t flydigi-bs3-linux .
docker run --rm \
--name flydigi-bs3-linux \
-p 127.0.0.1:8765:8765 \
-e DBUS_SYSTEM_BUS_ADDRESS=unix:path=/run/dbus/system_bus_socket \
-v /run/dbus/system_bus_socket:/run/dbus/system_bus_socket \
-v /sys/class/thermal:/sys/class/thermal:ro \
-v "$PWD/data:/data" \
flydigi-bs3-linuxFedora 使用 Podman 手动运行时,通常还需要追加:
--security-opt label=disable
后台控制器每四秒读取一次 CPU 封装温度,优先使用:
x86_pkg_tempTCPUTCPU_PCI
温度会经过指数平滑,再根据相邻控制点线性插值到目标 RPM。目标变化不足 100 RPM 时不会重复写入,减少风扇来回调整。自动模式启用时,如果实时温度达到 90°C,会请求 4000 RPM。
手动选择档位或设置 RPM 会停用自动曲线,避免后台马上覆盖手动操作。
默认曲线:
| 温度 | 目标转速 |
|---|---|
| 35°C | 1000 RPM |
| 45°C | 1400 RPM |
| 55°C | 2000 RPM |
| 65°C | 2700 RPM |
| 75°C | 3400 RPM |
| 85°C | 4000 RPM |
灯效配置通过 FFF0 私有 GATT 服务上传。静态、多色、旋转、流光和呼吸模式会发送一组 30 帧灯带数据。不同模式使用的颜色数量不同:
- 单色:第一个颜色
- 多色:前三个颜色
- 旋转:最多六个颜色
- 呼吸:最多五个颜色
- 流光和温控:使用设备协议内置行为
网页会保存上次选择的灯效参数,但设备断电后是否保留由散热器固件决定。
python -m unittest discover -s tests -v
python -m py_compile bs3ctl.py bs3_dashboard.py
node --check bs3-dashboard/app.js容器构建:
podman build -t flydigi-bs3-linux .- 目前只在 BS3 Pro
37D7:1004上实机测试 - 默认按
FlyDigi BS3PRO设备名自动发现;多个同名设备需要用--address区分 - 当前自动曲线只读取 CPU 温度,没有读取独显温度
- RGB 状态不能完整反查,网页显示的是本次会话最后应用的设置
- 设备固件升级可能改变私有协议
- Web 服务没有用户认证,请保持监听在
127.0.0.1
风扇与灯效帧格式参考了 TIANLI0/THRM 的公开实现和协议文档。本项目在 Linux BlueZ D-Bus 上重新实现传输层,并针对 BS3 Pro 做了实机验证。
This project controls the FlyDigi BS3 Pro laptop cooler on Linux through the BlueZ D-Bus API. It provides a local web dashboard, fixed fan gears, direct RPM control, a CPU-temperature fan curve, and RGB lighting modes.
It is currently developed and tested on Fedora 44 with a BS3 Pro reporting USB/Bluetooth product ID 37D7:1004. This is an unofficial community project and has not been validated with other models or hardware revisions.
git clone https://github.com/starboykm/flydigi-bs3-linux.git
cd flydigi-bs3-linux
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
./bs3_dashboard.pyOpen http://127.0.0.1:8765.
docker compose up -d --buildThe container needs the host BlueZ system D-Bus socket and read-only access to /sys/class/thermal. The included Compose file provides both mounts and keeps the dashboard bound to localhost. On SELinux hosts it disables label separation for this container so the system D-Bus socket remains accessible.
- RPM input is limited to 1000-4000 RPM.
- Automatic mode requests 4000 RPM at 90°C.
- A manual gear or RPM command disables automatic control.
- Only CPU package temperature is currently used.
- Keep the HTTP server on localhost because it has no authentication.
- Firmware updates may change the private protocol.
MIT. See LICENSE.

