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

GET请求Movesense日志条目数据丢失11000字节及相关问题咨询

Movesense日志数据丢失、订阅及Offset请求异常问题排查

问题背景

创建了一个224160字节的Movesense传感器日志条目,通过Showcase App的广播命令确认条目大小:

am broadcast -a android.intent.action.MOVESENSE --es type get --es path Mem/Logbook/Entries

返回结果:

ID:null Mem/Logbook/Entries OUTPUT: {"Content": {"elements": [{"Id": 1, "ModificationTimestamp": 1734712802, "Size": 224160}]}}

但执行GET请求获取日志内容时,仅返回283963字节的Base64数据,对应原始字节约212972,缺失约11000字节;较小日志条目可正常获取:

am broadcast -a android.intent.action.MOVESENSE --es type get --es path Mem/Logbook/byId/1/Data

返回结果:

ID:null Mem/Logbook/byId/1/Data Status:  200 OUTPUT (283963): {"Content": "U0JFTTAx...

同时遇到以下异常:

  • 订阅Logbook/byId/1/Data返回404错误
  • 订阅Mem/Logbook/byId/1/Data返回501错误
  • 带offset参数的GET请求导致传感器与Showcase App断开连接
  • 尝试直接读取EEPROM但仓库无ExtflashChunkStorage.h文件

核心问题解答

1. GET请求丢失数据的原因及大小限制

Movesense的Logbook通过单次GET请求获取数据时,存在传输层面的默认大小限制,该限制由MDS(Movesense Device Service)的消息帧大小、蓝牙MTU(最大传输单元)共同决定,默认单次能传输的Base64编码数据上限约对应21KB原始数据,实际值会因固件版本、设备配置略有差异。

你的日志条目224160字节远超过单次传输上限,因此MDS自动截断数据,导致末尾约11000字节丢失。Logbook单条目本身的大小上限由传感器存储容量决定(通常为几MB),并非导致丢失的直接原因。

2. 订阅Logbook数据失败的原因

  • 订阅Logbook/byId/1/Data返回404:路径错误,正确路径需包含Mem/前缀,但该资源本身不支持订阅操作。
  • 订阅Mem/Logbook/byId/1/Data返回501:Logbook的Data端点仅支持单次GET读取,属于历史数据资源;Movesense的订阅功能仅面向实时测量类端点(如Meas/Acc/13),历史日志不支持订阅模式,因此返回501(未实现)错误。

3. 带offset参数的GET请求导致断开连接的原因

根据logbook.yaml定义,Mem/Logbook/byId/{id}/Data支持offset和length分段读取,但断开连接通常因以下原因:

  • 参数格式错误:你使用的--es value '''{"offset":65536}'''存在多余单引号,Android广播的value参数需要严格JSON格式,应改为--es value '{"offset":65536}'。
  • 固件兼容性bug:部分旧版本Movesense固件对offset参数的处理存在问题,会触发蓝牙连接崩溃,建议升级到最新稳定固件重试。

解决建议

  1. 分段读取日志数据:使用offset和length参数拆分请求,例如每次读取64KB原始数据(对应Base64约87381字节):

    # 读取第一块(offset=0)
    am broadcast -a android.intent.action.MOVESENSE --es type get --es path Mem/Logbook/byId/1/Data --es value '{"offset":0,"length":65536}'
    # 读取第二块(offset=65536)
    am broadcast -a android.intent.action.MOVESENSE --es type get --es path Mem/Logbook/byId/1/Data --es value '{"offset":65536,"length":65536}'
    # 读取剩余数据
    am broadcast -a android.intent.action.MOVESENSE --es type get --es path Mem/Logbook/byId/1/Data --es value '{"offset":131072,"length":93088}'
    

    拼接多段Base64数据后解码即可得到完整日志。

  2. 升级固件:将传感器固件更新至最新稳定版本,修复已知的offset参数处理bug。

  3. 避免无效操作:不要尝试订阅Logbook历史数据,该功能不被支持;官方已废弃直接读取EEPROM的相关API,无需寻找ExtflashChunkStorage.h文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:58:22