我刚刚将我的 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 的消息中的时间戳映射。平台仍会收到正确的key
和value
,但会将数据与服务器端时间戳进行映射。
这是我用来将数据包发布到外部 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}"
}
]
}
}
我在此过程中是否犯了一些错误,或者仍然无法将数据与客户端时间戳映射?