一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情
前言
- 为了熟悉thingsboard-gateway运行逻辑,我们就需要模拟设备数据
- 我们采用源码编译方式Java环境的gateway
安装emqx
Java环境问题
-
Java环境协议模板对应config文件。在tb-gateway.yml中配置参数名和python不同
-
上图中配置thingsboard平台地址及授权码;完成改配置仅仅完成网关于thingsboard的通信
-
但是我么你需要监控设备边缘中间端是不能仅仅在对应协议文件中配置。需要
remoteConfiguration=false然后再extensions中配置我们的协议 -
这个逻辑在
DefaultTenantManagerService中处理的 -
如上配置我们就启动监听mqtt协议的设备。具体mqtt服务配置则在
extensionConfiguaration配置的路径中。上面的remoteConfiguration=false对应这个地方表示读取的是本地的配置文件。
配置mqtt
-
mqtt-config.json文件中主要配置mqtt服务信息以及监听的topic信息。mapping,connectRequests,disconnectRequests,attributeRequests,serverSideRpc等等都是对应相应时间的主题 -
比如说mapping中简单归纳为
topicFilter和converter两类,前者是主题名称,后者是数据转换策略 -
mqtt协议的对应在
MqttBrokerMonitor处负责对主题进行订阅并设置数据监听
源码解读
-
thingsboard-gateway主要功能就是对接硬件设备数据并传递到thingsboard平台。源码中主要是extension和service。功能也不言而喻,在extension中主要是兼容不同的协议对接设备的数据,而service中主要是针对thingsboard提供的mqtt协议的数据进行通信。 -
thingsboard-gateway主要的配置在GatewayConfiguration类中。主要是定义一些bean交由sping来管理。 -
首先
TenantManagerService我们可以清楚看到是DefaultTenantManagerService提供功能。主要的注册绑定逻辑就是在被PostConstruct标注的init方法。 -
TbGatewayConfiguration配置类代表了tb-gateway.yml中gateway部分的配置。也是我们核心的配置部分 -
所以上文配置mqtt或者modbus协议时才需要将对应
remoteConfiguration=false。 -
remoteConfiguration=false除了注册gatewayService以外就是加载我们的extension部分,也就是设备的各种协议。主要协议如下 -
在开始协议之前我们能够发现
TenantManagerService依赖GatewayService, 所以在getGatewayService中会先执行GatewayService中的初始化 -
能够看出
MqttGatewayService中主要逻辑就是初始化连接mqtt(这里直的是thingsboard中提供的mqtt端口协议) 。 然后注册发送已经订阅功能,最终生成一个定时器定时上传数据到thingsboard的网关处。 -
最后会执行到对应的
extension的注册上。我测试的是DefaultMqttClientService -
在
mqtt-config.json文件中我们能够看到brokers是一个数组组成的。网关配置可以只想多个thingsboard中设备网关。 -
最终就是在我们
connect连接方法中初始化mqtt . connect方法内部前半部分配置连接信息,checkConnect后就是对配置的主题进行订阅了。监听数据的回调就是MqttBrokerMonitor本身。但是MqttBrokerMonitor处理监听的是messageArrived方法。并没有做过多的处理。 -
在
checkConnenction中的subscribeToTopics负责对设备的监听。 -
在这里对不同的监听会有不同的监听器.里面对应的是
MqttBrokerMonitor的方法。对应的方法里负责对thingsboard做不同的交互。
mqtt协议交互
协议监听
- 在一开始
TenantManagerService已经提到在ExtensionService加载时thingsboard-gateway为我们提供了5中协议 - 关于
DefaultHttpService在DefaultTenantManagerService#processRequest处理交由DefaultHttpService处理请求最终于thingsboard同步数据
| 协议处理 | 功能 |
|---|---|
| DefaultFileTailService | 通过本地文件监听数据;内部线程在自旋等待 |
| DefaultHttpService | 通过http方式有设备进行数据上传至网关 |
| DefaultMqttClientService | mqtt协议对接各设备 |
| DefaultModbusService | 内部定时读取数据 |
| DefaultOpcUaService | opc协议读取 |
总结
| 主题 | 消息 | 功能 |
|---|---|---|
v1/gateway/connect | {"device":"1111",type:"sensor"} | 连接/注册设备 |
v1/gateway/telemetry | {"1111":[{ "switch1": 1, "switch2": 1}]} | 上报遥测数据 |
v1/gateway/attributes | {"1111":{"deviceType":"xxx","supplier":"xxx"}} | 上报客户端属性 |