简介
自定义集成仅在主ThingsBoard实例上远程执行。它允许创建使用自定义配置的集成,可选用任意传输协议与设备通信。
本指南提供创建并启动ThingsBoard自定义集成的逐步说明。 例如,我们将启动使用TCP传输协议的自定义集成,从设备流式传输数据并将转换后的数据推送到eu.thingsboard.cloud。
开始前,可在此处找到本指南将使用的自定义集成示例完整代码。
前置条件
我们假定您已在自己的ThingsBoard PE v2.4.1+实例或eu.thingsboard.cloud上拥有租户管理员账户。
假设我们有一个传感器,分别以以下格式发送当前温度、湿度和电池电量读数:“25,40,94”。
上行和下行转换器
在配置自定义集成之前,需要先创建上行转换器和下行转换器。
上行转换器
创建上行转换器。

注意:尽管Debug mode对开发和故障排查很有用,但在生产模式下保持启用会大幅增加数据库占用的磁盘空间,因所有调试数据都会存储其中。 强烈建议调试完成后关闭Debug mode。
以下为粘贴到Decoder function区域的脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/** Decoder **/
// decode payload to string
var decodedString = decodeToString(payload);
// remove unnecessary [\"] and split by [,] to get an array
var payloadArray = decodedString.replace(/\"/g, "").split(',');
var result = {
deviceName: "Device A",
deviceType: "type",
telemetry: {
// get each reading from the array and convert the string value to a number
temperature: Number(payloadArray[0]),
humidity: Number(payloadArray[1]),
batteryLevel: Number(payloadArray[2])
},
attributes: {}
};
/** Helper functions **/
function decodeToString(payload) {
return String.fromCharCode.apply(String, payload);
}
function decodeToJson(payload) {
// convert payload to string.
var str = decodeToString(payload);
// parse string to JSON
var data = JSON.parse(str);
return data;
}
return result;
Decoder函数用于将传入数据和元数据解析为ThingsBoard可消费的格式。 deviceName和deviceType为必填,attributes和telemetry为可选。 Attributes和telemetry为扁平键值对象,不支持嵌套对象。
下行转换器
本指南中不会使用下行转换器,因此无需创建。 若有其他使用场景,请参阅以下说明。
自定义集成配置
创建自定义集成。

选择Custom类型并启用Debug mode时,Execute remotely会自动启用。
Integration class用于通过Java反射方法创建集成实例。
Integration JSON configuration为自定义配置,本示例中包含两个字段:
- port:用于绑定TCP服务端与客户端通信
- msgGenerationIntervalMs:消息生成的间隔
我们将在本指南后续部分回到此配置。
自定义集成应用
下载示例应用
可从ThingsBoard仓库获取代码,并用Maven构建项目:
1
mvn clean install
将Maven项目添加到您常用的IDE中。
依赖概览
项目中使用的主要依赖:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- Api ThingsBoard provides to create custom integration -->
<dependency>
<groupId>org.thingsboard.common.integration</groupId>
<artifactId>remote-integration-api</artifactId>
<version>${thingsboard.version}</version>
</dependency>
<!-- Netty for TCP client-server implementation -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>${netty.version}</version>
</dependency>
<!-- Grpc transport between remote integration and ThingsBoard -->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty</artifactId>
<version>${grpc.version}</version>
</dependency>
源代码审查
主要源代码为CustomIntegration Java类。 集成期望从TCP客户端收到”Hello to ThingsBoard”消息,并回复”Hello from ThingsBoard!”。 一旦客户端模拟器收到”Hello from ThingsBoard!” ,它将开始以以下格式向ThingsBoard发送自动生成的数据:“25,40,94”。 集成会将传入消息原样传递给上行转换器并将数据推送到ThingsBoard。
注意:自ThingsBoard 3.3.1起,tb-remote-integration.yml中新增了必需配置属性:
1
2
service:
type: "${TB_SERVICE_TYPE:tb-integration}"
若使用旧版自定义远程集成,并计划将自定义集成升级至3.3.1,请确保已在tb-remote-integration.yml文件中添加该属性。