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

779 阅读2分钟

粗看全局,掌握局势

系统关系连接线示意图

系统概览图.png

开局一张图,故事全靠编

若设备直接连接transport mqtt,不是像上面图上的连法,设备可以获取到升级包,thingsboard已经实现该功能。

若设备如图所示连接,设备就获取不到升级包,需要我们添加代码,使之能支持。

首先打通 thingsboard-gateway 与 transport mqtt 的数据通路,只要这条主干道通畅,那网关下面的设备就可以直通云霄。

接下来才是攻坚战,因为各个连接器各不相同,需要一个一个的打通,打通连接器与 thingsboard-gateway 内 mqtt客户端的数据通路,我暂时已打通mqtt客户端连接器与mqtt客户端的数据通路。

thingsboard-gateway 网关内部详细图

网关数据流转图.png

继续看图说话,没图故事编不出

别看图简陋,这已经是我的极限了,我所知道的也就这么多,感觉细节画的越多,脑袋就罢工,处理不过来,直接死机。

网关启动过程

thingsboard_gateway\tb_gateway.py,只有一句话,就是创造亚当夏娃,接下来创造人类世界的伟大任务就交给亚当夏娃,但TBGatewayService雌雄同体,TBGatewayService独自一人就能创造整个世界。

thingsboard_gateway\gateway\tb_gateway_service.py,new 一个 TBGatewayService 对象,该对象初始化完,意味着整个系统初始化完,就可以开始干活了。

TBGatewayService 跟据logs.conf配置文件的指示,设置好日志打印服务对象,接着根据tb_gateway.yaml配置文件的指示,创建TBClient对象,TBClient对象用于跟transport mqtt通信,数据上云、上级命令下达全靠它。

TBGatewayService 接着创建 __converted_data_queue 队列,所有连接器都会将数据送入该队列。

TBGatewayService 又根据配置文件的指示,创建出一个符合要求的_event_storage存储服务对象。

TBGatewayService 加载所有连接器,会从 connectors 和 extensions 目录加载。

TBGatewayService 打开所有连接器,让连接器开始工作。

省略很多细节后,TBGatewayService 的 init 初始化方法终于执行一遍后,系统也就初始化完成了,但__init__ 最后会一直循环,直到TBGatewayService停止。

系统的启动过程,归根结底总结一句话,就是创造各种对象,并连接好它们之间的关系,就像水管一样,一旦连接好,就可以工作,道生一,一生二,二生三,三生万物,系统就这样创造出来,生生不息,永不停止。