项目描述
本文档介绍了Eclipse PahoMQTT Python 编程语言客户端库的源代码,该库实现了MQTT 协议版本3.1 和3.1.1。
此代码提供了一个客户端类,允许应用程序连接到MQTT 代理以发布消息、订阅主题和接收已发布的消息。它还提供了一些辅助函数,使向MQTT 服务器发布一次性消息变得非常容易。
支持Python编程语言2.7或3.x,但对Python编程语言2.6的支持有限。
MQTT 协议是一种机器对机器(M2M)/“物联网”连接协议。它被设计为一种非常轻量级的发布/订阅消息传输,当需要较小的代码占用空间或网络带宽非常昂贵时,对于连接到远程位置非常有用。
Paho 是Eclipse 基金会的一个项目。
内容
安装
用法和API
客户
构造函数/重新初始化
可选功能
连接/重新连接/断开
网络环路
出版物
订阅/取消订阅
回电
外部事件循环支持
全局辅助函数
发布
单身的
多种的
订阅
简单的
使用回调
报告错误
了解更多信息
安装
最新的稳定版本可在Python 编程语言包索引(PyPi) 中找到。
pip 安装paho-mqtt
或者使用虚拟环境。
virtualenvpaho-mqtt
来源paho-mqtt/bin/activate
pip 安装paho-mqtt
要获取完整的代码(包括示例和测试),请克隆git 存储库。
git克隆https://github.com/eclipse/paho.mqtt.python
获得代码后,您还可以从存储库安装它。
cd paho.mqtt.python
Python setup.py 安装
用法和API
详细的API 文档可在pydoc 中找到。示例位于示例目录中。
该软件包包含两个模块:一个完整的客户端和一个简单的发布助手。
入门
下面是一个非常简单的示例,它订阅代理$SYS 主题树并打印结果消息。
将paho.mqtt.client 导入为mqtt
# 客户端收到服务器的CONNACK 响应时的回调。
def on_connect(客户端,用户数据,标志,rc):
print(\’已连接结果代码\’+str(rc))
# 如果使用on_connect() 订阅,连接将会丢失并且
# 重新连接将更新您的订阅。
客户端.subscribe(\’$SYS/#\’)
# 当从服务器收到PUBLISH 消息时回调。
def on_message(客户端,用户数据,消息):
print(msg.topic+\’ \’+str(msg.payload))
客户端=mqtt.Client()
客户端.on_connect=on_connect
client.on_message=消息上
client.connect(\’iot.eclipse.org\’, 1883, 60)
# 处理网络流量,调度回调,
# 处理重新连接。
# 线程接口和
# 手动界面。
client.loop_forever()
客户端
客户端类可以用作类中的实例,也可以通过子类化来使用。一般使用流程如下:
创建客户端实例
使用connect*() 函数之一连接到您的经纪商。
要维护代理流量,请调用loop*() 函数之一。
使用subscribe() 订阅主题并接收消息
使用publish()将消息发布到代理。
使用disconnect() 断开与代理的连接。
调用回调以便应用程序可以根据需要处理事件。这些回调的解释如下。
构造函数/重新初始化
CLIENT()
客户端(client_id=\’\’,clean_session=True,userdata=None,协议=MQTTv311,transport=\’tcp\’)
Client() 构造函数采用以下参数:
客户ID
连接到代理时使用的唯一客户端ID 字符串。如果client_id的长度为0或None,则会生成一个随机生成的。在这种情况下,clean_session 参数必须为True。
干净的会话
确定客户端类型的布尔值。如果为True,则代理在断开连接时会删除有关该客户端的所有信息。如果为False,则客户端是持久客户端,即使客户端断开连接,订阅信息和排队消息也会保留。
请注意,客户端在断开连接时绝不会丢弃自己的传出消息。调用connect() 或reconnect() 将重新发送消息。使用reinitialise() 将客户端重置为原始状态。
用户数据
userdata 作为参数传递给回调的任何类型的用户定义数据。您可以稍后使用user_data_set() 函数更新它。
协议
用于此客户端的MQTT 协议版本。您可以使用MQTTv31 或MQTTv311
运输
设置为“websocket kets”以通过WebSocket 发送MQTT。要使用原始TCP,请保留默认的“tcp”。
构造函数示例
将paho.mqtt.client 导入为mqtt
mqttc=mqtt.Client()
REINITIALISE()
重新初始化(client_id=\’\’,clean_session=True,userdata=None)
reinitialise() 函数将客户端重置为启动状态,就像刚刚创建一样。接受与Client() 构造函数相同的参数。
重新初始化示例
mqttc.重新初始化()
选项函数
这些函数代表可以在客户端上设置以更改其行为的选项。在大多数情况下,这应该在连接到代理之前完成。
MAX_INFLIGHT_MESSAGES_SET()
max_inflight_messages_set(自身,机上)
配置一次可以通过一部分网络流的QoS0 消息的最大数量。
默认值为20。增加此值会消耗更多内存,但会增加吞吐量。
MAX_QUEUED_MESSAGES_SET()
max_queued_messages_set(自身,队列大小)
配置传出消息队列中可以保存的QoS0 传出消息的最大数量。
默认0.0表示没有限制。一旦队列已满,进一步的传出消息将被删除。
MESSAGE_RETRY_SET()
message_retry_set(重试)
设置代理未响应时重试QoS0 消息之前的时间(以秒为单位)。
默认情况下,该值设置为5 秒,通常不需要更改。
TLS_SET()
tls_set(ca_certs, certfile=无, keyfile=无, cert_reqs=ssl.CERT_REQUIRED,
tls_version=ssl.PROTOCOL_TLSv1,密码=无)
配置网络加密和身份验证选项。启用SSL/TLS 支持。
ca_证书
被视为受此客户端信任的证书颁发机构的证书文件的字符串路径。如果这是唯一的选项,则客户端的行为方式类似于Web 浏览器。这意味着代理必须拥有由ca_certs 中的证书颁发机构签名的证书,并且将使用TLS v1 进行通信,但不会尝试任何形式的身份验证。这提供了基本的网络加密,但可能还不够,具体取决于您的代理配置。
证书文件、密钥文件
分别指向PEM 编码的客户端证书和私钥的字符串。如果这些参数不是None,它们将用作基于TLS 身份验证的客户端信息。对此功能的支持取决于代理。请注意,如果其中任何文件已加密并且需要密码才能解密,Python 编程语言将在命令行上提示输入密码。目前无法定义提供密码的回调。
证书请求
定义客户端对代理施加的证书要求。默认情况下,这是ssl.CERT_REQUIRED,这意味着代理必须提供证书。有关此参数的更多信息,请参阅ssl pydoc。
tls_版本
指定要使用的SSL/TLS 协议版本。默认情况下使用TLS v1。以前的版本(均以SSL 开头)是可能的,但由于潜在的安全问题,不推荐使用。
密码学
指定此连接允许使用哪些加密的字符串。指定None 以使用默认值。有关详细信息,请参阅SSL pydoc。
必须在connect*() 之前调用。
TLS_INSECURE_SET()
tls_insecure_set(值)
使用服务器证书配置服务器主机名验证。
如果该值设置为True,则无法保证您正在连接的主机不会模拟服务器。尽管这对于初始服务器测试很有用,但恶意第三方可以通过DNS 欺骗来冒充您的服务器。
不要在实际系统中使用此功能。将值设置为True 意味着不需要使用加密。
必须在连接之前调用*)。
USERNAME_PW_SET()
username_pw_set(用户名,密码=无)
设置代理身份验证的用户名和密码(可选)。必须在connect*() 之前调用。
USER_DATA_SET()
user_data_set(用户数据)
设置生成事件时传递给回调的私有用户数据。请将其用于您自己的目的以支持您的应用程序。
WILL_SET()
will_set(主题,有效负载=无,qos=0,保留=False)
立一份遗嘱并发送给您的代理人。如果客户端在没有调用disconnect()的情况下断开连接,代理将代表客户端发布消息。
话题
以帖子为准。
有效负载
作为遗嘱发送的消息。如果未指定或设置为“无”,则将使用零长度消息作为意愿。传递int 或float 会将有效负载转换为表示数字的字符串。如果您想发送真正的int/float,请使用struct.pack() 创建所需的负载。
服务质量
使用消息服务质量级别。
保留
如果设置为True,该消息将被设置为该主题的“最后已知项目”/保留消息。
如果qos 不是0、1 或2、主题为None 或字符串长度为0,则会引发ValueError。
连接/重新连接/断开连接
CONNECT()
连接(主机,端口=1883,keepalive=60,绑定地址=\’\’)
connect() 函数将客户端连接到代理。这是一个阻塞函数。接受以下参数:
主持人
远程代理主机名或IP 地址
港口
要连接的服务器主机的网络端口。默认值为1883。请注意,MQTT over SSL/TLS 的默认端口为8883,因此您在使用tls_set() 时可能需要手动指定端口。
活着
与代理通信之间允许的最长时间(以秒为单位)。这控制在没有交换其他消息的情况下客户端向代理发送ping 消息的速度。
绑定地址
该客户端绑定到的本地网络接口的IP 地址(假设存在多个接口)。
Callback
当客户端从代理接收到响应连接的CONNACK 消息时,客户端会生成on_connect() 回调。
连接示例
mqttc.connect(\’iot.eclipse.org\’)
CONNECT_ASYNC()
connect_async(主机,端口=1883,keepalive=60,绑定地址=\’\’)
与loop_start()结合使用以非阻塞方式连接。直到调用loop_start() 后连接才完成。
Callback (connect)
当客户端从代理接收到响应连接的CONNACK 消息时,客户端会生成on_connect() 回调。
CONNECT_SRV()
connect_srv(域, keepalive=60, 绑定地址=\’\’)
使用SRV DNS 查找连接到代理并获取代理地址。它需要以下参数:
领域
用于查找SRV 记录的DNS 域。如果没有,请尝试检查您的本地域名。
有关keep-alive 和binding_address 参数的说明,请参阅connect()。
Callback (connect_srv)
当客户端从代理接收到响应连接的CONNACK 消息时,客户端会生成on_connect() 回调。
SRV Connect Example
mqttc.connect_srv(\’eclipse.org\’)
RECONNECT()
重新连接()
使用之前提供的详细信息重新连接到您的经纪人。调用此函数之前必须先调用connect*()。
Callback (reconnect)
当客户端从代理接收到响应连接的CONNACK 消息时,客户端会生成on_connect() 回调。
DISCONNECT()
断开()
完全断开与代理的连接。使用disconnect()不会导致代理发送遗嘱消息。
Callback (disconnect)
当客户端发送断开连接消息时,会生成on_disconnect() 回调。
Network loop
这些功能是我们客户的驱动力。如果不调用它们,传入的网络数据将不会被处理,传出的网络数据可能无法及时发送。有四个选项可用于管理网络环路。我们将在这里讨论三个。第四个将在下面的“外部事件循环支持”中讨论。不要混合不同的循环函数。
LOOP()
循环(超时=1.0,最大数据包=1)
定期调用以处理网络事件。此调用在select() 内等待,直到网络套接字可根据需要进行读取或写入,然后处理传入/传出数据。该函数会阻塞直到超时秒。超时不得超过客户端的keepalive 值。如果没有超过,代理将定期断开客户端连接。
max_packets 参数已弃用,不应设置。
Loop Example
运行=真
跑步:
mqttc.loop()
LOOP_START/LOOP_STOP
循环开始()
循环停止(强制=False)
这些函数实现网络循环的线程接口。在connect*()之前和之后调用一次loop_start()可以在后台运行一个线程并自动调用loop()。这会释放主线程并使其可用于其他可能会阻塞的工作。此调用还处理重新连接到代理。要停止后台线程,请调用loop_stop()。目前忽略力参数。
Loop Start/Stop Example
mqttc.connect(\’iot.eclipse.org\’)
mqttc.loop_start()
而True:
温度=sensor.blocking_read()
mqttc.publish(\’泛美卫生组织/温度\’, 温度)
LOOP_FOREVER()
Loop_forever(超时=1.0,max_packets=1,retry_first_connection=False)
这是网络循环的阻塞形式,直到客户端调用disconnect() 才会返回。重新连接将自动处理。
使用connect_async 时,除了第一次连接尝试外,还可以使用retry_first_connection=True 重试第一次连接。警告:这可能会造成客户端继续连接到不存在的主机而不会失败的情况。
timeout 和max_packets 参数已弃用,应保持未设置状态。
Publishing
从客户端向代理发送消息。
PUBLISH()
公共(主题,有效负载=无,qos=0,保留=False)
这会将消息发送到代理,然后代理将消息发送到订阅匹配主题的客户端。它需要以下参数:
话题
要发布消息的主题
有效负载
您发送的实际消息。如果未指定或设置为None,则使用零长度消息。传递int 或float 会将有效负载转换为表示数字的字符串。如果您想发送真正的int/float,请使用struct.pack() 创建所需的负载。
服务质量
使用的服务质量级别
保留
如果设置为True,该消息将被设置为该主题的“最后已知项目”/保留消息。
(C++11 起) 返回元组(结果、中间值)。结果是MQTT_ERR_SUCCESS 表示成功,或者MQTT_ERR_NO_CONN 如果客户端当前未连接。中间是发布请求的消息ID。您可以通过检查on_publish() 回调的中间参数(如果已定义)来使用中间值来跟踪发布请求。
如果主题为None、长度为0 或无效(包含通配符)、qos 不是0、1 或2,或者负载长度大于268435455 bytes ,则引发ValueError 。
Callback (publish)
当消息发送到代理时,会生成on_publish() 回调。
Subscribe / Unsubscribe
SUBSCRIBE()
订阅(主题,qos=0)
为客户订阅一个或多个主题。
该函数可以通过三种不同的方式调用:
Simple string and integer
例如,订阅(\’我的/主题\’,2)
话题
指定要订阅的订阅主题的字符串。
服务质量
订阅所需的服务质量级别。默认值为0。
字符串和整数元组
例如,订阅((\’我的/主题\’,1))
话题
(topic, qos) 的元组。主题和QOS 都必须出现在元组中。
服务质量
没用过。
字符串和整数元组列表
例如,订阅([(\’我的/主题\’,0),(\’另一个/主题\’,2)])
这允许您使用单个SUBSCRIPTION 命令订阅多个主题,这比多次调用subscribe() 更有效。
话题
格式元组列表(主题、QOS)。每个元组中都必须存在主题和QOS。
服务质量
没用过。
该函数返回一个元组(结果,中)。在此元组中,结果MQTT_ERR_SUCCESS 表示成功。如果客户端当前未连接,则返回(MQTT_ERR_NO_CONN, None)。中间是订阅请求的消息ID。通过检查on_subscribe() 回调中的中间参数是否定义,可以使用中间值来跟踪订阅请求。
如果qos 不是0、1 或2,如果topic 为None 或字符串长度为0,或者如果topic 不是字符串、元组或列表,则会引发ValueError。
Callback (subscribe)
一旦代理确认订阅,它就会生成on_subscribe() 回调。
UNSUBSCRIBE()
取消订阅(主题)
取消客户端订阅一个或多个主题。
话题
要取消订阅的已订阅主题的单个字符串或字符串列表。
(自C++11 起)返回一个元组(结果,中间),结果MQTT_ERR_SUCCESS 指示成功,如果客户端当前未连接,则返回(MQTT_ERR_NO_CONN, None)。中间是取消订阅请求的消息ID。通过检查on_unsubscribe() 回调(如果已定义)中的中间参数,可以使用中间值来跟踪取消订阅请求。
如果subject 为None、字符串长度为零或者不是字符串或列表,则会引发ValueError。
Callback (unsubscribe)
当代理确认取消订阅时,它会生成on_unsubscribe() 回调。
Callbacks
ON_CONNECT()
on_connect(客户端,用户数据,标志,rc)
当代理响应连接请求时调用。
客户
此回调的客户端实例
用户数据
使用Client() 或userdata_set() 设置私有用户数据
旗帜
代理发送的响应标志
无线电控制
连接结果
flags 是包含来自代理的响应标志的判决。
flags[‘session present’] – 该标志对以下客户端有用
仅使用设置为0 的清洁会话。当clean session=0 的客户端重新连接到先前连接的代理时,此标志指示代理是否仍然拥有客户端的会话信息。如果为1,则会话仍然存在。
rc 的值表示成功或失败。
0:连接成功1:连接被拒绝- 协议版本不正确2:连接被拒绝- 客户端标识符无效3:连接被拒绝- 服务器不可用4:连接被拒绝- 用户名或密码不正确5:连接被拒绝- 无效6-255:当前不在使用。
On Connect示例
def on_connect(客户端,用户数据,标志,rc):
print(\’连接返回结果: \’+connack_string(rc))
mqttc.on_connect=on_connect
.
ON_DISCONNECT()
on_disconnect(客户端,用户数据,rc)
当客户端与代理断开连接时调用。
客户
此回调的客户端实例
用户数据
在客户端(
)或userdata_set()中设置的私有用户数据
rc
断开连接结果
rc参数表示断开状态。如果MQTT_ERR_SUCCESS(0),则调用回调以响应disconnect()调用。如果有任何其他值,则断开是意外的,例如可能由网络错误引起。
断开连接示例
def on_disconnect(client, userdata, rc):
if rc != 0:
print(\”Unexpected disconnection.\”)
mqttc.on_disconnect = on_disconnect
…
ON_MESSAGE()
on_message(client, userdata, message)
当收到关于客户端订阅的主题的消息时调用。将为收到的每条消息调用此回调。使用message_callback_add()定义将为特定主题过滤器调用的多个回调。
client
此回调的客户端实例
userdata
在Client()或userdata_set()中设置的私有用户数据
message
MQTTMessage的一个实例。这是一个具有成员 topic, payload, qos, retain。
关于消息示例
def on_message(client, userdata, message):
print(\”Received message \’\” + str(message.payload) + \”\’ on topic \’\”
+ message.topic + \”\’ with QoS \” + str(message.qos))
mqttc.on_message = on_message
…
MESSAGE_CALLBACK_ADD()
此函数允许您定义处理特定订阅过滤器传入消息的回调,包括使用通配符。例如,这使您可以订阅传感器/#,并有一个回调来处理传感器/温度,另一个回调来处理传感器/湿度。
message_callback_add(sub, callback)
sub
此回调要匹配的订阅过滤器。每个文字子字符串只能定义一个回调
callback
要使用的回调。采用与on_message回调相同的形式。
如果使用message_callback_add()和on_message,只有与订阅特定过滤器不匹配的消息才会传递给on_message回调。
MESSAGE_CALLBACK_REMOVE()
删除以前使用message_callback_add()注册的主题/订阅特定回调。
message_callback_remove(sub)
sub
要删除的订阅过滤器
ON_PUBLISH()
on_publish(client, userdata, mid)
当要使用发布()调用发送的消息完成到代理的传输时调用。对于QoS级别为1和2的消息,这意味着适当的握手已经完成。对于QoS 0,这仅仅意味着消息已经离开客户端。中间变量与从相应的发布()调用返回的中间变量匹配,以允许跟踪传出消息。
这个回调很重要,因为即使发布()调用返回成功,它也并不总是意味着消息已经发送。
ON_SUBSCRIBE()
on_subscribe(client, userdata, mid, granted_qos)
当代理响应订阅请求时调用。中间变量与从相应的订阅()调用返回的中间变量匹配。granted_qos变量是一个整数列表,给出代理为每个不同订阅请求授予的QoS级别。
ON_UNSUBSCRIBE()
on_unsubscribe(client, userdata, mid)
当代理响应取消订阅请求时调用。中间变量与从相应的取消订阅()调用返回的中间变量匹配。
ON_LOG()
on_log(client, userdata, level, buf)
当客户端有日志信息时调用。定义为允许调试。级别变量给出消息的严重性,将是MQTT_LOG_INFO、MQTT_LOG_NOTICE、MQTT_LOG_WARNING、MQTT_LOG_ERR和MQTT_LOG_DEBUG之一。消息本身处于buf状态。
外部事件循环支持
LOOP_READ()
loop_read(max_packets=1)
当套接字准备好读取时调用。max_packets已过时,应保持未设置状态。
LOOP_WRITE()
loop_write(max_packets=1)
当套接字准备好写入时调用。max_packets已过时,应保持未设置状态。
LOOP_MISC()
loop_misc()
每隔几秒钟调用一次以处理消息重试和ping。
SOCKET()
socket()
返回客户端中使用的套接字对象以允许与其他事件循环交互。
WANT_WRITE()
want_write()
如果有数据等待写入,则返回true,以允许客户端与其他事件循环连接。
全局辅助函数
客户端模块还提供了一些全局帮助函数。
topic_matches_sub(sub, topic) 可用于检查主题是否与订阅匹配。
例如:
主题foo/bar 将匹配订阅foo/#或+/bar
主题non/matching 与订阅non/+/+不匹配
connack_string(connack_code)返回与CONNACK结果关联的错误字符串。
error_string(mqtt_errno)返回与Paho MQTT错误号关联的错误字符串。
Publish
该模块提供了一些帮助函数,允许以单样本方式直接发布消息。换句话说,它们对于您想要发布到代理的单个/多个消息,然后不需要其他任何东西而断开连接的情况很有用。
提供的两个函数是one()和multi()。
Single
向代理发布一条消息,然后干净地断开连接。
single(topic, payload=None, qos=0, retain=False, hostname=\”localhost\”,
port=1883, client_id=\”\”, keepalive=60, will=None, auth=None, tls=None,
protocol=mqtt.MQTTv311, transport=\”tcp\”)
发布单函数论证
topic
唯一必需的参数必须是将有效负载发布到的主题字符串。
payload
要发布的有效负载。如果“”或无,将发布长度为零的有效负载。
qos
发布时使用的qos,默认为0。
retain
将消息设置为保留(True)或不保留(False)。
hostname
包含要连接的代理地址的字符串。默认为localhost。
port
要连接到代理的端口。默认为1883。
client_id
要使用的MQTT客户端ID。如果“”或无,Paho库将自动生成客户端ID。
keepalive
客户端的保持活动超时值。默认为60秒。
will
包含客户端的will参数的ute:
will = {‘topic’: “<topic>”, ‘payload’:”<payload”>, ‘qos’:<qos>, ‘retain’:<retain>}.
主题是必需的,所有其他参数都是可选的,将分别默认为None, 0和False。
默认为无,表示不应该使用意志。
auth
包含客户端身份验证参数的ute:
auth = {‘username’:”<username>”, ‘password’:”<password>”}
用户名是必需的,密码是可选的,如果不提供,将默认为无。
默认为无,表示不使用身份验证。
tls
包含客户端TLS配置参数的:
dict = {‘ca_certs’:”<ca_certs>”, ‘certfile’:”<certfile>”, ‘keyfile’:”<keyfile>”, ‘tls_version’:”<tls_version>”, ‘ciphers’:”<ciphers”>}
ca_certs是必需的,所有其他参数都是可选的,如果不提供,将默认为无,这会导致客户端使用默认行为-请参阅paho. mqtt.client留档。
默认为无,表示不应使用TLS。
protocol
选择要使用的MQTT协议版本。使用MQTTv31或MQTTv311。
transport
设置为“websocket kets”以通过WebSockets发送MQTT。默认保留“tcp”以使用原始TCP。
发布单个示例
import paho.mqtt.publish as publish
publish.single(\”paho/test/single\”, \”payload\”, hostname=\”iot.eclipse.org\”)
Multiple
将多条消息发布到代理,然后干净地断开连接。
multiple(msgs, hostname=\”localhost\”, port=1883, client_id=\”\”, keepalive=60,
will=None, auth=None, tls=None, protocol=mqtt.MQTTv311, transport=\”tcp\”)
发布多功能论证
msgs
要发布的消息列表。每条消息要么是一个判决,要么是一个元组。
如果判决,则只能存在主题。默认值将用于任何缺失的参数。判决必须采用以下形式:
msg = {‘topic’:”<topic>”, ‘payload’:”<payload>”, ‘qos’:<qos>, ‘retain’:<retain>}
主题必须存在,并且不能为空。如果有效负载为“”、无或不存在,则将发布长度为零的有效负载。如果qos不存在,则使用默认值0。如果保留不存在,则使用默认值False。
如果是元组,那么它必须是以下形式:
(“<topic>”, “<payload>”, qos, retain)
有关hostname, port, client_id, keepalive, will, auth, tls, protocol, transport 的描述,请参见sing()。
发布多个示例
import paho.mqtt.publish as publish
msgs = [{\’topic\’:\”paho/test/multiple\”, \’payload\’:\”multiple 1\”},
(\”paho/test/multiple\”, \”multiple 2\”, 0, False)]
publish.multiple(msgs, hostname=\”iot.eclipse.org\”)
Subscribe
该模块提供了一些帮助函数来允许直接订阅和处理消息。
提供的两个函数是Simple()和callback()。
Simple
订阅一组主题并返回收到的消息。这是一个阻塞功能。
simple(topics, qos=0, msg_count=1, retained=False, hostname=\”localhost\”,
port=1883, client_id=\”\”, keepalive=60, will=None, auth=None, tls=None,
protocol=mqtt.MQTTv311)
简单的订阅功能论证
topics
唯一需要的参数是客户端将订阅的主题字符串。如果应订阅多个主题,这可以是字符串或字符串列表。
qos
订阅时使用的qos默认为0。
msg_count
要从代理检索的消息数。默认为1。如果为1,则返回单个MQTTMessage对象。如果>1,将返回MQTTMessages列表。
retained
设置为True以考虑保留的消息,设置为False以忽略设置了保留标志的消息。
hostname
包含要连接的代理地址的字符串。默认为localhost。
port
要连接到代理的端口。默认为1883。
client_id
要使用的MQTT客户端ID。如果“”或无,Paho库将自动生成客户端ID。
keepalive
客户端的保持活动超时值。默认为60秒。
will
包含客户端的will参数的ute:
will = {‘topic’: “<topic>”, ‘payload’:”<payload”>, ‘qos’:<qos>, ‘retain’:<retain>}.
主题是必需的,所有其他参数都是可选的,将分别默认为无、0和False。
默认为无,表示不应该使用意志。
auth
包含客户端身份验证参数的ute:
auth = {‘username’:”<username>”, ‘password’:”<password>”}
用户名是必需的,密码是可选的,如果不提供,将默认为无。
默认为无,表示不使用身份验证。
tls
包含客户端TLS配置参数的ute:
dict = {‘ca_certs’:”<ca_certs>”, ‘certfile’:”<certfile>”, ‘keyfile’:”<keyfile>”, ‘tls_version’:”<tls_version>”, ‘ciphers’:”<ciphers”>}
ca_certs是必需的,所有其他参数都是可选的,如果不提供,将默认为无,这会导致客户端使用默认行为-请参阅paho. mqtt.client留档。
默认为无,表示不应使用TLS。
protocol
选择要使用的MQTT协议版本。使用MQTTv31或MQTTv311。
简单的例子
import paho.mqtt.subscribe as subscribe
msg = subscribe.simple(\”paho/test/simple\”, hostname=\”iot.eclipse.org\”)
print(\”%s %s\” % (msg.topic, msg.payload))
使用回调
订阅一组主题并使用用户提供的回调处理收到的消息。
callback(callback, topics, qos=0, userdata=None, hostname=\”localhost\”,
port=1883, client_id=\”\”, keepalive=60, will=None, auth=None, tls=None,
protocol=mqtt.MQTTv311)
回调订阅函数参数
callback
将用于接收到的每条消息的“on_message”回调,以及表单
def on_message(client, userdata, message)
topics
客户端将订阅的主题字符串。如果应订阅多个主题,这可以是字符串或字符串列表。
qos
订阅时使用的qos默认为0。
userdata
用户提供的对象,在收到消息时将传递给on_message回调。
有关hostname, port, client_id, keepalive, will, auth, tls, protocol的描述,请参见Simple()。
回调示例
import paho.mqtt.subscribe as subscribe
def on_message_print(client, userdata, message):
print(\”%s %s\” % (message.topic, message.payload))
subscribe.callback(on_message_print, \”paho/test/callback\”, hostname=\”iot.eclipse.org\”)
报告错误
请在Paho Technology项目的Eclipse Bugzilla\”MQTT-Python编程语言\”组件下报告错误。
更多信息
Paho客户端的讨论发生在Eclipse paho-dev邮件列表中。
有关MQTT协议的一般问题在MQTT Google Group中讨论。
通过MQTT社区网站可以获得更多信息。
#以上关于paho的相关内容来源网络仅供参考,相关信息请以官方公告为准!
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92509.html