2

我们正在为 MoveSense 开发一个应用程序,该应用程序可以在某些特定情况下跟踪用户的移动。然而,由于我们的环境,蓝牙连接可能会间歇性地掉线。为了不丢失任何数据,我们希望将传感器数据存储在 MoveSense 上,并在连接恢复后读取它。在文档中,我们找到了 DataLogger 接口,但我们在让它工作时遇到了问题。

在我们的 Android 应用程序中,我们首先订阅我们想要的传感器(目前只有陀螺仪,但一旦陀螺仪启动并运行,我们将扩展到包括加速度计)。为此,我们执行 put 命令:

Mds put() uri: suunto://<SERIAL>/Mem/DataLogger/Config contract: {"config": { "dataEntries": {"dataEntry": [{"path": "/Meas/Gyro/13"}]}}}

使用“200”代码接受此命令(找出正确的 JSON 也需要一些时间,因为文档缺少“配置”部分并使用完全不同的路径)。

在此之后,我们尝试激活记录器:

Mds put() uri: suunto://<SERIAL>/Mem/DataLogger/State contract: {"newState": 5}

但是在这个命令上,我们得到一个 '403' (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 上刷新应用程序。

4

1 回答 1

1

在开始记录之前的第一步,我们需要创建 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"}]}}}

配置准备好后,我们可以开始记录。要开始记录,请将值 DATALOGGER_LOGGING (=3) 放入 Mem/DataLogger/State 资源 Android 开始记录示例:

路径:{serial}/Mem/DataLogger/State/ 请求: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}

要停止记录,请将值 DATALOGGER_READY (=2) 放入 Mem/DataLogger/State 资源 Android 停止记录示例:

路径:{serial}/Mem/DataLogger/State/ 请求: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 请求: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/Logbook/{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) {
                            }
                        });
于 2018-01-16T14:26:24.420 回答