实现 thingsboard 网关下设备 OTA 升级功能(十三)

577 阅读4分钟

thingsboard-gateway新增特性

怎么写?

终于来到thingsboard-gateway部分,期待已久,thingsboard-gateway写的真好,我可能要花很多废话来介绍它的套路,主要是配置文件里面的套路,也是它没有明文写出来的约定,还是那句话,写代码是不可能的,只有复制粘贴这样子,才能生存。

我们首先想一下,我们到目前为止,知道些啥?

到目前为止,我们知道了,网关发请求就能获取到设备的升级包,这个功能我们前面花了很多时间,做成功了。

我们还知道,thingsboard-gateway已经就有设备请求共享属性的功能,这个就是我们的突破口。

设备请求共享属性 和 设备请求升级包 有什么区别?没有区别,一样的套路嘛,我们又可以使用终极绝招 CTRL+C CTRL+V 大法了。

方向已定,接下来,就是去看代码,学习thingsboard-gateway怎么实现设备请求共享属性的。

看代码没法写出来,我用粗俗的语言说一下这个经过,思想还是那个思想,不管你用再高雅的词汇,它还是那个思想,但人就是怪,同样一句话,同样一个思想,由不同人讲出来,用不同的语气讲出来,道理完全不一样。

我只讲mqtt客户端连接器,所谓mqtt客户端连接器,就是这个连接器是当作客户端连接在第三方mqtt服务器上的,其他设备也是当作客户端连接在第三方mqtt服务器上,这样看来,相当于第三方mqtt服务器就是个中介,用来连接设备与连接器。

第一关,设备与连接器怎么沟通?

第二关,连接器与网关怎么沟通?

第三关,网关与transport mqtt怎么沟通?

先补充第二关的说法,连接器和网关是什么关系?你肯定疑惑,连接器不是在网关内部吗?其实这个你要杠,确实也说不清,我先说一下,thingsboard-gateway是怎么设计的。

thingsboard-gateway是一个扁平化设计,用班级来比喻,这个班级整体抽象,我们称为thingsboard-gateway网关,网关里有一个核心对象 service,就相当于班主任,它是整个网关的中心点,其他对象之间各不认识,但其他对象都认识班主任,都知道这个中心点,那其他对象之间,想要结党营私,架空班主任怎么办?这个情况不可能,其他对象之间想要联系,必须经过班主任,因为他只有班主任的指针,没有其他对象的指针。

可以说,这个班主任就代表整个班级,即这个核心对象service就代表网关,因为这个班主任对整个班级了如指掌,什么阿猫阿狗都逃不掉他的眼睛。整个班级的一切,都装在他的肚子里,还真就是宰相肚里能撑船。

这个班级里,学生也分不同角色,有的学生被当作mqtt客户端连接器,有点学生被当作tcp服务端连接器,连接器种类任意,数量任意,就是说,若10个学生都想当mqtt客户端连接器,都行。

但有一个角色,非常关键,这个岗位属于干部岗位了,只能由一个学生担任,它就是TBGatewayMqttClient,它负责整个网关与云通信,也就是与 transport mqtt通信,也就是与thingsboard通信。

再回到前面,第二关,连接器与网关怎么沟通?你自己去猜是什么意思,我也说不清什么意思。

第三关,网关与transport mqtt怎么沟通?这个前面很多篇文章就是在讲这个,我们已经实现了网关请求升级包的功能。

再讲 第一关,设备与连接器怎么沟通?对于mqtt客户端来讲,就是用不同topic通信,下面大概演示这个通信方式,细节省略,一看就明白:

设备与连接器通信.png

还有其它topic,每个topic基本上表示一种功能。接下来,我会重点讲解,设备与连接器通信,关于设备请求共享属性的通信。