案例
BM2 Battery Monitor:重建加密的 BLE 电压协议
重新实现 BM2(Battery Monitor 2)汽车电池监测器的低功耗蓝牙协议,使其读数无需厂商的 Android 应用即可使用。基于 Bleak 的 Python 客户端会解密监测器以 AES 加密的通知,读取当前电压并请求设备存储的电压历史;ESPHome 模板可在 ESP32 上提供电压读数,示例应用则用于查看、导出读数或通过 MQTT 转发。作者的说明称密钥和数据包格式是从厂商应用中恢复的;结果均为作者及贡献者报告。
- 目标
- 协议
- 类别
- 独立重建案例
- 关联
- 独立重建项目
- 来源复核于
- 星标
- 87
- 最近提交
- 2026-10-13
- 主要语言
- Python
- 许可(GitHub 识别)
- MIT
GitHub 数据,截至 2026-11-09
使用条件与局限
- bm2 0.1.0 包要求 Python 3.8+。客户端读取当前电压和历史记录;历史时间戳按两分钟间隔推算,ESPHome 模板只读取当前电压。
- 需自备 BM2 监测器及其蓝牙地址。客户端和 ESPHome 模板包含从厂商应用恢复的 AES-128-CBC 密钥。
- Python 客户端使用 Bleak ~0.14.2 和 PyCryptodome;重连路径调用 Linux bluetoothctl。MQTT 示例另需 paho-mqtt ~1.6.1。ESPHome 模板面向采用 Arduino、mbedtls 的 nodemcu-32s ESP32,并需填写 Wi-Fi、MQTT 和 MAC 密钥配置。
- 仓库有 mypy 检查,但没有测试或 CI。历史数据修复报告在 Linux Mint 22.3 和 PowerHouse BM2 N2099A 上测试;其他 BM2 型号的覆盖情况未说明。
- 代码按 LICENSE.txt 采用 MIT;设备和厂商应用保留各自权利。
引用
BibTeX
@misc{bm2-battery-monitor-ble-case,
title = {{BM2 Battery Monitor: reconstructing an encrypted BLE voltage protocol}},
howpublished = {\url{https://github.com/KrystianD/bm2-battery-monitor}},
url = {https://github.com/KrystianD/bm2-battery-monitor},
urldate = {2026-10-20},
note = {Awesome REA entry: \url{https://awesomerea.org/zh/resources/bm2-battery-monitor-ble-case/}}
}纯文本
BM2 Battery Monitor: reconstructing an encrypted BLE voltage protocol。https://github.com/KrystianD/bm2-battery-monitor(访问于 2026-10-20)。Awesome REA 条目:https://awesomerea.org/zh/resources/bm2-battery-monitor-ble-case/
有帮助?在 GitHub 上为 Awesome REA 加星2.4k
关于此条目
说明已依据一手来源复核。
一手来源
- README.md GitHub · KrystianD/bm2-battery-monitor · 修订 494a39c
- .docs/reverse_engineering.md GitHub · KrystianD/bm2-battery-monitor · 修订 494a39c
- bm2_python/src/bm2/client.py GitHub · KrystianD/bm2-battery-monitor · 修订 494a39c
- bm2_python/src/bm2/encryption.py GitHub · KrystianD/bm2-battery-monitor · 修订 494a39c
- bm2_esphome/bm2.yaml GitHub · KrystianD/bm2-battery-monitor · 修订 494a39c
- bm2_esphome/main.yaml GitHub · KrystianD/bm2-battery-monitor · 修订 494a39c
- bm2_python/requirements.txt GitHub · KrystianD/bm2-battery-monitor · 修订 494a39c
- pyproject.toml GitHub · KrystianD/bm2-battery-monitor · 修订 494a39c
- LICENSE.txt GitHub · KrystianD/bm2-battery-monitor · 修订 494a39c
- https://github.com/KrystianD/bm2-battery-monitor/pull/28