西门子LOGO!向ThingsBoard传输Modbus数据的格式转换求助
解决ThingsBoard中Teltonika网关MQTT数据格式转换问题
场景说明
当前通过Teltonika 4G网关读取Siemens LOGO!的Modbus数据,以固定JSON格式通过MQTT发送至thingsboard.cloud,原始Payload格式如下:
{ "Donnees_Logo": { "timestamp": 1700572138, "date": "21/11/2023 14:08:58", "server_id": 1, "bserver_id": 1, "addr": 4, "full_addr": "400004", "size": 3, "data": "480", "server_name": "EloyLogo", "ip": "xx.xx.xx.xx", "name": "Surp_Cons_TOFF" } }
需要将其转换为以下格式,以适配ThingsBoard的设备属性与遥测数据规范:
{ "deviceName": "EloyLogo", "attributes": { "ip": "xx.xx.xx.xx", "ts": 1700572138, "register": "400004", "name": "Surp_Cons_TOFF", "integrationName": "Test integration" }, "telemetry": { "value": "480" } }
方案1:集成中心数据转换器(推荐)
- 登录
thingsboard.cloud,进入集成中心,找到你的MQTT集成实例 - 进入Incoming payload converter配置,选择
Script类型 - 替换默认脚本为以下代码:
// 解析原始Payload const originalData = msg.payload.Donnees_Logo; // 构造目标格式数据 const convertedData = { deviceName: originalData.server_name, attributes: { ip: originalData.ip, ts: originalData.timestamp, register: originalData.full_addr, name: originalData.name, integrationName: "Test integration" }, telemetry: { value: originalData.data } }; // 返回转换后的数据 return { msg: convertedData, metadata: metadata, msgType: msgType };
- 保存配置,发送测试数据验证转换效果
方案2:规则引擎脚本节点
若集成中心转换器无法满足需求,可通过规则引擎实现转换:
- 进入规则链,添加
Script节点到数据处理流程中 - 在节点配置中输入以下脚本:
// 从原始消息中提取数据 const logoData = msg.payload.Donnees_Logo; // 构造目标结构 msg.payload = { deviceName: logoData.server_name, attributes: { ip: logoData.ip, ts: logoData.timestamp, register: logoData.full_addr, name: logoData.name, integrationName: "Test integration" }, telemetry: { value: logoData.data } }; // 传递转换后的消息 return msg;
- 连接节点至上游MQTT消息源与下游数据存储/展示节点,启动规则链
注意事项
- 若
data字段需要转为数值类型(而非字符串),可将originalData.data改为parseInt(originalData.data)或parseFloat(originalData.data) - 测试时可通过ThingsBoard的事件日志查看转换是否报错,若出现字段缺失,检查原始Payload是否包含对应字段
内容的提问来源于stack exchange,提问作者P.I.D
相关产品推荐
相关产品推荐

