paho-mqtt

paho-mqtt介绍及安装

我们主要从pypi.org网站上进行学习,网址为https://pypi.org/project/paho-mqtt/。先把paho-mqtt安装起来。

pip3 install paho-mqtt -i https://pypi.douban.com/simple/

  

可以看到我们安装的是1.6.1版本。

paho-mqtt-1.6.1是Eclipse Paho MQTT Python client library,MQTT Python 客户端软件库,实现了MQTT protocol协议版本包括5.0, 3.1.1, 和 3.1。支持Python 2.7.9+ or 3.6+。提供了客服端的类,让客户端应用连接到MQTT broker,我们有时叫MQTT代理,有时叫服务器,用来发布消息,订阅主题和接收消息。Paho是 Eclipse Foundation 的一个开源项目。

对于python软件包的安装除了采用pip软件包管理器安装之外,也可以下载源代码进行安装,这里罗列一下:

首先下载,可以从github上下载,也可以从pypi网站上找到源代码,下载。例如:

git clone https://github.com/eclipse/paho.mqtt.python
cd paho.mqtt.python
python setup.py install

 

使用及API


我们看一下官网的例子,我们适当做些修改,修改了主题和MQTT服务器主机:

 

import paho.mqtt.client as mqtt

# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))

    # Subscribing in on_connect() means that if we lose the connection and
    # reconnect then subscriptions will be renewed.
    client.subscribe(topic="sensor1")

# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect("localhost", 1883, 60)

# Blocking call that processes network traffic, dispatches callbacks and
# handles reconnecting.
# Other loop*() functions are available that give a threaded interface and a
# manual interface.
client.loop_forever() 

 

在这段程序里,on_connect是一个回调函数,当client连接到MQTT服务器到时候执行on_connect回调函数,这个函数调用了订阅函数,订阅主题为"sensor1"的消息。on_message也是一个回调函数,当发布的消息被接收到的时候执行该函数。我们先运行体验一下。

运行程序: 

 

 

我们开了两个terminal,一个运行程序,一个采用mqtt命令发布消息,如上图所示。

 

Client


Client是实现MQTT 协议版本 3.1/3.1.1/5.0 的客户端类,是一个主要的与MQTT服务器(broker)的类。总体的用法如下:

使用 connect()/connect_async() 函数连接MQTT服务器(broker);

调用loop()函数来保持与MQTT服务器(broker)的网络通信;或者使用loop_start() 来设置一个loop()开始的运行线程;或者使用loop_forever() 处理loop()作为一个固定的函数;

用subscribe()来订阅主题并接收信息;

用publish()来发布消息给中间人;

用disconnect()来断开与MQTT服务器(broker)的连接;

初始化实例:

import paho.mqtt.client as mqtt
mqttc = mqtt.Client()

 

CLIENT()

 

Client(client_id="", clean_session=True, userdata=None, protocol=MQTTv311, transport="tcp")

参数说明:

client_id : 唯一的client id 字符串,当连接MQTT服务器(broker)时使用。如果client_id 长度为0,则会自动随机产生一个client_id。这种情况下 clean_session 参数必须为 True。

clean_session : 决定client 类型的bool 类型参数。如果为True,当client 失去连接时中间人将删除所有关于这个client 的信息。如果为 False,则说明这是一个持久的client,当失去连接时发布信息和队列中的消息将会被保持。注意,当失去连接时client 永远不会抛弃自己需要发出的信息,当调用connect()/reconnect() 后将会重新发送这些信息。 调用 reinitialise() 重置client到它初始化时的状态。

userdata:用户定义的任何类型的数据将被传输为userdata 参数到回调函数。后面可以使用user_data_set()函数来更新这个参数。

protocol:client使用的mqtt 版本。可以是 MQTTv31 或 MQTTv311。

transport:设置通信机制,"websockets" 或者"tcp",一个是WebSockets传输,一个是原始的TCP包。

 

reinitialise()

 

reinitialise(client_id="", clean_session=True, userdata=None)

如果client 已经被创建了,reinitialise() 函数重置 client 到它起始的状态. 它与Client()构造函数有相同的参数。

Connect / reconnect / disconnect

 

CONNECT()


connect(host, port=1883, keepalive=60, bind_address="")

connect()`函数使得client 连接到服务器broker。这是一个阻塞的函数,它有以下参数:

host:远程中间人的主机名或IP

port:服务端的端口。 默认是 1883。

keepalive:与中间人交流允许的最大时间段。如果没有信息交流,这控制client发送ping 消息到中间人的频率。

bind_address:本地网络IP

 

Callback

 


当client 从broker接收到CONNACK信息,将触发on_connect()回调函数。

 

Publishing/Subscribe / Unsubscribe


PUBLISH()


publish(topic, payload=None, qos=0, retain=False)

 

 

回调函数on_publish()

 

SUBSCRIBE()


subscribe(topic, qos=0)

on_subscribe()

 

UNSUBSCRIBE()

 


unsubscribe(topic)

回调函数


ON_CONNECT()


on_connect(client, userdata, flags, rc)

 

ON_MESSAGE()


on_message(client, userdata, message) 

posted @ 2023-02-09 00:10  断浪狂刀忆年少  阅读(593)  评论(0编辑  收藏  举报