基于python实现mqtt

前言

这篇博客更像是笔记吧,写这篇文章的原因是,看别人的博文排版真是一言难尽,还不好copy,为了自己未来使用得方便,还是记录一下吧。


安装mqtt库

mqtt库还是有几个的,不过从目前使用体验来说,还是paho-mqtt好用。

安装依赖包psutil和paho-mqtt

pip install psutil
pip install paho-mqtt

消息发布代码

#!/usr/bin/env python
#coding:utf-8

import time
import json
import psutil
import random
from paho.mqtt import client as mqtt_client

broker = 'broker.emqx.io'  # mqtt代理服务器地址
port = 1883
keepalive = 60     # 与代理通信之间允许的最长时间段(以秒为单位)              
topic = "/python/mqtt"  # 消息主题
client_id = f'python-mqtt-pub-{random.randint(0, 1000)}'  # 客户端id不能重复

def to_M(n):
    '''将B转换为M'''
    u = 1024 * 1024
    m = round(n / u, 2)
    return m

def get_info():
    '''获取系统硬件信息:cpu利用率,cpu个数,系统负载,内存信息等'''
    cpu_percent = psutil.cpu_percent(interval=1)
    cpu_count = psutil.cpu_count()
    sys_loadavg = [round(x / psutil.cpu_count() * 100, 2) for x in psutil.getloadavg()]
    mem = psutil.virtual_memory()
    mem_total, men_free = to_M(mem.total), to_M(mem.free)
    mem_percent = mem.percent
    info = {
        'cpu_percent': cpu_percent,
        'cpu_count' : cpu_count,
        'sys_loadavg': sys_loadavg,
        'mem_total': mem_total,
        'mem_percent': mem_percent,
        'men_free': men_free
    }
    # mqtt只能传输字符串数据
    return json.dumps(info)

def connect_mqtt():
    '''连接mqtt代理服务器'''
    def on_connect(client, userdata, flags, rc):
        '''连接回调函数'''
        # 响应状态码为0表示连接成功
        if rc == 0:
            print("Connected to MQTT OK!")
        else:
            print("Failed to connect, return code %d\n", rc)
    # 连接mqtt代理服务器,并获取连接引用
    client = mqtt_client.Client(client_id)
    client.on_connect = on_connect
    client.connect(broker, port, keepalive)
    return client

def publish(client):
    '''发布消息'''
    while True:
        '''每隔4秒发布一次服务器信息'''
        time.sleep(4)
        msg = get_info()
        result = client.publish(topic, msg)
        status = result[0]
        if status == 0:
            print(f"Send `{msg}` to topic `{topic}`")
        else:
            print(f"Failed to send message to topic {topic}")

def run():
    '''运行发布者'''
    client = connect_mqtt()
    # 运行一个线程来自动调用loop()处理网络事件, 非阻塞
    client.loop_start()
    publish(client)

if __name__ == '__main__':
    run()

消息订阅代码

#!/usr/bin/env python
#coding:utf-8

import random
from paho.mqtt import client as mqtt_client


broker = 'broker.emqx.io'  # mqtt代理服务器地址
port = 1883
keepalive = 60     # 与代理通信之间允许的最长时间段(以秒为单位)              
topic = "/python/mqtt"  # 消息主题
client_id = f'python-mqtt-sub-{random.randint(0, 1000)}'  # 客户端id不能重复

def connect_mqtt():
    '''连接mqtt代理服务器'''
    def on_connect(client, userdata, flags, rc):
        '''连接回调函数'''
        # 响应状态码为0表示连接成功
        if rc == 0:
            print("Connected to MQTT OK!")
        else:
            print("Failed to connect, return code %d\n", rc)

    client = mqtt_client.Client(client_id)
    client.on_connect = on_connect
    client.connect(broker, port, keepalive )
    return client

def subscribe(client: mqtt_client):
    '''订阅主题并接收消息'''
    def on_message(client, userdata, msg):
        '''订阅消息回调函数'''
        print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")
    # 订阅指定消息主题
    client.subscribe(topic)
    client.on_message = on_message


def run():
    # 运行订阅者
    client = connect_mqtt()
    subscribe(client)
    #  运行一个线程来自动调用loop()处理网络事件, 阻塞模式
    client.loop_forever()


if __name__ == '__main__':
    run()

简评

可以用这两个例子相互测试。还有什么想了解的欢迎评论区留言。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
PythonMQTT进行封装的库有很多,其中比较常用的有paho-mqttmqtt-python。这两个库都是基于Python语言实现MQTT客户端,提供了简单易用的API,方便开发者进行MQTT通信。 下面分别介绍这两个库的使用方法: 1. paho-mqtt paho-mqtt是一个Python实现MQTT客户端库,支持MQTT v3.1和v3.1.1协议。它提供了多种MQTT通信模式,如发布/订阅模式、请求/响应模式等。 安装paho-mqtt库: ``` pip install paho-mqtt ``` 使用paho-mqtt库进行MQTT通信: ```python import paho.mqtt.client as mqtt # 连接MQTT服务器 client = mqtt.Client() client.connect("localhost", 1883, 60) # 发布消息 client.publish("topic/test", "Hello, MQTT!") # 订阅主题 def on_message(client, userdata, msg): print(msg.topic + " " + str(msg.payload)) client.on_message = on_message client.subscribe("topic/test") # 开始循环监听MQTT消息 client.loop_forever() ``` 2. mqtt-python mqtt-python是另一个Python实现MQTT客户端库,同样支持MQTT v3.1和v3.1.1协议。它提供了MQTT客户端和MQTT broker两种模式,方便开发者进行MQTT通信。 安装mqtt-python库: ``` pip install mqtt-python ``` 使用mqtt-python库进行MQTT通信: ```python from mqtt import MQTTClient # 连接MQTT服务器 client = MQTTClient("client_id", "localhost", 1883) client.connect() # 发布消息 client.publish("topic/test", "Hello, MQTT!") # 订阅主题 def on_message(topic, message): print(topic + " " + message) client.on_message = on_message client.subscribe("topic/test") # 开始循环监听MQTT消息 client.loop_forever() ``` 以上是paho-mqttmqtt-python库的基本用法,具体的API和使用方法可以参考官方文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星羽空间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值