用Claude Code定位蓝牙体重秤断连
作者借助Claude Code分析Home Assistant日志,发现体重秤在写入单位设置后反复断连。通过另一台机器用bleak订阅通知、仅移除单位写入操作,成功收到测量数据,缩小了故障范围。
AI 深度解读
一台 Etekcity ESF-551 蓝牙体脂秤接入 Home Assistant 后,连接反复建立,体重数据却始终不来。作者让 Claude Code 协助排查,最终找到一个直接触发点:集成发送的单位设置命令,会让这台日本市场设备断开连接。
更有意思的是,追查「为什么不能切换单位」又牵出了日本《计量法》。这次排障值得看,既因为它展示了 AI 如何辅助跨领域调查,也因为作者清楚区分了已经验证的故障、找到的法规线索,以及仍然没有证实的推测。
连上设备,为什么还是收不到数据
作者使用的是 HACS 集成 etekcity_fitness_scale_ble,底层封装了 etekcity_esf551_ble==0.8.4。日志显示,集成能连接设备、读取硬件和软件版本,随后写入单位命令 a5220305002b0163a10000,把单位设为 0,也就是 kg。
约 0.4 秒后,设备断开。集成重新连接,再发送同一条命令,然后再次断开。即便只是从 kg 设置为 kg,循环也照样发生。作者站上体脂秤,没有收到通知,所有传感器都处于不可用状态。
这里的通知(notification),指 BLE 设备主动推送的测量数据。连接成功只能说明通信链路建立了,不能证明后面的初始化命令和数据订阅都正常。
Claude Code 随后从另一台机器用 bleak 直接订阅 0000fff1,只省略单位写入。结果连接保持正常,作者站上秤后,收到约 80 条通知,每条 22 字节,间隔约 45 ms。
这次对照实验把排查范围缩到了单位写入这一步。
接着,Claude Code 写了本地补丁,通过传入 display_unit=None 跳过写入。修改后,14 个传感器全部有了数据。作者还让它起草上游 issue,并提交为 etekcity_esf551_ble #15。
这条路径很适合借鉴:先读日志找到重复发生的边界,再绕过集成做最小实验,最后把验证过的条件变成补丁。AI 的价值落在了具体工作上,而作者仍负责实际踩秤和决定下一步调查方向。
日本版为什么没有单位开关
故障得到绕过后,作者继续追查:为什么日本版没有单位切换功能?
VeSync app 里没有对应选项,美国版说明书却写了操作步骤。作者又比对机身背面标签和美国版规格,判断手里的设备属于不同市场版本,差异不能简单归为固件修订。
Claude Code 通过 e-Gov law API 读取了日本《计量法》。按文中的解读,第 9 条限制销售或陈列销售标有非法定计量单位的计量器,因此作者将日本版缺少 lb、st 切换功能与这项规定联系起来。文中还区分了第 8 条:作者认为,个人称体重不属于交易或证明,不受该条约束。
这部分是作者对法规及设备差异的解释。更具体的旁证来自日本经济产业省 FY2015 试购报告:其中有商家不知道磅和英石受到限制,被要求封住设备,使其无法切换单位。
但这仍然没有解释固件为何断连。
缺少单位切换功能有了法规线索,收到命令就断开连接的原因仍未证实。
作者明确说,无法判断设备是故意断开,还是不认识命令、错误处理又不完善。他只有一台设备,也不能证明厂商数据中的型号标识 12 就代表日本版。向上游提出的方案,是为标识 12 配置 display_unit_settable=False,由维护者决定如何处理。发送未知操作码、比较断连行为的实验,当时还没做。
提交 issue 的第二天,维护者回复,认为法规和 app 缺少选项的情况能解释这一现象。同一天,底层库 v0.8.8 和 HA 集成 0.8.3 发布。作者升级到 0.8.3,移除本地补丁,再次称重,数据正常到达。原文没有展示最终补丁细节,不能据此认定上游完全采用了作者建议的识别方式。
我的判断
最扎实的证据是「跳过单位命令后恢复」,随后还有升级正式版本、移除补丁后的验证。它足以支持这台设备的修复结论。
需要留余地的是更大的推断:日本版是否都如此、标识 12 能否可靠区分市场版本、断连是否属于设计行为,作者都没有充分样本或实验。法规解释提供了调查方向,但不是固件行为的直接证据。
和盲目重连、增加超时相比,这次调查找到了更具体的触发条件。与全面逆向固件相比,跳过一个非必要配置步骤,也已经解决了实际需求。
至于 AI 带来的效率提升,作者只给出了个人经历,没有耗时统计或人工对照。可以认可它协助读日志、写实验和查资料的作用,不能据此量化它让排障快了多少。
能拿来做什么
- 遇到设备反复连接却没有数据时,把初始化过程拆开检查,重点记录最后成功的读取、写入或订阅操作,别只盯着连接状态。
- 让 AI 帮忙设计单变量实验。例如保留 BLE 订阅,只移除一条配置写入,再比较通知是否恢复,让修改有可验证的依据。
- 给开源项目提 issue 时,附上依赖版本、命令内容、断连时间和最小实验结果,并明确说明设备数量与尚未验证的猜测。
- 正式修复发布后,移除本地补丁并复测完整流程。这次作者验证的是 HA 集成 0.8.3,不能只凭底层库版本更新就假定问题已经解决。