概述
TheThingsIndustries是用于通过LoRaWAN栈连接设备的LoRaWAN网络。 将TheThingsIndustries与ThingsBoard集成后,可在ThingsBoard IoT平台中连接、通信、处理和可视化设备数据。
The Things Stack
注册应用
第一步是在TheThingsIndustries控制台中创建一个应用程序。进入控制台,打开Applications部分,点击add application按钮并填写必填字段。
- Application ID - thingsboard-integration

负载解码器
我们的设备以二进制格式提交数据。我们有两种方式来解码这些数据:
- TheThingsIndustries解码器 - 数据在进入ThingsBoard之前进行解码
- ThingsBoard转换器 - 使用上行/下行转换器将数据从二进制格式解码为JSON
在本教程中,我们将首先使用TTI解码器将数据初步转换为JSON,然后使用ThingsBoard转换器进行正确的数据处理。 在实际场景中,您可以自行决定在哪一侧进行数据的编码/解码,因为两侧都可以实现。
在TTI中注册应用程序后,进入Payload formatters,在Uplink中选择解码器函数。我们将取设备发送的第一个字节作为温度值, 并将其转换为JSON。
解码函数
1
2
3
4
function Decoder(bytes, port) {
var decoded = {temperature: bytes[0]};
return decoded;
}
输出JSON:
1
2
3
{
"temperature": 2
}

点击Save payload function
在TheThingsIndustries中注册设备
下一步是在TTI中创建设备。打开End devices页面并点击Add end device
- Device ID - thermostat1。
-
DevEUI - 设备唯一标识符。
- 点击Network layer settings按钮。

- 为您的设备选择配置。

- 点击Application layer settings按钮。
通过生成按钮填写AppSKey。
点击Add end device按钮。
与ThingsBoard集成
我们需要在The Things Industries上创建集成,为此请打开Integrations - MQTT,然后点击Generate new API key。 复制用户名和密码,稍后会用到。

现在我们可以开始配置ThingsBoard了。
ThingsBoard上行数据转换器
首先,我们需要创建一个上行数据转换器,用于接收来自TTI的消息。转换器应将传入的负载转换为所需的消息格式。 消息必须包含deviceName和deviceType字段。这些字段用于将数据提交到正确的设备。如果未找到设备,则会创建新设备。 以下是来自TheThingsIndustries的负载示例:
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
{
"end_device_ids": {
"device_id": "thermostat1",
"application_ids": {
"application_id": "thingsboard-integration"
},
"dev_eui": "ABABABABABABABAA",
"join_eui": "0000000000000000",
"dev_addr": "270000BC"
},
"correlation_ids": [
"as:up:01EFEBYDTA1X51TDGPKC1EYK6N",
"gs:conn:01ED482WRPY2BABY4TYZV57RJG",
"gs:uplink:01ED9B93M49J8P3FQXCGGCYTGX",
"ns:uplink:01ED9B93MH00CTY41A6KF674E4",
"rpc:/ttn.lorawan.v3.AppAs/SimulateUplink:01EFEBYDS9BGD5A9VVZ6GSNBAV",
"rpc:/ttn.lorawan.v3.GsNs/HandleUplink:01ED9B93MH293RE2TR3F1WMHEG"
],
"received_at": "2020-08-11T08:59:45.869225403Z",
"uplink_message": {
"session_key_id": "BXGsg614fdmYH7efd+fRvA==",
"f_port": 2,
"f_cnt": 23787,
"frm_payload": "AhJF8HTI3khf",
"decoded_payload": {
"temperature": 2
},
"settings": {
"data_rate": {}
},
"received_at": "2020-08-11T10:08:31.505981496Z"
}
}
我们将获取device_id并将其映射到deviceName,将application_id映射到deviceType。但您可以根据具体用例使用其他映射方式。 此外,我们将获取temperature字段的值并将其用作设备遥测数据。
进入Data Converters,使用以下函数创建新的uplink转换器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var data = decodeToJson(payload);
var deviceName = data.end_device_ids.device_id;
var deviceType = data.end_device_ids.application_ids.application_id;
var result = {
deviceName: deviceName,
deviceType: deviceType,
telemetry: {
temperature: data.uplink_message.decoded_payload.temperature
}
};
function decodeToString(payload) {
return String.fromCharCode.apply(String, payload);
}
function decodeToJson(payload) {
var str = decodeToString(payload);
var data = JSON.parse(str);
return data;
}
return result;

ThingsBoard下行数据转换器
要从ThingsBoard向TTI中的设备发送下行消息,我们需要定义下行转换器。 通常,下行转换器的输出应具有以下结构:
1
2
3
4
5
6
7
{
"downlinks": [{
"f_port": 2,
"frm_payload": "vu8=",
"priority": "NORMAL"
}]
}
- contentType - 定义数据的编码方式{TEXT | JSON | BINARY}
- data - 将发送到TTI中设备的实际数据。有关API的更多详情,请参阅TTI API
- metadata - 在此对象中,您需要填写正确的devId(设备ID)值,用于在TTI中识别目标设备
进入Data Converters,使用以下函数创建新的downlink转换器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var data = {
downlinks: [{
f_port: 2,
confirmed: false,
frm_payload: btoa(msg.version),
priority: "NORMAL"
}]
};
var result = {
contentType: "JSON",
data: JSON.stringify(data),
metadata: {
devId: 'thermostat1'
}
};
return result;
该转换器将从传入消息中获取version字段,并将其作为出站消息中的负载字段。目标设备为thermostat1。

TTI集成
接下来,我们将在ThingsBoard中创建与TheThingsIndustries的集成。打开Integrations部分,添加类型为 TheThingsIndustries的新集成
- Name:TTI Integration
- Type:TheThingsIndustries
- Uplink data converter:TTI Uplink
- Downlink data converter:TTI Downlink
- Region:eu1(您的应用程序在TTI中注册的区域)
- Username:thingsboard-integration@thingsboard(使用TTI集成中的Username)
- Password:使用TTI集成中的Password


验证
验证上行消息
让我们验证集成是否正常工作。
当设备发送数据时,我们可以在ThingsBoard中进行检查:
进入Device Group -> All -> thermostat1,您可以看到:
- 名称为”thermostat1”的新设备已在ThingsBoard中注册
- 在Latest Telemetry部分,您可以看到最后提交的温度值为2。

验证下行消息
为了测试下行消息,我们将更新根规则链,在设备属性更改时发送下行消息。 打开并编辑Root Rule Chain。添加Integration Downlink动作节点,并使用 Attributes Updated关系将其与Message Type Switch节点连接


保存更改。
进入Device Group -> All -> thermostat1 -> attributes部分。我们将添加名称为version、 值为v.0.11的Shared attribute

通过此步骤,我们触发了发送到设备thermostat1的下行消息,该消息应包含version字段的值。 打开TTI控制台,导航到thingsboard-integration应用程序的Data部分。 可以看到下行消息已被接收(显示为字节76 2E 30 2E 31 31)。

另请参阅
通过此集成,您还可以配置下行转换器,并使用规则引擎节点触发所需的操作。