Thingsboard 源码分析 -- Gateway mqtt网关原理实现

Thingsboard的网关通过tb核心服务提供的mqtt以客户端的形式连接到tb上,一个网关的mqtt连接同时只能在线一个客户端服务。正常情况下,网关下的所有设备上报数据都是通过网关上报,网关下所有设备都是先把数据上报到边缘端的mqtt上,然后网关通过订阅边缘端的mqtt获取设备数据,再统一通过tb的mqtt上传到tb上,网关服务上传操作还考虑到了服务掉线的情况,会把数据暂时存起来,待服务连接正常继续上报。

Thingsboard官方网关用的python写的,最早官方网关用的java,但是不知道什么原因下架换成python,有知道的朋友请留言。

Thingsboard网关核心功能有两个,

1,上报数据。

2,接收服务端rpc请求,转发给设备连接的边缘端mqtt,我们有些场景下,网关显得鸡肋,我们就可以按以下逻辑定制一个简易的网关。

3,多协议支持。

Thingsboard mqtt网关的核心代码都在MqttGatewayService类中,业务也比较简单,有兴趣可以跟一下代码看看。

但是某些场景下,我们业务很简单,边缘端又不想部署这么多服务,可以考虑去掉tb网关,采集服务模拟网关直接跟tb通信完成数据上报和控制。

首先说一下上报数据的核心逻辑,设备数据上报前要做一次connect,tb会为我们在设备列表中创建设备,否则,tb核心服务会为我们创建一个没有设备类型的设备出来。

topic:v1/gateway/connect

body: {"device":"1111",type:"sensor"}

上报遥测数据

topic:v1/gateway/telemetry

body:{"1111":[{ "switch1": 1, "switch2": 1}]}

上报客户端属性

topic:v1/gateway/attributes

body:{"1111":{"deviceType":"xxx","supplier":"xxx"}}

再说下rpc请求的核心逻辑

单向和双向的topic都需要订阅以下topic,主要在规则引擎里区分好单向还是双向,写到body里,便于网关区分返回响应。

v1/gateway/rpc

订阅上述topic,rpc请求可以收到如下body

{"device":"F8EF6B0F004B1200","data":{"id":123,"method":"set/njwl/switch1","params":{"state":1,"supplier":"njwl","deviceId":"F8EF6B0F004B1200","deviceType":"switch","isOneway":"false"}}}

双向rpc 响应,body中的id就是requestid。

v1/gateway/rpc

body: {"id":123,"device":"F8EF6B0F004B1200","data":"{\"state\":1111,\"supplier\":\"njwl\"}"} 

网关心跳

MqttGatewayService 在init方法中会定时运行reportStats()方法,默认好像是10秒一次,向topic v1/devices/me/telemetry 发送以下数据。

{"ts":1606267309953,"values":{"devicesOnline":111,"attributesUploaded":0,"telemetryUploaded":0}}

设备心跳,完全依赖设备自身上报,无论是属性还是遥测数据,都会认为是心跳

至此,可以完全脱离thingsboard的gateway独立设计运转自己的网关了。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Thingsboard是一个开源的物联网平台,它可以用于集成和管理物联网设备。要连接ThingsboardMQTT网关,需要遵循以下步骤: 1. 创建设备:首先,在Thingsboard平台上创建一个设备。你可以在设备管理页面创建设备,并分配一个设备标识符(Device ID)和设备令牌(Device Token)。 2. 配置MQTT网关:然后,配置你的MQTT网关以便与Thingsboard平台连接。在网关的配置文件中,你需要指定Thingsboard平台的连接细节,例如服务器地址、端口、设备标识符等。 3. 连接MQTT网关网关启动后,它将自动连接Thingsboard平台。它将使用预先配置的设备标识符和设备令牌进行身份验证。 4. 设备上报数据:在设备上报数据时,可以通过网关将数据发送到Thingsboard平台。MQTT网关会将数据发布到指定的MQTT主题上,该主题的名称是由设备标识符和“telemetry”(遥测数据)组成的。 5. 数据可视化和管理:Thingsboard平台将接收来自MQTT网关的数据,并将其存储在数据库中。你可以使用Thingsboard提供的仪表板功能来可视化和监控设备数据。还可以在平台上进行设备管理、数据分析和规则引擎配置等操作。 需要注意的是,连接MQTT网关和Thingsboard平台的具体步骤可能会因所使用的网关和Thingsboard的版本而有所不同。因此,在实际操作时,建议参考相关文档和官方指南以获得准确的步骤和配置细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值