Python 连接 EMQX,并发布和订阅主题

下载包

file:[Terminal]
pip install paho-mqtt

编写函数

file:[src/mqtt_utils.py]
import paho.mqtt.client as mqtt

HOST = "localhost"
PORT = 1883
TIME = 60


# 定义发送主题的实体类对象
class Topic:
    def __init__(self, theme, qos, payload=None):
        # theme:主题
        self.theme = theme
        # qos:mqtt 质量
        self.qos = qos
        # payload:消息
        self.payload = payload


# 连接 EMQX
def connEmqx(client_id, username, password):
    c = mqtt.Client(client_id)
    c.username_pw_set(username, password)
    c.connect(HOST, PORT, TIME)
    return c


# 发布
def pubEmqx(client_id, username, password, topic: Topic):
    c = connEmqx(client_id, username, password)
    c.publish(topic=topic.theme, payload=topic.payload, qos=topic.qos)


# 订阅
def subEmqx(client_id, username, password, topic: Topic, on_message):
    c = connEmqx(client_id, username, password)
    c.on_message = on_message
    c.subscribe(topic=topic.theme, qos=topic.qos)
    c.loop_forever()

发布主题

file:[src/main.py]
from emqx_utils import Topic, pubEmqx

pub_data = json.dumps({'username': 'Himmelbleu'})

pubEmqx('pyclient1', 'pyclient1', '123456', Topic(theme='command', payload=pub_data, qos=0))

调用 pubEmqx 函数,填写客户端 ID、用户名和密码,将主题、消息、质量等传递给第四个参数。程序运行发布一个主题 command。

订阅主题

file:[src/main.py]
from emqx_utils import Topic, subEmqx

# 处理订阅的消息
def handleSubTopicMsg(client, userdata, msg):
    print(msg)

# 开始订阅
subEmqx('pyclient2', 'pyclient2', '123456', Topic(theme='command', qos=0), handleSubTopicMsg)

调用 subEmqx 函数,编写一个 handleSubTopicMsg 回调函数,当服务器有消息转发过来时就会触发回调函数,控制台就可以打印消息。

posted @   Himmelbleu  阅读(89)  评论(0编辑  收藏  举报
首页
随笔
博客园
我的
标签
管理
Python 连接 EMQX,并发布和订阅主题
发表于 2023-06-23 01:39
|
已有 89 人阅读
|
留下 0 条评论
|
全文字数 ≈ 83字

下载包

Terminal
BASH

pip install paho-mqtt

编写函数

src/mqtt_utils.py
PY

import paho.mqtt.client as mqtt

HOST = "localhost"
PORT = 1883
TIME = 60


# 定义发送主题的实体类对象
class Topic:
    def __init__(self, theme, qos, payload=None):
        # theme:主题
        self.theme = theme
        # qos:mqtt 质量
        self.qos = qos
        # payload:消息
        self.payload = payload


# 连接 EMQX
def connEmqx(client_id, username, password):
    c = mqtt.Client(client_id)
    c.username_pw_set(username, password)
    c.connect(HOST, PORT, TIME)
    return c


# 发布
def pubEmqx(client_id, username, password, topic: Topic):
    c = connEmqx(client_id, username, password)
    c.publish(topic=topic.theme, payload=topic.payload, qos=topic.qos)


# 订阅
def subEmqx(client_id, username, password, topic: Topic, on_message):
    c = connEmqx(client_id, username, password)
    c.on_message = on_message
    c.subscribe(topic=topic.theme, qos=topic.qos)
    c.loop_forever()

发布主题

src/main.py
PY

from emqx_utils import Topic, pubEmqx

pub_data = json.dumps({'username': 'Himmelbleu'})

pubEmqx('pyclient1', 'pyclient1', '123456', Topic(theme='command', payload=pub_data, qos=0))

调用 pubEmqx 函数,填写客户端 ID、用户名和密码,将主题、消息、质量等传递给第四个参数。程序运行发布一个主题 command。

订阅主题

src/main.py
PY

from emqx_utils import Topic, subEmqx

# 处理订阅的消息
def handleSubTopicMsg(client, userdata, msg):
    print(msg)

# 开始订阅
subEmqx('pyclient2', 'pyclient2', '123456', Topic(theme='command', qos=0), handleSubTopicMsg)

调用 subEmqx 函数,编写一个 handleSubTopicMsg 回调函数,当服务器有消息转发过来时就会触发回调函数,控制台就可以打印消息。

作者:Himmelbleu
出处: https://www.cnblogs.com/Himmelbleu/#/p/17498667
版权:本作品采用「 署名-非商业性使用-相同方式共享 4.0 国际 」许可协议进行许可。
文章目录
下载包
编写函数
发布主题
订阅主题
点击右上角即可分享
微信分享提示