产品定价 立即试用
云平台
欧洲地区
文档 > 集成 > The Things Stack Community
入门
指南 API 常见问题
目录

The Things Stack Community集成

文档信息图标
ThingsBoard PE 功能

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

概述

TheThingsStack是用于通过LoRaWAN栈连接设备的LoRaWAN网络。 将TheThingsStack与ThingsBoard集成后,可在ThingsBoard IoT平台中连接、通信、处理和可视化设备数据。

The Things Stack Community配置

注册应用

第一步是在TheThingsStack控制台中创建一个应用。进入控制台,打开Applications部分,点击add application按钮并填写必填字段。

  • Application ID - thingsboard-connection

Handler registration - 用于标识应用注册的区域。在本示例中,我们使用eu区域。

image

Payload解码器

我们的设备以二进制格式提交数据。我们有两种方式来解码这些数据:

  • TheThingsStack解码器 - 数据在进入Thingsboard之前就会被解码
  • Thingsboard转换器 - 使用上行/下行转换器将数据从二进制格式解码为JSON

在本教程中,我们将先使用TTS解码器将数据初步转换为JSON,然后使用Thingsboard转换器进行正确的数据处理。 在实际场景中,您可以自行决定在哪一侧进行数据的编码/解码,因为两侧都可以完成此操作。

解码函数:

1
2
3
4
function Decoder(bytes, port) {
  var decoded = {temperature: bytes[0]};
  return decoded;
}

image

点击Save payload function

在TheThingsStack中注册设备

下一步是在TTS中创建设备。打开Devices页面,点击register device

  • Device ID - thermostat_a
  • Device EUI - 点击generate按钮生成随机标识符
  • AppEUI - 可以填写全零
  • AppKey - 点击generate按钮生成随机标识符

image

image

点击Register按钮。

Payload格式化器(可选)

在TTS中添加设备后,您可以测试解码器和payload。进入您的设备thermostat-a,选择payload_formatters选项卡。我们将从设备中提取第一个字节作为温度值,并将其转换为JSON。

Payload(载荷):

1
  0F

输出JSON:

1
2
3
{
  "temperature": 15
}

image

访问密钥(API key)

此外,配置集成时需要一个访问密钥,可以在API keys菜单中生成。请务必保存该密钥。

与Thingsboard集成

我们已经在TheThingsStack中完成了所有必要的配置(注册应用、添加解码函数和注册设备)。现在可以开始配置Thingsboard了。

Thingsboard上行数据转换器

首先,我们需要创建一个上行数据转换器,用于接收来自TTS的消息。 该转换器需要将传入的payload转换为所需的消息格式。消息必须包含deviceNamedeviceType字段,这些字段用于将数据提交到正确的设备。 如果未找到对应设备,系统将自动创建一个新设备。

以下是来自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;

image

image

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

image

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

image

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

image

验证

验证上行消息

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

image

在Thingsboard中进入Device Group -> All -> thermostat-a,您可以看到:

  • Thingsboard中已注册了一个新设备
  • Latest Telemetry部分可以看到最后提交的温度值为15。

image

验证下行消息

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

image

image

保存更改。

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

image

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

image

另请参阅

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

下一步