如何通过 websocket 从 Thingsboard 检索所有客户设备的遥测数据

Posted

技术标签:

【中文标题】如何通过 websocket 从 Thingsboard 检索所有客户设备的遥测数据【英文标题】:How to retrieve telemetry for all customer devices from Thingsboard via websocket 【发布时间】:2019-10-14 03:49:08 【问题描述】:

我想通过 websocket 上的 API 从 thingsboard CE 获取与单个客户相关的所有设备的最新遥测数据。这样我就可以在收到测量值时实时更新 jquery 数据表。

之后通过 GUI 手动添加 customer->device 的关系,最新遥测数据现在正在流入 Thingsboard 中的 CUSTOMER entityType。

但是;返回的数据不包含任何可用于将 ws 响应与生成测量值的设备匹配的设备属性信息。

"subscriptionId":10,"errorCode":0,"errorMsg":null,"data":"battery_voltage":[[1559065098932,"2.8623046875"]],"pressure":[[1559065098932,"0.05001525953412056"]],"relative_humidity":[[1559065098932,"53.7109375"]],"temperature":[[1559065098932,"83.78323364257812"]],"latestValues":"battery_voltage":1559065098932,"temperature":1559065098932,"pressure":1559065098932,"relative_humidity":1559065098932

Thingsboard 中的端点:/api/ws/plugins/telemetry

此代码有效并返回最新的遥测更新,但未指定返回结果中的设备。

$( document ).ready(function()  
...
webSocket.onopen = function () 
   var object = 
       tsSubCmds: [
           entityType: "CUSTOMER",
           entityId: "00000000-0000-0000-0000-0000...",
                        scope: "LATEST_TELEMETRY",
                        cmdId: 10
                    
                ],
                historyCmds: [],
                attrSubCmds: []
            ;
            var data = JSON.stringify(object);
            webSocket.send(data);
            console.log("Message is sent: " + data);
            console.log("socket open: ");
        ;

如何使用设备属性丰富遥测时间序列数据?

【问题讨论】:

【参考方案1】:

我找到的解决方案是更新 GUI 中的规则链,以便复制传入的 DEVICE 遥测数据副本并保存到相关的 CUSTOMER 实体。

一步一步:

    以租户管理员身份登录 thingsboard

    点击Root Rule Chain

    Post telemetry 分支上找到Save timeseries 节点

    将新的filter...script 节点拖到画布上

    将新脚本节点连接到Post Telemetry 分支上Save timeseries 节点的输出

    编辑过滤器脚本名称:-> Should Duplicate

    编辑过滤脚本函数->return true;

    将新的Transformation...change originator 节点拖到画布上

    将新的转换节点连接到过滤器节点的输出

    编辑转换节点名称:Reassign to Customer

    编辑发起者来源:Customer

    将新的Action...save timeseries 节点拖到画布上

    将新的 Action 节点连接到 Transformation 节点的输出

    编辑动作节点名称:Save Related Telemetry

您的根规则链现在应该如下所示:

【讨论】:

以上是关于如何通过 websocket 从 Thingsboard 检索所有客户设备的遥测数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在接收响应时通过 websocket 发送请求

如何从控制器或其他组件/服务访问 websocket?

Spring消息传递+安全如何通过websockets登录?

如何通过 Websocket 协议处理 GraphQL 中的文件上传?

如何从 Python 中的 websocket 消息增量解析 JSON?

如何通过 websocket 优化发送绘图?