源码下载地址:https://github.com/thingsboard/thingsboard-gateway

国内大神源码地址:https://github.com/guodaxia103/thingsboard-gateway

 

目前在国内有文章写出,Thingsboard Gateway是管理设备使用的,一个Thingsboard Gateway可以管理1000个设备,请参考:https://blog.csdn.net/Zzhou1990/article/details/100106995?tdsourcetag=s_pcqq_aiomsg

Thingsboard Gateway开发环境

 

 

 

 

 

 

 

前提是Thingsboard开发环境搭建,请参考《Thingsboard开发环境搭建及编译项目》,因为Thingsboard Gateway也跟它相关

为了对Thingsboard有个概念,可以参考官方文档:https://thingsboard.io/docs/iot-gateway/what-is-iot-gateway/

Thingsboard Gateway开发环境

 

 

 

下载源码,git bash命令

git clone https://github.com/guodaxia103/thingsboard-gateway

 

Thingsboard Gateway开发环境

 

 

使用管理员身份打开命令行工具,并进入到项目目录

mvn clean install -Dmaven.test.skip=true

出现以下错误

E:\tb\thingsboard-gateway>mvn clean install -Dmaven.test.skip=true
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< org.thingsboard:gateway >-----------------------
[INFO] Building Thingsboard Gateway 2.3.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[WARNING] The POM for org.thingsboard.common:data:jar:2.4.1-SNAPSHOT is missing, no dependency information available
[WARNING] The POM for org.thingsboard:netty-mqtt:jar:2.4.1-SNAPSHOT is missing, no dependency information available
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.575 s
[INFO] Finished at: 2019-09-26T13:35:35+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project gateway: Could not resolve dependencies for project org.thingsboard:gateway:jar:2.3.1-SNAPSHOT: The following artifacts could not be resolved: org.thingsboard.common:data:jar:2.4.1-SNAPSHOT, org.thingsboard:netty-mqtt:jar:2.4.1-SNAPSHOT: Could not find artifact org.thingsboard.common:data:jar:2.4.1-SNAPSHOT -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

错误截图

Thingsboard Gateway开发环境

 

原因是Thingsboard Gateway依赖的Thingsboard的版本不匹配

解决方案参考官方Issue:https://github.com/thingsboard/thingsboard-gateway/issues/26#issuecomment-381832965

首先,我们已经有了Thingsboard的开发环境,查看一下Thingsboard版本,这里是2.3.1

Thingsboard Gateway开发环境

 

修改Thingsboard Gateway源码中的pom.xml文件,记得也修改为2.3.1

Thingsboard Gateway开发环境

 

再次尝试编译

Thingsboard Gateway开发环境

等待几分钟最终编译成功

Thingsboard Gateway开发环境

 

编译成功后,在源码的目录下会生成target文件夹,里面的文件即是打包好的结果

其中tb-gateway-windows.zip是针对Windows平台的安装包

Thingsboard Gateway开发环境

 

目前的状态如下

Thingsboard Gateway开发环境

 

启动Thingsboard(在运行Thingsboard Gateway前,假使你已经知道了Thingsboard平台是如何运行的,也已经正常的编译成功源代码了)

Thingsboard Gateway开发环境

 

使用租户管理员,登陆到系统,并创建一个设备,并指定为网关

Thingsboard Gateway开发环境

 

进入到设备的属性中,将Access Token复制出来备用

Thingsboard Gateway开发环境

 

目前的状态如下

Thingsboard Gateway开发环境

 

Windows尝试安装Thingsboard Gateway,首先解压文件

Thingsboard Gateway开发环境

 

打开Thingsboard Gateway目录下conf配置文件

Thingsboard Gateway开发环境

修改配置文件内容

 Thingsboard Gateway开发环境

 

 就使用刚才编译代码时的管理员身份打开的命令行窗口

#进入到指定的目录
cd target\tb-gateway-windows\tb-gateway

#安装网关服务 
install.bat

#开始网关服务
net start tb-gateway

运行截图

Thingsboard Gateway开发环境

 

目前的状态如下

Thingsboard Gateway开发环境

 

 

进入到Thingsboard,查看网关的最后遥测数据,只要出现以下参数变为0,即Thingsboard Gateway与Thingsboard平台已经连接上了

#All values should be set to “0”(以下三个属性应该都是0)
devicesOnline:0
attributesUploaded:0
telemetryUploaded:0

浏览器界面

Thingsboard Gateway开发环境

 

目前的状态如下

Thingsboard Gateway开发环境

 

尝试一下Thingsboard Gateway的功能先,首先使用最常用的MQTT协议

为了测试,我在本机也搭建了一个mosquitto环境,另外,也修改了mosquitto的端口为1884(找到文件C:\Program Files\mosquitto\mosquitto.conf,找到节点port 1883,将1883修改成1884,并将前面的#删除,重启mosquitto服务让配置生效)

官方参考配置文件地址:https://thingsboard.io/docs/iot-gateway/resources/mqtt-gui-extension-configuration.json

文件内容:

[
  {
    "id": "mqtt",
    "type": "MQTT",
    "configuration": {
      "brokers": [
        {
          "host": "127.0.0.1",
          "port": 1884,
          "ssl": false,
          "retryInterval": 3000,
          "credentials": {
            "type": "anonymous"
          },
          "mapping": [
            {
              "topicFilter": "sensors",
              "converter": {
                "type": "json",
                "filterExpression": "$",
                "deviceNameJsonExpression": "${$.serialNumber}",
                "deviceTypeJsonExpression": "${$.model}",
                "attributes": [
                  {
                    "type": "string",
                    "key": "model",
                    "value": "${$.model}"
                  }
                ],
                "timeseries": [
                  {
                    "type": "double",
                    "key": "temperature",
                    "value": "${$.temperature}"
                  }
                ]
              }
            },
            {
              "topicFilter": "sensor/+/temperature",
              "converter": {
                "type": "json",
                "filterExpression": "$",
                "deviceNameTopicExpression": "(?<=sensor/)(.*?)(?=/temperature)",
                "timeout": 60000,
                "timeseries": [
                  {
                    "type": "double",
                    "key": "temperature",
                    "value": "${$.value}"
                  }
                ]
              }
            }
          ],
          "connectRequests": [
            {
              "topicFilter": "sensors/connect",
              "deviceNameJsonExpression": "${$.serialNumber}"
            },
            {
              "topicFilter": "sensor/+/connect",
              "deviceNameTopicExpression": "(?<=sensor/)(.*?)(?=/connect)"
            }
          ],
          "disconnectRequests": [
            {
              "topicFilter": "sensors/disconnect",
              "deviceNameJsonExpression": "${$.serialNumber}"
            },
            {
              "topicFilter": "sensor/+/disconnect",
              "deviceNameTopicExpression": "(?<=sensor/)(.*?)(?=/disconnect)"
            }
          ],
          "attributeRequests": [
            {
              "topicFilter": "sensors/attributes",
              "deviceNameJsonExpression": "${$.serialNumber}",
              "attributeKeyJsonExpression": "${$.key}",
              "requestIdJsonExpression": "${$.requestId}",
              "clientScope": false,
              "responseTopicExpression": "sensors/${deviceName}/attributes/${responseId}",
              "valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
            },
            {
              "topicFilter": "sensors/+/attributes/+/request/+",
              "deviceNameTopicExpression": "(?<=sensors/)(.*?)(?=/attributes)",
              "attributeKeyTopicExpression": "(?<=attributes/)(.*?)(?=/request)",
              "requestIdTopicExpression": "(?<=request/)(.*?)($)",
              "clientScope": false,
              "responseTopicExpression": "sensors/${deviceName}/attributes/${attributeKey}/response/${requestId}",
              "valueExpression": "${attributeValue}"
            }
          ],
          "attributeUpdates": [
            {
              "deviceNameFilter": ".*",
              "attributeFilter": ".*",
              "topicExpression": "sensor/${deviceName}/${attributeKey}",
              "valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
            }
          ],
          "serverSideRpc": [
            {
              "deviceNameFilter": ".*",
              "methodFilter": "echo",
              "requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
              "responseTopicExpression": "sensor/${deviceName}/response/${methodName}/${requestId}",
              "responseTimeout": 10000,
              "valueExpression": "${params}"
            },
            {
              "deviceNameFilter": ".*",
              "methodFilter": "no-reply",
              "requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
              "valueExpression": "${params}"
            }
          ]
        }
      ]
    }
  }
]
View Code

相关文章:

  • 2021-06-25
  • 2022-12-23
  • 2022-01-27
  • 2022-12-23
  • 2021-10-01
  • 2021-06-18
  • 2022-12-23
  • 2021-12-16
猜你喜欢
  • 2022-12-23
  • 2021-09-18
  • 2021-09-29
  • 2021-11-22
相关资源
相似解决方案