产品定价 立即试用
专业版
文档 > 集成 > 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

另请参阅

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

下一步