You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

小米手环2历史活动数据解析及命令执行相关疑问

小米手环2历史活动数据获取与解析问题

我结合你给出的操作步骤和日志,来分析下你遇到的问题:

你的操作流程

  • 认证成功后,向特征0004发送命令:\x01\x01\xe2\x07\x05\x03\x11\x2f\x00\x08,其中前两个字节\x01\x01为ACTIVITY_DATA命令,其余8字节是日期时间参数
  • 开启特征0004和0005的通知功能
  • 向特征0004发送\x02(即COMMAND_FETCH_DATA命令)

收到的通知日志

[Log] 39500C00FF500D00FF500D00FF501100FF
[Log] 3A501100FF600E00FF600D00FF500600FF
[Log] 3B500700FF5A1400FF5A1400FF5A1400FF
[Log] 3C5A1400FF501300FF5A1400FF501200FF
[Log] 3D500C00FF500600FF501000FF500C00FF
[Log] 3E501200FF501600FF500800FF501500FF
[Log] 3F500A00FF500900FF5A1400FF501200FF
[Log] 02501700FF501700FF
[Log] 100201

问题解答

1. 发送的命令是否正确?

从小米手环2的BLE协议细节来看,你的命令流程是对的:

  • ACTIVITY_DATA命令(0x01 0x01)的格式确实是命令码 + 起始时间戳(4字节) + 结束时间戳(4字节),你发送的8字节参数符合这个结构。需要注意的是小米手环用的是小端字节序,你可以核对下这部分参数是否对应你要查询的时间段。
  • COMMAND_FETCH_DATA命令(0x02)的发送时机没问题——在设置查询范围、开启通知后发送,触发设备返回数据。

2. 数据解析与命令有效性判断

你说文档标注数据应为11字节,但收到的是17字节,这是因为手环的活动数据是分片传输的:

  • 每条日志开头的39、3A、3B...3F是分片序号,用来标识数据块的顺序;
  • 分片里的50 xx xx FF是一组活动数据:50是数据类型标记(对应步数/活动量),xx xx是小端字节序的数值,FF是数据组的分隔符;
  • 最后一条100201是传输完成的确认帧:02对应你发送的COMMAND_FETCH_DATA命令,01代表请求成功,这直接说明你的命令是有效的,设备已经完整返回了请求的历史数据。

正确的解析步骤:

  1. 把所有分片数据(除了最后确认帧)拼接起来,去掉分片序号和分隔符FF;
  2. 每3字节(50 xx xx)为一组,将xx xx转成小端字节序的十进制数,就是对应时间段的步数/活动数值;
  3. 最后一条02501700FF501700FF是最后一个数据分片,之后的100201表示数据传输结束。

如果命令错误,设备通常会返回类似10 02 00的错误帧(00代表失败),你收到的100201明确是成功响应,所以你的命令流程完全正确。

内容的提问来源于stack exchange,提问作者Amalina Aziz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:47:02