
应用领域用于管理一组终端设备。你可以把它理解为“设备分组”或“项目”。
在应用领域中可以:
一个应用领域下面可以注册多个终端设备,这些设备会共用同一组数据查看、载荷解析和数据转发配置。
应用领域常用于区分不同项目、现场或设备类型,例如:
| 场景 | 应用领域示例 |
|---|---|
| 办公室调试 | office-test |
| 水表项目 | water-meter-demo |
| 温湿度传感器 | sensor-test |
| 某个客户现场 | site-a-debug |
应用领域不是物理设备,它是软件中的管理分组。终端设备属于应用领域,网关不属于某一个应用领域。
网关用于接收终端设备的 LoRa 无线数据,并转发给 DeveloplinkIoT Desktop。
在网关页面中可以:
网关对应真实的 LoRa 网关硬件。它的作用类似无线基站:接收终端设备的 LoRa 无线数据,并转发给 DeveloplinkIoT。
网关本身通常不解析业务数据,也不绑定到某一个应用领域。一个网关可以同时转发多个终端设备的数据。
终端设备对应真实的 LoRaWAN 传感器、采集器或控制器,例如温湿度传感器、水表、电表、烟感、定位器等。
终端设备页面中可以:
终端设备是真正产生业务数据的设备。它需要注册到某一个应用领域下面。
常见设备参数包括:
| 参数 | 说明 |
|---|---|
| DevEUI | 终端设备唯一标识 |
| JoinEUI / AppEUI | OTAA 入网使用的应用 EUI |
| AppKey | OTAA 入网密钥 |
| DevAddr | ABP 或已激活设备的设备地址 |
| AppSKey | 应用会话密钥 |
| NwkSKey / FNwkSIntKey | 网络会话密钥 |
| LoRaWAN 版本 | 设备支持的 LoRaWAN 协议版本 |
| 频率计划 | 必须和网关、设备实际频段一致 |
| 字段 | 填写说明 |
|---|---|
| 网关 EUI | 网关的唯一 EUI,通常在网关标签、后台或配置文件中查看 |
| 网关 ID | 自定义 ID,例如 lorawan |
| 网关名称 | 便于识别的名称,例如 测试 |
| 频率计划 | 必须与网关和终端设备实际频段一致 |
| 需要经过身份验证的连接 | 普通本地调试可先不勾选 |
频率计划必须和真实设备一致。常见示例:
| 区域 | 常见频率计划 |
|---|---|
| 欧洲 | EU_863_870 |
| 美国 | US_902_928_FSB_2 |
| 澳大利亚 | AU_915_928_FSB_2 |
| 印度 | IN_865_867 |
| 中国 CN470 | CN_470_510_FSB_1 或 CN_470_510_FSB_11 |

| 字段 | 示例 |
|---|---|
| 应用程序 ID | test-app |
| 应用名称 | 测试应用 |
| 描述 | 可选 |

应用领域是终端设备的数据管理单元。一个应用领域下面可以放多个终端设备,这些设备会共用同一组数据查看、载荷解析和数据转发配置。
可以按实际项目、客户现场、设备类型或调试任务创建应用领域,例如:
| 场景 | 应用领域示例 |
|---|---|
| 办公室调试 | office-test |
| 水表项目 | water-meter-demo |
| 温湿度传感器 | sensor-test |
| 某个客户现场 | site-a-debug |
如果只是临时调试,也可以只创建一个应用领域,把所有测试设备都放在里面。
点击左侧“应用领域”后,会进入应用领域列表。
列表中可以查看:
| 内容 | 说明 |
|---|---|
| 名称和 ID | 应用领域的显示名称和唯一 ID |
| 设备 | 当前应用领域下已注册的终端设备数量 |
| 已创建 | 应用领域创建时间 |
可以使用搜索框按名称或 ID 查找应用领域。点击某一行可以进入该应用领域详情页。

进入某个应用领域后,默认显示“应用概述”。
应用概述用于快速查看该应用领域的基本状态:
| 区域 | 用途 |
|---|---|
| 终端设备数量 | 查看当前已注册多少个终端设备 |
| 终端设备列表 | 快速进入某个终端设备详情页 |
| 最新解码的有效负载 | 查看最近一次成功解析的上行数据 |
| 设备位置 | 如果设备上报或配置了位置,可在这里查看 |
如果页面显示“最近没有活动”,表示该应用领域下暂时没有新的设备上行数据。

注册终端设备前,请先准备好设备厂商提供的 DevEUI、JoinEUI/AppEUI、AppKey、LoRaWAN 版本和频率计划等参数。
| 字段 | 示例 |
|---|---|
| 频率计划 | China 470-510 MHz,FSB 1 |
| LoRaWAN版本 | LoRaWAN Specification 1.0.2 |
| 区域参数版本 | RP001 Regional Parameters 1.0.2 |
| JoinEUI(AppEUI) | 70B3D57ED000ABCD |
| DevEUI | 0011223344556677 |
| AppKey | 2B7E151628AED2A6ABF7158809CF4F3C |
| 终端设备ID | lora-otaa-class-a |
DevEUI DevAddr AppSKey NwkSKey
不同厂商的 LoRa 模块会使用不同字段名。注册设备时,以“模块实际运行参数”和“平台字段”一一对应为准。
OTAA 模式字段映射如下:
| LoRa 模块字段 | 平台字段 | 长度 | 说明 |
|---|---|---|---|
| AppEUI / JoinEUI | JoinEUI | 8 字节 | OTAA 入网使用的 JoinEUI,有些模块叫 AppEUI |
| DevEUI | DevEUI | 8 字节 | 终端设备唯一标识 |
| AppKey | AppKey | 16 字节 | OTAA 入网密钥 |
| 区域 / Region | 频率计划 | - | 例如 CN470 对应平台的 CN470 频率计划 |
| LoRaWAN Version | LoRaWAN 版本 | - | 必须按模块支持版本选择 |
ABP 模式字段映射如下:
| LoRa 模块字段 | 平台字段 | 长度 | 说明 |
|---|---|---|---|
| DevAddr | 设备地址 / DevAddr | 4 字节 | ABP 设备地址,必须和模块实际发包一致 |
| NwkSKey | 网络密钥 / NwkSKey / FNwkSIntKey | 16 字节 | LoRaWAN 1.0.x 的网络会话密钥 |
| AppSKey | 应用密钥 / AppSKey | 16 字节 | 应用会话密钥,用于应用载荷加解密 |
| 区域 / Region | 频率计划 | - | 必须和网关、模块实际频点一致 |
| LoRaWAN Version | LoRaWAN 版本 | - | 必须按模块支持版本选择 |
填写时注意:
点击“实时数据”可以查看该应用领域下设备产生的实时事件和上下行消息。
常见用途:
常见事件含义:
| 事件或字段 | 含义 |
|---|---|
| join request | 设备发起 OTAA 入网请求 |
| join accept | 设备入网成功 |
| uplink message | 设备上行数据 |
| frm_payload | 设备业务载荷,通常是 Base64 |
| f_port | LoRaWAN FPort |
| downlink message | 服务端下发数据 |
| rx_metadata | 接收该数据的网关信息 |
| rssi | 信号强度 |
| snr | 信噪比 |
| consumed_airtime | 空口占用时间 |
如果设备已经发送数据但实时数据中没有任何记录,请优先检查网关是否在线、频率计划是否一致、设备密钥是否填写正确。
本地模式下,应用领域中的终端设备列表、终端设备详情、网络层/应用层展开、消息传递和主动安排上下行入口固定开放;删除终端设备后列表会自动刷新,不需要手动刷新浏览器页面。
页面中常见的实时数据入口有三个,它们显示的范围不同:
| 入口 | 显示范围 | 常见用途 |
|---|---|---|
| 网关实时数据 | 网关连接、上行接收、下行发送、时间同步等网关侧事件 | 判断网关是否在线、本机是否收到无线包、下行是否发到网关 |
| 应用领域实时数据 | 当前应用领域下所有终端设备的应用层事件 | 判断设备数据是否进入应用层、MQTT 是否应该有输出 |
| 终端设备实时数据 | 单个终端设备相关事件 | 判断某个设备是否入网、FCnt 是否异常、下行是否针对该设备 |
网关实时数据能看到上行,只说明网关已经把无线包转发到本软件;它还需要通过设备 ID、DevAddr、密钥、FCnt、频率计划等校验,才会进入应用领域和终端设备实时数据。
载荷格式化程序用于把设备上报的原始字节转换成业务字段。
应用领域中的载荷格式化程序会作用于该应用领域下的设备。如果某个终端设备单独配置了设备级载荷格式化程序,则以设备级配置为准。
常见操作:
保存后,后续上行数据会显示解码结果,例如温度、湿度、等字段。

function decodeUplink(input) {
try {
// bytes 转字符串
var str = String.fromCharCode.apply(null, input.bytes);
// 尝试解析 JSON
var data = JSON.parse(str);
return {
data: data,
warnings: [],
errors: []
};
} catch (e) {
// 不是 JSON,返回原始字节
return {
data: {
bytes: input.bytes
},
warnings: [],
errors: []
};
}
}
function encodeDownlink(input) {
var json = JSON.stringify(input.data);
var bytes = [];
for (var i = 0; i < json.length; i++) {
bytes.push(json.charCodeAt(i));
}
return {
bytes: bytes
};
}
function decodeDownlink(input) {
var str = String.fromCharCode.apply(null, input.bytes);
try {
return {
data: JSON.parse(str)
};
} catch (e) {
return {
data: {
raw: str
}
};
}
}
保存后,新的上行数据会显示解码结果。
下行 JSON 需要设备侧能识别。若没有配置下行 encoder,建议直接按设备协议发送字节或 Base64,避免 JSON 对象被格式化程序转换为空