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

Node Red向asyncio-mqtt脚本发消息后字符串判断不生效问题排查

根因定位

你的判断逻辑不成立的核心原因是payload_变量不是纯MQTT消息内容,你在赋值时拼接了模板前缀:
创建log_messages异步任务时传入的template格式为[topic_filter="匹配的主题规则"] {},调用template.format(message.payload.decode())后,得到的payload_实际值为[topic_filter="floors/get/temps"] Testing123,自然和纯字符串"Testing123"无法匹配。

修复方案

将原始消息内容和格式化后的日志内容拆分即可,修改log_messages函数逻辑:

async def log_messages(messages, template):
    async for message in messages:
        # 先提取解码后的原始消息内容
        raw_payload = message.payload.decode()
        # 格式化后用作日志打印
        payload_ = template.format(raw_payload)
        print("log_messages def hit ", payload_)
        # 用原始消息内容做判断
        if raw_payload == "Testing123":
            print("YES payload_ == Testing123, DO SOMETHING")
        else:
            print("payload_ not == Testing123")

补充排查点

如果修改后仍无法匹配,可按以下步骤排查:

  • 打印repr(raw_payload)查看原始字符表示,确认Node Red发出的字符串是否包含不可见字符、首尾空格、换行符等冗余内容
  • 存在冗余字符时可加strip()处理:raw_payload = message.payload.decode().strip()

内容的提问来源于stack exchange,提问作者bbartling

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:45:03