如何在ThingsBoard中拼接多个遥测Key并通过MQTT发送组合值?
多遥测Key拼接与MQTT发送实现方案
一、规则链脚本核心实现
- 先配置规则链的触发节点为遥测数据上传,确保覆盖所有需要整合的遥测Key
- 添加脚本节点,写入以下逻辑实现多Key整合:
// 从消息 payload 中提取目标遥测值 var telemetry = msg.payload; var temp = telemetry.temp; var humidity = telemetry.humidity; var pressure = telemetry.pressure; // 方式1:整合为JSON对象,新Key为env_data var mergedData = { "env_data": { "temperature": temp, "humidity": humidity, "pressure": pressure } }; // 方式2:整合为字符串格式(按需选择) // var mergedData = { // "env_data": `${temp}°C, ${humidity}%, ${pressure}hPa` // }; // 更新消息 payload,传递给后续节点 msg.payload = mergedData; return {msg: msg, metadata: metadata, msgType: msgType}; - 脚本节点后添加MQTT发送节点,配置你的MQTT Broker地址、目标Topic、认证信息,将处理后的消息发送出去
二、部件行为配置修正
如果之前用部件行为没成功,可按以下步骤调整:
- 进入部件的行为配置,添加遥测更新触发条件,勾选需要监听的遥测Key
- 添加脚本动作,写入整合与发送逻辑:
// 获取当前部件的最新遥测值 var temp = entity.getTelemetryValue("temp"); var humidity = entity.getTelemetryValue("humidity"); var pressure = entity.getTelemetryValue("pressure"); var mergedValue = { "env_data": {"temp": temp, "humidity": humidity, "pressure": pressure} }; // 调用内置MQTT服务发送(需提前在系统配置中启用并配置MQTT客户端) var mqttService = getService("mqttService"); mqttService.publish("your/custom/topic", JSON.stringify(mergedValue)); - 确认部件拥有访问MQTT服务的权限,保存配置即可
三、下行链路场景的遥测获取方法
下行链路本身不用于主动获取遥测,需配合实体查询节点实现:
- 在规则链中添加定时触发节点(或其他触发条件)
- 接入实体查询节点,指定目标设备/部件,选择需要获取的多个遥测Key,设置查询最新值
- 将查询结果传入脚本节点进行整合,再通过MQTT发送节点完成发送
内容的提问来源于stack exchange,提问作者Hamza Ziad Gutta
相关产品推荐
相关产品推荐

