首页 > 编程语言 >python——发送mqtt消息

python——发送mqtt消息

时间:2022-12-27 15:57:08浏览次数:39  
标签:python percent 发送 mem mqtt client connect cpu

(1)创建mqtt连接

参考https://www.jianshu.com/p/06d23de47aed

文中写的发布消息代码如下:

文件名:mypub.py


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

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

broker = '127.0.0.1'  # 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()

我修改了自己对应的地址和端口,但是一直连接失败:

 

使用mqtt客户端工具就能连接成功:

 

然后发现是客户端工具——选项中,配置了登录时的账号、密码:

 

所以在截图位置,添加一行设置账号密码的配置,连接成功:

 

 参考:https://blog.csdn.net/qq_40423339/article/details/99437695?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-99437695-blog-127768031.pc_relevant_landingrelevant&spm=1001.2101.3001.4242.2&utm_relevant_index=4

 

标签:python,percent,发送,mem,mqtt,client,connect,cpu
From: https://www.cnblogs.com/hushuer/p/17008226.html

相关文章

  • OpenCV-Python learning-7.运算性能
    本节说明opencv-python对于性能的度量和优化。以下为代码部分:%matplotlibinlineimportcv2importmatplotlib.pyplotaspltimg=cv2.imread('e:/rotman.jpg')plt.imshow(......
  • 关于python环境中安装OpenSSL模块报错-ERROR: Could not find a version that satisfi
    因为需要在代码中importOpenSSL,笔者就准备使用pip3install的方式安装 OpenSSL,结果报如下错误:[qq5201351@localhost~]$pip3installOpenSSLERROR:Couldnotfi......
  • 高性能 Python web 框架 Blacksheep 初见
    Pythonweb框架性能对比一说到Python大家多半最先想到的就是它代码的简洁与性能的孱弱。在我所使用体验过的Pythonweb框架中Tornado性能最好,Flask次之,Django最差......
  • 10个中文成语,10种Python初学者常见错误
    哈喽兄弟们,我总结了Python中十种新手常见的错误,每一个都可以用成语来形容,看看各位遇到过多少次了!一、画蛇添足多余的分号Python语言与大多数编程语言不相同,它的......
  • Ant发送接口测试报告到邮箱
    接口测试完成后生成测试报告的同时通过邮箱发送进行汇报接口测试结果,可以结合jenkins+ant+jmeter配置发送到指定邮箱来完成。一、jenkins+ant+jmeter的配置jenkins+ant+j......
  • URL分解之InternetCrackUrl函数——就是python的urlparse
    URL分解之InternetCrackUrl函数 背景近期使用WININET库写的一个数据上传、下载的客户端小程序,上传数据到网站服务器和从网站服务器下载数据到本地。由于,对WININET库部......
  • Python中的列表条件求和方法
    列表条件求和方法 list_data=[[1.0,'配件','522422','铝扣板用纽扣','金色','',72.0,'PC',''],[2.0,'配件','500031','十字槽沉头自钻自攻螺钉4......
  • Python循环任务,错误打包输出
    有时候,多个任务循环在跑,但不想中间任何一个错误,停止主线程,但又想在主线程运行结束后,采集运行过程中所有的错误信息。这种刁钻的想法,我自问自答,记录一下操作方法。......
  • python mysql操作,更新数据
    importmysql.connectortest_db=mysql.connector.connect(host="localhost",user="root",passwd="123456",database="test")test_cursor=test_db.cursor()将......
  • Python知识点收集
    带下划线的变量和函数的意义变量(函数类似)-前带单下划线'_'的变量,是一个'私有变量'(语义化),只用于类内部使用,实例还是可以访问到这个变量-前带双下划线'__'的......