RAK LoRaWAN 网关接入 ThingsCloud
RAK LoRaWAN 网关接入 ThingsCloud
这个示例中,客户将瑞科慧联(RAK)的 LoRaWAN 网关接入 ThingsCloud,从而利用 ThingsCloud 的可视化看板的通用 App 等内置应用,快速搭建物联网应用。
LoRa是一种长距离无线通信技术,是NB-IoT以及LTE Cat M1的有效补充。对比传统的蜂窝技术,LoRa可以在牺牲数据速率的前提下达到极远的距离 100km+ LOS。 由于速率限制(< 50kbps)以及占空比的限制,LoRa更加适用于可以容忍大的延迟的非实时的应用。
该示例支持 RAK 的网关包括:
- RAK7249
- RAK7258

它们通过自组网可以建立更大的网络覆盖面积。

ThingsCloud 控制台设置
进入 ThingsCloud 控制台,完成一些准备工作。
创建网关设备和子设备
关于创建网关和子设备的详细介绍,请浏览 如何创建网关和子设备。
完成以上步骤后,进入网关设备的 连接 页面,获得以下信息,用于随后的设备 MQTT 接入。
- MQTT 接入点的主机名、端口
- 设备证书,包括:
AccessToken
: 作为 MQTT UsernameProjectKey
: 作为 MQTT Password
示例中使用了基于 LoRa 的智能电源面板作为子设备,在网关添加这些子设备后,需要编辑子设备地址,填写 LoRa 设备的 DevEUI
。


为网关设备添加自定义数据流
在 ThingsCloud 的设备类型里,通过添加自定义数据流,可以支持各种风格的 MQTT 主题,用于适配不同硬件的 MQTT 发布和订阅机制。
根据 RAK LoRaWAN 网关的需要,我们在网关所属的设备类型中,添加相应的自定义数据流,如下:

这里主要用于网关和云平台数据双向通信的,是名称为 lora
的自定义数据流,其它自定义数据流未启用,可以不实现,不影响数据上报和控制下发。

这个自定义数据流会自动生成以下两个 MQTT 主题:
主题 | 功能 | 用途 |
---|---|---|
data/application/{app_id}/device/{dev_id} | 发布 | 用在网关的 Uplink Topic |
data/application/{app_id}/device/{dev_id}/set | 订阅 | 用在网关的 Downlink Topic |
为网关设备添加消息规则
我们分别为数据采集上报和下发控制分别建立消息规则。
自定义数据流上报规则
为网关设备类型创建一个消息规则,来实现将网关通过自定义数据流接收到的消息,转发到子设备。

规则类型选择自定义上报,添加操作 云网关解析函数,在云函数中,使用 JavaScript 代码来支持 ThingsCloud 网关协议。如下:
module.exports = function (identifier, data, options) {
/**
* 参数:
* identifier: 上报的自定义数据流标识符
* data: 上报的自定义数据,二进制 Buffer格式
* options: 自定义数据流的扩展选项
* 返回值:
* attributes: 网关上报子设备属性
*/
var json = Cloud.jsonParse(data);
var attributes = {};
if (options.params.dev_id) {
attributes[options.params.dev_id] = {
data: json.data
}
}
return attributes;
}
提示
关于 ThingsCloud 网关协议的详细介绍,请浏览 网关 MQTT 接入。
属性下发规则
为子设备所属的设备类型添加一个属性下发规则,当我们在云平台对子设备进行属性下发时,通过该规则可以将下发的消息转换为网关订阅的消息格式。

使用属性下发规则中的自定义数据下发函数,通过编写 Javascript 快速实现转换,例如:
module.exports = function (push_attributes) {
/**
* push_attributes: 下发的属性对象,作为函数参数传入。
* data: 构造下发的自定义数据对象,作为函数返回值,下发到硬件。
*/
// 如果下发属性包含 ac_state ,动态生成 lora 协议,从自定义数据流通道下发
if (push_attributes.ac_state !== undefined) {
var data = {
params: {
app_id: '4',
dev_id: Cloud.getDeviceInfo().sub_device_addr
},
type: "json",
msg: {
confirmed: true,
fPort: 3,
data: push_attributes.ac_state ? "AABB4F0100" : "AABB4F0000"
}
}
}
return data;
}
提示
这里例子中,用的是电源面板 LoRa 子设备支持的协议,实际情况以您的 LoRa 子设备协议为准。
RAK LoRaWAN 网关配置
进入 RAK LoRaWAN 网关的 Web 配置界面,进行以下设置:
配置 MQTT 参数
在 Global Integration 全局设置中,填写 MQTT 连接信息,如下:
- MQTT Broker Address: 填写设备 MQTT 地址。注意只填写域名,不需要
mqtt://
前缀。 - MQTT Broker Port: 1883
- Client ID: 可随意填写
- Username: 填写设备的
AccessToken
- Password: 填写设备的
ProjectKey

接下来配置 MQTT 发布和订阅主题,如下:

这里主要用到的主题是 Uplink Topic
和 Downlink Topic
,其它主题可以不配置。
查看通信日志
重启网关设备后,在网关配置界面中可以看到通信日志,


大功告成
到此为止,完成了 RAK LoRaWAN 网关接入 ThingsCloud,我们创建一个项目通用应用,平台为我们生成了一个专属的设备管理平台。
查看所有设备列表。

查看其中的一个智能电源设备状态。

我们还可以利用 ThingsCloud 内置的可视化看板及零代码应用功能,创建更多属于您的物联网应用。