跳到主要内容

MQTT 操作-消息解析

从 MQTT Broker 接收解析后的 JSON 消息

问题背景

从 MQTT Broker 接收解析后的 JSON 消息

解决方案

使用 订阅 MQTT 节点和一个 JSON 节点来接收解析后的 JSON 消息。

示例

该流程演示了如何将一个 JSON 对象发布到 MQTT Broker,然后订阅该主题,并将接收到的 JSON 对象转换为字符串。

该流程包含以下节点:

  1. 注入 节点 (temp json): 配置为每当触发时,发布一个 JSON 对象 {"sensor_id":1234,"temperature":13} 作为 msg.payload
  2. 写入 MQTT 节点: 连接到配置为 172.16.0.3:1883 的 MQTT Broker,并将 msg.payload 发布到 sensors/livingroom/temp 主题。
  3. 订阅 MQTT 节点: 连接到配置为 172.16.0.3:1883 的 MQTT Broker,并订阅 sensors/# 主题(这是一个通配符主题,将匹配 sensors/livingroom/temp)。
  4. JSON 处理 节点: 接收 MQTT Input 节点输出的 msg.payload(此时为 JSON 对象),并将其解析为字符串。
  5. 日志输出 节点: 显示 JSON 处理节点输出的 msg.payload 内容。
  6. MQTT Broker Config 节点 (隐藏在 MQTT Input/Output 节点配置中): 配置 MQTT Broker 的连接详情,包括服务器地址(172.16.0.3)和端口(1883)。

mqtt-parsed-json.png

示例JSON

[{"id":"94b180346141b4ee","type":"mqtt in","z":"09f64d8a7f751be5","name":"","topic":"sensors/#","qos":"2","datatype":"auto-detect","broker":"407a01e4.6b637","nl":false,"rap":false,"inputs":0,"x":340,"y":1200,"wires":[["8dbef80b1ed44d2a"]]},{"id":"2a936511416f8d75","type":"debug","z":"09f64d8a7f751be5","logName":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","logLevel":"info","dataType":"field","syntax":"mustache","template":"","x":610,"y":1200,"wires":[]},{"id":"411479350b0c492b","type":"mqtt out","z":"09f64d8a7f751be5","name":"","topic":"sensors/livingroom/temp","qos":"","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"407a01e4.6b637","x":390,"y":1140,"wires":[]},{"id":"a1084dee9b8be187","type":"inject","z":"09f64d8a7f751be5","name":"temp json","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"{\"sensor_id\":1234,\"temperature\":13}","payloadType":"json","x":200,"y":1140,"wires":[["411479350b0c492b"]]},{"id":"8dbef80b1ed44d2a","type":"json","z":"09f64d8a7f751be5","name":"","property":"payload","action":"","pretty":false,"x":470,"y":1200,"wires":[["2a936511416f8d75"]]},{"id":"407a01e4.6b637","type":"mqtt-broker","name":"数字工厂","broker":"172.16.0.3","port":"1883","clientid":"ocs_controller_sensors_example","autoConnect":true,"usetls":false,"protocolVersion":"5","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]

运行结果

点击注入给主题: sensors/livingroom/temp 发送 JSON 输入: {"sensor_id":1234,"temperature":13} , 订阅 MQTT 节点收到消息后使用 JSON 处理 节点将 JSON 数据转换为 字符串数据

mqtt-parsed-json-result.png