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: 网关EUItime: 接收时间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: 设备EUItoken: 消息序列号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: 对应原始下行消息的tokenmsg: 状态信息("OK"表示成功,其他为失败原因)seq: NS分配的下行序列号(失败时为-1)
确认流程:
- 对于LoRaWAN设备:
- 第一包确认(ackSeq): NS接收下行数据后反馈
- 第二包确认(ackTx): 数据发送到设备后反馈
- 对于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": ""
}
}
}type=dataClear: 在发送下行数据的同时清除NS缓存中的待发数据,intervalms: 同设备间的下行等待间隔(ms),0表示不等待dnWaitms: 下行等待间隔(ms),NS 等待 dnWaitms 秒后没有回复则回复给AS 此包数据发送失败。specify.gweui: 非空时指定特定网关发送数据
🌐 官网:www.manthink.cn
✉ 技术支持邮箱:info@manthink.cn
☎ 紧急联系电话:+86-15810684257