跳至主要內容

RAK LoRaWAN 网关接入 ThingsCloud

约 1451 字大约 5 分钟

RAK LoRaWAN 网关接入 ThingsCloud

这个示例中,客户将瑞科慧联(RAK)open in new window的 LoRaWAN 网关接入 ThingsCloud,从而利用 ThingsCloud 的可视化看板的通用 App 等内置应用,快速搭建物联网应用。

LoRa是一种长距离无线通信技术,是NB-IoT以及LTE Cat M1的有效补充。对比传统的蜂窝技术,LoRa可以在牺牲数据速率的前提下达到极远的距离 100km+ LOS。 由于速率限制(< 50kbps)以及占空比的限制,LoRa更加适用于可以容忍大的延迟的非实时的应用。

该示例支持 RAK 的网关包括:

  • RAK7249
  • RAK7258

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

ThingsCloud 控制台设置

进入 ThingsCloud 控制台open in new window,完成一些准备工作。

创建网关设备和子设备

关于创建网关和子设备的详细介绍,请浏览 如何创建网关和子设备

完成以上步骤后,进入网关设备的 连接 页面,获得以下信息,用于随后的设备 MQTT 接入。

  • MQTT 接入点的主机名、端口
  • 设备证书,包括:
    • AccessToken: 作为 MQTT Username
    • ProjectKey: 作为 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 TopicDownlink Topic,其它主题可以不配置。

查看通信日志

重启网关设备后,在网关配置界面中可以看到通信日志,

大功告成

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

查看所有设备列表。

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

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

更多功能