python——发送mqtt消息

(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 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 = "msg"
        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()

(1.1)、我修改了自己对应的地址和端口,但是一直连接失败,因为没有配置连接需要的账号密码:

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

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

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

 

(1.2)、我的这个测试项目,要求topic有特定的格式,所以需要修改,还有这个topic不是以斜杠开头的:

 

(2)、重写publish,发布消息的方法

发送结果:

 

 

 (2.1)要求发送多条数据,每条数据带一个单独的时间,所以这里使用pandas,nm、ts字段对应的时间需要替换为参数:

nm对应的参数是str格式的时间:使用xx.strftime

ts对应的是毫秒:使用int(time.mktime(time.strptime(str(pd),'%Y-%m-%d %H:%M:%S')))

 

  (2.2)tags对应的内容,从打印的结果来看,其实是一个字典,但是字典里面的key是可变的,值也是随机的,所以需要单独生成字典后,再放进msg消息体中:

 

 

 

 (2.3)关于发送的msg,一般是json格式,需要使用json.dumps(msg)进行格式转换,才能被识别:

 

posted @ 2022-12-27 15:44  hushuer  阅读(1862)  评论(0编辑  收藏  举报