You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node-RED折线图显示异常:MQTT温度数据可视化问题求助

Node-RED MQTT折线图异常问题解决

问题原因

  1. 消息格式不标准:你的Python发布代码直接用str(message)把字典转成字符串,生成的是单引号格式的非标准JSON,Node-RED无法正确解析出温度字段。
  2. 未提取有效数据:当前的函数节点仅设置了msg.topic,没有从MQTT消息中提取temperature值,折线图节点找不到有效数值时,会默认把当前毫秒时间戳作为Y轴数据,导致显示超大值。

解决步骤

第一步:修复Python发布的消息格式

将发布内容改为标准JSON格式,确保Node-RED能正常解析:

  1. 导入json模块
  2. 用json.dumps()替代str()生成消息内容

修改后的发布代码关键部分:

import json  # 新增导入
# ...其他原有代码
try:
    while True:
        temperature = random.randint(0, 60)
        hvac_status = random.choice(["On", "Off"])
        message = { 
            "id": device_id,
            "temperature": temperature,
            "status": hvac_status
        }
        print('Publishing:', message)
        client.publish('Test/Temperature', json.dumps(message))  # 替换为json.dumps生成标准JSON
        time.sleep(8)

第二步:Node-RED中解析并提取温度数据

在MQTT订阅节点和折线图节点之间添加处理节点:

  1. 添加JSON节点:将MQTT收到的字符串payload解析为JSON对象
  2. 添加函数节点:提取temperature字段作为新的payload

函数节点代码:

msg.payload = msg.payload.temperature;
return msg;

(如果不想单独用JSON节点,也可以在一个函数节点里完成解析+提取:)

try {
    const data = JSON.parse(msg.payload);
    msg.payload = data.temperature;
} catch (err) {
    node.error("解析MQTT消息失败", msg);
    return null;
}
return msg;

第三步:配置折线图节点的坐标轴

双击折线图节点进入配置面板:

  • Y轴设置:勾选「手动配置范围」,设置最小值为0,最大值为60,匹配温度区间
  • X轴设置:选择「相对时间」,在「格式」中选择需要的显示方式,比如「秒」「分钟:秒」,也可以自定义格式(如mm:ss表示分秒)

最终节点流顺序

MQTT订阅节点 → JSON节点 → 函数节点 → 折线图节点

内容的提问来源于stack exchange,提问作者Στέλιος Αθανασόπουλος

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:35:07