问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Node-RED中MQTT发布与订阅实战指南

创作时间:
作者:
@小白创作中心

Node-RED中MQTT发布与订阅实战指南

引用
CSDN
1.
https://blog.csdn.net/weixin_65434541/article/details/136333302

本文将介绍如何在Node-RED中使用MQTT进行消息的发布与订阅。MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,广泛应用于物联网领域。通过Node-RED这个可视化编程工具,我们可以方便地实现MQTT通信,从而构建各种物联网应用。

1、MQTT发布

以Node-RED作为MQTT客户端,向本地搭建的MQTT服务器发送数据为例。使用MQTT out节点,可以连接到MQTT代理并发布消息。

  • msg.payload用作已发布消息的有效载荷。如果包含Object,则会在发送之前将其转换为JSON字符串。如果它包含二进制buffer,则消息将按原样发布。
  • 可以在节点中配置所使用的主题,或者如果留为空白,则可以通过msg.topic进行设置。

{
  "gatew": "admin5555",
  "time": 153034324,
  "tag1": 15.32,
  "tag2": 0,
  "tag3": 43,
  "tag4": "33"
}

关键字含义解释

  • topic:字符串,MQTT主题,使用/作为层次结构分隔符。
  • qos:数值,QoS服务质量:0(最多一次)、1(最少一次)、2(只一次)。
  • retain:布尔值,值为true时表示消息已保留且可能是旧的。

一个MQTT in节点可以订阅多个话题的消息。

Demo环境

使用EMQX搭建的MQTT环境,MQTTX作为客户端查看数据,以及模拟数据上传。

Demo代码

[
    {
        "id": "6fe1584ddeb0c0b7",
        "type": "group",
        "z": "33e0254dbf653b67",
        "style": {
            "stroke": "#999999",
            "stroke-opacity": "1",
            "fill": "none",
            "fill-opacity": "1",
            "label": true,
            "label-position": "nw",
            "color": "#a4a4a4"
        },
        "nodes": [
            "50313d23312de4cc",
            "d5428b42286436d4",
            "df10f1ea456a7bfb"
        ],
        "x": 134,
        "y": 1659,
        "w": 532,
        "h": 222
    },
    {
        "id": "50313d23312de4cc",
        "type": "mqtt in",
        "z": "33e0254dbf653b67",
        "g": "6fe1584ddeb0c0b7",
        "name": "",
        "topic": "v1/devices/me/telemetry",
        "qos": "0",
        "datatype": "auto-detect",
        "broker": "0222eb30f00ea5a5",
        "nl": false,
        "rap": true,
        "rh": 0,
        "inputs": 0,
        "x": 530,
        "y": 1700,
        "wires": [
            []
        ]
    },
    {
        "id": "d5428b42286436d4",
        "type": "mqtt out",
        "z": "33e0254dbf653b67",
        "g": "6fe1584ddeb0c0b7",
        "name": "",
        "topic": "",
        "qos": "0",
        "retain": "false",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "0222eb30f00ea5a5",
        "x": 470,
        "y": 1840,
        "wires": []
    },
    {
        "id": "df10f1ea456a7bfb",
        "type": "inject",
        "z": "33e0254dbf653b67",
        "g": "6fe1584ddeb0c0b7",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "v1/devices/me/telemetry",
        "payload": "{\"gatew\":\"admin5555\",\"time\":153034324,\"tag1\":15.32,\"tag2\":0,\"tag3\":43,\"tag4\":\"33\"}",
        "payloadType": "json",
        "x": 230,
        "y": 1820,
        "wires": [
            [
                "d5428b42286436d4"
            ]
        ]
    },
    {
        "id": "0222eb30f00ea5a5",
        "type": "mqtt-broker",
        "name": "",
        "broker": "192.168.1.102",
        "port": "1883",
        "clientid": "22222",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "4",
        "keepalive": "60",
        "cleansession": false,
        "autoUnsubscribe": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closeQos": "0",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    }
]

2、MQTT订阅

使用MQTT in节点连接到MQTT代理并订阅来自指定主题的消息。输出的消息在payload中。

官方介绍

例如获取MQTT数据,并保存为全局变量,供其他数据调用。

[
    {
        "id": "f20508fd26c6e161",
        "type": "change",
        "z": "17ce5a554745ca34",
        "g": "e30d7ce5ea4d07ac",
        "name": "保存获取到的mqtt数据",
        "rules": [
            {
                "t": "set",
                "p": "1",
                "pt": "global",
                "to": "payload.uuid",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "2",
                "pt": "global",
                "to": "payload.facno",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "3",
                "pt": "global",
                "to": "payload.prono",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "4",
                "pt": "global",
                "to": "payload.equipcode",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "5",
                "pt": "global",
                "to": "payload.ip",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "6",
                "pt": "global",
                "to": "payload.status",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "7",
                "pt": "global",
                "to": "payload.mode",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "8",
                "pt": "global",
                "to": "payload.productionquantity",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 540,
        "y": 460,
        "wires": [
            []
        ]
    }
]
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号