文档最后同步:2026-06-23(codex+codex 自动审计同步,表示同步检查新鲜度,非本页内容改动时间)
CulinaTech 智能温度计生态的 Flutter 客户端文档。本 wiki 给 AI 编码 agent 和新加入的开发者用,避免在 30k 行代码里走偏。
跨平台 Flutter App(iOS + Android),通过 BLE 与「中继盒」(booster)通讯,中继盒再无线读取探针温度。主打场景:烹饪过程实时监测温度、达到目标温度报警、多设备并行监控。CM4 机型走 MQTT/TLS 云端 + BLE 双通道,传统机型仅 BLE。
| 中继盒 | 探针数 | 心跳/锁机制 | 通道 |
|---|---|---|---|
| CM4 | 4(black/white/blue/yellow) | 每 45s 发 ASCII CNT_0(独占锁刷新,60s TTL,per Liang 2026-06-06:与 legacy 同机制、wire 不同;c613148 之前是 20s 无独占锁) |
BLE + MQTT/WiFi |
| CM3 | 3 | 每 45s 发 0x55B1(60s TTL 独占锁) |
BLE only |
| CM2 / MW5 | 2 | 同上 | BLE only |
| CM1 / MW4 | 1 | 同上 | BLE only |
| MW3 | 2(已停产) | 物理 2 探针的 2nd-gen 中继盒(竹盒、无屏);同 CM1 协议族但 App getProbeCount 未特判(fallback 4)—— 见 booster.dart 的 dcf2699 EOL 注释(Kevin 2026-05-29 确认 EOL,无开放 TAPD) |
BLE only |
| CulinaGrillix (CG_) | — | 新产品族,deviceTypeLabel 已识别 |
BLE |
探针颜色 ↔ 地址字节:
0x0A/0x0B=black、0x0D=white、0x0E=blue、0x0F=yellow。0x0F固件常量名PEN_RED仅为历史遗留——红色硬件从未量产(Beta 2026-05-13 二次确认)。
lib/core/transport/)| 分区 | 内容 |
|---|---|
| 01-项目概览 | 技术栈、目录结构、五条主线用户流程、跨业务共享层注释 |
| 02-通讯与协议 | BLE 生命周期、重连/宽限期、状态模型、BLE 协议、MQTT、v4.2 规范原文、CM4 协议 |
| 03-客户端实现 | iOS/Android 平台差异、告警、开发调试、16 个屏的逐屏文档、iOS 实时活动 |
| 04-规划与跟进 | 待解决问题清单、长期重构追踪页 |
详见 概览 §核心不变式。摘要:
0x55B1(Liang 2026-04-20 锁定不变)、CM4 每 45s 发 ASCII CNT_0——同一机制、60s TTL,仅 wire 字节不同(CM4 不接受 0x55B1)。c613148 之前 CM4 cadence 是 20s 且文档为"无独占锁",那是错的ble_device_service.dart:388 gracePeriod)0x55AA 后 1s 内的 0x07 断开 = 入仓关机(_dockShutoffWindow=1s),跳过宽限期,10s boosterShuttingDown 过渡 → boosterOffdeviceId.hashCode 相位错峰(ble_service.dart:1354)lib/core/protocol/temperature_lookup.dart),不信中继盒预转换值AlarmThresholds.internalOverTempF=212 / internalHiClampC=101)probeDisconnected 报警。中继盒 60s 全沉默 → lostConnectionambientOverTemp/internalOverTemp) → 状态 (probeDisconnected/boosterDisconnected/boosterPoweredOff) → 烹饪 (targetReached/earlyWarning1/earlyWarning2) → 信息 (lowBattery/boosterLowBattery/probeDocked/internalUnderTemp/ambientUnderTemp),详见 告警与通知