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
相关产品推荐
相关产品推荐

