目录
目录 1
 参考资料 3
 文档目的 3
 Thingsboard前言和名词解释 3
第一章 Thingsboard部署到与启动 4
1.1 概述 4
1.1.1 所需环境 5
1.1.2 下载GIT源码 5
1.1.3 源码编译 5
1.1.4 项目调试 6
第二章 项目框架说明 7
2.1 框架整体分析 7
2.2 项目框架说明 8
2.2.1 package包功能描述 9
2.2.2 thingsboard开发主要涉及到的包 11
2.2.3 thingsboard代码类及接口说明 11
2.3 Thingsboard使用的第三方包或插件 13
第三章 thingsboard涉及到的流程图 15
3.1 物联网网关架构 15
3.2 Thingsboard微服务架构 16
3.3 Thingsboard产品架构 16
3.4 Thingsboard规则引擎 18
3.5 ThingsBoard Architecture 19
3.6 Actor模型 20
第四章 ThingsBoard设备连接协议 21
4.1 订阅消息传递协议(MQTT) 21
4.1.1 MQTT概述 22
4.1.2 MQTT模块详情 22
4.2 请求响应模式(CoAP) 24
4.2.1 CoAP概述 25
4.2.2 CoAP模块详情 25
4.3 请求响应模式(HTTP ) 27
4.3.1 HTTP概述 27
4.3.2 HTTP模块详情 28
第五章 TB-Gateway版本安装与说明 29
5.1 安装介绍 29
5.2 配置文件介绍 31
5.3 MQTT连接器配置 31
5.3.1 Broker部分 35
5.3.2 Basic部分 35
5.3.3 映射部分 35
5.3.4 推送数据部分 35
5.3.5 数据转化器 36
5.3.6 服务端发送rpc到设备端 37
第六章 ThingsBoard REST API与模板引擎 37
6.1 REST API 介绍 37
6.2 模板引擎介绍 38

参考资料
1.运行thingsboard服务后,在浏览器地址栏输入:
http://localhost:8080/swagger-ui.html (进入swagger接口说明);
2.https://thingsboard.io/docs/ 官方文档;
3.https://github.com/thingsboard/thingsboard Github地址;
文档目的
编写此文档的目的是让开发人员对thingsboard框架快速的理解。如果是安装部署问题,可以参考:https://www.iotschool.com/docs/tbinstall.html
Thingsboard前言和名词解释
Thingsboard,一个非常强大的开源物联网平台,apache2.0的license,可以直接商用。
• 租户 - 您可以将租户视为独立的业务实体:拥有或生产设备和资产的个人或组织;租户可能有多个租户管理员用户和数百万个客户;
• 客户 - 客户也是一个独立的企业实体,购买或使用租户下的Device、Assets、Organization;客户可能有多个用户以及数百万个Device和Assets;
• 用户 - 用户能够浏览仪表板和管理实体;
• 设备 - 可以通过RPC命令处理Iot设备中的对象遥测数据。例如sensors(传感器), actuators(执行器), switches(开关);
• 资产 - Device与Assets相关联的抽象Iot对象。例如factory(工厂), field(字段), vehicle(车辆);
• 警报 - 提示Device和Assets以及Entity发生的事件;
• 面板 - 通过Dashboards查看数据以及控制指定设备;
• 规则节点 - 通过消怎处理实体生命周期事件的单元;
• 规则链 - 规则节点的逻辑单元;
实体支持如下:
• 属性 - 与实体相关联的静态和半静态键值对。例如序列号,型号,固件版本;
• 遥测数据 - 可用于存储,查询和可视化的时间序列数据点。例如温度,湿度,电池电量;
• 关系 - 与其他实体的定向连接。例如包含,管理,拥有,生产.
设备属性
服务端属性:服务端提交,客户端不可见,例如设备上下线消息
客户端属性:客户端提供,例如传感器软件的固件版本,硬件规格
共享属性:服务端提交,客户端可见
ThingsBoard提供与遥测数据操作相关的API:
• 采集 使用MQTT, CoAP或者HTTP协议采集设备数据。
• 存储 在Cassandra(高效、可扩展、能容错的NoSQL数据库)中存储时序数据。
• 查询 查询最新时序数据值,或查询特定时间段内的所有数据。
• 订阅 使用websockets订阅数据更新(用于可视化或实时分析)。
• 可视化 使用可配置和可配置的小部件以及仪表盘可视化时序数据。
• 过滤和分析 使用灵活的规则引擎过滤和分析数据(/docs/user-guide/rule-engine/)。
• 事件警报 根据采集的数据触发事件警报。
• 数据传输 过规则引擎节点实现与外部数据交互(例如Kafka或RabbitMQ规则节点)。

第一章 Thingsboard部署与启动
1.1 概述
把ThingsBoard源码运行起来,本质上来说没有任何难度只要保证能通过Maven构建工具的命令在本地编译通过即可,其次保证有数据库就可以了,推荐用PostgreSQL做为开发的环境的数据库。此版对针对thingsboard-3.2版本。
1.1.1所需环境
1: ThingsBoard是使用Java 11构建的。可以按照以下说明安装Java 11。
可参考:http://jdk.java.net/archive/
2: PostgreSQL 9+,使用默认端口4532及默认帐号密码postgres/postgres并提前建立thingsboard数据库(这样可以不用修改配置文件)。
3: Maven 3+ (也可用IDEA自带的Maven3,本地仓库见文件settings.xml)。
4: Node.js V14.16.1版本请参考https://nodejs.org/en/download/releases/ 。
5:自行配置Git。
6: IDEA确认配置好本地仓库Maven。
7: IDEA中安装Lombok插件。
8:使用npm命令安装yarn,并验证命令是否生效。
npm install -g yarn
yarn -v
1.1.2下载GIT源码
1:确保git可用,右键Git Bash Here
2:输入git命令克隆源代码git clone https://github.com/thingsboard/thingsboard.git
有时需要外网,根据自身情况也可去gitee进行克隆。
3:进入thingsboard文件夹:cd thingsboard。
4:选择当前需要的版本:git checkout release-3.2。
1.1.3源码编译
1.打包之前,我们需要屏蔽掉LICENSE检测,不然的话会报一连串的错误。
我们切换到拉下来的代码的根目录,编辑pom.xml文件。
2.搜索license-maven-plugin找到plugin,并且注释整个plugin。
3.进入thingsboard目录在命令提示符中运行mvn clean package -DskipTests=true。
4.等待时间有点长大约15-30分钟左右耐心请等待。
5.java编译问题不大,关键是在ui-ngx出错。主要解决方法时,在cmd进入thingsboard\ui-ngx目录,直接运行npm install 安装需要的依赖包。
6.编译成功如图所示:

1.1.4项目调试
1:将项目导入IDEA中,Maven将会自动下载依赖包。
2:导入数据库运行application/src/main/java/org/thingsboard/server/ThingsboardInstallAppliction
上述方法只有管理员的数据库,缺少组合数据库,建议在命令提示符进入application/target/windows运行install.bat文件保证数据库的完整性。
3:运行application/src/main/java/org/thingsboard/server/ThingsboardServerApplication启动项目运行成功如图所示:

4:打开浏览器输入:http://localhost:8080进行访问。

第二章
项目框架说明
2.1 框架整体分析
application: 应用程序主目录,整体项目打包时也是这个Module
src/main/java/org.thingsboard.server: app主目录
actors: actor执行者目录
config: 配置类目录
controller: 控制器
exception: 异常处理
service: 服务目录,app打包后,server要运行的服务的实现都在这里
cluster: 集群服务,包括服务发现、服务实例等
script: 脚本执行服务,主要是规则引擎的执行(JS)
transport: 消息传输服务
rpc: 远程调用服务
utils: 工具类
common: 公共工具集、方法集模块
dao-api: 数据访问对象的服务接口,在这里做定义
data: 用于不同数据库之间的中间数据结构
message: 消息服务的实现集,包括集群消息、TB的基础服务消息、系统类消息
queue: 队列服务的实现集,用的Kafka
transport: 消息传输通道服务的实现,定义公共接口,给客户端的transport层使用
coap: COAP消息传输的实现,包括适配器和客户端
http: HTTP消息传输的实现
mqtt: MQTT消息传输的实现,包括适配器、会话、SSL工具等
util: 工具集(当前仅有一个异步回调工具)
dao: 数据访问对象集合,整个应用的DAO层,一般只要dao的都要data,以实现不同数据库数据结构兼容。
docker: 集群部署-docker容器解决方案,包含了部署环境和shell脚本
haproxy: HAproxy工具的配置文件存放处
tb-node: 应用程序节点配置存放目录
tb-transports: 消息传输服务的配置文件,包括coap,http,mqtt
img: 应用图标存放处
k8s: 容器编排工具Kubernetes的配置文件和自动化脚本
msa: 微服务半自动构建模块,包含了黑盒测试、js执行引擎等
black-box-tests: 黑盒测试工具
js-excutor: js执行引擎,基于nodejs,用于执行规则引擎中的js代码(沙盒执行)
tb: tb主应用程序配置
tb-node: tb程序节点配置
transport: docker中的消息传输服务的部署配置
web-ui: TB的Web用户界面在docker中部署的配置,自带http server
netty-mqtt: TB的MQTT协议的实现,包括连接、发布、订阅、遗嘱、关闭等
rule-engine: TB的规则引擎,TB没有用开源的Drools等工具,而是自己开发了一套规则引擎,主要包含3个组件和1套服务接口
rule-engine-api: 服务接口的实现
rule-engine-components: 规则引擎组件,包含滤波器、动作、数据、脚本、延迟加载、消息、队列、RPC实现、邮件等
tools: 工具模块,主要实现了MQTT with SSL客户端和REST客户端。可以测试用。
transport: 三种消息传输服务启动器,服务的实现参考common/transport,mqtt协议的实现见netty-mqtt
ui-ngx: TB的用户界面,主要使用AngularJS和react组件,单页应用(要替换掉,用Vue)
2.2 项目框架说明
框架包含了11个一级包,其含义如下:
包名 包简说明 描述 涉及到的技术 备注
Application 应用相关 新增thingsboard接口,或后端添加业务查询 可修改
Common 公共部分 thingsboard基础方法 不可修改
Dao 业务层 接口\实现\数据访问层 Data-jpa
注解 可修改
Docker docker部署 打包或虚拟部署 开发无需修改此包,
Img 图片 Logo.png图片 可添加
Msa 分布式 不可修改
Netty-mqtt 协议 开发无需修改此包,
Rule-engine 规则引擎 规则引擎 开发无需修改此包,
Tools 工具类 系统工具类 可修改添加
Transport 应用层实现 三种请求协议 coap,http mqtt,提供使用(不可修改,可自定义协议,系统提供的三种协议) 不可修改
UI 前端界面 后台管理系统界面 Angularjs、ES6、Reactjs、webpack、node 可修改
Log 系统日志 系统错误日志收集器,以年月日展示 Logback 不可修改
2.2.1 package包功能描述
2.2.1.1 Application应用相关类
appaction.main.java.org.thingsboard.server ThingsboardServerApplication.java(启动类)
install thingsboard服务开启相关配置、异常和调用
exception thingsboard响应错误及错误逻辑处理
controller thingsboard页面展示必要的 系统数据 接口
service 为controller提供支持
config 为同源策略、swagger、webSocket、消息及安全配置注册spring bean
2.2.1.2 Common
Data 用于与不同db之间的中间数据结构。
Message 定义不同的消息类型。
Transport 定义一个公共的接口,供与客户端的transport层使用
2.2.1.3 Dao
dao抽象了对不同数据库的统一接口。dao的接口数据一般都data,根据不同的数据库在不同的接口中转换为对应的实体类与数据库交互.通过@ConditionalOnProperty(prefix = “database”, value = “type”, havingValue = “cassandra”)动态注入不同的数据库
2.2.1.4 Docker
系统发布资源类
2.2.1.5 Img
系统图片类
2.2.1.6 Msa
black-box-tests 黑盒测试
js-executor javascript执行器
2.2.1.7 Netty-mqtt
数据交互协议
2.2.1.8 Rule-engine
规则引擎相关代码
2.2.1.9 Tools
系统工具类
2.2.1.10 Transport
http Thingsboard的http传输协议启动类
coap Thingsboard的coap传输协议启动类
mqtt Thingsboard的mqtt传输协议启动类
2.2.1.11 UI
使用到的前端技术: Angularjs、ES6、Reactjs、webpack
前端MVC、MVVM框架
设计到前端打包配置文件:server.js, webpack.*.js
2.2.2 thingsboard开发主要涉及到的包
如需在thingsboard添加新的接口
可参考:Usercontroller.java 类
application
1: Controller
2: dao
3: sql

2.2.3 thingsboard代码类及接口说明
[相关代码类controller说明 , 文档使用了swagger
1: 管理控制器(admin-controller):管理控制器显示
2: 报警控制器(alarm-controller):报警控制器显示
3: 资产控制器(asset-controller):资产控制器显示

4: 审核日志控制器(audit-log-controller):审核日志控制器显示
5: 身份验证控制器(auth-controller):身份验证控制器显示
6: 组件描述符控制器(component-descriptor-controller):组件描述符控制器显示
7: 客户控制器(customer-controller):客户控制器显示
8: 仪表板控制器(dashboard-controller):仪表板控制器显示
9: 设备API控制器(device-api-controller):设备API控制器显示
10: 设备控制器(device-controller):设备控制器显示
11: 实体关系控制器(entity-relation-controller):实体关系控制器显示
12: 实体视图控制器(entity-view-controller):实体视图控制器显示
13: 事件控制器(event-controller):事件控制器显示
14: RPC控制器(rpc-controller):RPC控制器显示
15: 规则链控制器(rule-chain-controller):规则链控制器显示
16: 遥测控制器(telemetry-controller):遥测控制器显示
17: 租户控制器(tenant-controller):租户控制器显示
18: 用户控制器(user-controller):用户控制器显示
19: 控件类型控制器(widget-type-controller):控件类型控制器显示
20: 控件束控制器(widgets-bundle-controller):控件束控制器显示
详情运行thingsbroads开发环境后:输入地址查阅http://localhost:8080/swagger-ui.html
2.3 thingsboard使用的第三方包或插件
包名 作用
Redis2.9.0.jar redis工具包
Snakeyaml.jar 解析yaml
snappy-java.jar Snappy是Google开源的压缩/解压缩库
Js-beautify.jar Einar Lielmanis开发的在线javascript代码格式化工具。Einar在github上开源了这个项目的代码,并加入了格式化html代码的支持。
Testcontainers-1.9.1.jar Testcontainers是一个Golang库,提供一个友好的API来运行Docker容器
Spring-Websocket.jar 浏览器与服务端建立全双工的通信方式,解决http请求-响应带来过多的资源消耗,同时对特殊场景应用提供了全新的实现方式,比如聊天、股票交易、游戏等对对实时性要求较高的行业领域。
Spring-webmvc.jar 关于Spring相关略.
String-data-jpa.jar 数据库访问层,
业务查询sql在thingsboard路径
thingsboard\thingsboard-release-2.3\dao\src\main\java\org\thingsboard\server\dao\sql

实体类与数据表关联:
thingsboard\thingsboard-release-2.3\dao\src\main\java\org\thingsboard\server\dao\model\sql
Lombok.jar Lombok是通过注解的形式帮我们简化java 代码,在项目中使用比如说getter/setter/toString等方法的编写,(idea 或eclipse需要安装 lombox插件)
Postgresql-9.4.2.jar Postgresql数据库对象关系数据库管理系统.
Jbcrypt-0.3m.jar 加解密工具 jBCrypt
Json.jar
Hsqldb.jar (在thingsboard中基本用于thingsboard-demo演示)
HSQLDB是一款Java内置的数据库,非常适合在用于快速的测试和演示的Java程序中,
HSQLDB有三种模式:

  1. Server 就像Mysql那样
  2. In-Process 又叫做 Standalone 模式,数据放在本地文件,伴随JVM一起启动,是HSQLDB的主要应用场景
  3. Memory-only, 仅仅在内存中,一旦重启,数据就消失。
    Rest-5.0.2.jar REST其实是一种组织Web服务的架构,而并不是我们想象的那样是实现Web服务的一种新的技术,更没有要求一定要使用HTTP。其目标是为了创建具有良好扩展性的分布式系统.
    Mqttv3-1.1.0.jar 用于开发mqtt的客户端使用,方便快速搭建mqtt客户端,快速开发实现所需要功能.
    jackson-mapper-asl-1.9.13.jar java对象和json相互转化,有jackson-core-asl、jackson-mapper-asl
    ZooKeeper 3.5.4-beta.jar ZooKeeper是一个分布式的,开源的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户
    xmlbeans-2.6.0.jar XMLBeans是一个XML-Java绑定工具,利用它可以很方便地解析XML文档。
    Tomcat*.jar
    Libthrift-0.9.12.jar thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。
    Struts*.jar struts相关包
    Poi*.jar poi相关jar包  如execl、xlsx、pptx、docx 等文件导入导出等操作。
    kafka-clients.2.0.0.jar kafka消息中间件
    httpcore-nio-4.4.5.jar    HTTP协议实现包, 相关http包
    JOpt Simple 4.6.jar JOpt Simple 是一个简单的、测试驱动的命令行解析器,支持 POSIX getopt() 和 GNU getopt_long()
    json-smart2.0.jar Json-smart 是一个高性能的JSON处理类库
    Log4j-1.2.17.jar
    joda-time-2.3.jar Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time。可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成。
    Joda-Time主要的特点包括:
     1. 易于使用:Calendar让获取"正常的"的日期变得很困难,使它没办法提供简单的方法,而Joda-Time能够 直接进行访问域并且索引值1就是代表January。
     2. 易于扩展:JDK支持多日历系统
    mailapi-1.4.3.jar 发送邮件相关jar包
    javax.annotation-api-1.2.jar 注解,声明,@Resource是做bean的注入使用。 
    annotation注解相关jar包略.
    -swagger-.jar 可以跟据业务代码自动生成相关的api接口文档.
    Aopalliane-10.jar 这个包是AOP联盟的API包,里面包含了针对面向切面的接口。aopalliance.jar作用为通常Spring等其它具备动态织入功能的框架依赖此包.
    Logback-classic-1.2.3.jar log4j项目的后续版本,用于打印error系统日志
    dom4j-1.6.1.jar Dom4j是一个Java的XML API接口,是jdom的进化版,dom4j基本用来读写xml文件,Hibernate也用它来读写配置文件。
    grpc-context-1.12.0.jar grpc是一个高性能、开源和通用的 RPC 框架,远程调用。
    Netty-3.10.5.Final.jar Netty 可自定义通讯协议, 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。
    Akka 用于actor系统实施,集群-均衡负载
    Cassandra 作为可扩展且可靠的数据库,是一个来自 Apache 的分布式数据库,具有高度可扩展性,可用于管理大量的结构化数据。它提供了高可用性,没有单点故障。

第三章 Thingsboard涉及到的流程图
123.1物联网网关架构
对平台来说网关是一个设备:只不过网关的消息体和其他设备不一样,网关监听的是消息代理发送的消息。针对MQTT来说,网关只不过选择性监听了topic,构建了一个映射“map”关系。

网关详情:https://thingsboard.io/docs/iot-gateway/what-is-iot-gateway/
3.2 ThingsBoard微服务架构

thingsboard微服务构架详情:https://thingsboard.io/docs/reference/msa/
3.3 Thingsboard产品架构
设备接入:MQTT、COAP、HTTP
规则引擎:配置设备消息的处理流程
核心服务:设备认证、规则和插件、租户和客户、小组件和仪表盘、告警和事件
服务端API网关:REST API、websockets
Actor模型:主要用于并发
集群模式:Zookeeper用于服务发现,一致性哈希保证消息的扩展性和可用性。
安全:SSL用于HTTP和MQTT
设备认证:Token和X.509
第三方工具:AKKA【Actor】、Zookeeper、gRPC、Cassandra

3.4 Thingsboard规则引擎
规则引擎是基于事件构建的工作流是易于使用的框架。有3个主要组成部分:
Message - 接收任何事件。它可以是来自Device,设备生命周期事件,REST API事件,RPC请求等的传入数据。
Rule Node - 处理消息执行的功能。对接收的节点进行过滤、转换或者执行的能力。
Rule Chain - 关联节点之的连接,接收来自节点的出站消息将其发送至下一个节点。
ThingsBoard规则引擎是一个高度可定制的框架,用于复杂事件的处理。以下是一些可以通过ThingsBoard规则链配置的常见用例:
在保存到数据库之前,对接收的遥测数据或属性进行验证和修改。
将遥测或属性从设备复制到相关资产,以便可以汇总遥测。例如,可以将多个设备中的数据汇总到相关资产(理解为设施更为合适)中。
根据定义的条件对alarms进行创建、更新、清除。
根据设备生命周期事件触发操作。例如,如果设备处于在线/离线状态,则创建警告。
加载所需的其他处理数据。例如,在客户设备或租户属性中定义的设备的负载温度阈值。
触发对外部系统的REST API调用。
发生复杂事件时发送电子邮件,并使用“电子邮件模板”中其他实体的属性。
在事件处理期间要考虑用户的偏好。
根据定义的条件进行RPC调用。
与外部管道(如Kafka,Spark,AWS服务等)集成。
Rule Engine是一个易于使用的框架,用于构建基于事件的工作流。有3个主要组成部分:
1、消息 
任何传入的事件。它可以是来自设备的传入数据,设备生命周期事件,REST API事件,RPC请求等。
2、规则节点 
在传入消息上执行的功能。有许多不同的Node类型可以对传入的Message进行过滤,转换或执行某些操作。
3、规则链 
节点通过关系相互连接,因此来自规则节点的出站消息被发送到下一个连接的规则节点。

规则引擎详情说明: https://thingsboard.io/docs/user-guide/rule-engine-2-0/re-getting-started/
3.5 ThingsBoard Architecture
ThingsBoard旨在跨多个节点分配工作负载,而不会出现单点故障。每个ThingsBoard节点都是相同的,可以处理来自设备和服务器端应用程序的请求
描述图

详情请看:https://thingsboard.io/docs/reference/architecture/
3.6 Actor模型
只要服务端API调用,Actor模型就可以从设备高性能并发处理消息。ThingsBoard使用Akka作为具有以下actor层次结构的actor系统实现。

下面列出了每个actor功能的简要说明:
1:App Actor - 负责管理租户演员。此actor的示例始终存在于内存中。
2:租户演员 - 负责管理租户设备和规则链演员。此actor的实例始终存在于内存中。
3:Device Actor - 维护设备的状态:活动回话,订阅,挂起的RPC命令等。出于性能原因,将当前设备属性缓存在内存中。处理来自设备的第一条消息时,将创建一个actor。当设备在一段时间内没有消息时,actor停止。
4:规则链Actor - 处理传入的消息,将它们保存到队列中并将它们分派给规则节点actor。此actor的实例始终存在于内存中。
5:规则节点Actor - 处理传入消息,并将结果报告给规则链actor。此actor的实例始终存在于内存中。
6:设备会话管理器Actor - 负责管理设备会话actor。在具有相应会话ID的第一条消息上创建会话actor。关闭相应会话时关闭会话actor。
7:Session Actor - 表示设备和ThingsBoard服务器之间的通信会话。会话可以是同步的(HTTP,COAP)和异步的(MQTT,带有Observe选项的COAP)。
8:RPC会话管理器Actor - 负责管理集群RPC会话actor。新服务器启动时创建会话actor。服务器关闭时关闭会话actor。
9:RPC Session Actor - 表示集群模式下2个ThingsBoard服务器之间的通信会话。使用基于gPRC的HTTP/2进行通信。
第四章 ThingsBoard设备连接协议
4.1 订阅消息传递协议(MQTT)
MQTT是一种轻量级的发布 - 订阅消息传递协议,可能使其最适合各种物联网设备。您可以在此处找到有关MQTT的更多信息。
ThingsBoard服务器节点充当MQTT Broker,支持QoS级别0(最多一次)和1(至少一次)以及一组预定义主题。
请求时返回错误代码:
用户名发送MQTT CONNECT消息,返回的错误代码:
0x00已连接 - 已成功连接到ThingsBoard MQTT服务器。
0x04连接被拒绝,用户名或密码错误 - 用户名为空。
0x05连接被拒绝,未经授权 - 用户名包含无效的$ ACCESS_TOKEN。
消息传递格式详情链接参照官网链接:https://thingsboard.io/docs/reference/mqtt-api/
4.1.1 MQTT概述
MQTT是一种轻量级的发布-订阅消息传递协议,它可能最适合各种物联网设备。ThingsBoard服务器节点充当支持QoS级别0(最多一次)和QoS级别1(至少一次)以及一组预定义主题的MQTT主题。ThingsBoard基于MQTT协议提供给设备的API是非常"灵活"的。例如,目前提供了四种API:
1.遥测数据上传API
2.属性API
3.RPC API
4.声明设备所有权API
用上述四种的API,用户可以动态调整设备监控属性,例如原先采集设备的温度,湿度及材料大小调整为温度,湿度和材料是否合格;并可以获取设备历史遥测数据和最新遥测数据;通过RPC API, 设备和服务器可以实时获取对方相应属性的变化和通过API用户可以对设备进行转让,租赁和回收操作。
4.1.2 MQTT模块详情
4.1.2.1 MQTT Transport Service
org.thingsboard.server.mqtt.ThingsboardMqttTransportApplication,MQTT服务启动类,使用SpringBoot启动类,通过加载模块和配置文件,对服务进行配置并运行。

第2-3行代码中,@EnableAsync注解使用来开启异步线程,@EnableScheduling注解使用来开启定时任务。

第4行代码@ComponentScan({“org.thingsboard.server.mqtt”, “org.thingsboard.server.common”, “org.thingsboard.server.transport.mqtt”, “org.thingsboard.server.kafka”}): 扫描这些包下的所有使用@Component 的类,不管自动导入还是导出。

第7-8行代码和updateArguments的作用是:启动时,使用 --spring.config.name = tb-mqtt-transport, 指定配置名,包括但不仅限于tb-mqtt-transport.conf等文件。
4.1.2.2 MQTT Transport Common
Thingsboard的Mqtt协议逻辑实现是通过Netty实现的,Netty是一个NIO客户端、服务器框架,可以快速轻松地开发网络应用程序,例如协议服务器和客户端。它极大地简化和简化了网络编程,例如TCP和UDP套接字服务器。

模块目录
└── common
└── transport
└── mqtt
├── MqttSslHandlerProvider.java Mqtt Ssl逻辑处理提供类
├── MqttTopics.java Mqtt预定义主题
├── MqttTransportContext.java Mqtt传输协议上下文
├── MqttTransportHandler.java Mqttt传输协议逻辑处理类
├── MqttTransportServerInitializer.java Mqtt传输协议初始化类
├── MqttTransportService.java Mqtt传输协议启动类
├── adaptors
│ ├── JsonMqttAdaptor.java Mqtt传输内容Json适配器
│ └── MqttTransportAdaptor.java Mqtt协议传输适配器
├── session
│ ├── DeviceSessionCtx.java 设备会话上下文
│ ├── GatewayDeviceSessionCtx.java 网关设备会话上下文
│ ├── GatewaySessionHandler.java 网关会话处理类
│ ├── MqttDeviceAwareSessionContext.java Mqtt设备会话上下文
│ └── MqttTopicMatcher.java Mqtt主题匹配器
└── util
└── SslUtil.java Ssl工具类
参数配置
transport:
# 本地MQTT传输参数
mqtt:
# 开启/关闭mqtt传输协议.
enabled: “MQTTENABLED:true"bindaddress:"{MQTT_ENABLED:true}" bind_address: "MQTTE​NABLED:true"binda​ddress:"{MQTT_BIND_ADDRESS:0.0.0.0}”
bind_port: “MQTTBINDPORT:1883"timeout:"{MQTT_BIND_PORT:1883}" timeout: "MQTTB​INDP​ORT:1883"timeout:"{MQTT_TIMEOUT:10000}”
netty:
leak_detector_level: “NETTYLEAKDETECTORLVL:DISABLED"bossgroupthreadcount:"{NETTY_LEAK_DETECTOR_LVL:DISABLED}" boss_group_thread_count: "NETTYL​EAKD​ETECTORL​VL:DISABLED"bossg​roupt​hreadc​ount:"{NETTY_BOSS_GROUP_THREADS:1}”
worker_group_thread_count: “NETTYWORKERGROUPTHREADS:12"maxpayloadsize:"{NETTY_WORKER_GROUP_THREADS:12}" max_payload_size: "NETTYW​ORKERG​ROUPT​HREADS:12"maxp​ayloads​ize:"{NETTY_MAX_PAYLOAD_SIZE:65536}”
so_keep_alive: “KaTeX parse error: Expected 'EOF', got '#' at position 33: …VE:false}" #̲ MQTT SSL配置 …{MQTT_SSL_ENABLED:false}”
protocol: “KaTeX parse error: Expected 'EOF', got '#' at position 36: …LSv1.2}" #̲ Path to the ke…{MQTT_SSL_KEY_STORE:mqttserver.jks}”
# Password used to access the key store
key_store_password: “KaTeX parse error: Expected 'EOF', got '#' at position 57: …ssword}" #̲ Password used …{MQTT_SSL_KEY_PASSWORD:server_key_password}”
# Type of the key store
key_store_type: “${MQTT_SSL_KEY_STORE_TYPE:JKS}”
参数 参数名称 参数值
transport.mqtt.bind_address 绑定地址 0.0.0.0
transport.mqtt.bind_port 绑定端口 1883
transport.mqtt.netty.leak_detector_level 内存检测级别 DISABLED
transport.mqtt.netty.boss_group_thread_count boss线程组线程数 1
transport.mqtt.netty.worker_group_thread_count work线程组线程数 12
transport.mqtt.netty.so_keep_alive 心跳检测 false

4.2请求响应模式(CoAP)
CoAP是用于受限设备的轻量级物联网协议,CoAP协议基于UDP,但与HTTP类似,它使用请求 - 响应模型。CoAP观察选项允许订阅资源并接收有关资源更改的通知。
ThingsBoard服务器节点充当CoAP服务器,支持常规和观察请求。
请求时返回错误代码:
请求中,可能的错误代码及其原因:
4.00错误请求 - 无效的URL,请求参数或正文。
4.01未经授权 - $ ACCESS_TOKEN无效。
4.04未找到 - 未找到资源
消息传递格式详情链接参照官网链接:https://thingsboard.io/docs/reference/coap-api/
4.2.1 CoAP概述
Constrained Application Protocol(CoAP)是用于受约束设备的专用Internet应用程序协议,如RFC 7275所定义。它使那些称为“节点”的受约束设备能够使用类似协议与更广泛的Internet通信。CoAP被设计用于在相同约束网络(例如,低功率,有损网络)上的设备之间,设备与Internet上的一般节点之间以及在都通过Internet连接的不同约束网络上的设备之间使用。CoAP也正在通过其他机制使用,例如移动通信网络上的SMS。

4.2.2 CoAP模块详情
4.2.2.1 CoAP Transport Service
org.thingsboard.server.coap.ThingsboardCoapTransportApplication, CoAP服务启动类,使用SpringBoot启动类,通过加载模块和配置文件,对服务进行配置并运行。

第2-3行代码中,@EnableAsync注解使用来开启异步线程,@EnableScheduling注解使用来开启定时任务。
第4行代码@ComponentScan({“org.thingsboard.server.coap”, “org.thingsboard.server.common”, “org.thingsboard.server.transport.coap”, “org.thingsboard.server.queue”}): 扫描这些包下的所有使用@Component 的类,不管自动导入还是导出。
第7-8行代码和updateArguments的作用是:启动时,使用 –spring.config.name = tb-mqtt-transport, 指定配置名,包括但不仅限于tb-mqtt-transport.conf等文件。
4.1.2.2 CoAP Transport Common
Californium是一个强大的CoAP框架,目标是后端服务与小型物联网设备进行通信,当然大型物联网设备也适宜。它为RESTful Web服务提供了一个更方便的API,支持CoAP的所有特性。
参数配置:
transport:
# 本地CoAP传输协议参数
coap:
# 开启/关闭CoAP传输协议.
enabled: “KaTeX parse error: Expected 'EOF', got '#' at position 26: …LED:true}" #̲ 绑定地址 bind_…{COAP_BIND_ADDRESS:0.0.0.0}”
# 绑定端口号
bind_port: “KaTeX parse error: Expected 'EOF', got '#' at position 28: …ORT:5683}" #̲ 超时时间 timeout: …{COAP_TIMEOUT:10000}”

模块目录:
└── common
└── transport
└── coap
├── CoapTransportContext.java CoAP传输协议上下文
├── CoapTransportResource.java CoAP传输协议资源类
├── CoapTransportService.java CoAP传输协议启动类
├── adaptors
│ ├── CoapTransportAdaptor.java CoAP协议传输适配器
│ └── JsonCoapAdaptor.java CoAP传输内容Json适配器
└── client
└── DeviceEmulator.java 设备仿真器

4.3请求响应模式(HTTP )
HTTP是可用于IoT应用程序的通用网络协议,HTTP协议是基于TCP的,并使用请求 - 响应模型。ThingsBoard服务器节点充当支持HTTP和HTTPS协议的HTTP服务器。
请求时返回错误代码:
应用程序需要在每个HTTP请求可能的错误代码及其原因:
400 Bad Request - 无效的URL,请求参数或正文。
401 Unauthorized - $ ACCESS_TOKEN无效。
404找不到资源。
消息传递格式详情链接参照官网链接:https://thingsboard.io/docs/reference/mqtt-api/
4.3.1 HTTP概述
HTTP是一个客户端(用户)和服务端(网站)之间请求和应答的标准,通常使用TCP协议。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道。
尽管TCP/IP协议是互联网上最流行的应用,但是在HTTP协议中并没有规定它必须使用或它支持的层。事实上HTTP可以在任何互联网协议或其他网络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用,所以其在TCP/IP协议族使用TCP作为其传输层。
通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息
HTTP是可用于IoT应用程序的通用网络协议。您可以在此处找到有关HTTP的更多信息。HTTP协议是基于TCP的,并使用请求 - 响应模型。当然它的缺点也极为明显,HTTP对于嵌入式设备来说太重了,也不灵活。

4.3.2 HTTP模块详情
4.3.2.1 HTTP Transport Service
org.thingsboard.server.http.ThingsboardHttpTransportApplication, HTTP服务启动类, 使用SpringBoot启动类,通过加载模块和配置文件,对服务进行配置并运行。

4.3.2.1 HTTP Transport Common
Thingsboard的HTTP设备传输协议是基于Spring Boot。
Spring Boot 是 Spring 的子项目,正如其名字,提供 Spring 的引导( Boot )的功能。
通过 Spring Boot ,我们开发者可以快速配置 Spring 项目,引入各种 Spring MVC、Spring Transaction、Spring AOP、MyBatis 等等框架,而无需不断重复编写繁重的 Spring 配置,降低了 Spring 的使用成本。
Spring Boot 提供了各种 Starter 启动器,提供标准化的默认配置。例如:
• spring-boot-starter-web 启动器,可以快速配置 Spring MVC 。
• mybatis-spring-boot-starter 启动器,可以快速配置 MyBatis 。
并且,Spring Boot 基本已经一统 Java 项目的开发,大量的开源项目都实现了其的 Starter 启动器。例如:
• incubator-dubbo-spring-boot-project 启动器,可以快速配置 Dubbo 。
• rocketmq-spring-boot-starter 启动器,可以快速配置 RocketMQ 。
项目结构:
└── common
└── transport
└── http
├── DeviceApiController.java //设备API接口类
└── HttpTransportContext.java //设备HTTP传输协议上下文类

第五章 TB-Gateway版本安装与说明
  网关代理(Gateway Proxy )是代理服务器的一种,他只针对网关提供代理服务,它是对URL从一个万维网浏览器例如Mosaic到一个外部服务器和返回结果传递一个请求的系统。
代理和网关的区别: 代理服务器就你通过它来上网的服务器,可以帮你连接到Internet上。
   网关就是你要访问另一个网络时,首先需要访问的网络节点。比喻你有两个不同的内网,在A网中要访问B网,则首先需要访问网关,由它那里路由转发。
    所以,代理服务器可以说是一个网关,但网关并不一定是代理服务器。
thingsboard与tb-gateway的关系在thingsboard(以下简称TB)中,TB中创建的设备和网关,为虚拟的,不是现实中的真实设备和网关。所以,需要与现实设备或者网关连接时,我们需要用代理来连接虚拟与现实的设备和网关。这里tb-gateway就起到了这个作用。
5.1 安装介绍
Thingsboard IoT Gateway是一个开源解决方案,可让您使用Thingsboard集成连接到旧系统和第三方系统的设备。Thingsboard是用于数据收集,处理,可视化和设备管理的开源物联网平台。
1.Windows 上安装Python 3版本
进入官网下载Python(3版本) https://www.python.org/ 根据自己的情况确定自己的版本。

记得选中添加Python环境,如图所示。

安装完成使用python命令进行测试,出来下图效果说明安装成功

2.从Github上克隆源码

运行命令:git clone https://github.com/thingsboard/thingsboard-gateway.git

3.进入下载目录

运行此命令:cd thingsboard-gateway

4.使用setup.py 脚本安装python模块

运行此命令:python3 setup.py install

5.创建日志文件夹

运行此命令:mkdir logs

6.运行网关,检查安装结果

运行此命令python ./thingsboard_gateway/tb_gateway.py

5.2 配置文件介绍
tb_gateway.yaml -网关主配置文件
logs.conf - 日志配置文件
modbus.json - MODBUS 配置文档
mqtt.json - MQTT 配置文档
ble.json - BLE 配置文档
opcua.json - OPC-UA 配置文档
5.3 MQTT连接器配置
连接器配置文件:mqtt.json
连接器配置是一个 JSON文件,其中包含有关如何连接到外部 MQTT 代理,订阅数据馈送时使用哪些主题以及如何处理数据的信息。让我们使用以下示例来查看配置文件的格式。 MQTT 连接器配置文件示例。连接器将使用用户名和密码使用基本的 MQTT 身份验证。然后,连接器将使用“映射” 部分中的主题过滤器订阅主题列表。以下是mqtt.json源码
{
“broker”: {
“name”:“Default Local Broker”,
“host”:“127.0.0.1”,
“port”:1884,
“clientId”: “ThingsBoard_gateway”,
“security”: {
“type”: “basic”,
“username”: “admin”,
“password”: “public”
}
},
“mapping”: [
{
“topicFilter”: “/sensor/data”,
“converter”: {
“type”: “json”,
“deviceNameJsonExpression”: “serialNumber","deviceTypeJsonExpression":"{serialNumber}", "deviceTypeJsonExpression": "serialNumber","deviceTypeJsonExpression":"{sensorType}”,
“timeout”: 60000,
“attributes”: [
{
“type”: “string”,
“key”: “model”,
“value”: “KaTeX parse error: Expected 'EOF', got '}' at position 26: …el}" }̲, { …{sensorModel}”,
“value”: “on”
}
],
“timeseries”: [
{
“type”: “double”,
“key”: “temperature”,
“value”: “KaTeX parse error: Expected 'EOF', got '}' at position 19: …mp}" }̲, { …{hum}”
}
]
}
},
{
“topicFilter”: “/sensor/+/data”,
“converter”: {
“type”: “json”,
“deviceNameTopicExpression”: “(?<=sensor/)(.?)(?=/data)",
“deviceTypeTopicExpression”: “Thermometer”,
“timeout”: 60000,
“attributes”: [
{
“type”: “string”,
“key”: “model”,
“value”: “KaTeX parse error: Expected 'EOF', got '}' at position 26: …el}" }̲ ], …{temp}”
},
{
“type”: “double”,
“key”: “humidity”,
“value”: “KaTeX parse error: Expected 'EOF', got '}' at position 18: …um}" }̲ ] …{SerialNumber}”
},
{
“topicFilter”: “sensor/+/connect”,
“deviceNameTopicExpression”: "(?<=sensor/)(.
?)(?=/connect)”
}
],
“disconnectRequests”: [
{
“topicFilter”: “sensor/disconnect”,
“deviceNameJsonExpression”: “KaTeX parse error: Expected 'EOF', got '}' at position 21: …alNumber}" }̲, { "…{deviceName}/KaTeX parse error: Can't use function '\"' in math mode at position 45: …Expression": "{\̲"̲{attributeKey}”:"KaTeX parse error: Can't use function '\"' in math mode at position 17: …attributeValue}\̲"̲}" } ], …{deviceName}/request/methodName/{methodName}/methodName/{requestId}",
“responseTopicExpression”: “sensor/deviceName/response/{deviceName}/response/deviceName/response/{methodName}/requestId","responseTimeout":10000,"valueExpression":"{requestId}", "responseTimeout": 10000, "valueExpression": "requestId","responseTimeout":10000,"valueExpression":"{params}”
},
{
“deviceNameFilter”: “.*”,
“methodFilter”: “no-reply”,
“requestTopicExpression”: “sensor/deviceName/request/{deviceName}/request/deviceName/request/{methodName}/requestId","valueExpression":"{requestId}", "valueExpression": "requestId","valueExpression":"{params}”
}
]
}

5.3.1 Broker部分
参数 默认值 描述
Name Default Broker 自定义名称
Host Localhost Mqtt broker 域名或IP
Port 1883 Mqtt port 端口号
5.3.2 Basic部分
参数 默认值 描述
Type Basic 授权类型
Username Username 用户名
Password Password 密码
5.3.3映射部分
参数 默认值 描述
主题过滤 /sensor/data 网关订阅的主题
5.3.4推送数据部分
主题 主题过滤器 数据包 备注
/sensor/data /sensor/data {“serialNumber
”: “SN-001 ”,
“sensorType ”: “Thermometer
”,
“sensorModel
”: “T1000 ”, “temp ”:
42, “hum ”: 58} 设备名称作为数据包的一部分。

/sensor/SN-001/data /sensor/+/data { “sensorType
”: “Thermometer
”,
“sensorModel
”: “T1000 ”, “temp ”:
42, “hum ”: 58}
设备名称作为主题一部分。

5.3.5数据转化器
参数 默认值 描述
Type Json 提供给转换器的数据格式

deviceNameJsonExpression ${serialNumber} 从 json 数据包中提取key 为
serialNumber 的值,作为设备名称

deviceTypeJsonExpression ${sensorType} 从 json 数据包中提取 key 为 sensorType 的值,作为设备类型

timeout 60000 “设备断开连接”事件超时时间
attributes 设备属性
… type string 属性数据类型
… key model 属性名称
… value ${sensorModel} 从 json 数据包中提取 key为sensorModel 的值,作为属性值
timeseries 时序数据
… type double 时序数据的数据类型
… key temperature 时序数据的 key
… value ${temp} 从 json 数据包中提取key为temp 的值,作为时序值

5.3.6服务端发送rpc到设备端
参数 默认值 描述
设备名称过滤表达式 * 正则表达式, 用于标识设备名称
请求主题表达式 sensor/deviceName/request/{deviceName}/request/deviceName/request/
{methodName}/requestIdJSON−PATH表达式,用于创建主题用以发送RPC请求。响应主题表达式sensor/{requestId} JSON-PATH 表达式,用于创建主题用以发送 RPC 请求。 响应主题表达式 sensor/requestIdJSON−PATH表达式,用于创建主题用以发送RPC请求。响应主题表达式sensor/{deviceName}/response
/methodName/{methodName}/methodName/{requestId} JSON-PATH 表达式, 用于创建
主题用以订阅响应消息。
responseTimeout
10000
响应延时时间(以毫秒为单位),如果发送请求后在此期间内没有响应,则网关将从响应主题中取消订阅。
方法名过滤器 echo 正则表达式方法名筛选器,
用于确定要执行的函数。
valueExpression ${params} JSON-PATH 表达式, 用于创建
发送到代理的数据。

第六章 ThingsBoard REST API
6.1REST API介绍
Thingsboard做为一个多租户的物联网平台,文档也很齐全。后端使用的是java语言编写的,可以用swagger来导出文档。tb的所有服务都可以通过接口来看到。接口文档的swagger的文档访问地址就是 http://localhost:8080/swagger-ui.html#/ 打开swagger文档之后,你会看到tb所有的接口,以下是26个模块介绍:

1 admin-controller : Admin Controller 管理员接口
2 alarm-controller : Alarm Controller 告警模块接口
3 asset-controller : Asset Controller 资产接口
4 audit-log-controller : Audit Log Controller 审核日志接口
5 auth-controller : Auth Controller 授权接口
6 component-descriptor-controller : Component Descriptor Controller 组件描述接口
7 customer-controller : Customer Controller 客户接口
8 dashboard-controller : Dashboard Controller 面板接口
9 device-api-controller : Device Api Controller 设备API接口
10 device-controller : Device Controller 设备接口
11 device-profile-controller : Device Profile Controller 设备简要接口
12 entity-query-controller : Entity Query Controller 实体查询接口
13 entity-relation-controller : Entity Relation Controller 实体关联接口
14 entity-view-controller : Entity View Controller 实体视图接口
15 event-controller : Event Controller 事件接口
16 o-auth-2-config-template-controller : O Auth 2 Config Template Controller OAuth2.0配置模块接口
17 o-auth-2-controller : O Auth 2 Controller OAuth2接口
18 queue-controller : Queue Controller 队列接口
19 rpc-controller : Rpc Controller rpc接口
20 rule-chain-controller : Rule Chain Controller 规则链接口
21 telemetry-controller : Telemetry Controller 遥测接口
22 tenant-controller : Tenant Controller 租户接口
23 tenant-profile-controller : Tenant Profile Controller 租户简介接口
24 user-controller : User Controller 用户接口
25 widget-type-controller : Widget Type Controller 部件类型接口
26 widgets-bundle-controller : Widgets Bundle Controller 部件构建接口
6.2模板引擎介绍
规则引擎是一个事件处理系统。能对由设备和资产上传的消息进行 filter, enrich, transform 处理并触发不同的动作,如 notification与外部系统交互等。
6.2.1规则结点类型
筛选器结点 Filter Nodes 用于消息过滤和路由。
增强结点 Enrichment Nodes 用于更新消息的 metadata。
变换结点 Transformation Nodes 用于变换消息中的信息项,如 Originator, Type, Payload, Metadata。
动作结点 Action Nodes 基于传入消息执行各种动作。
外部结点 External Nodes 用于和外部系统交互。
6.2.1.1筛选器结点
1.Check alarm status 检查告警状态节点
如果警报状态匹配指定的警报-消息成功-如果警报不匹配-消息失败。

2.Check existence fields 检查存在字段节点
从消息数据和元数据中检查所选键的存在。如果选中了复选框“检查是否所有选中的键都存在”,并且消息数据和元数据中的所有键都存在,则通过True链发送消息,否则使用False链。否则,如果未选中此复选框,并且其中至少一个消息的数据或元数据中存在密钥-通过True链发送消息,否则,使用False链。

3.Check relation 检查关系
如果“检查单个实体”设置为true,则按类型和方向检查从所选实体到消息的始发者的关系,否则规则节点将按类型和方向检查是否存在与消息的始发者的任何关系。如果存在至少一种关系-通过True链发送消息,否则使用False链。

4.GPS geofencing filter
gps地理围栏过滤器,通过基于GPS的地理围栏过滤传入消息,从传入消息中提取纬度和经度参数,如果它们在已配置的周界范围内,则返回“ True”,否则返回“ False”。

5.Message Type 检测消息类型
按邮件类型过滤传入的邮件,如果期望传入的MessageType通过True链发送消息,否则使用False链。

6.Message Type Switch 信息类型开关
根据消息类型路由到指定路径,未指定类型路径的消息路由到 Other 路径。

  1. Originator Type 发起者类型
    检测输入消息中消息发起者的实体类型值,如果类型在结点中指定的类型中,则消息从 True 路流出,否则从 False 路流出。

8.Originator Type Switch 发起方类型开关
根据消息发起者的实体类型路由到指定路径。

9.Script 脚本
使用JS脚本过滤传入消息,使用已配置的JS条件评估传入的消息。如果真-通过发送短信真链,否则假链used.Message有效载荷可以通过以下方式访问msg属性。例如,msg.temperature < 10;可以通过metadata属性访问消息元数据。例如,metadata.customerName === ‘John’;可以通过msgType属性访问消息类型。

10.Switch 转换
将传入消息路由到一个或多个输出链,节点执行已配置的JS脚本。脚本应返回下一个链名称的数组,该链应将消息路由到该处。如果数组为空-消息未路由到下一个节点。消息有效负载可以通过msg属性访问。例如,msg.temperature < 10;可以通过metadata属性访问消息元数据。例如,metadata.customerName === ‘John’;可以通过msgType属性访问消息类型。
6.2.1.2属性集结点
1.Calculate delta 计算增量
根据传入和先前的值计算“增量”值并将其添加到消息中, 根据先前的时间序列读数和当前数据计算增量和周期。增量计算是在消息发起方的范围内完成的,例如设备,资产或客户。如果有输入键,则除非delta为负且设置了相应的配置参数,否则输出关系将为“成功”。如果传入消息中没有输入值键,则输出关系将为“其他”。

2.Customer attributes 客户实体属性
找到输入消息发起者实体所属的客户实体,将该客户实体的属性值增加到消息的 metadata 中。可配置源属性名和目标属性名。如果选中 Latest Telemetry,则将客户实体中最新遥测数据中的值添加到消息的 metadata 中,否则添加客户的服务端属性(server scope)。
消息发起者实体类型必须为 Customer, User, Asset, Device,因为只有它们都有所属客户实体,如果不是,则路由到 Failure 路径。

3.Customer details 客户实体数据库字段
将客户详细信息中的字段添加到邮件正文或元数据中,如果选中了复选框:将选定的详细信息添加到消息元数据,则现有字段将添加到消息元数据中,而不是消息数据中。如果消息的始发者未分配给客户,或者不支持始发者类型-消息将转发到失败链,否则,将使用成功链。

4.Originator attributes 消息发起者实体属性
将消息始发者属性或最新遥测添加到消息元数据中,如果配置了属性扩充,则将CLIENT / SHARED / SERVER属性添加到具有特定前缀cs / shared / ss的消息元数据中。最新的遥测值添加到不带前缀的元数据中。要访问其他节点中的那些属性,可以使用此模板metadata.cs_temperature或metadata.shared_limit。

5.Originator fields 消息发起者字段
将消息发起者实体的字段值添加到 metadata,结点中可以配置字段名映射信息。消息发起者实体类型必须为 Tenant, Customer, User, Asset, Device, Alarm, Rule Chain,否则会路由到 Failure 路径。

6.Originator telemetry 消息发起者遥测
类似 Customer attributes 结点,将消息发起者所属租房的属性或最新遥测数据到 metadata。

7.Related attributes 关联实体属性
是 Device attributes 结点的通用版本,通过 Relations query 定义关联实体查询方式。

8.Related device attributes 相关设备属性
将发起者相关设备属性和最新遥测值添加到消息元数据中,如果配置了属性扩充,则将CLIENT / SHARED / SERVER属性添加到具有特定前缀cs / shared / ss的消息元数据中。最新的遥测值添加到不带前缀的元数据中。要访问其他节点中的那些属性,可以使用此模板metadata.cs_temperature或metadata.shared_limit。

9.Tenant attributes 租户属性
将发起方租户属性或最新遥测添加到消息元数据中,如果配置了属性扩充,则将服务器作用域属性添加到消息元数据中。如果配置了“最新遥测”扩充,则将最新遥测添加到元数据中。要访问其他节点中的那些属性,可以使用此模板metadata.temperature。

10.Tenant details 租户详细信息
将“租户”详细信息中的字段添加到邮件正文或元数据中,如果选中了复选框:将选定的详细信息添加到消息元数据,则现有字段将添加到消息元数据中,而不是消息数据中。如果消息的始发者未分配给承租人,或者不支持始发者类型-消息将转发到失败链,否则,将使用成功链。
6.2.1.3变换结点
1.Change originator 变换消息发起者
输入消息中有一个 originator 字段用来表示消息的发起者实体。该结点能将 originator 值修改为消息发起者实体所属的客户或租户实体,或其关联的其它实体。查询关联实体要配置 Relation Query,具体和 related attributes 增强结点中的配置类似。使用情景:若设备上传遥测数据,此时消息的发起者为该设备实体,通过修改为设备实体的租户实体,则之后该遥测数据则被归结到该租户。

2.Script 脚本变换
使用JavaScript更改消息有效负载,元数据或消息类型,JavaScript函数接收3个输入参数metadata-是消息元数据。msg-是消息有效负载。msgType-是消息类型。
应该返回以下结构:结果对象中的所有字段都是可选的,如果未指定,则将从原始消息中获取。{ msg: new payload,
   metadata: new metadata,
   msgType: new msgType }

3.To Email
将消息转换为电子邮件,通过使用从消息元数据派生的值填充电子邮件字段,将消息转换为电子邮件消息。设置“ SEND_EMAIL”输出消息类型。
6.2.1.4动作结点
1.Acknowledge
确认传入的消息,确认后,消息将被推送到相关的规则节点。如果您不关心接下来如何处理此消息,则很有用。

2.assign to customer
将消息发起者实体分配给客户通过客户名称模式查找目标客户,然后将发起者实体分配给该客户。如果不存在,将创建新客户,并将“如果不存在,则创建新客户”设置为true。

3.Checkpoint
将邮件传输到另一个队列,传输成功后,将自动确认传入的消息。队列名称是可配置的。

4.Clear Alarm
详细信息-基于传入消息创建JSON对象的JS函数。该对象将被添加到Alarm.details字段中。节点输出:告警未清除,返回原始信息。否则,返回的新消息类型为“ALARM”," msg”属性和“ metadata”中的“警报”对象将包含“ isClearedAlarm”属性。消息有效负载可以通过msg属性访问。举个例子’temperature = ’ + msg.temperature ;。消息元数据可以通过metadata属性访问。举个例子’name = ’ + metadata.customerName;。

5.copy to view
将属性从资产/设备复制到实体视图,并将消息始发者更改为相关实体视图。

6.Generator Node 消息生成器结点
结点中可配置生成消息的个数,时间间隔,消息发起者,并定义一个返回消息体的 javascript 函数

7.Log  日志结点
定义一个 javascript 函数,将消息转换成一个字串,并写入日志。写入的 LOG Level 是 INFO。

7. RPC Call Reply RPC 调用应答结点
该结点向 RPC 调用者,即消息发起者 originator 发送 RPC 应答。由于 RPC 调用者必须是设备实体,因此消息发起者也必须是设备实体。设备端发起的 RPC 请求会作为消息流转过各规则链进行处理,消息 metadata 中都有 request ID 相关的字段,用来匹配请求和应答消息。结点中可配置 metadata 中 request ID 字段映射名,默认为 requestId。结点基于 requestId, originator, 输入消息中的数据,创建应答包向设备发送应答。有以下情况,结点处理后的消息会路由到 Failure 路径:输入消息的发起者不是设备实体,消息 metadata 中没有 request ID 数据,消息数据为空。

8.RPC Call Request向设备发送 RPC 请求结点
向设备(即该消息的发起者)发送 RPC 请求,等待应答,并将应答作为输出消息,路由到下一个结点。结点中可配置等待超时时间 timeout。

6.2.1.5外部结点
实现与外部系统交互。结点的输出消息的 metadata 中会包含外部系统应答消息中的一个关键字段,原输入消息的数据原样复制到输出消息中。

  1. AWS SNS Node
    发布消息到 Amazon Simple Notification Service。

  2. AWS SQS Node
    发布消息到 Amazon Simple Queue Service。

  3. Kafka Node
    发送消息到 Kafka 代理。

  4. MQTT Node
    将输入消息的数据发布到相应的 MQTT 主题上。主题可基于 metadata 中的字段创建。结点中需配置 MQTT 代理的连接参数。

  5. RabbitMQ Node
    将输入消息的数据发布到 RabbitMQ.

  6. REST API Call Node
    调用外部系统的 REST API。Endpoint URL 和 URL 头信息可基于 metadata 中的字段创建。消息数据作为 REST 的请求体发送。输出消息的 metadata 中会包含 REST 应答中的 status, statusCode, statusReason, headers。输出消息体 message payload 与 REST 应答体相同。消息类型和发起者不变。

  7. Send Email Node
    发送邮件结点,其前置结点必须是 To Email 结点。结点中需配置邮件服务器连接方式。

  8. Twilio SMS Node
    通过 Twilio 发送短信。

thingsboard 编译及分析相关推荐

  1. Thingsboard入门教程:本地环境搭建和源码编译安装,献给thingsboard编译失败的同学,教程不断完善中,文章最后是thingsboard常见编译失败的问题总结

    欢迎加入ThingsBoard技术交流群 这里可复制Q群号:69998183 关注"云腾五洲":获取二开ThingsBoard物联网平台演示 交流社区:ThingsKit-Thin ...

  2. 编译时如何看到每个文件的编译选项_导出 Clang 可视化编译耗时分析报告 —— ftimetrace 的使用...

    前言 笔者最近加入了新的团队,开始负责编译打包相关工作,因而开始学习优化编译时间相关技术.讲真,蛮开心的,每天都有挑战,同时每天都有收获,天天都在涨姿势,所以想记录下来并分享出来,也方便以后自己需要时 ...

  3. yocto 编译流程分析

    yocto 编译流程分析 2015年04月15日 10:55:13 日月星辰007 阅读数:4955 git clone 一份poky 的工程到本地. source poky/oe-init-buil ...

  4. TMS320C6678开发笔记---IBL编译与分析1

    第9节  IBL编译与分析 9.1节  MinGW安装 下载与安装参考文章:https://blog.csdn.net/kunkliu/article/details/106786512 安装建议:将 ...

  5. Swift编译 SIL分析

    文章目录 Swift编译 & SIL分析 1.Swift与OC编译区别 2.Swift编译流程 3. swiftc命令 4. SIL分析 1.创建项目,在`main.swift`写入以下代码: ...

  6. thingsboard 编译失败,报错 Failed to execute goal com.mycila:license-maven-plugin:3.0

    欢迎加入ThingsBoard技术交流群 这里可复制Q群号:69998183 关注"云腾五洲":获取二开ThingsBoard物联网平台演示 交流社区:ThingsKit-Thin ...

  7. 高通Android智能平台环境搭建_编译流程分析

    高通Android智能平台环境搭建_编译流程分析 高通平台环境搭建,编译,系统引导流程分析 TOC \o \h \z \u 1. 高通平台android开发总结. 7 1.1 搭建高通平台环境开发环境 ...

  8. Linux——Linux驱动之Makefile编译总结(编译器路径设置、编译流程分析、编译试验测试)

    目录 0 引言 1 编译器路径设置 2 Makefile编译文件 3 Linux内核编译流程分析 4 编译试验测试

  9. qualcomm amss 文件结构以及编译流程分析

    qualcomm amss 文件结构以及编译流程分析 https://blog.csdn.net/npjocj/article/details/8206695 AMSS的source实际上是Qualc ...

最新文章

  1. 源码阅读:AFNetworking(十六)——UIWebView+AFNetworking
  2. Python培训教程之Python基础知识点梳理
  3. 程序员必备,新手也可以直接拿来用的jQuery万能代码段
  4. jsfiddle网站介绍
  5. elasticsearch 内存溢出,节点崩溃
  6. 火灾自动报警系统及消防设施联动控制
  7. c++17(33)-数值上下限、无穷、非数、中文字符串
  8. 如何复制服务器数据库文件大小,如何复制服务器数据库文件夹
  9. java 请求 https_JAVA后端请求HTTPS 的URL 遇到的问题
  10. Verilog 练习 简单状态机代码设计(三角波发生器)
  11. vue3前端获取文件md5码
  12. linux删文件,捋一捋
  13. Android Framebuffer介绍及使用
  14. 外贸客户催货催的很急的原因
  15. Java Scanner用法详解
  16. redis分片式集群
  17. IE 10 SCRIPT5022: InvalidCharacterError错误解决办法
  18. 超融合一体机成为数据中心的必需品
  19. 数据结构------最小生成树之Kruskal算法
  20. 关于.m4s音视频文件合成.mp4文件的方法

热门文章

  1. jdk安装,提示错误1335
  2. mysql 必知必会【沈剑——公众号架构师之路】
  3. 【Java基础快速入门】概述及开发环境搭建
  4. Ubuntu16.04深度学习环境搭建
  5. 准备换工作 , 有备无患
  6. Win10提示“PL2303HXA自2012已停产,请联系供货商”的解决方法
  7. 两连杆机器鱼的简单建模以及MATLAB仿真(2)
  8. SuperMap 产品安全白皮书
  9. [每日一题] 73. 电话号码(字符串、set)
  10. 推荐几个办公软件的神器