ThingsBoard IoT Gateway - 版本1.4.0中的时间戳映射时间序列

时间:2018-03-16 09:44:26

标签: python json mqtt iot thingsboard

我刚刚将我的ThingsBoard IoT网关升级到版本1.4.0,我从存储库中看到现在可以使用客户端时间戳映射已发布的遥测。据我所知,此功能之前只能直接发布到ThingsBoard嵌入式MQTT代理,而不能通过网关发布。 从存储库中我发现前一个映射类(代表分支1.2)是following

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

虽然新版本(代表分支1.4)具有以下class

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 IoT网关映射文件(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}"
            }
        ]
    }
}

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

1 个答案:

答案 0 :(得分:0)

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