概述
TheThingsStack是用于通过LoRaWAN栈连接设备的LoRaWAN网络。 将TheThingsStack与ThingsBoard集成后,可在ThingsBoard IoT平台中连接、通信、处理和可视化设备数据。
The Things Stack Community配置
注册应用
第一步是在TheThingsStack控制台中创建一个应用。进入控制台,打开Applications部分,点击add application按钮并填写必填字段。
- Application ID - thingsboard-connection
Handler registration - 用于标识应用注册的区域。在本示例中,我们使用eu区域。

Payload解码器
我们的设备以二进制格式提交数据。我们有两种方式来解码这些数据:
- TheThingsStack解码器 - 数据在进入Thingsboard之前就会被解码
- Thingsboard转换器 - 使用上行/下行转换器将数据从二进制格式解码为JSON
在本教程中,我们将先使用TTS解码器将数据初步转换为JSON,然后使用Thingsboard转换器进行正确的数据处理。 在实际场景中,您可以自行决定在哪一侧进行数据的编码/解码,因为两侧都可以完成此操作。
解码函数:
1
2
3
4
function Decoder(bytes, port) {
var decoded = {temperature: bytes[0]};
return decoded;
}

点击Save payload function
在TheThingsStack中注册设备
下一步是在TTS中创建设备。打开Devices页面,点击register device
- Device ID - thermostat_a
- Device EUI - 点击generate按钮生成随机标识符
- AppEUI - 可以填写全零
- AppKey - 点击generate按钮生成随机标识符


点击Register按钮。
Payload格式化器(可选)
在TTS中添加设备后,您可以测试解码器和payload。进入您的设备thermostat-a,选择payload_formatters选项卡。我们将从设备中提取第一个字节作为温度值,并将其转换为JSON。
Payload(载荷):
1
0F
输出JSON:
1
2
3
{
"temperature": 15
}

访问密钥(API key)
此外,配置集成时需要一个访问密钥,可以在API keys菜单中生成。请务必保存该密钥。
与Thingsboard集成
我们已经在TheThingsStack中完成了所有必要的配置(注册应用、添加解码函数和注册设备)。现在可以开始配置Thingsboard了。
Thingsboard上行数据转换器
首先,我们需要创建一个上行数据转换器,用于接收来自TTS的消息。 该转换器需要将传入的payload转换为所需的消息格式。消息必须包含deviceName和deviceType字段,这些字段用于将数据提交到正确的设备。 如果未找到对应设备,系统将自动创建一个新设备。
以下是来自TheThingsStack的payload示例:
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
35
36
{
"end_device_ids": {
"device_id": "thermostat-a",
"application_ids": {
"application_id": "thingsboard-connection"
},
"dev_eui": "70B3D57ED00550F2",
"join_eui": "0000000000000000"
},
"correlation_ids": ["as:up:01GC9S4G55D3AJ2PG32TCAZ6H1", "rpc:/ttn.lorawan.v3.AppAs/SimulateUplink:48ff02a3-cc7d-4097-b301-1411dbae3ca2"],
"received_at": "2022-09-06T16:11:35.461454886Z",
"uplink_message": {
"f_port": 1,
"frm_payload": "Dw==",
"decoded_payload": {
"temperature": 15
},
"rx_metadata": [{
"gateway_ids": {
"gateway_id": "test"
},
"rssi": 42,
"channel_rssi": 42,
"snr": 4.2
}],
"settings": {
"data_rate": {
"lora": {
"bandwidth": 125000,
"spreading_factor": 7
}
}
}
},
"simulated": true
}
我们将提取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向TTS中的设备发送下行消息,我们需要定义一个下行转换器。通常,下行转换器的输出应具有以下结构:
1
2
3
4
5
6
7
{
"downlinks": [{
"f_port": 2,
"frm_payload": "vu8=",
"priority": "NORMAL"
}]
}
- contentType - 定义数据的编码方式 {TEXT | JSON | BINARY}
- data - 将发送到TTS中设备的实际数据。更多API详情请参阅TTS API
- metadata - 在此对象中需要填写正确的devId值,用于在TTS中标识目标设备
进入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字段,并将其作为payload字段添加到出站消息中。目标设备是thermostat-a。

TTS集成
接下来我们将在Thingsboard中创建与TheThingsStack的集成。打开Integrations部分,添加类型为TheThingsStack的新集成
- Name: TheThingsStack Integration
- Type: The Things Stack Community
- Uplink data converter: TheThingsStack Uplink
- Downlink data converter: TheThingsStack Downlink
- Region: eu1(您的应用在TTS中注册的区域)
- Application ID: thingsboard-connection(使用TTS中的Application ID)
- Access Key: 使用TTS中的Access Key
- Use API v3: 设置为Enable

添加集成时,您可以测试ThingsBoard与TheThingsStack之间的连接。完成所有必要配置后,点击Check connection按钮即可。

验证
验证上行消息
让我们来验证集成是否正常工作。进入TheThingsStack中设备thermostat-a的页面,滚动到Simulate Uplink部分。 我们的设备将发布温度值0F(即15)。在payload字段中输入0F,然后点击Send按钮。

在Thingsboard中进入Device Group -> All -> thermostat-a,您可以看到:
- Thingsboard中已注册了一个新设备
- 在Latest Telemetry部分可以看到最后提交的温度值为15。

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


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

通过此操作,我们向设备thermostat-a触发了一条下行消息,该消息应包含version字段的值。 打开TTS控制台,导航至tb_platform应用的Data部分,可以看到下行消息已成功接收。

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