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

时间:2019-05-28 15:09:47

标签: thingsboard telemetry

我想通过Websocket通过API通过API通过物联网CE获取与单个客户相关的所有设备的最新遥测。这样我就可以在收到测量结果时实时更新jquery数据表。

之后通过GUI手动为customer->device添加一个关系,最新的遥测数据现在流到Thingsboard中的CUSTOMER实体类型。

但是;返回的数据不包含任何设备属性信息,我可以使用这些信息来将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 个答案:

答案 0 :(得分:0)

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

逐步:

  1. 以租户管理员身份登录Thingsboard

  2. 点击Root Rule Chain

  3. Save timeseries分支上找到Post telemetry节点

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

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

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

  7. 编辑过滤器脚本功能-> return true;

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

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

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

  11. 编辑创建者源:Customer

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

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

  14. 编辑操作节点名称:Save Related Telemetry

您的根规则链现在应该看起来像这样: