粗看全局,掌握局势
系统关系连接线示意图
开局一张图,故事全靠编
若设备直接连接transport mqtt,不是像上面图上的连法,设备可以获取到升级包,thingsboard已经实现该功能。
若设备如图所示连接,设备就获取不到升级包,需要我们添加代码,使之能支持。
首先打通 thingsboard-gateway 与 transport mqtt 的数据通路,只要这条主干道通畅,那网关下面的设备就可以直通云霄。
接下来才是攻坚战,因为各个连接器各不相同,需要一个一个的打通,打通连接器与 thingsboard-gateway 内 mqtt客户端的数据通路,我暂时已打通mqtt客户端连接器与mqtt客户端的数据通路。
thingsboard-gateway 网关内部详细图
继续看图说话,没图故事编不出
别看图简陋,这已经是我的极限了,我所知道的也就这么多,感觉细节画的越多,脑袋就罢工,处理不过来,直接死机。
网关启动过程
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停止。
系统的启动过程,归根结底总结一句话,就是创造各种对象,并连接好它们之间的关系,就像水管一样,一旦连接好,就可以工作,道生一,一生二,二生三,三生万物,系统就这样创造出来,生生不息,永不停止。