mqttは、モノのインターネットで非常に広く使用されているプロトコルを示していると言えます。軽量で、シンプルで、オープンで、これらの特性を簡単に実装できます。Pahoはmqttのpythonバージョンも実装しました。
1.接続
接続して接続インターフェースを呼び出し、次にloop_foreverを呼び出して実行を開始します
接続の3番目のパラメーターは、mqttのハートビート時間です。
on_connect
そしてon_disconnect
、接続と切断を成功させるためのコールバック関数、
import paho.mqtt.client as mqtt
mqttClient = mqtt.Client("python_test")
def on_disconnect(client, userdata, rc):
print("mqtt broker lost "+str(rc))
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
if __name__ == '__main__':
mqttClient.on_connect = on_connect
mqttClient.on_disconnect = on_disconnect
mqttClient.connect("192.168.18.1", 1883, 10)
mqttClient.loop_forever()
2. SSLログイン
証明書を追加するには、次の2つを追加してから、connect関数を呼び出します。
mqttClient.tls_set(ca_certs="cacert.pem", certfile=None, keyfile=None, cert_reqs=mqtt.ssl.CERT_REQUIRED,
tls_version=mqtt.ssl.PROTOCOL_TLSv1, ciphers=None)
mqttClient.tls_insecure_set(True)
3.アカウントパスワード
アカウントのパスワードを設定するには、connect関数を呼び出す前に次の項目を追加します。
mqttClient.username_pw_set("python", passwd)
4.WILLのテーマ設定
WILLテーマを設定し、接続関数を呼び出す前に、will_setインターフェースを使用して、willテーマとwillペイロードを設定、追加します
will_payload = {
"ver": "v1",
"module": "offline",
"api": "disconnect",
"param": [{
"k": "mac",
"v": "DC4BDD1DFA48"
}, {
"k": "protypeid",
"v": "PYTHON"
}]
}
mqttClient.will_set("local/offline", payload=json.dumps(will_payload), qos=CLINET_TOPIC_QOS)
5.購読
トピックのサブスクリプションは、通常on_connectコールバック関数で設定されるサブスクライブインターフェイスを使用します。
トピックにサブスクライブした後の目的は、サブスクライブしたデータを受信
することです。したがって、on_messageを介して送信されるデータがある限り、コールバック関数on_messageを設定してdataを受信する必要があります。
#!/usr/bin/python3
# -*- coding:utf-8 -*-
# Author: ye.lin
# Time: 2020/02/24
# Describe:
import paho.mqtt.client as mqtt
mqttClient = mqtt.Client("python_test")
def on_disconnect(client, userdata, rc):
print("mqtt broker lost "+str(rc))
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
mqttClient.subscribe(local/broadcast, qos=1)
def on_message_come(lient, userdata, msg):
print(msg.topic + " " + ":" + str(msg.payload))
if __name__ == '__main__':
mqttClient.on_connect = on_connect
mqttClient.on_disconnect = on_disconnect
mqttClient.on_message = on_message_come
mqttClient.tls_set(ca_certs="zgateway_cacert.pem", certfile=None, keyfile=None, cert_reqs=mqtt.ssl.CERT_REQUIRED,
tls_version=mqtt.ssl.PROTOCOL_TLSv1, ciphers=None)
mqttClient.tls_insecure_set(True)
mqttClient.connect("192.168.18.1", 6885, 10)
mqttClient.loop_forever()
6.リリース
次のように、発行インターフェイスを使用して発行します。
info_payload = {
"msg": "test"
}
mqttClient.publish("local/notify", payload=json.dumps(info_payload), qos=CLINET_TOPIC_QOS)