如何解决在时间序列图表中在 Thingsboard 上显示逗号分隔的数据
我从一个设备中获取逗号分隔的温度数据,其中最后一个条目是最后一个,第一个条目是 1 小时前的。提供的数据是过去一小时一分钟的温度。
我得到这样的json数据:
温度 19.2,23.4,18.3 ...... 23.0,18.2
如何在时间序列图表中以适当的时间在 Thingsboard 中显示它?
谢谢!
解决方法
您可以使用 Rule Engine 将您的 JSON 转换为您需要的格式。
假设您能够通过 MQTT API 或 HTTP API 使用以下负载将设备数据发送到平台:
{
"temp": [22,3,45]
}
然后使用 Script Transformation Node 可以将有效负载(msg
事件的 POST_TELEMETRY
字段)转换为如下格式,该格式可以存储在数据库中并直接显示来自时间序列小部件:
[{
"ts": 1618296229874,"values": {
"temp": 45
}
},{
"ts": 1618296169874,"values": {
"temp": 3
}
},{
"ts": 1618296109874,"values": {
"temp": 22
}
}]
如果您必须区分不同类型的遥测格式,您可能还需要一个上游 Switch Node。由此产生的完整工作规则链将是这样的:
假设您的特定设备在 Thingsboard 中配置的设备类型为 MULTIVALUE THERMOSTAT,您可以按如下方式配置 Switch 节点的功能:
function nextRelation(metadata,msg) {
return ['other'];
}
if(metadata.deviceType === 'MULTIVALUE THERMOSTAT') {
return ['multivalue'];
}
return nextRelation(metadata,msg);
这是脚本转换节点的功能:
var tempArray = msg.temp;
var lastTs = Date.now();
var tsCounter = 0;
var MS_IN_ONE_MINUTE = 60000;
var newMsg = [];
for (var i = tempArray.length - 1; i >= 0; i--) {
let ts = {};
ts.ts = lastTs - tsCounter;
tsCounter += MS_IN_ONE_MINUTE;
let values = {};
values.temp = tempArray[i];
ts.values = values;
newMsg.push(ts);
}
return {msg: newMsg,metadata: metadata,msgType: msgType};
转换函数只是一个起点。您可以改进它或使其更准确,以满足您的实际需求。
在这个例子中,我假设输入负载不包含基本小时,所以我用Date.now()
动态地得到它。所以从最后一次遥测开始,对于之前的所有遥测,我计算了相应的时间戳。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。