0

我刚刚将我的 ThingsBoard 物联网网关升级到 1.4.0 版,我从存储库中看到,现在可以将发布的遥测数据与客户端时间戳进行映射。据我了解,此功能之前只能通过直接发布到 ThingsBoard 嵌入式 MQTT 代理来实现,而不是通过网关。从存储库中,我发现以前的映射类(rep. branch 1.2)如下

public class KVMapping {
    private String key;
    private DataTypeMapping type;
    private String value;
}

虽然新版本(rep. branch 1.4)具有以下

public class KVMapping {
    private String key;
    private DataTypeMapping type;
    private String value;
    private String ts;
    private String tsFormat;
}

据我了解,时间戳功能(和格式样式)已添加到消息映射中。我的问题是我无法将我发布到 ThingsBoard 的消息中的时间戳映射。平台仍会收到正确的keyvalue,但会将数据与服务器端时间戳进行映射。

这是我用来将数据包发布到外部 MQTT 代理的 python 代码片段,它显示了我的 json 数据包的结构:

timeStamp = "1488273476000"
data = {
    "about": "Devices",
    "properties": [
        {
            "about": "Device1",
            "iotStateObservation": [
                {
                    "phenomenonTime": timeStamp,
                    "value": "1"
                }
            ]
        },
        {
            "about": "Device2",
            "iotStateObservation": [
                {
                    "phenomenonTime": timeStamp,
                    "value": "174468"
                }
            ]
        },
        {
            "about": "Device3",
            "iotStateObservation": [
                {
                    "phenomenonTime": timeStamp,
                    "value": "12"
                }
            ]
        }
    ]
}

这是我的 ThingsBoard 物联网网关映射文件 (mqtt-config.json) 的片段,这里配置了所有想要的映射:

{
    "topicFilter": "sensors",
    "converter": {
        "type": "json",
        "filterExpression": "$.properties[*]",
        "deviceNameJsonExpression": "${$.about}",
        "timeseries": [
            {
                "type": "double",
                "ts": "${$.iotStateObservation[0].phenomenonTime}",
                "key": "${$.about}",
                "value": "${$.iotStateObservation[0].value}"
            }
        ]
    }
}

我在此过程中是否犯了一些错误,或者仍然无法将数据与客户端时间戳映射?

4

1 回答 1

0

好的,所以在对 thingsboard 网关代码进行了更好的分析之后,我发现由于某种原因,仍然无法使用 MQTT 映射时间序列的客户端时间戳。使用 HTTP 可以实现此功能,但未对此进行测试。因此,为了添加此功能,我分叉了存储库并稍微更改了 MQTT 映射例程以添加此功能。如果有人对此感兴趣,您可以在我的repo中找到修改后的代码。

于 2018-04-09T07:41:00.403 回答