1. MQTT转发器
MQTT转发器是用于实现第三方应用平台协议对接的中间件解决方案,通过灵活的JS脚本处理实现:
- 跨平台消息路由(source→target broker)
- 动态Topic重定向
- 消息内容格式转换
1.1. 配置流程
1.1.1. 第一步:建立Broker连接
- 准备认证信息:
- 账号/密码
- TLS证书(如需加密连接)
- 连接类型选择:
- 常规MQTT Broker:需填写完整连接信息
- TKL生态数据:
- AS类型:获取LoRaWAN解析后的应用层数据,订阅的topic权限是
/v32/[tenant]/as/# - ThinkLink 类型: 获取的是经ThinkLink 物模型解析后的数据,订阅的topic的topic
/v32/[tenant]/tkl/#
- AS类型:获取LoRaWAN解析后的应用层数据,订阅的topic权限是
注意:至少需建立2个Broker连接(source+target)

1.1.2. 第二步:配置转发规则

- 进入配置界面:
[高级功能] → [转发器] → [新增] - 基础设置:
- 命名转发器实例
- 启用功能开关
- 端点配置:
- Source Broker(下拉选择,若无则需新建)
- Target Broker(下拉选择,若无则需新建)
- 订阅Topic(支持通配符)
1.1.3. 可选:协议转换脚本
javascript
/**
* 消息转换函数
* @param {Object} input - 原始消息
* @param {string} input.topic - 来源topic
* @param {Object} input.msg - 消息体(JSON)
* @returns {Object|null} 返回null则丢弃消息
*/
function forwardScript({topic, msg}) {
// 示例:设备心跳消息过滤转换
if (!msg?.uheart?.EUI || msg?.uheart?.action != 'heart') return null;
const VALID_EUIS = ["7a53012a00000070", "7a53012a00000331"];
const eui = msg.uheart.EUI;
if (!VALID_EUIS.includes(eui)) return null;
// 构造目标消息格式
return {
topic: `/v32/test/my/up/gw/${eui}`, // 支持模板变量
option:{
retain:false
}
msg: {
version: "3.0",
eui: eui,
action: "heart",
data: { // 字段映射
validIP: msg.uheart?.IP,
txPackets: msg.uheart?.TxPackets,
rxPackets: msg.uheart?.RxPackets,
deviceHandle: msg.uheart?.deviceHandle,
hwVersion: msg.uheart?.hardwareVersion,
fwVersion: msg.uheart?.fimewareVersion,
netType: msg.uheart?.netType
}
}
}
}- 输入参数
| 参数 | 类型 | 描述 |
|---|---|---|
topic | string | 订阅到的原始MQTT Topic |
msg | Object | 接收到的消息内容(JSON格式) |
- 返回值
返回一个新的消息对象(或 null 以丢弃该消息):
| 字段 | 类型 | 说明 |
|---|---|---|
topic | string | 目标Topic,可使用 ${变量}动态替换(如 ${msg.deviceId}) |
msg | Object | 转换后的消息内容(需符合目标协议规范) |
option | object | 如果要发送retain 消息,则option:{retain:true} |