Skip to content

LoRaWAN MQTT 业务接口 ​

本文件只说明 LoRaWAN 数据订阅和下发;平台用户、授权和系统维护使用 平台管理 API。MQTT 是异步消息,连接成功不等于终端在线。

能力边界 ​

任务Application MQTT 支持情况应使用的入口
注册/删除/查询终端档案无标准 CRUD 主题LoRaWAN API
读取历史数据无标准历史查询主题API 历史查询
订阅新上行和事件支持event/up 等主题
单播下行支持command/down
创建/删除/查询组播组及成员无标准管理主题MulticastGroupService
组播下行无对应标准 Application MQTT 组播提交主题MulticastGroupService/Enqueue

网关远程管理的私有 command/exec 不是公共终端 CRUD 协议;不要向业务主题发布自造的 register、delete 或 list 消息。

连接准备 ​

向部署管理员获取服务器地址、实际集成端口、应用账号密码及 TLS 要求。原生包集成端口默认 1885;使用安装实例的凭据,不照抄旧文档固定密码。Broker 是否对远端监听、防火墙是否放行也必须核对。

在业务系统配置唯一 Client ID,连接后订阅目标应用。不要让两个客户端共用 Client ID 导致互相挤下线。默认不承诺离线历史补发,重连后用业务时间/事件标识去重并按需查询历史。

事件订阅主题 ​

application/{application_id}/device/{dev_eui}/event/{event}

订阅范围主题
单个终端全部事件application/{application_id}/device/{dev_eui}/event/+
某应用全部终端上行application/{application_id}/device/+/event/up
某应用全部事件application/{application_id}/device/+/event/+

application_id 使用应用 UUID;dev_eui 使用终端实际 EUI。+ 匹配一层,订阅后等待新的真实事件。

event含义
up应用上行
joinOTAA 入网事件
txack网关下行发送任务结果
ackconfirmed 下行对应的终端协议确认
log设备日志
status设备状态
location设备位置

上行数据字段 ​

事件实际编码由部署配置决定,JSON / Protobuf 不可混用。JSON 字段大小写按实际序列化结果处理,不只对某一截图硬编码。

字段(protobuf JSON 常见形式)类型说明
deduplicationIdstring上行去重标识
timeTimestamp事件时间
deviceInfoobjectDevEUI、应用、模版等资源信息
devAddrstring会话短地址
fPortinteger应用端口
fCntinteger帧计数
dataBase64 string原始应用负载
objectobjectcodec 解码结果,无 codec 或失败时不能假设有值
rxInfoarray接收网关、信号等
txInfoobject发射频率、数据率等

解码对象用于业务,原始 data 用于复核。相同空口帧可能涉及多个网关接收信息;不能把每个 rxInfo 项计成不同终端上报。

单播下行 ​

业务系统发布:application/{application_id}/device/{dev_eui}/command/down。

字段类型必填说明
devEui / dev_euistring是与主题的终端一致
fPort / f_portinteger是按终端业务协议指定
confirmedboolean按业务选择是否需要 LoRaWAN 确认
dataBase64 string与 object 二选一直接发送业务字节
objectobject与 data 二选一需要模版的下行编码器
idUUID string否请求的队列标识,按当前消息定义使用
expiresAt / expires_atTimestamp否过期时间,使用未来时间

不要把 HEX 字符串直接填到 data,也不要将任意 JSON 对象当成终端必然支持的命令。发布后必须观察队列及 txack;confirmed 还需检查对应 ack,具体动作再看业务回复。

验收顺序 ​

  1. 查询 API 确认应用、终端和会话存在。
  2. 订阅目标应用 up,并让终端发送真实上行。
  3. 比对 DevEUI、FPort、负载和接收时间。
  4. 按目标协议提交一条可恢复的单播下行。
  5. 关联队列 ID、txack、ack 和业务回复。
  6. 断线重连后检查重复消费和数据缺口;历史补查走 API。

本册不把“MQTT publish 成功”解释为“终端收到”。

G4 Edge 私有 MQTT:终端与组播管理 ​

这一节操作的是 G4 Edge 网关本地的 LoRaWAN 档案与队列,不是服务器 Application MQTT。两套设备档案不能混为一谈;Std 转发模式不按 Edge 本地网络服务使用。

管理主题与消息外层 ​

下表为默认主题,实际以网关和服务器管理 MQTT 配置为准。

方向主题内容
管理端 → 网关gateway/{gateway_id}/command/exec命令外层
网关 → 管理端gateway/{gateway_id}/event/ack命令处理确认
网关 → 管理端gateway/{gateway_id}/up/mote终端/组播操作结果
外层字段类型必填说明
gatewayIDBase64 string是8 字节网关 EUI 的 Base64;不是直接填写 HEX 文本
commandstring是下方命令名
tokenint32是请求关联编号;回复需匹配同一 token
environmentmap<string,string>按命令查询参数;数字、布尔也按字符串填写
bodyBase64 string按命令命令体 JSON 的 UTF-8 字节再做 Base64

回复外层包含 gatewayID、token、stdout。stdout 同样为 Base64 字节内容,解码后才得到 {code,msg,data} 的 JSON;code 为 0 表示该处理成功,错误时可为 -1 并带 msg。ack、解码后的命令结果、无线实际接收分层判断。

网关本地终端命令 ​

commandenvironmentbody(编码前的 JSON 类型)用途/结果
mote:add无Mote 对象注册一条本地终端
mote:add:batch无Mote 对象数组批量注册
mote:getid:完整本地 DevEUI无查询一条;无 data 不能当成查到设备
mote:listsearch、alive、limit、offset、class、group、filterGroup无查询列表;默认 limit=10、offset=0;返回 data.total / result
mote:update无Mote 对象更新本地终端
mote:deleteid:完整本地 DevEUI无删除指定本地档案
mote:delete:all无无清空全部本地终端;影响范围大
mote:send无DataDownPayload本地单播下行
mote:queue:lenid:8 位 DevAddr无返回 data.len;这里 id 不是 DevEUI
mote:rx2无无查询默认 RX2 的 bw、freq、sf

Mote 对象的常用字段如下。入网方式、密钥和会话必须与实际终端匹配。

字段类型含义
namestring显示名称
isOtaaboolOTAA 或 ABP
devEUIHEX string完整本地 DevEUI
devAddrHEX stringABP 短地址
appKeyHEX stringOTAA 根密钥
appSKey / nwkSKeyHEX stringABP 会话密钥
classstring接收 Class
fCntUp / fCntDownuint32会话计数器
intervaluint32网关在线判断用的预期上报间隔,不会修改终端发包周期
rx1DelayMs / rx2DelayMsuint32数据接收窗口延时
joinRx1DelayMs / joinRx2DelayMsuint32入网接收窗口延时

网关本地组播命令 ​

commandenvironmentbody(编码前)用途
group:add / group:update无MoteGroup 对象创建/更新本地组
group:getaddr:组播地址无查询组
group:listsearch、limit、offset无查询组列表
group:deleteaddr:组播地址无删除组
group:add:moteaddr、search、alive、allCheck、filterGroupDevEUI 数组添加指定或按筛选选定的成员;allCheck 使用字符串 true/false
group:remove:moteeui:DevEUI无移除终端的组关联
group:remove:all:moteaddr:组播地址无移除该组所有成员
group:send无DataDownPayload网关直接处理本地组播发送;不属于 Application MQTT

MoteGroup 主要字段为 groupName、groupAddr、groupAppSKey、groupNwkSKey、fCntDown。组播地址/密钥必须同步到现场成员,更新服务器或网关列表不会自动写入终端。

私有单播/组播下行体 ​

DataDownPayload 外层为 app 对象。单播填写 app.moteeui;组播填写 app.groupAddr,且不能同时填写 moteeui。app.userdata.port 为业务端口,app.userdata.payload 为应用字节的 Base64。其他可选字段包括 token、freq、sf、bandwidth,只有清楚实际接收配置时才指定。

从服务器 API 转发这些命令 ​

也可以使用 AlinkwiseService/ExecuteGatewayRemoteCommand:填写 gateway_id、command、environment_json 和 body_json。此处 body_json 是普通 JSON 字符串,服务器会再编码为 MQTT 外层 body;调用方不要提前重复做 Base64。

服务器使用白名单。当前允许上述多数查询与增删操作及 mote:send,但不允许 group:send,也不允许 mote:timing:update。直接网关 MQTT 与服务器转发支持范围不同;不在白名单的命令会报 Unsupported gateway remote terminal command。服务器自身组播仍使用 MulticastGroupService/Enqueue。

本节私有协议结构已按网关与服务器实现核对;本次只实测了服务器远程信息/配置读取,没有向 Edge 实机执行批量删除、组播或下行。

Edge 私有业务数据订阅 ​

网关本地网络服务的原生上行为 /gateway/{gatewayId}/up,原生下行为 /gateway/{gatewayId}/down,注意开头斜杠。业务上行包含 app.moteeui、app.userdata.port / payload、motetx 和 gwrx;payload 为 Base64 应用负载。原生 motetx.freq 单位为 MHz,不能与服务器接口的 Hz 直接混用。

可选兼容主题为 application/0/device/{DevEUI}/rx 和 /tx,仅在网关 compatOpen 启用时生效;不能将它与服务器 application/{UUID}/device/.../event/up 混写。原生私有主题、兼容主题、管理 up/mote 的方向和内容各不相同。完整网关业务字段见 Edge MQTT 数据接口。

设备使用指南