我刚刚将我的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发布的消息中映射时间戳。平台仍然会收到正确的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 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}"
}
]
}
}
我是否在此过程中犯了一些错误,或者只是仍然无法使用客户端时间戳映射数据?
答案 0 :(得分:0)
好的,所以在对thingboard网关代码进行更好的分析后,我发现由于某种原因,仍然无法使用MQTT映射时间序列的客户端时间戳。使用HTTP可能有此功能,但没有对此进行测试。因此,为了添加此功能,我分叉了存储库并稍微更改了MQTT映射例程以添加此功能。如果有人对此感兴趣,您可以在repo上找到修改后的代码。