1. AS 数据
AS 数据是 NS 将 LoRaWAN 帧解密、解帧后输出的结构化应用层报文,userdata.payload 仍为 Base64 编码,但 LoRaWAN 加密已去除。这一层是设备原始上报数据和 ThinkLink 物模型解析之间的中间层,适合需要自定义协议解析或对接第三方平台的场景。
数据流位置
mermaid
flowchart LR
DEV[LoRaWAN 设备]:::dim
GW[网关]:::dim
NS[NS 数据\nMAC层原始帧]:::dim
AS[AS 数据\n解密结构化报文]:::highlight
RT[实时数据\n物模型解析值]:::dim
HIS[历史数据\n归档查询]:::dim
DEV -->|无线信号| GW
GW -->|SEMTECH UDP| NS
NS -->|LoRaWAN 解密| AS
AS -->|物模型解析| RT
RT -->|持久化| HIS
classDef highlight fill:#1a6fcf,color:#fff,stroke:#1a6fcf
classDef dim fill:#f0f0f0,color:#888,stroke:#ddd你在这里:AS 数据已完成 LoRaWAN 解密,但尚未经过物模型解析。如果你需要温度、湿度等业务数值,请直接查看实时数据。
AS 数据的报文格式遵循 PTL-S05-asp通信协议V3.2。
1.1. 上行数据示例(up)
json
{
"if": "loraWAN",
"gwrx": [
{
"eui": "5a53012501030056",
"chan": 0,
"lsnr": 14.2,
"rfch": 0,
"rssi": -21,
"time": "2025-09-24T07:07:03.807677Z",
"tmms": 0,
"tmst": 1152383989,
"ftime": 0
}
],
"type": "data",
"token": 56368,
"moteTx": {
"codr": "4/5",
"datr": "SF7BW125",
"freq": 470.9,
"modu": "LORA",
"macAck": "",
"macCmd": ""
},
"geoInfo": {
"type": "gw:wifi",
"accuracy": 50,
"altitude": 0,
"latitude": 34.19863,
"longitude": 108.86273
},
"moteeui": "6353012af1090498",
"version": "3.0",
"userdata": {
"port": 11,
"class": "ClassA",
"seqno": 27464,
"payload": "IQcDDG4BAADaBB0C538J",
"confirmed": false
}
}| 字段 | 说明 |
|---|---|
moteeui | 上报设备的 EUI |
gwrx | 接收该帧的网关列表及各网关信号质量(RSSI/LSNR) |
userdata.payload | Base64 编码的原始业务负载,需物模型解析 |
userdata.port | FPort,用于区分业务数据类型 |
userdata.seqno | 设备帧序号(用于排查重发/丢包) |
geoInfo | 网关地理位置(可用于辅助定位) |
1.2. 下行数据示例(dn)
json
{
"dn": {
"if": "loraWAN",
"type": "data",
"token": 1758686562078,
"moteeui": "6353012af1099301",
"version": "3.0",
"userdata": {
"port": 51,
"type": "data",
"fpend": false,
"payload": "/mgSBgNWBQZoHBA1MzMzMzMzM04zAAAAAAAAABY=",
"dnWaitms": 3000,
"TxUTCtime": "",
"confirmed": false,
"intervalms": 0
}
}
}| 字段 | 说明 |
|---|---|
moteeui | 目标设备 EUI |
userdata.port | FPort,51 常用于参数配置类指令 |
userdata.payload | 下发指令内容(Base64 编码) |
userdata.dnWaitms | 等待设备下行窗口的最大延迟(ms) |
userdata.confirmed | 是否需要设备 ACK 确认 |

1.3. 适用场景
| 场景 | 使用 AS 数据的原因 |
|---|---|
| 自定义协议解析 | payload 已解密,可直接用自己的 parser 处理 |
| 对接第三方平台 | 通过 MQTT 订阅 AS topic,推送到私有系统 |
| 确认下行是否被 NS 调度 | 查看 dn 记录是否出现 |
| 调试物模型 parser | 对比 AS payload 与实时数据的解析结果 |
订阅 AS 数据:通过 MQTT 订阅
/v32/{tenant}/as/up/data/#(上行)和/v32/{tenant}/as/dn/data/#(下行),可实时接收 AS 层数据。具体 topic 规则参见 ThinkLink 协议说明。
1.4. FPort 常见用途
userdata.port(FPort)字段用于区分同一设备上的不同业务通道。以下为常见约定:
| FPort | 用途 |
|---|---|
| 51 | 透传通道,原始字节直接透传,不做协议封装 |
| 201 | 固件 OTA 升级 |
| 209 | 心跳包,用于确认设备在线状态 |
| 214 | 参数配置与读取(下行写参数,上行读回当前值) |
以上为设备侧约定端口,第三方LoRaWAN标准设备的端口定义以对应设备说明书为准。
1.5. 故障诊断
当用户无法收到数据时,请按以下链路逐层排查:
第一步:确认网关在线
在 ThinkLink 运维管理 → 网关管理 中,确认对应网关状态为在线。
网关离线时所有后续数据均不可能到达,排查其他层之前必须先解决网关连接问题。
第二步:在 NS 数据中确认有无上行包
进入 网络数据 → NS 数据,按以下方式搜索:
| 情形 | 搜索字段 | 说明 |
|---|---|---|
| 设备从未入网或刚复位 | DevEUI | Join Request / Join Accept 帧用 DevEUI 标识,尚无 DevAddr |
| 设备已入网,正常上报 | DevAddr | 入网后所有数据帧使用动态分配的 DevAddr,不再用 DevEUI |
- NS 无数据:设备信号未到达网关,或网关未正确接入 NS。检查设备是否在信号覆盖范围内,或查看网关日志。
- NS 有数据:继续第三步。
第三步:在 AS 数据中确认解密是否成功
进入 网络数据 → AS 数据,用同一 DevEUI 或 DevAddr 搜索。
| 现象 | 可能原因 | 处理方法 |
|---|---|---|
| NS 有数据,AS 为空 | LoRaWAN 密钥错误(AppKey / AppSKey / NwkSKey 不匹配) | 核对设备档案中的密钥,与设备烧录的密钥保持一致 |
| NS 有数据,AS 为空 | 设备档案未创建或 enable 为 false | 在设备管理中添加 LoRaWAN 档案,确认 enable 已开启 |
| AS 有数据 | 解密成功,继续第四步 | — |
第四步:确认物模型是否正确配置
在 应用数据 → 实时数据 中查看是否有解析后的业务数值。
| 现象 | 可能原因 | 处理方法 |
|---|---|---|
| AS 有数据,实时数据为空 | 设备未绑定物模型 | 在模型管理中为该设备绑定物模型 |
| AS 有数据,实时数据为空 | 物模型 parser 脚本有错误 | 打开物模型编辑器,用 AS 数据中的 payload 手动调试 parser |
| AS 有数据,实时数据部分字段为空 | Parser 未覆盖对应 FPort 或字段 | 检查 parser 中对应 port 分支的解析逻辑 |