ThingsBoard 物联网网关 - 1.4.0 版中的时间戳映射时间序列
ThingsBoard IoT Gateway - Timestamp mapping timeseries in release 1.4.0
我刚刚将我的 ThingsBoard 物联网网关升级到 1.4.0 版,我从存储库中看到现在可以将已发布的遥测数据与客户端时间戳进行映射。根据我的理解,此功能之前只能通过直接发布到 ThingsBoard 嵌入式 MQTT 代理来实现,而不是通过网关。
从存储库中我发现之前的映射 class (rep. branch 1.2) 是 following:
public class KVMapping {
private String key;
private DataTypeMapping type;
private String value;
}
虽然新版本(rep.branch 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}"
}
]
}
}
我是不是在这个过程中犯了一些错误,或者只是仍然无法用客户端时间戳映射数据?
好的,所以在对 thingsboard 网关代码进行了更好的分析之后,我发现出于某种原因,仍然无法使用 MQTT 为时间序列映射客户端时间戳。使用 HTTP 可能可以实现此功能,但未对此进行测试。因此,为了添加此功能,我分叉了存储库并稍微更改了 MQTT 映射例程以添加此功能。如果有人对此感兴趣,您可以在我的 repo.
上找到修改后的代码
我刚刚将我的 ThingsBoard 物联网网关升级到 1.4.0 版,我从存储库中看到现在可以将已发布的遥测数据与客户端时间戳进行映射。根据我的理解,此功能之前只能通过直接发布到 ThingsBoard 嵌入式 MQTT 代理来实现,而不是通过网关。 从存储库中我发现之前的映射 class (rep. branch 1.2) 是 following:
public class KVMapping {
private String key;
private DataTypeMapping type;
private String value;
}
虽然新版本(rep.branch 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}"
}
]
}
}
我是不是在这个过程中犯了一些错误,或者只是仍然无法用客户端时间戳映射数据?
好的,所以在对 thingsboard 网关代码进行了更好的分析之后,我发现出于某种原因,仍然无法使用 MQTT 为时间序列映射客户端时间戳。使用 HTTP 可能可以实现此功能,但未对此进行测试。因此,为了添加此功能,我分叉了存储库并稍微更改了 MQTT 映射例程以添加此功能。如果有人对此感兴趣,您可以在我的 repo.
上找到修改后的代码