umqtt - MQTT客户端
模块功能:提供创建MQTT客户端发布订阅功能。
umqtt 是python源码实现,如对应固件版本未默认支持。用户可使用源码 umqtt.py ,放默认目录/usr下,使用时,将from umqtt import MQTTClient 改为from usr.umqtt import MQTTClient.
构造函数 #
umqtt.MQTTClient
#
构建mqtt连接对象。
参数描述:
-
client_id
- 客户端 ID,字符串类型,具有唯一性。 -
server
- 服务端地址,字符串类型,可以是 IP 或者域名。 -
port
- 服务器端口(可选),整数类型,默认为1883,请注意,MQTT over SSL/TLS的默认端口是8883。 -
user
- (可选) 在服务器上注册的用户名,字符串类型。 -
password
- (可选) 在服务器上注册的密码,字符串类型。 -
keepalive
- (可选)客户端的keepalive超时值,整数类型,默认为60。 -
ssl
- (可选)是否使能 SSL/TLS 支持,布尔值类型。 -
ssl_params
- (可选)SSL/TLS 参数,字符串类型。 -
reconn
- (可选)控制是否使用内部重连的标志,布尔值类型,默认开启为True。 -
version
- (可选)选择使用mqtt版本,整数类型,version=3开启MQTTv3.1,默认version=4开启MQTTv3.1.1。
设置相关功能和回调 #
MQTTClient.set_callback
#
设置回调函数,收到消息时会被调用。
回调函数不建议处理阻塞API,会影响mqtt消息接收。
参数描述:
-
callback
- 设置异常回调函数,function(topic, data)类型
示例:
MQTTClient.error_register_cb
#
设置异常回调函数,使用内部重连的情况下umqtt内部线程异常时通过回调返回error信息。
参数描述:
-
callback
- 设置异常回调函数,function(error)类型
示例:
MQTTClient.set_last_will
#
设置要发送给服务器的遗嘱,客户端没有调用disconnect()异常断开,则发送通知到其他客户端。
参数描述:
-
topic
- mqtt遗嘱主题,字符串类型。 -
msg
- 遗嘱的内容,字符串类型。 -
retain
- retain = True boker会一直保留消息,默认False,布尔值类型。 -
qos
- 整数类型,消息服务质量(0~1)。
MQTT连接相关功能 #
MQTTClient.connect
#
与服务器建立连接,连接失败会导致MQTTException异常。
mqtt相关操作要在确认connect成功后执行。
参数描述:
-
clean_session
- 布尔值类型,可选参数,一个决定客户端类型的布尔值。 如果为True,那么代理将在其断开连接时删除有关此客户端的所有信息。 如果为False,则客户端是持久客户端,当客户端断开连接时,订阅信息和排队消息将被保留。默认为True。
返回值描述:
成功返回0,失败则抛出异常。
MQTTClient.disconnect
#
与服务器断开连接,释放相关资源。
MQTTClient.close
#
释放socket资源,(注意区别disconnect方法,close只释放socket资源,disconnect包含线程等资源)。
该方法仅用于在自己实现重连时使用,具体请参照mqtt重连示例代码,正常关闭mqtt连接请使用disconnect。
MQTTClient.ping
#
当keepalive不为0且在时限内没有通讯活动,会主动向服务器发送ping包, 检测保持连通性,keepalive为0则不开启。
发布订阅相关功能 #
MQTTClient.publish
#
发布消息到对应topic。
参数描述:
-
topic
- mqtt 消息主题,字符串类型 -
msg
- 需要发送的数据,字符串类型 -
retain
- 布尔值类型,默认为False, 发布消息时把retain设置为true,即为保留信息。
MQTT服务器会将最近收到的一条RETAIN标志位为True的消息保存在服务器端, 每当MQTT客户端连接到MQTT服务器并订阅了某个topic,如果该topic下有Retained消息,那么MQTT服务器会立即向客户端推送该条Retained消息
特别注意:MQTT服务器只会为每一个Topic保存最近收到的一条RETAIN标志位为True的消息!也就是说,如果MQTT服务器上已经为某个Topic保存了一条Retained消息,当客户端再次发布一条新的Retained消息,那么服务器上原来的那条消息会被覆盖! | -
qos
- 整数类型, MQTT消息服务质量(默认0,可选择0或1)0:发送者只发送一次消息,不进行重试 1:发送者最少发送一次消息,确保消息到达Broker
返回值描述:
成功返回布尔型True,失败返回布尔型False。
MQTTClient.subscribe
#
订阅mqtt主题。
参数描述:
-
topic
- mqtt topic主题,字符串类型。 -
qos
- MQTT消息服务质量(默认0,可选择0或1),整数类型
0:发送者只发送一次消息,不进行重试 1:发送者最少发送一次消息,确保消息到达Broker。
MQTTClient.wait_msg
#
阻塞等待服务器消息响应。
该方法如果在线程中调用时,需保证创建线程栈空间>=16K,具体请参照mqtt重连示例代码.
MQTTClient.get_mqttsta
#
获取mqtt连接状态。
注意:BG95平台不支持该API。
如果用户调用了 disconnect() 方法之后,再调用 MQTTClient.get_mqttsta() 会返回-1,因为此时创建的对象资源等都已经被释放。
返回值描述:
0:连接成功。
1:连接中。
2:服务端连接关闭。
-1:连接异常。
示例:
MQTT断网异常重连示例
特别说明:
1.下面示例代码中mqtt的reconn参数用于控制使用或关闭umqtt内部的重连机制,默认为True,使用内部重连机制。
2.如需测试或使用外部重连机制可参考此示例代码,测试前需将reconn=False,否则默认会使用内部重连机制!