paho(怕后)

paho项目描述
本文档描述了Eclipse PahoMQTT Python编程语言客户端库的源代码,该库实现了MQTT协议的3.1和3.1.1版本。
此代码提供了一个客户端类,使应用程序能够连接到MQTT代

项目描述

本文档介绍了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

Like (0)
CSDN的头像CSDN
Previous 2024年6月27日
Next 2024年6月27日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注