LoRa温湿度传感器通过LinkWAN平台,接入AIoT物联网平台最佳实践

简介: LoRa设备上云

本文提供LoRa温湿度传感器通过Link WAN接入,同时采用阿里云物联网平台实现端到端应用。

背景信息

  • 开通物联网络管理平台完成账号的注册之后,使用账号登录Link WAN 开通服务。
  • LoRa节点设备接入
  • 搭建与管理网络参见搭建与管理网络搭建和管理网络、创建节点组并添加节点。
  • 配置数据流转目前数据流转支持阿里云物联网平台、消息队列MQ两种方式,这里选择将数据流转至阿里云物联网平台,详情请参见数据接入物联网平台-1对1
  • 物联网平台LoRa节点设备接入本章介绍如何在物联网平台开发平台上进行设备接入的开发。主要的开发内容包括:

    • 项目和产品创建
    • 产品功能定义
    • 平台脚本开发

本文以一个空气温湿度传感器为例,同时可以配置温湿度的阈值,在温湿度超出阈值时上报事件。

创建产品和设备

  1. 登录物联网平台控制台
  2. 在左侧导航栏上选择设备管理 > 产品,单击创建产品, 填写产品信息后单击完成。详情请参见数据接入物联网平台-1对1
    | 参数 | 描诉 |
产品名称 可填写任意名称
所属品类 自定义品类
节点类型 直连设备
连网方式 LoRaWAN
入网凭证 从表单选择,如无可单击创建凭证
数据格式 透传/自定义

  1. 为产品添加LoRa设备。在左侧导航栏上单击设备,参见单个创建设备添加设备。说明使用LoRaWAN设备的DevEUI需小写作为deviceName。

    • 添加完成后,显示如下,此时设备状态为未激活
    • 数据流转已自动同步 产品创建完成后,可在Link WAN里看到自动同步的数据流转设置。
      说明 在网管平台只能查阅,新增终端请移步至物联网平台维护。

产品功能定义

产品创建完成之后,需要在平台上定义产品有哪些功能。功能定义是为了让平台能够理解设备上下行的数据定义,便于上层应用的读写。

  1. 在左侧导航栏上选择设备管理 > 产品,单击产品对应操作栏中的查看
  2. 选择功能定义 > 编辑草稿,单击自定义功能 > 添加自定义功能
  3. 添加自定义功能弹框中,功能类型选择属性,添加温湿度属性。

    • 添加温度属性,配置参数如下图所示。
    • 添加湿度属性,配置参数如下图所示。
  4. 功能类型选择服务,添加温度湿度阈值,参数配置如下图所示。
    其中输入参数设置如下图所示。
    | 参数名称 | 标志符 | 数据类型 | 取值范围 | 步长 | 单位 |
温度过高阈值 MaxTemp int32(整数型) -40~55 1 摄氏度/℃
温度过低阈值 MinTemp int32(整数型) 40~55 1 摄氏度/℃
湿度过高阈值 MaxHumi int32(整数型) 1~100 1 百分比/%
湿度过低阈值 MinHumi int32(整数型) 1~100 1 百分比/%
  1. 功能类型选择事件,添加湿度过高/过低告警事件。告警输出参数为当前湿度。
    其中输出参数设置如下。
  2. 单击确认,单击页面右下方的发布更新。上述属性、服务、事件添加完成后,在自定义功能一栏下方可确认添加的结果。

平台脚本开发

  1. 进入产品数据解析标签页,可以添加解析脚本。由于数据是以自定义格式透传到平台,所以需要添加脚本来解析自定义协议。
  2. 将下列代码添加到上图的脚本编辑区
var ALINK_ID = "12345";
var ALINK_VERSION = "1.1";
var ALINK_PROP_POST_METHOD     = 'thing.event.property.post';
var ALINK_EVENT_TEMPERR_METHOD = 'thing.event.TempError.post';
var ALINK_EVENT_HUMIERR_METHOD = 'thing.event.HumiError.post';
var ALINK_PROP_SET_METHOD      = 'thing.service.property.set';
var ALINK_SERVICE_THSET_METHOD = 'thing.service.SetTempHumiThreshold';
/*
 * 示例数据:
 *  传入参数 ->
 *      000102 // 共3个字节
 *  输出结果 ->
 *      {"method":"thing.event.property.post", "id":"12345", "params":{"Temperature":1,"Humidity":2}, "version":"1.1"}
 *  传入参数 ->
 *      0102 // 共2个字节
 *  输出结果 ->
 *      {"method":"thing.event.TempError.post","id":"12345","params":{"Temperature":2},"version":"1.1"}
 *  传入参数 ->
 *      0202 // 共2个字节
 *  输出结果 ->
 *     {"method":"thing.event.HumiError.post","id":"12345","params":{"Humidity":2},"version":"1.1"}
 */
function rawDataToProtocol(bytes)
{
    var uint8Array = new Uint8Array(bytes.length);
    for (var i = 0; i < bytes.length; i++)
    {
        uint8Array[i] = bytes[i] & 0xff;
    }
    var params = {};
    var jsonMap = {};
    var dataView = new DataView(uint8Array.buffer, 0);
    var cmd = uint8Array[0]; // command
    if (cmd === 0x00)
    {
        params['Temperature']  = dataView.getInt8(1); 
        params['Humidity']     = dataView.getInt8(2); 
        jsonMap['method']  = ALINK_PROP_POST_METHOD;
    }
    else if (cmd == 0x01)
    {
        params['Temperature']  = dataView.getInt8(1); 
        jsonMap['method']  = ALINK_EVENT_TEMPERR_METHOD;
    }
    else if (cmd == 0x02)
    {
        params['Humidity']  = dataView.getInt8(1); 
        jsonMap['method']  = ALINK_EVENT_HUMIERR_METHOD;
    }
    else
    {
        return null;
    }
    jsonMap['version'] = ALINK_VERSION;
    jsonMap['id']      = ALINK_ID; 
    jsonMap['params']  = params;
    return jsonMap;
}
/*
 * 示例数据:
 *  传入参数 ->
 *      {"method":"thing.service.SetTempHumiThreshold", "id":"12345", "version":"1.1", "params":{"MaxTemp":50, "MinTemp":8, "MaxHumi":90, "MinHumi":10}}
 *  输出结果 ->
 *      0x5d0a000332085a0a
 */
function protocolToRawData(json)
{
    var id  = json['id'];
    var method  = json['method'];
    var version = json['version'];
    var payloadArray = [];
    // 追加下行帧头部
    payloadArray = payloadArray.concat(0x5d);
    payloadArray = payloadArray.concat(0x0a);
    payloadArray = payloadArray.concat(0x00);
    if (method == ALINK_SERVICE_THSET_METHOD)
    {
        var params  = json['params'];
        var maxtemp = params['MaxTemp'];
        var mintemp = params['MinTemp'];
        var maxhumi = params['MaxHumi'];
        var minhumi = params['MinHumi'];
        payloadArray = payloadArray.concat(0x03);
        if (maxtemp !== null)
        {
            payloadArray = payloadArray.concat(maxtemp);
        }
        if (mintemp !== null)
        {
            payloadArray = payloadArray.concat(mintemp);
        }
        if (maxhumi !== null)
        {
            payloadArray = payloadArray.concat(maxhumi);
        }
        if (minhumi !== null)
        {
            payloadArray = payloadArray.concat(minhumi);
        }
    }
    return payloadArray;
}
// 以下是部分辅助函数
function buffer_uint8(value)
{
    var uint8Array = new Uint8Array(1);
    var dv = new DataView(uint8Array.buffer, 0);
    dv.setUint8(0, value);
    return [].slice.call(uint8Array);
}
function buffer_int16(value)
{
    var uint8Array = new Uint8Array(2);
    var dv = new DataView(uint8Array.buffer, 0);
    dv.setInt16(0, value);
    return [].slice.call(uint8Array);
}
function buffer_int32(value)
{
    var uint8Array = new Uint8Array(4);
    var dv = new DataView(uint8Array.buffer, 0);
    dv.setInt32(0, value);
    return [].slice.call(uint8Array);
}
function buffer_float32(value)
{
    var uint8Array = new Uint8Array(4);
    var dv = new DataView(uint8Array.buffer, 0);
    dv.setFloat32(0, value);
    return [].slice.call(uint8Array);
}
  1. 脚本解析下行数据的函数 protocolToRawData 中必须设定输出结果的起始三个字节(用于指定下行的端口号以及下行消息类型),否则系统会丢掉下行帧。另外,节点实际接收到的数据将不会包含起始的三个字节。
    起始三字节的说明如下表所示。
    | Size(bytes) | LoRa Downlink | 描述 |
1 DFlag 固定为 0x5D
1 FPort 下行端口号
1 DHDR
- 0 表示 “Unconfirmed Data Down”数据帧
- 1 表示 “Confirmed Data Down”数据帧
  1. 示例:0x5D 0x0A 0x00表示:下行帧端口号为10,数据帧为nconfirmed Data Down。
  2. 脚本模拟运行。

    1. 设备上报数据调试。在脚本调试区1里输入下面数据,模拟类型选择设备上报数据后,单击运行按钮。

说明 000102 中的 00 表示后面的两个字节分别表示温度和湿度,01 表示温度为1摄氏度,02表示湿度为2%。

  1. 设备接收数据调试。在脚本调试区1里输入以下数据,模拟类型选择设备接收数据后,单击运行按钮。
{
    "method": "thing.service.SetTempHumiThreshold",
    "id": "12345",
    "version": "1.1",
    "params": {
        "MaxTemp": 50,
        "MinTemp": 8,
        "MaxHumi": 90,
        "MinHumi": 10
    }
}
  1. 查看脚本调试区2的运行结果如下:
  1. 脚本脚本调试无误后,单击提交按钮提交脚本。

设备在线调试

脚本提交后,可以结合节点测试数据的上下行链路是否打通,LoRa节点如何发送以及接收数据请参考各模组厂商的相关手册。

  1. 节点数据上行。

    1. 上报温湿度属性。

      1. 在LoRa节点侧选择输入十六进制的000102后发送数据。
      2. 从左侧导航栏的设备 > 设备列表选择对应节点,单击查看
      3. 单击运行状态
      4. 确认节点的湿度与温度信息是否已经上报且设置如下。
    2. 上报温湿度告警事件。

      • 温度告警事件上报

        1. 在 LoRa 节点侧选择输入十六进制的0102 后发送数据。
        2. 设备详情 > 事件管理中确认温度告警事件是否已经上报。
      • 湿度告警事件上报

        1. 在LoRa节点侧选择输入十六进制的0202后发送数据。
        2. 设备详情 > 事件管理中确认湿度告警事件是否已经上报。
  2. 节点数据下行。

    1. 产品详情 > 设备开发单击对应节点的调试按钮,进入在线调试页面。
    2. 选择调试功能为之前添加的温度湿度阈值,具体格式如下所示,单击发送指令。
      发送完成后在节点侧确认输出是否是16进制的0332085a0a


说明 对于Class A类型的节点,需要先发送数据才能启动接收。

固件升级

LoRa节点设备可以通过本地端烧录方式升级固件,目前不支持网络在线升级(FUOTA)。

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
5月前
|
传感器 数据采集 算法
无线传感器网络(WSN)在物联网中的作用
【6月更文挑战第7天】物联网中的无线传感器网络(WSN)正加速发展,它由微型传感器节点组成,用于环境数据感知和传输。WSN助力实时监测(如农业、工业生产)、资源管理(能源和物流)、智能交通等领域,提供关键数据支持。Python代码示例展示了数据采集和传输过程。尽管面临能量限制和网络挑战,WSN在物联网中的角色不可或缺,将持续推动社会智能化和可持续发展。
232 2
|
6月前
|
传感器 存储 监控
【物联网】液滴即信息:雨滴探测传感器实验解析降雨的密码
【物联网】液滴即信息:雨滴探测传感器实验解析降雨的密码
115 0
|
17天前
|
安全 物联网 物联网安全
智能物联网安全:物联网设备的防护策略与最佳实践
【10月更文挑战第26天】随着物联网(IoT)技术的快速发展,智能设备已广泛应用于智能家居、工业控制和智慧城市等领域。然而,设备数量的激增也带来了严重的安全问题,如黑客攻击、数据泄露和恶意控制,对个人隐私、企业运营和国家安全构成威胁。因此,加强物联网设备的安全防护至关重要。
42 7
|
16天前
|
安全 物联网 物联网安全
智能物联网安全:物联网设备的防护策略与最佳实践
【10月更文挑战第27天】随着物联网技术的快速发展,智能设备已广泛应用于生活和工业领域。然而,物联网设备的安全问题日益凸显,主要威胁包括中间人攻击、DDoS攻击和恶意软件植入。本文探讨了物联网设备的安全防护策略和最佳实践,包括设备认证和加密、定期更新、网络隔离以及安全标准的制定与实施,旨在确保设备安全和数据保护。
34 0
|
1月前
|
监控 安全 物联网
物联网:如何对接物联网卡的管理平台
对接物联网平台的API通常涉及几个关键步骤,这些步骤帮助你有效地与平台交互,实现设备数据的收集、处理、分析及控制等功能。以下是一个通用的对接流程:
|
1月前
|
安全 物联网 物联网安全
探索未来网络:物联网安全的最佳实践
随着物联网设备的普及,我们的世界变得越来越互联。然而,这也带来了新的安全挑战。本文将探讨在设计、实施和维护物联网系统时,如何遵循一些最佳实践来确保其安全性。通过深入分析各种案例和策略,我们将揭示如何保护物联网设备免受潜在威胁,同时保持其高效运行。
49 5
|
2月前
|
机器学习/深度学习 安全 物联网安全
探索未来网络:物联网安全的最佳实践与创新策略
本文旨在深入探讨物联网(IoT)的安全性问题,分析其面临的主要威胁与挑战,并提出一系列创新性的解决策略。通过技术解析、案例研究与前瞻展望,本文不仅揭示了物联网安全的复杂性,还展示了如何通过综合手段提升设备、数据及网络的安全性。我们强调了跨学科合作的重要性,以及在快速发展的技术环境中保持敏捷与适应性的必要性,为业界和研究者提供了宝贵的参考与启示。
|
3月前
|
人工智能 网络协议 物联网
AIoT智能物联网平台技术架构
AIoT智能物联网平台的技术架构从终端设备到物联网平台可分为边缘侧网关、接入网关层、基础设施层、中台层和应用层。
170 14
|
2月前
|
传感器 监控 安全
物联网通信的基石:LoRa、Sigfox与NB-IoT详解
物联网通信的基石:LoRa、Sigfox与NB-IoT详解
320 0
|
2月前
|
存储 安全 物联网
探索未来网络:物联网安全的最佳实践与挑战
在数字化浪潮中,物联网作为连接万物的关键技术,已深刻改变我们的工作与生活方式。然而,随着其应用的广泛化,安全问题日益凸显,成为制约物联网发展的重要瓶颈。本文旨在深入探讨物联网的安全架构、风险点及应对策略,通过分析当前技术趋势和实际案例,提出一套切实可行的安全防护方案,以促进物联网技术的健康发展。

相关产品

  • 物联网平台