应用Python 实现MQTT Client
#coding:utf-8
#!/usr/bin/python3
import
json
import
os
import
binascii
import
asn1tools
import
sys
import
paho.mqtt.client as mqtt
import
requests
import
logging
from
enum
import
Enum
from
queue
import
Queue
__all__
=
[
"MQTTClient"
]
class
MQTTClient:
def
__init__(
self
,host, port, qos, timeout, log):
self
.host
=
host
self
.port
=
port
self
.qos
=
qos
self
.queue
=
Queue()
self
.mqtt_client
=
None
self
.timeout
=
timeout
self
.log
=
log
def
on_message(
self
, client, userdata, msg):
self
.log.debug(
'get a message: %s'
%
msg)
self
.queue.put(msg)
def
subscribe(
self
, topic):
self
.mqtt_client.subscribe(topic,
self
.qos)
self
.log.debug(
'subscribe to %s'
%
topic)
def
unsubscribe(
self
, topic):
self
.mqtt_client.unsubscribe(topic)
self
.log.debug(
'unsubscribe %s'
%
topic)
def
receive_msg(
self
, timeout
=
None
):
self
.log.debug(
'waiting for message.'
)
if
timeout
is
None
:
timeout
=
self
.timeout
return
self
.queue.get(timeout
=
timeout)
def
publish(
self
, topic, blob):
self
.mqtt_client.publish(topic, blob)
def
loop_start(
self
):
if
self
.mqtt_client
is
None
:
self
.mqtt_client
=
mqtt.Client()
self
.mqtt_client.on_message
=
self
.on_message
self
.mqtt_client.connect(
self
.host,
self
.port,
self
.timeout)
self
.mqtt_client.loop_start()
def
loop_stop(
self
):
if
self
.mqtt_client
is
not
None
:
self
.mqtt_client.loop_stop()
self
.mqtt_client.disconnect()
self
.mqtt_client
=
None