ThingsBoard接入独立的 IoT Gateway服务

首先,ThingsBoard是一个开源的物联网平台,可以快速开发、管理和扩展物联网项目。我们的目标是提供开箱即用的物联网云或本地解决方案,为您的物联网应用程序启用服务器端基础设施。

官网地址:https://thingsboard.io/docs/getting-started-guides/what-is-thingsboard/

源码git地址:https://github.com/thingsboard/thingsboard

从官网我们可以得知,Thingsboard分为单体架构和微服务架构,从git上拉取的项目源码是基于单体架构的。

下面放上Thingsboard的架构图:

 Thingsboard Transport支持MQTT、HTTP、CoAP、SNMP、LwM2M五种协议的设备直接进行交互,而其它协议的设备则需要通过Gateway进行协议转换后以MQTT协议与 Thingsboard Transport交互,下面给出设备通过TCP协议与独立Gateway服务通信然后将数据上报给Thingsboard平台的案例。

1,从git上拉取 Thingsboard源码然后编译部署启动,编译部署的步骤此处略过。

2,从git上拉取 Thingsboard Gateway源码,新版本的Gateway源码是用Python写的,可网上下载python专业的编辑器,也可以跟我一样,直接用IDEA,用IDEA如何编译运行python项目大家可网上查找,文档很多。

 3,用IDEA打开Thingsboard Gateway源码,目录结构如下,建议拉取最新分支源码。

 根据官方文档可知,Gateway提供很多协议的Connector,而TCP的实现是Socket Connector

一,找到thingsboard_gateway/config/socket.json文件

 1,socket.json文件中的address、port定义了gateway的监听的地址,也就是说物理设备的消息需要发送到此处指定的地址(127.0.0.1:50000)然后就会被gateway接收到。

2,devices标签则是物理设备的映射配置,addressFilter定义了设备所在的网络地址,类似于白名单,只有在此处配置的网络地址(127.0.0.1:53000),gateway才会接收消息。

3,deviceName定义了设备映射的名称,此处应与在Thingsboard上创建的设备名称一致。

4,telemetry则定义了物理设备上报到thingsboard平台的遥测数据,key定义的是展示的遥测数据的名称,byteFrom表示从数据的第几个字节开始,byteTo表示从数据的第几个字节结束。

可有多个遥测值。

 5,attributes则是定义设备映射的属性值,逻辑与telemetry相同。

6,attributeRequests部分定义了如何处理从设备发送到网关的属性请求。每个设备可能发送属性请求来查询或获取特定的属性值。这里的配置告诉网关如何解析和处理这些请求。

  type: 指定属性请求的类型,这里为"shared",表示共享属性请求。
  requestExpression: 一个表达式,用于检查接收到的请求数据是否符合特定的模式。在这个例子中,${[0:3]==atr}表示如果接收到的数据的前三个字符是"atr",则匹配此表达式。
  attributeNameExpression: 一个表达式,用于从匹配的请求中提取属性名称。这里"[3:]"表示从第四个字符开始到数据结束的所有内容将被视为属性名称。

7,attributeUpdates部分定义了如何将从设备接收的属性数据编码并发送到ThingsBoard。

8,serverSideRpc部分定义了单个RPC调用的处理规则:

  methodRPC:指定RPC调用的方法名称。在这个例子中,方法是setLevel。这是ThingsBoard在发送RPC请求时使用的名称,网关需要识别并处理这个特定的方法。

  withResponse:指定RPC调用是否期望响应。false表示这个RPC调用是单向的,即ThingsBoard不期望设备或网关对这条命令做出响应。

  methodProcessing:指定处理RPC调用的方法。在这个例子中,write表示网关将直接将接收到的RPC请求写入到连接的设备,而不进行进一步的处理。

二,找到thingsboard_gateway/config/tb_gateway.json文件

 1,host是Thingsboard服务的地址,port是Thingsboard服务transport监听MQTT的端口,注意,不是Thingsboard服务的端口。

2,security中的accessToken需要指定创建的网关设备的访问令牌。

3,在tb_gateway.json文件底部添加connectors,指定socket

 三,thingsboard创建设备

1,上述的配置文件更新好之后,在thingsboard上创建一个网关设备(音频处理器网关),复制其访问令牌,放到accessToken

 2,再创建一个普通设备(Biamp),用于接受遥测数据。

四,自定义读取物理设备的数据

1,由于Thingsboard IoT Gateway的设计不支持主动连接设备,而大部分物理设备也不支持主动发送数据到网关,且很多物理设备的连接是需要私有协议进行协商握手的,因此,只通过Thingsboard IoT Gateway原有的配置并不能实现物理设备数据的上报。

2,自定义代码,通过创建socket连接主动访问物理设备,然后通过指令获取物理设备的数据,然后再将数据进行格式转换后,发送到Thingsboard IoT Gateway监听的TCP地址(127.0.0.1:50000),由于在socket.json文件中需要定义addressFilter,所以我们需要模拟一个客户端(127.0.0.1:53000)将物理设备的数据发送到(127.0.0.1:50000)。后续数据从网关推送到thingsboard平台就不用管了,Thingsboard IoT Gateway已经实现了。

 3,上述示例中,只是简单实现了TCP协议的socket connector,且不同的物理设备有不同的私有协议,示例仅供参考。

posted on 2024-11-11 16:46  MrQuan  阅读(1210)  评论(0)    收藏  举报