• V
 

订阅主题

问题

您想要订阅一个 MQTT 主题上的消息。

解决方案

使用 MQTT 输入 节点订阅代理,并接收发布到匹配主题的消息。

示例

[{"id":"8024cb4.98c5238","type":"mqtt in","z":"eda2a949.74ea98","name":"","topic":"sensors/#","qos":"2","broker":"61de5090.0f5d9","x":240,"y":180,"wires":[["15d727dd.33e808"]]},{"id":"15d727dd.33e808","type":"debug","z":"eda2a949.74ea98","name":"","active":true,"console":"false","complete":"false","x":390,"y":180,"wires":[]},{"id":"61de5090.0f5d9","type":"mqtt-broker","z":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""}]

讨论

MQTT 输入 节点必须硬编码主题过滤器才能使用 - 不能动态更改。

一种可能的解决方法是将主题设置为环境变量,例如 $(MY_TOPIC)。当 Node-RED 运行时启动时,它会将环境变量值替换到节点的该属性中。这确实允许主题更改,尽管这样做需要重新启动 Node-RED 以获取对环境变量的更改。

您还可以使用 MQTT 通配符,+ 表示单个主题级别或 # 表示多个。这允许您使用一个节点接收多个主题。消息将从设置 msg.topic 为实际接收主题的节点发送。