我们正在开发一款适用于MoveSense的应用程序,可在某些特定情况下跟踪用户的移动情况。但是由于我们的环境,蓝牙连接可能会间歇性地丢失。为了避免任何数据丢失,我们希望将传感器数据存储在MoveSense上,并在连接恢复后进行读取。在文档中我们找到了DataLogger接口,但是我们遇到了让它工作的问题。
在我们的Android应用程序中,我们首先订阅了我们想要的传感器(现在只有陀螺仪,但是一旦我们启动并运行陀螺仪,我们将扩展到包括加速度计)。 为此,我们执行put命令:
Mds put() uri: suunto://<SERIAL>/Mem/DataLogger/Config contract: {"config": { "dataEntries": {"dataEntry": [{"path": "/Meas/Gyro/13"}]}}}
该命令被&#39; 200&#39;接受。代码(找出正确的JSON也需要一些时间,因为文档缺少&#39; config&#39;部分并使用完全不同的路径。)
在此之后我们尝试激活记录器:
Mds put() uri: suunto://<SERIAL>/Mem/DataLogger/State contract: {"newState": 5}
但是在这个命令上,我们得到了一个403&#39; (FORBIDDEN)错误回复:
[SDS RESPONSE] type: PUT status: FORBIDDEN header: {"Status": 403, "TaskId": 28, "Reason": "FORBIDDEN", "Uri": "suunto://<SERIAL>/Mem/DataLogger/State", "Content-Length": 0}
我们在这里做错了什么?配置中是否有错误?我们忘记了其他一些行动吗?
请注意,我们确保在启用了DataLoger和Logbook模块的MoveSense上刷新应用程序。
答案 0 :(得分:0)
在我们开始记录之前的第一步,我们需要创建DataLogger配置。 配置加速度计和陀螺仪日志的示例。
{
"dataEntries" : {
"dataEntry" : [{
"path" : "/Meas/Acc/13"
}, {
"path" : "/Meas/Gyro/13"
}
]
}
}
在Android示例中创建配置:
PATH: {serial}/Mem/DataLogger/Config/ REQUEST: PUT
Mds.builder().build(context).put("suunto://" + movesenseSerial + "/Mem/DataLogger/Config/",
jsonConfig, new MdsResponseListener() {
@Override
public void onSuccess(String s) {
}
@Override
public void onError(MdsException e) {
}
});
示例响应:
{"Content": {"dataEntries": {"dataEntry": [{"path": "/Meas/Acc/13"}, {"path": "/Meas/Gyro/13"}]}}}
当配置准备就绪时,我们可以开始记录。 要开始记录,PUT值DATALOGGER_LOGGING(= 3)到Mem / DataLogger / State资源 Android开始记录示例:
路径:{serial} / Mem / DataLogger / State / REQUEST:PUT
Mds.builder().build(context).put("suunto://" + movesenseSerial + /Mem/DataLogger/State/,
"{\"newState\":3}", new MdsResponseListener() {
@Override
public void onSuccess(String data) {
}
@Override
public void onError(MdsException error) {
}
});
示例响应:
{"Content": 3}
要停止记录,请将PAT值DATALOGGER_READY(= 2)添加到Mem / DataLogger / State资源 Android停止记录示例:
路径:{serial} / Mem / DataLogger / State / REQUEST:PUT
Mds.builder().build(context).put("suunto://" + movesenseSerial + /Mem/DataLogger/State/,
"{\"newState\":2}", new MdsResponseListener() {
@Override
public void onSuccess(String data) {
}
@Override
public void onError(MdsException error) {
}
});
示例响应:
{"Content": 2}
创建日志文件后,我们可以从设备获取所有条目/日志:
路径:/ MDS / Logbook / {serial} / Entries REQUEST:GET
Mds.builder().build(context).get("suunto://" + movesenseSerial + "/Mem/Logbook/Entries/",
null, new MdsResponseListener() {
@Override
public void onSuccess(String data) {
}
@Override
public void onError(MdsException error) {
}
});
示例响应:
{"elements": [{"Id": 1, "ModificationTimestamp": 536927972, "Size": null}, {"Id": 5, "ModificationTimestamp": 4446227, "Size": null}]}
当我们有条目时,我们可以阅读它们
路径:/ MDS /日志/ {serial} / byId / {LogId} /摘要请求:获取
Mds.builder().build(context).get("suunto://MDS/Logbook/" + movesenseSerial + "/byId/" + entryId + "/Data",
null, new MdsResponseListener() {
@Override
public void onSuccess(String data) {
}
@Override
public void onError(MdsException error) {
}
});