源码下载地址: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开发环境搭建,请参考《Thingsboard开发环境搭建及编译项目》,因为Thingsboard Gateway也跟它相关

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

下载源码,git bash命令

git clone https://github.com/guodaxia103/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.-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[WARNING] The POM for org.thingsboard.common:data:jar:2.4.-SNAPSHOT is missing, no dependency information available
[WARNING] The POM for org.thingsboard:netty-mqtt:jar:2.4.-SNAPSHOT is missing, no dependency information available
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.575 s
[INFO] Finished at: --26T13::+:
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project gateway: Could not resolve dependencies for project org.thingsboard:gateway:jar:2.3.-SNAPSHOT: The following artifacts could not be resolved: org.thingsboard.common:data:jar:2.4.-SNAPSHOT, org.thingsboard:netty-mqtt:jar:2.4.-SNAPSHOT: Could not find artifact org.thingsboard.common:data:jar:2.4.-SNAPSHOT -> [Help ]
[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 ] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

错误截图

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

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

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

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

再次尝试编译

等待几分钟最终编译成功

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

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

目前的状态如下

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

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

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

目前的状态如下

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

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

修改配置文件内容

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

#进入到指定的目录
cd target\tb-gateway-windows\tb-gateway #安装网关服务
install.bat #开始网关服务
net start tb-gateway

运行截图

目前的状态如下

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

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

浏览器界面

目前的状态如下

尝试一下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": ,
"ssl": false,
"retryInterval": ,
"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": ,
"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": ,
"valueExpression": "${params}"
},
{
"deviceNameFilter": ".*",
"methodFilter": "no-reply",
"requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
"valueExpression": "${params}"
}
]
}
]
}
}
]

进入到Thingsboard的网关中,查看配置,点击上传

将下载的json配置文件拖动到上传框,并点击上传

可以看到网关的状态为同步状态

查看其中的配置内容,请留意,现在的MQTT服务器是127.0.0.1,端口是1884,使用的就是本机安装mosquitto服务器

MQTTBox(下载地址:http://workswithweb.com/mqttbox.html

创建一个连接,直接连接到本机的mosquitto上

然后在MQTTBox上发布一条消息,点击发送

#主题
sensors
#消息体
{"serialNumber":"SN-001", "model":"T1000", "temperature":36.6}

刷新Thingsboard设备的列表,可以看到多了一个SN-001的设备

并且新加入的设置也是有遥测值的

新设备与网关进行了关联

如果需要设置设备在线或离线状态,需要发送主题sensor/设备编号/connect(离线,需要发送主题sensor/设备编号/disconnect

目前的状态如下

即然本地MQTT Broker是可以的,那么远程的MQTT Broker呢?是否可用呢

在Thingsboard中修改网关的MQTT设置,并保存

再次使用MQTTBox测试

在Thingsboard设备列表中又增加了SN-002的设备,且已经有了遥测值

提醒,这里提醒一下,Thingsboard Gateway需要与Thingsboard配套使用,如果版本不同,则无法进行处理

最终理想的状态

Thingsboard Gateway开发环境的更多相关文章

  1. Thingsboard开发环境搭建及编译项目

    第一部分:JDK 1,下载JDK, JDK地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133 ...

  2. 构建 ARM Linux 4.7.3 嵌入式开发环境 —— U-BOOT 引导 Kernel

    经过若干天的反复测试,搜索.终于成功利用 Qemu 在 u-boot 下引导 ARM Linux 4.7.3 内核.如下详细解释整个构建过程. 准备环境 运行环境:Ubuntu 16.04 需要的虚拟 ...

  3. Linux下配置PHP开发环境

    转载于: http://www.uxtribe.com/php/405.html 该站下有系列PHP文章. 在Linux下搭建PHP环境比Windows下要复杂得多.除了安装Apache,PHP等软件 ...

  4. 一个CentOS7的开发环境部署,包括防火墙|VPN|多IP多网关|HTTP代理服务器设置等

    http://www.lenggirl.com/code/centos7.html layout: post title: "一个CentOS7的开发环境部署,包括防火墙|VPN|HTTP代 ...

  5. Ubuntu12.04 + 虚拟机VMware 9 + Secure CRT + EditPlus 本地C++开发环境搭建

    1.1  软件准备 虚拟机VMware 9 Ubuntu 12.04 Secure CRT EditPlus 1.2  安装VMware 9与Ubuntu 12.04 这两个软件安装,按部就班,这里就 ...

  6. Beaglebone Back学习三(开发环境搭建)

    开发环境搭建 1 Ubuntu环境搭建 2 Window环境搭建 3 开发板环境搭建 1 Ubuntu环境搭建 (1)安装必要的网络工具 samba nfs tftp vmware-tools sam ...

  7. Docker 搭建开发环境

    本文介绍如何将Docker集成到开发环境,自动构建应用,并使容器拥有独立的内网IP为开发人员提供服务. 术语解释 Docker镜像:一个不可修改的"模板",每个代码版本对应一个镜像 ...

  8. 15分钟在笔记本上搭建 Kubernetes + Istio开发环境

    11月13~15日,KubeCon 上海大会召开,云原生是这个秋天最火热的技术.很多同学来问如何上手 Kubernetes和Istio 服务网格开发.本文将帮助你利用Docker CE桌面版,15分钟 ...

  9. Pycharm搭建Django开发环境

    Pycharm搭建Django开发环境 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们大家都知道Django是python都一个web框架,因此大家需要自行安装python环境 ...

随机推荐

  1. uboot使用脚本

    使用mkimage命令 # mkimage -A ARM -O linux -T script -C none -n "script" -d *.sh *.img # tftp x ...

  2. vue环境搭建及创建项目

    安装node环境:node环境下载地址:https://nodejs.org/zh-cn/download/,可根据对应的操作系统版本下载安装 安装完成后查看对应的node和npm版本,如没有出现对应 ...

  3. 小程序 wx.getSystemInfoSync 获取 windowHeight 不准确的问题

    如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. wx.getSystemInfo(OBJECT) 获取系统信息. OBJECT参数说明: 参数 ...

  4. Android笔记(六十四) android中的动画——补间动画(tweened animation)

    补间动画就是只需要定义动画开始和结束的位置,动画中间的变化由系统去补齐. 补间动画由一下四种方式: 1.AplhaAnimation——透明度动画效果 2.ScaleAnimation ——缩放动画效 ...

  5. Spring中抛出异常时,既要要返回错误信息,还要做事务回滚

    情况一:如果没有在程序中手动捕获异常,如下代码事务会回滚 情况二:如果在程序中自已捕获异常未往外抛,如下代码事务不会回滚 如果doDbStuff2()这个操作数据库的方法抛出异常,因为将异常捕获未往外 ...

  6. Debug与Release版本的区别

    Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动.如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来.当 ...

  7. ISCC之msc5他们能在一起吗?

    如题,开始分析,附件是一个二维码,读出来一串base64 拿去解密,PASS{0K_I_L0V3_Y0u!} 提交几次不对, 继续hxd分析图片,最后在文件末尾发现一个txt 修改后缀,是加密的, 拿 ...

  8. linux网络编程之socket编程(二)

    今天继续对socket编程进行研究,这里会真正开如用socket写一个小例子,进入正题: TCP客户/服务器模型:   关于这个模型的流程这里就不多说了,比较容易理解,下面则利用这种模型来编写一个实际 ...

  9. linux学习6 Linux系统组成及初始

    一.linux发行版回顾 1.版本回顾 2.Linux基础 a.CPU架构 32位CPU: X86 64位CPU:X64因为最早的X64位CPU是amd公司生产的所以也叫 amd64(可以兼容X86) ...

  10. 几个方便的基于es 的开源文档索引系统

    Apache Tika 比较有名的内容提取工具 FsCrawler 使用java 开发,内部使用了Tika Ambar nodejs,python应用开发,轻量,支持基于docker 的快速部署,同时 ...