产品定价 立即试用
云平台
欧洲地区
文档 > 集成 > 自定义集成开发指南
入门
指南 API 常见问题
目录

自定义集成

文档信息图标
ThingsBoard PE 功能

专业版支持Platform Integrations功能。
请使用ThingsBoard Cloud自行安装平台实例。

简介

自定义集成仅在主ThingsBoard实例上远程执行。它允许创建使用自定义配置的集成,可选用任意传输协议与设备通信。

本指南提供创建并启动ThingsBoard自定义集成的逐步说明。 例如,我们将启动使用TCP传输协议的自定义集成,从设备流式传输数据并将转换后的数据推送到eu.thingsboard.cloud

开始前,可在此处找到本指南将使用的自定义集成示例完整代码。

前置条件

我们假定您已在自己的ThingsBoard PE v2.4.1+实例或eu.thingsboard.cloud上拥有租户管理员账户。

假设我们有一个传感器,分别以以下格式发送当前温度、湿度和电池电量读数:“25,40,94”

上行和下行转换器

在配置自定义集成之前,需要先创建上行转换器和下行转换器。

上行转换器

创建上行转换器。

image

注意:尽管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可消费的格式。 deviceNamedeviceType为必填,attributestelemetry为可选。 Attributestelemetry为扁平键值对象,不支持嵌套对象。

下行转换器

本指南中不会使用下行转换器,因此无需创建。 若有其他使用场景,请参阅以下说明

自定义集成配置

创建自定义集成。

image

选择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文件中添加该属性。

下一步