mohammed-jaouad/saeco-ble-toolkit-android
GitHub: mohammed-jaouad/saeco-ble-toolkit-android
一款用于逆向工程 Saeco GranBaristo 咖啡机 BLE 协议的 Flutter/Android 调试工具,支持扫描、配对、帧解码与饮品指令发送。
Stars: 0 | Forks: 0
# Saeco BLE 调试工具 (Flutter / Android)
**逆向工程伴侣应用**,用于解码 Saeco GranBaristo
Avanti 的蓝牙低功耗 (BLE) 协议 —— 扫描、配对 (PIN)、连接、唤醒、读取
状态、解码错误、构建并发送饮品指令,并记录每一帧 TX/RX。这是让
[saeco-granbaristo-bridge](https://github.com/mohammed-jaouad/saeco-granbaristo-bridge)
固件得以实现的基础探测工具;其 Dart 协议层随后以 1:1 的比例移植到了该固件的 C++ 库中。
## 为什么开发它
BLE 设备出厂时没有任何文档。要想控制这台机器,你首先必须*监听*:哪个特征值会通知状态、哪个接收指令、帧是如何构成的、校验和是什么,以及机器是如何应答的。这款应用就是为了在真实硬件上解答这些问题而构建的——它会记录每一个字节、重组分片指示、验证 CRC,并允许你重放指令,直到协议完全显现。
**CRC-16/CCITT-FALSE** 校验和(基于 payload 计算)已被识别,并**通过 15 个已知帧进行了验证**,因此饮品构建器现在可以动态生成有效帧,而无需重放抓取的数据。
## 功能
- 🔍 **扫描与连接** —— 潜在的 Saeco 设备将被高亮显示并标记为 `SAECO`。
- 🔑 **密钥配对** —— 输入机器显示屏上显示的 PIN。
- 🧩 **机器界面** —— 启用指示、唤醒、轮询;实时原始标志位/进程、解码后的状态和错误。
- ☕ **饮品构建器** —— 选择饮品及参数,查看生成的帧(已确认 CRC),准备就绪后发送,随时可取消。包含逐字节确认的静态帧(Espresso、Ristretto)。
- 🧰 **原始控制台** —— 发送自由格式的十六进制帧(已验证 + CRC 状态),带有时间戳的 TX/RX 历史记录。
- 📜 **日志** —— 过滤 TX/RX/INFO,搜索、复制、导出为 `.txt` / `.json`(通过 Android 分享)。
- ⚙️ **设置** —— PIN、自动重连/唤醒、轮询间隔、初始化帧、CRC 策略、调试模式、移除配对。
## 项目结构
```
lib/
├─ protocol/ pure Dart, zero deps — crc16 · saeco_frame · frame_reassembler ·
│ commands · drinks · drink_builder · volume_encoder ·
│ machine_message · machine_errors · known_frames (100% tested)
├─ ble/ saeco_ble_client (scan, GATT, bonding, indications CCCD 02 00,
│ wake, writes — sequential GATT op queue) · saeco_uuids · ble_models
├─ state/ saeco_controller (orchestration + polling) · machine_state ·
│ providers · settings (Riverpod, persisted)
└─ ui/ 6 screens + navigation
```
`protocol/` 文件夹是固件中 `saeco_protocol` C++ 库的 Dart 孪生版本——具有相同的 CRC、成帧和解码器,并针对相同的帧进行了交叉验证。
## 运行
需要 [Flutter SDK](https://docs.flutter.dev/get-started/install) (稳定版)
以及一台 **Android 物理设备**(Android 8.0 / SDK 26+ —— 模拟器上无法运行 BLE),开启蓝牙,且机器在通信范围内。
```
flutter pub get
flutter run # on a USB-connected Android phone (USB debugging on)
# 或构建/安装 debug APK:
flutter build apk --debug # -> build/app/outputs/flutter-apk/app-debug.apk
flutter install
```
核心依赖项:`flutter_blue_plus` (BLE)、`flutter_riverpod` (状态)、
`shared_preferences` / `path_provider` (持久化存储)。
## 测试
```
flutter test # 40 tests
```
覆盖范围:CRC(校验值 `0x29B1` + 15 个已确认的帧)、帧编解码器、饮品
构建器(精确重建 Espresso/Ristretto 抓取数据)、容量编码、
状态解析,以及累积错误解码。
## Android 权限
`BLUETOOTH_SCAN`、`BLUETOOTH_CONNECT` (Android 12+)、`ACCESS_FINE_LOCATION`
(Android ≤ 11),在运行时请求。
## 相关项目
- **[saeco-granbaristo-bridge](https://github.com/mohammed-jaouad/saeco-granbaristo-bridge)** —— ESP32-S3 固件,可将此解码后的协议转换为 Wi-Fi / Home Assistant 桥接。
## 免责声明
非官方的社区项目,旨在实现互操作性和教育目的。未与 Saeco 或 Philips 存在关联、获得其认可或支持。风险自负。“Saeco”和“GranBaristo”是其各自所有者的商标。
## 许可证
MIT © Mohammed Jaouad — 参见 [`LICENSE`](LICENSE)。
标签:Android, CRC校验, DSL, Flutter, 云资产清单, 协议分析, 安全助手, 权限提升, 物联网, 蓝牙低功耗, 逆向工程