项目描述
本文档描述了Eclipse PahoMQTT Python编程语言客户端库的源代码,该库实现了MQTT协议的3.1和3.1.1版本。
此代码提供了一个客户端类,使应用程序能够连接到MQTT代理以发布消息、订阅主题和接收已发布的消息。它还提供了一些帮助函数,使向MQTT服务器发布一次性消息变得非常简单。
它支持Python编程语言2.7或3. x,对Python编程语言2.6的支持有限。
MQTT协议是一种机器对机器(M2M)/“物联网”连接协议。它被设计为一种极其轻量级的发布/订阅消息传输,对于需要小代码占用和/或网络带宽非常昂贵的远程位置的连接非常有用。
Paho是一个Eclipse基金会项目。
内容
安装
Python编程语言包索引(PyPi)中提供了最新的稳定版本,可以使用
pip install paho-mqtt
或者使用虚拟环境:
virtualenv paho-mqtt source paho-mqtt/bin/activate pip install paho-mqtt
要获取完整代码,包括示例和测试,您可以克隆git存储库:
git clone https://github.com/eclipse/paho.mqtt.python
获得代码后,也可以从您的存储库安装它:
cd paho.mqtt.python python setup.py install
用法和API
详细的API留档可通过pydoc获得。示例在示例目录中可用。
该软件包提供了两个模块,一个完整的客户端和一个用于简单发布的助手。
入门
这是一个非常简单的示例,它订阅了代理$SYS主题树并打印出结果消息:
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("$SYS/#") # 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("iot.eclipse.org", 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()
客户端
您可以将客户端类用作实例、在类中或通过子类化使用。一般使用流程如下:
-
创建客户端实例
-
使用connect*() 函数之一连接到代理
-
调用loop*() 函数之一来维护代理的流量
-
使用subscribe() 订阅主题并接收消息
-
使用publish() 将消息发布到代理
-
使用disconnect() 断开与代理的连接
将调用回调以允许应用程序根据需要处理事件。这些回调描述如下。
构造函数/重新初始化
CLIENT()
Client(client_id="", clean_session=True, userdata=None, protocol=MQTTv311, transport="tcp")
Client() 构造函数采用以下参数:
client_id
连接到代理时使用的唯一客户端ID字符串。如果client_id长度为零或无,则将随机生成一个。在这种情况下,clean_session参数必须为True。
clean_session
确定客户端类型的布尔值。如果为True,则代理将在断开连接时删除有关此客户端的所有信息。如果为False,则客户端是持久客户端,并且订阅信息和排队消息将在客户端断开连接时保留。
请注意,客户端永远不会在断开连接时丢弃自己的传出消息。调用connect()或reconnect()将导致消息被重新发送。使用reinitialise() 将客户端重置为其原始状态。
userdata
作为userdata参数传递给回调的任何类型的用户定义数据。稍后可以使用user_data_set() 函数对其进行更新。
protocol
用于此客户端的MQTT协议版本。可以是MQTTv31或MQTTv311
transport
设置为“websocket kets”以通过WebSockets发送MQTT。默认保留“tcp”以使用原始TCP。
构造函数示例
import paho.mqtt.client as mqtt mqttc = mqtt.Client()
REINITIALISE()
reinitialise(client_id="", clean_session=True, userdata=None)
reinitialise() 函数将客户端重置为其启动状态,就好像它刚刚被创建一样。它采用与Client() 构造函数相同的参数。
重新初始化示例
mqttc.reinitialise()
选项函数
这些函数表示可以在客户端上设置以修改其行为的选项。在大多数情况下,这必须在连接到代理之前完成。
MAX_INFLIGHT_MESSAGES_SET()
max_inflight_messages_set(self, inflight)
设置QoS>0的最大消息数,这些消息可以一次通过其网络流的一部分。
默认为20。增加此值将消耗更多内存,但会增加吞吐量。
MAX_QUEUED_MESSAGES_SET()
max_queued_messages_set(self, queue_size)
设置外发消息队列中可以挂起的QoS>0的最大外发消息数。
默认为0.0意味着无限制。当队列已满时,任何进一步的传出消息都将被删除。
MESSAGE_RETRY_SET()
message_retry_set(retry)
如果代理没有响应,则设置重试QoS>0的消息之前的时间(以秒为单位)。
默认情况下,这设置为5秒,通常不需要更改。
TLS_SET()
tls_set(ca_certs, certfile=None, keyfile=None, cert_reqs=ssl.CERT_REQUIRED, tls_version=ssl.PROTOCOL_TLSv1, ciphers=None)
配置网络加密和身份验证选项。启用SSL/TLS支持。
ca_certs
证书授权中心证书文件的字符串路径,该文件将被此客户端视为受信任的文件。如果这是唯一的选项,则客户端将以与Web浏览器类似的方式操作。也就是说,它将要求代理拥有由证书授权中心在ca_certs签名的证书,并将使用TLS v1进行通信,但不会尝试任何形式的身份验证。这提供了基本的网络加密,但可能还不够,具体取决于代理的配置方式。
certfile, keyfile
分别指向PEM编码的客户端证书和私钥的字符串。如果这些参数不是无,则它们将用作基于TLS的身份验证的客户端信息。对此功能的支持取决于代理。请注意,如果这些文件中的任何一个已加密并且需要密码才能解密,Python编程语言将在命令行中询问密码。目前无法定义回调来提供密码。
cert_reqs
定义客户端强加给代理的证书要求。默认情况下,这是ssl.CERT_REQUIRED,这意味着代理必须提供证书。有关此参数的更多信息,请参阅ssl pydoc。
tls_version
指定要使用的SSL/TLS协议的版本。默认情况下使用TLS v1。以前的版本(所有以SSL开头的版本)都是可能的,但由于可能的安全问题,不推荐使用。
ciphers
一个字符串,指定此连接允许使用哪些加密密码,或无以使用默认值。有关更多信息,请参阅ssl pydoc。
必须在connect*()之前调用。
TLS_INSECURE_SET()
tls_insecure_set(value)
在服务器证书中配置服务器主机名验证。
如果value设置为True,则无法保证您要连接的主机没有冒充您的服务器。这在初始服务器测试中很有用,但会使恶意第三方通过DNS欺骗来冒充您的服务器。
不要在实际系统中使用此功能。将值设置为True意味着没有必要使用加密。
必须在 connect*)之前调用。
USERNAME_PW_SET()
username_pw_set(username, password=None)
为代理身份验证设置用户名和密码(可选)。必须在connect*()之前调用。
USER_DATA_SET()
user_data_set(userdata)
设置生成事件时将传递给回调的私有用户数据。将其用于您自己的目的来支持您的应用程序。
WILL_SET()
will_set(topic, payload=None, qos=0, retain=False)
设置要发送到代理的Will。如果客户端在不调用disconnect()的情况下断开连接,代理将代表它发布消息。
topic
应该发布遗嘱消息的主题。
payload
作为遗嘱发送的消息。如果未给出或设置为无,则将使用零长度消息作为遗嘱。传递int或float将导致有效负载转换为表示该数字的字符串。如果您希望发送真正的int/float,请使用struct. pack()创建所需的有效负载。
qos
将服务质量等级用于消息。
retain
如果设置为True,将消息将设置为主题的“最后已知商品”/保留消息。
如果qos不是0、1或2,或者主题为无或字符串长度为零,则引发ValueError。
连接/重新连接/断开连接
CONNECT()
connect(host, port=1883, keepalive=60, bind_address="")
connect()函数将客户端连接到代理。这是一个阻塞函数。它接受以下参数:
host
远程代理的主机名或IP地址
port
要连接的服务器主机的网络端口。默认为1883。请注意,MQTT over SSL/TLS的默认端口是8883,因此如果您使用tls_set(),端口可能需要手动提供
keepalive
与代理通信之间允许的最大时间(以秒为单位)。如果没有交换其他消息,这将控制客户端向代理发送ping消息的速率
bind_address
要绑定此客户端的本地网络接口的IP地址,假设存在多个接口
Callback
当客户端从代理收到响应连接的CONNACK消息时,它会生成一个on_connect()回调。
连接示例
mqttc.connect("iot.eclipse.org")
CONNECT_ASYNC()
connect_async(host, port=1883, keepalive=60, bind_address="")
与loop_start()合取使用以非阻塞方式连接。在调用loop_start()之前,连接不会完成。
Callback (connect)
当客户端从代理收到响应连接的CONNACK消息时,它会生成一个on_connect()回调。
CONNECT_SRV()
connect_srv(domain, keepalive=60, bind_address="")
使用SRV DNS查找连接到代理以获取代理地址。采用以下参数:
domain
用于搜索SRV记录的DNS域。如果无,请尝试确定本地域名。
请参阅connect()以获取有关保持活动和bind_address参数的描述。
Callback (connect_srv)
当客户端从代理收到响应连接的CONNACK消息时,它会生成一个on_connect()回调。
SRV Connect Example
mqttc.connect_srv("eclipse.org")
RECONNECT()
reconnect()
使用之前提供的详细信息重新连接到代理。在调用此函数之前,您必须调用connect*()。
Callback (reconnect)
当客户端从代理收到响应连接的CONNACK消息时,它会生成一个on_connect()回调。
DISCONNECT()
disconnect()
干净地断开与代理的连接。使用disconnect()不会导致代理发送遗嘱消息。
Callback (disconnect)
当客户端发送断开连接消息时,它会生成一个on_disconnect()回调。
Network loop
这些函数是客户端背后的驱动力。如果不调用它们,传入的网络数据将不会被处理,传出的网络数据可能不会及时发送。管理网络循环有四个选项。这里描述了三个,下面“外部事件循环支持”中的第四个。不要混合不同的循环函数。
LOOP()
loop(timeout=1.0, max_packets=1)
定期调用以处理网络事件。此调用在select()中等待,直到网络套接字可用于读取或写入,如果合适的话,然后处理传入/传出数据。此函数最多阻塞超时秒。超时不得超过客户端的保持活动值,否则您的客户端将被代理定期断开连接。
max_packets论点已经过时,应该不设置。
Loop Example
run = True while run: mqttc.loop()
LOOP_START/LOOP_STOP
loop_start() loop_stop(force=False)
这些函数实现了网络循环的线程接口。在connect*()之前或之后调用一次loop_start(),在后台运行一个线程以自动调用循环()。这将释放主线程用于其他可能阻塞的工作。此调用还处理重新连接到代理。调用loop_stop()以停止后台线程。force参数当前被忽略。
Loop Start/Stop Example
mqttc.connect("iot.eclipse.org") mqttc.loop_start() while True: temperature = sensor.blocking_read() mqttc.publish("paho/temperature", temperature)
LOOP_FOREVER()
loop_forever(timeout=1.0, max_packets=1, retry_first_connection=False)
这是网络循环的阻塞形式,直到客户端调用disconnect()才会返回。它会自动处理重新连接。
除了使用connect_async时的第一次连接尝试,使用retry_first_connection=True使其重试第一次连接。警告:这可能会导致客户端继续连接到不存在的主机而不失败的情况。
超时和max_packets参数已过时,应保持未设置状态。
Publishing
从客户端向代理发送消息。
PUBLISH()
publish(topic, payload=None, qos=0, retain=False)
这会导致将消息发送到代理,然后从代理发送到订阅匹配主题的任何客户端。它采用以下参数:
topic
应该发布消息的主题
payload
要发送的实际消息。如果未给出或设置为无,将使用零长度消息。传递int或float将导致有效负载转换为表示该数字的字符串。如果您希望发送真正的int/float,请使用struct. pack()创建所需的有效负载
qos
使用的服务质量水平
retain
如果设置为True,则该消息将被设置为主题的“最后已知商品”/保留消息。
(C++11起)返回一个元组(结果,中间),结果是MQTT_ERR_SUCCESS,以指示成功或MQTT_ERR_NO_CONN如果客户端当前没有连接。中间是发布请求的消息ID。中间值可用于跟踪发布请求,通过检查on_publish()回调中的中间参数,如果它已定义。
如果主题为无、长度为零或无效(包含通配符)、qos不是0、1或2之一,或者有效负载的长度大于268435455字节,则会引发ValueError。
Callback (publish)
当消息发送到代理时,将生成on_publish()回调。
Subscribe / Unsubscribe
SUBSCRIBE()
subscribe(topic, qos=0)
为客户端订阅一个或多个主题。
可以通过三种不同的方式调用此函数:
Simple string and integer
例如subscribe("my/topic", 2)
topic
指定要订阅的订阅主题的字符串。
qos
订阅所需的服务质量级别。默认为0。
字符串和整数元组
例如 subscribe(("my/topic", 1))
topic
(topic, qos)的元组。主题和qos都必须存在于元组中。
qos
未使用。
字符串和整数元组列表
例如subscribe([("my/topic", 0), ("another/topic", 2)])
这允许在单个SUBSCRIPTION命令中进行多个主题订阅,这比使用多个调用订阅()更有效。
topic
格式元组列表(topic, qos)。主题和qos都必须存在于所有元组中。
qos
未使用。
该函数返回一个元组(result, mid),,其中结果MQTT_ERR_SUCCESS表示成功,如果客户端当前未连接,则返回(MQTT_ERR_NO_CONN,None)。中间是订阅请求的消息ID。中间值可用于跟踪订阅请求,方法是检查on_subscribe()回调中的中间参数是否已定义。
如果qos不是0、1或2,或者主题为无或字符串长度为零,或者主题不是字符串、元组或列表,则引发ValueError。
Callback (subscribe)
当代理确认订阅时,将生成on_subscribe()回调。
UNSUBSCRIBE()
unsubscribe(topic)
从一个或多个主题取消订阅客户端。
topic
单个字符串或要取消订阅的订阅主题的字符串列表。
(C++11起)返回一个元组(结果,中间),其中结果MQTT_ERR_SUCCESS表示成功,或(MQTT_ERR_NO_CONN,无)如果客户端当前未连接。中间是取消订阅请求的消息ID。中间值可用于跟踪取消订阅请求,通过检查on_unsubscribe()回调中的中间参数(如果已定义)。
如果主题为无或字符串长度为零,或者不是字符串或列表,则引发ValueError。
Callback (unsubscribe)
当代理确认取消订阅时,将生成一个on_unsubscribe()回调。
Callbacks
ON_CONNECT()
on_connect(client, userdata, flags, rc)
当代理响应我们的连接请求时调用。
client
此回调的客户端实例
userdata
在Client()或userdata_set()中设置的私有用户数据
flags
代理发送的响应标志
rc
连接结果
flags是一个包含来自代理的响应标志的判决:
flags[‘session present’]-此标志对以下客户端很有用
仅使用设置为0的清洁会话。如果清洁会话=0的客户端重新连接到它之前连接过的代理,则此标志指示代理是否仍然拥有客户端的会话信息。如果为1,则会话仍然存在。
rc的值表示成功与否:
0:连接成功1:连接被拒绝-不正确的协议版本2:连接被拒绝-无效的客户端标识符3:连接被拒绝-服务器不可用4:连接被拒绝-错误的用户名或密码5:连接被拒绝-未授权6-255:当前未使用。
On Connect示例
def on_connect(client, userdata, flags, rc): print("Connection returned result: "+connack_string(rc)) mqttc.on_connect = on_connect ...
ON_DISCONNECT()
on_disconnect(client, userdata, rc)
当客户端与代理断开连接时调用。
client
此回调的客户端实例
userdata
在Client()或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社区网站可以获得更多信息。