paho-mqtt-python

项目描述

本文档描述了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社区网站可以获得更多信息。

  • 14
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值