Thingsboard 3.1.0 - 数据订阅

这篇博客介绍了如何使用WebSocket API与Thingsboard平台进行交互,实现实时数据订阅和分析。首先,详细解释了WebSocket API的用法,包括订阅命令的结构和不同类型的订阅数据。接着,提供了HTML和C#的示例代码,展示如何建立连接、发送订阅命令以及接收和处理数据。最后,C#实例展示了用户登录和订阅设备数据的完整流程。

Thingsboard的数据订阅,使用websocket提供支持,用于完成数据可视和实时数据分析。

官方说明:https://thingsboard.io/docs/user-guide/telemetry/#websocket-api

一、Websocket API

ThingsBard Web UI正在积极的使用WebSocket。websocket api提供订阅设备数据变更的功能。

使用以下URL可以通过websocket链接到遥测服务。

ws(s)://host:port/api/ws/plugins/telemetry?token=$JWT_TOKEN

建立链接后,可以发送 [ 订阅命令 ],并接受 [ 订阅数据 ]。

1. 订阅命令

后端对应的java实现:TelemetryPluginCmdsWrapper.java

发送的各种订阅命令为json格式数据,如下:

{
   
   
	"attrSubCmds": [],
	"tsSubCmds": [],
	"historyCmds": [],
	"entityDataCmds": [],
	"entityDataUnsubscribeCmds": [],
	"alarmDataCmds": [],
	"alarmDataUnsubscribeCmds": []
}

其中tsSubCmds命令构成大致如下:

  • cmdId - 在websocket链接内唯一命令id
  • entityType - 唯一的实体类型。支持的有:TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM
  • entityId - 唯一的实体ID。
  • keys - 数据Key,以逗号分割的列表
  • timeWindow - 时间窗口,获取订阅的时序数据的间隔(毫秒)。获取[now()-timeWindow, now()]时间内数据
  • startTs - 获取历史数据的开始时间(milliseconds)
  • endTs - 获取历史数据的结束时间(milliseconds)
  • agg - 集合函数,例如:AVG,MAX,MIN
  • unsubscribe - 是否取消订阅,默认为false

每种命令的数据格式可能会稍有不同,具体请参看其java实现。

2. 订阅数据

后端对应的java实现:TelemetrySubscriptionUpdate.java

二、html实例

官方提供的sample:

  • token - JWT token,通过http://xxxxxx/api/auth/login登录后取得。
    请求数据:{“username”:“tenant@thingsboard.org”, “password”:“tenant”}
    返回数据:{“token”:"$YOUR_JWT_TOKEN", “refreshToken”:"$YOUR_JWT_REFRESH_TOKEN"}

  • entityId - 具体实体id,这里使用的是设备id

<!DOCTYPE HTML>
<html>
<head>
    <script type="text/javascript">
        function WebSocketAPIExample() {
    
    
            var token = "YOUR_JWT_TOKEN";
            var entityId = "YOUR_DEVICE_ID";
            var webSocket = new WebSocket("ws://127.0.0.1:8080/api/ws/plugins/telemetry?token=" + token);

            if (entityId === "YOUR_DEVICE_ID") {
    
    
                alert("Invalid device id!");
                webSocket.close();
            }

            if (token === "YOUR_JWT_TOKEN") {
    
    
                alert("Invalid JWT token!");
                webSocket.close();
            }

            webSocket.onopen = function () {
    
    
                var object = {
    
    
                    tsSubCmds: [
                        {
    
    
                            entityType: "DEVICE",
                            entityId: entityId,
                            scope: "LATEST_TELEMETRY",
                            cmdId: 10
                        }
                    ],
                    historyCmds: [],
                    attrSubCmds: []
                };
                var data = JSON.stringify(object);
                webSocket.send(data)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值