Skip to content

1. LoRaWAN NS 应用层接口协议

该协议描述了 LoRaWAN将数据解密后通过mqtt转发的协议格式,其中的payload为设备发送的经LoRaWAN NS解密后的数据。

1.1. LoRaWAN NS 的作用

LoRaWAN 网络服务器(NS, Network Server)是LoRaWAN架构中的核心组件,主要负责以下功能:

  • 管理终端设备与网关之间的通信
  • 处理MAC层协议
  • 实现自适应数据速率(ADR)控制
  • 管理设备激活和安全认证
  • 数据路由和转发
  • 下行数据调度

1.2. NS与应用服务器的关系

NS与应用服务器(AS, Application Server)之间通过MQTT协议进行通信,实现以下交互:

  • NS将终端设备的上行数据转发给AS
  • AS通过NS向终端设备发送下行数据
  • NS向AS提供网络状态和设备状态信息

通信特点:

  • 采用MQTT协议作为传输层
  • 消息体使用JSON格式
  • 支持双向异步通信
  • 基于主题(Topic)的消息路由

1.3. 上行数据协议(Up Protocol)

1.3.1. 消息分类

上行消息分为以下几种类型:

  • data: 快速上行消息(立即转发)
  • dataAll: 完整上行消息(等待多网关数据收集)
  • ack: 下行确认消息
  • mac: MAC层命令消息
  • gw: 网关状态消息
  • dataIP: IP接口数据消息

1.3.2. 基本消息格式

json
{
  "version": "3.1",
  "moteeui": "3f53012a000050a9",
  "if": "loraWAN",
  "token": 135,
  "type": "data",
  "userdata": {
    "class": "ClassC",
    "confirmed": false,
    "seqno": 42158,
    "port": 3,
    "payload": "vV0="
  },
  "moteTx": {
    "freq": 471.7,
    "modu": "LORA",
    "datr": "SF12BW125",
   codr": "4/5"
  },
  "gwrx": [
    {
      "eui": "b100000000000128",
      "time": "",
      "tmms": 0,
      "tmst": 0,
      "ftime": 0,
      "chan": 7,
      "rfch": 1,
      "rssi": -43,
      "lsnr": 14.2
    }
  ],
  "geoInfo": {
    "longitude": 116.49325007243958,
    "latitude": 39.78473521213761,
    "altitude": 0,
    "accuracy": 50,
    "type": "gw:wifi"
  }
}
  • version: 协议版本号
  • moteeui: 设备唯一标识(DevEUI)
  • if: 接口类型(loraWAN/can/485/mbus等)
  • token: 消息序列号
  • type: 消息类型
  • userdata: 应用数据
    • class: 设备工作模式(ClassA/B/C)
    • confirmed: 是否为确认消息
    • seqno: 上行序列号
    • port: 应用端口
    • payload: Base64编码的应用数据
  • moteTx: 无线发射参数
    • freq: 频点(MHz)
    • modu: 调制方式
    • datr: 数据速率
    • codr: 编码率
  • gwrx: 网关接收信息数组
    • eui: 网关EUI
    • time: 接收时间
    • tmms: GPS同步时间戳
    • tmst: 相对时间戳(μs)
    • ftime: 空中飞行时间
    • chan: LoRa通道编号
    • rfch: LoRa链路编号
    • rssi: 接收信号强度(dBm)
    • lsnr: 信噪比(dB)
  • geoInfo: 地理位置信息
    • longitude: 经度
    • latitude: 纬度
    • altitude: 海拔
    • accuracy: 精度
    • type: 位置信息来源

1.3.3. 上行消息主题(Topic)

消息类型Topic格式描述
快速消息/v32/{tenant}/as/up/data/{deveui}NS收到数据立即转发,不等待多网关数据收集
完整消息/v32/{tenant}/as/up/dataAll/{deveui}NS等待多网关数据收集完成后转发
  • {tenant}: 组织名称标识
  • {deveui}: 设备EUI
  • 两种消息的消息体格式相同,区别仅在于转发时机和数据完整性

1.4. 下行数据协议(Down Protocol)

1.4.1. 基本消息格式

json
{
  "version": "3.1",
  "type": "dataIP",
  "if": "485",
  "moteeui": "3f53012a00004081",
  "token": 1,
  "userdata": {
    "confirmed": false,
    "fpend": false,
    "port": 61,
    "payload": "gSQBAAAAdARQJ/sA",
    "specify": {
      "gweui": "",
      "txTime": ""
    }
  }
}

字段说明:

  • version: 协议版本号
  • type: 消息类型(data/dataIP/dataClear)
  • if: 接口类型
  • moteeui: 设备EUI
  • token: 消息序列号
  • userdata: 应用数据
    • confirmed: 是否为确认消息
    • fpend: 是否要求设备发起Pull数据请求
    • port: 应用端口(-1表示MAC指令,0表示Payload MAC指令,>0表示正常端口)
    • payload: Base64编码的下行数据
    • specify: 特殊参数
      • gweui: 指定发送网关(为空表示不指定)
      • txTime: 保留字段

1.4.2. 下行确认消息

1.4.2.1. Topic格式

/v32/{tenant}/as/up/ack/{deveui}

1.4.2.1.1. 消息内容
json
{
  "version": "3.1",
  "type": "ackSeq",
  "moteeui": "3f53012a00004081",
  "token": 1,
  "msg": "OK",
  "seq": 83257
}

字段说明:

  • type: 确认类型(ackSeq/ackTx)
    • ackSeq: 响应帧号(表示NS已接收下行数据)
    • ackTx: 发送响应(表示数据已发送到设备)
  • token: 对应原始下行消息的token
  • msg: 状态信息("OK"表示成功,其他为失败原因)
  • seq: NS分配的下行序列号(失败时为-1)

确认流程:

  1. 对于LoRaWAN设备:
    • 第一包确认(ackSeq): NS接收下行数据后反馈
    • 第二包确认(ackTx): 数据发送到设备后反馈
  2. 对于IP DTU设备:
    • 第一包确认(ackSeq): 数据发送后反馈
    • 第二包确认(ackTx): 仅在有timeout事件时反馈

1.4.3. 下行消息主题(Topic)

Topic格式订阅者发送者描述
/v32/{tenant}/as/dn/data/{deveui}NS应用服务器应用服务器向NS发送下行数据

1.4.3.1. 下行数据示例

json
{
  "version": "3.1",
  "moteeui": "34010134112b8001",
  "type": "data",
  "if": "loraWAN",
  "token": 1,
  "userdata": {
    "confirmed": false,
    "fpend": false,
    "port": 61,
    "payload": "gSQBAAAAdARQJ/sA",
    "intervalms": 0,
    "dnWaitms": 0,
    "specify": {
      "gweui": "",
      "txTime": ""
    }
  }
}

1.4.3.2. 下行清除缓存示例

json
{
  "version": "3.1",
  "moteeui": "34010134112b8001",
  "type": "dataClear",
  "if": "loraWAN",
  "token": 1,
  "userdata": {
    "confirmed": false,
    "fpend": false,
    "port": 61,
    "payload": "gSQBAAAAdARQJ/sA",
    "intervalms": 0,
    "dnWaitms": 0,
    "specify": {
      "gweui": "",
      "txTime": ""
    }
  }
}
  1. type=dataClear: 在发送下行数据的同时清除NS缓存中的待发数据,
  2. intervalms: 同设备间的下行等待间隔(ms),0表示不等待
  3. dnWaitms: 下行等待间隔(ms),NS 等待 dnWaitms 秒后没有回复则回复给AS 此包数据发送失败。
  4. specify.gweui: 非空时指定特定网关发送数据

🌐 官网:www.manthink.cn
✉ 技术支持邮箱:info@manthink.cn
☎ 紧急联系电话:+86-15810684257