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

The Things Stack Industries集成

文档信息图标
ThingsBoard PE 功能

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

概述

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

The Things Stack

注册应用

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

  • Application ID - thingsboard-integration

image

负载解码器

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

  • 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
}

image

点击Save payload function

在TheThingsIndustries中注册设备

下一步是在TTI中创建设备。打开End devices页面并点击Add end device

  • Device ID - thermostat1。
  • DevEUI - 设备唯一标识符。

  • 点击Network layer settings按钮。

image

  • 为您的设备选择配置。

image

  • 点击Application layer settings按钮。

通过生成按钮填写AppSKey

点击Add end device按钮。

与ThingsBoard集成

我们需要在The Things Industries上创建集成,为此请打开Integrations - MQTT,然后点击Generate new API key。 复制用户名和密码,稍后会用到。

image

现在我们可以开始配置ThingsBoard了。

ThingsBoard上行数据转换器

首先,我们需要创建一个上行数据转换器,用于接收来自TTI的消息。转换器应将传入的负载转换为所需的消息格式。 消息必须包含deviceNamedeviceType字段。这些字段用于将数据提交到正确的设备。如果未找到设备,则会创建新设备。 以下是来自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;

image

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

image

TTI集成

接下来,我们将在ThingsBoard中创建与TheThingsIndustries的集成。打开Integrations部分,添加类型为 TheThingsIndustries的新集成

  • NameTTI Integration
  • TypeTheThingsIndustries
  • Uplink data converter:TTI Uplink
  • Downlink data converter:TTI Downlink
  • Regioneu1(您的应用程序在TTI中注册的区域)
  • Usernamethingsboard-integration@thingsboard(使用TTI集成中的Username
  • Password:使用TTI集成中的Password

image

image

验证

验证上行消息

让我们验证集成是否正常工作。

当设备发送数据时,我们可以在ThingsBoard中进行检查:

进入Device Group -> All -> thermostat1,您可以看到:

  • 名称为”thermostat1”的新设备已在ThingsBoard中注册
  • Latest Telemetry部分,您可以看到最后提交的温度值为2。

image

验证下行消息

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

image

image

保存更改。

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

image

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

image

另请参阅

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

下一步