Python实现MQTT订阅、发布

1、安装python Mqtt库

pip install paho-mqtt

2、封装后的Mqtt类(拷贝即用)

import configparser
import paho.mqtt.client as mqtt


class MqttService:
    """
    on_connect_func:连接MQTT回调函数,订阅主题时触发
    """
    def __init__(self,on_connect_func=None):
        self.config = configparser.ConfigParser()
        self.host = None
        self.port = 1883
        self.keepalive = 60
        self.name = None
        self.pwd = None
        self.mqtt_info = None
        self.InitMqtt(on_connect_func)
    """
    初始化MQTT配置信息
    """
    def InitMqtt(self,on_connect_func=None):
        self.config.read("mqttConfig.ini", encoding="gbk")
        self.host = self.config.get("MqttInfo", "Host")
        self.port = self.config.get("MqttInfo", "Port")
        self.keepalive = self.config.get("MqttInfo", "Keepalive")
        self.name = self.config.get("MqttInfo", "Name")
        self.pwd = self.config.get("MqttInfo", "Pwd")
        self.mqtt_info = mqtt.Client(protocol=3)
        self.mqtt_info.on_connect = on_connect_func
        self.mqtt_info.username_pw_set(self.name, self.pwd)
        self.mqtt_info.connect(host=self.host, port=int(self.port), keepalive=int(self.keepalive))

    """
    发布消息
    topic:主题
    payload:发布的数据
    qos:模式
    """
    def MqttPublish(self, topic=None, payload=None, qos=1):
        if topic is None or payload is None:
            return None
        self.mqtt_info.publish(topic=topic, payload=payload, qos=qos)
    """
    订阅消息
    topic:主题
    qos:模式
    msg_func:接收数据回调
    on_subscribe_func:订阅回调
    """
    def MqttSubscribe(self, topic=None, qos=1,msg_func=None,on_subscribe_func=None):
        if topic is None:
            return None
        self.mqtt_info.subscribe(topic, qos)
        self.mqtt_info.on_message = msg_func
        self.mqtt_info.on_subscribe = on_subscribe_func
        self.mqtt_info.loop_forever()

3、测试

import json

from mqttService import MqttService
def mqttmessage(client, userdata, msg):
    print("订阅的数据:"+msg.payload.decode('utf-8'))
def mqttconnect(client, userdata, flags, rc):
    print("连接成功:"+str(rc))
def mqttsubscribe(client,userdata,mid,granted_qos):
    print("消息订阅成功")
if __name__ == '__main__':
    mqtt = MqttService(on_connect_func=mqttconnect)
    #mqtt.MqttPublish(topic="test",payload="这是python发送的一条测试数据",qos=1)
    # print(res)
    mqtt.MqttSubscribe(topic="test",qos=1,msg_func=mqttmessage,on_subscribe_func=mqttsubscribe)

4、测试截图

 

 5、mqttConfig.ini内容

#mqtt信息
[MqttInfo]
Host = mqtt地址
Port = 1883
Keepalive = 60
Name = mqtt用户
Pwd = mqtt密码

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值