mohammed-jaouad/saeco-granbaristo-bridge
GitHub: mohammed-jaouad/saeco-granbaristo-bridge
一款将 Saeco GranBaristo Avanti 咖啡机通过 ESP32-S3 桥接为 Wi-Fi/Home Assistant 智能设备的固件,基于逆向工程的 BLE 协议实现远程控制和实时监控。
Stars: 0 | Forks: 0
# Saeco BLE Bridge (ESP32-S3)
**将一台 Saeco GranBaristo Avanti 浓缩咖啡机变成 Wi-Fi / Home-Assistant 智能设备。**
这是一个 ESP32-S3 固件,它通过逆向工程的蓝牙低功耗与咖啡机进行通信,并在另一端提供实时 Web UI + REST/WebSocket API。
您可以通过网络上的任何浏览器——或者通过 Home Assistant——来萃取一杯咖啡。
## 功能特性
- ☕ **全面的机器控制** — 14 种饮品、浓度、口感、温度、水量、×2 双份浓缩、萃取和取消。
- 📊 **实时萃取进度** — 直接从机器自身的遥测数据中解码出的实时进度条(研磨 → 压粉 → 萃取)。
- 🌐 **自托管 Web 应用** — "Espresso Noir" 单页应用 (SPA) 由 ESP32 的 flash 提供。无需云端,无需账户,在您的局域网 (LAN) 上离线运行。
- 🔌 **REST + WebSocket API** — WebSocket 用于即时推送,REST (`GET /api/state`, `POST /api/command`) 用于自动化。
- 🏠 **Home Assistant 集成** — 无需 broker(纯 REST)。包含传感器 + 一键萃取脚本。开箱即用的配置位于 [`integrations/homeassistant/`](integrations/homeassistant/)。
- 📶 **强制门户 Wi-Fi 设置** — 首次启动会开启一个 AP;选择您的网络,完成。凭据存储在 NVS 中。
- 💡 **支持无头运行** — RGB 状态指示灯会提示 AP / 连接中 / BLE / 准备就绪 / 错误,因此它可以在没有串口控制台的情况下独立运行。
- ✅ **经过主机测试的协议** — BLE 协议是一个无依赖的 C++ 库,包含 24 个可在您的笔记本电脑上运行单元测试。
## 工作原理
```
Browser / Home Assistant
│ HTTP (gzipped SPA from LittleFS) + WebSocket /ws + REST /api/*
ESP32-S3 (Arduino + FreeRTOS)
├─ src/net/ web_api (AsyncWebServer + WebSocket + REST) · wifi_manager (AP→STA→mDNS)
├─ src/app/ machine_controller (state machine, polling, brew) · machine_state · config_nvs
├─ src/ble/ saeco_ble_client (NimBLE central: scan / pair / indications / TX)
└─ lib/saeco_protocol/ crc16 · saeco_frame · frame_reassembler · commands ·
drinks · drink_builder · machine_message · machine_errors
│ Bluetooth Low Energy (pairing passkey shown on the machine display)
Saeco GranBaristo Avanti
```
**协议层** (`lib/saeco_protocol/`) 是纯头文件 C++,**没有
Arduino/BLE/Wi-Fi 依赖**,因此可以在本地针对捕获的
参考帧进行测试。其他所有内容都构建在它之上。所有跨任务工作
(AsyncTCP 服务器任务和 NimBLE 主机任务)都在锁的
保护下调配到主循环中——该固件经过了并发审计。
## 协议简述
- **帧 (Frame):** `FE FF 0F 00 `
- **校验和:** CRC-16/CCITT-FALSE (多项式 `0x1021`, 初始值 `0xFFFF`),**仅对 payload 计算**。
- **ACK:** 机器以 `action + 1` 进行回复。
- **指示消息是分段的**,在解析前必须进行重组。
- **配对** 需要机器显示屏上显示的通行密钥 (passkey)。
- **实时遥测:** 轮询 `0C AF 30` 会返回 `31
标签:REST API, TCP SYN 扫描, WebSocket, Web UI, 云资产清单, 依赖分析, 嵌入式固件, 智能家居, 物联网, 网络测绘, 蓝牙低功耗, 逆向工程