pip install paho-mqtt
或者
pip3 install paho-mqtt
import paho.mqtt.client as mqtt
# 當地端程式連線伺服器得到回應時,要做的動作
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
# 將訂閱主題寫在on_connet中
# 如果我們失去連線或重新連線時
# 地端程式將會重新訂閱
client.subscribe("Try/MQTT")
# 當接收到從伺服器發送的訊息時要進行的動作
def on_message(client, userdata, msg):
# 轉換編碼utf-8才看得懂中文
print(msg.topic+" "+ msg.payload.decode('utf-8'))
# 連線設定
# 初始化地端程式
client = mqtt.Client()
# 設定連線的動作
client.on_connect = on_connect
# 設定接收訊息的動作
client.on_message = on_message
# 設定登入帳號密碼
client.username_pw_set("try","xxxx")
# 設定連線資訊(IP, Port, 連線時間)
client.connect("54.xxx.xxx.xxx", 1883, 60)
# 開始連線,執行設定的動作和處理重新連線問題
# 也可以手動使用其他loop函式來進行連接
client.loop_forever()
Publish : 每隔5秒發布溫度的資訊(模擬一下溫度感測器,所以使用亂數),後面則是附上了系統目前的日期與時間。
import paho.mqtt.client as mqtt
import random
import json
import datetime
import time
# 設置日期時間的格式
ISOTIMEFORMAT = '%m/%d %H:%M:%S'
# 連線設定
# 初始化地端程式
client = mqtt.Client()
# 設定登入帳號密碼
client.username_pw_set("try","xxxx")
# 設定連線資訊(IP, Port, 連線時間)
client.connect("54.xxx.xxx.xxx", 1883, 60)
while True:
t0 = random.randint(0,30)
t = datetime.datetime.now().strftime(ISOTIMEFORMAT)
payload = {'Temperature' : t0 , 'Time' : t}
print (json.dumps(payload))
#要發布的主題和內容
client.publish("Try/MQTT", json.dumps(payload))
time.sleep(5)
Publish、Subscribe測試
開啟兩個終端機
一台為 Subscribe
一台為 Publish
也可以開啟MQTTlens 接收資料,或者和 python 互傳資料。
接收從 python Publish 出來的溫度資料(亂數出來的~)
還有從 MQTTlens Publish 出來的文字資訊
從 python Publish 溫度資料資料出去
執行python後,MQTTlens收到的結果如下:
接收從 python Publish 出來的溫度資料(亂數出來的~)
還有從自己 Publish 出來的文字資訊
從面的兩台終端機以及MQTTlens可以實際看出,python 與 MQTTlens 都訂閱了 Try/MQTT
這個主題,Broker 就會將資料轉發給兩者。
假使有2個以上的主題,user1 可以是 A 主題的發布者,以及 B 主題的訂閱者,user2 可以是 B 主題的發布者,以及 A 主題的訂閱者。
明天就是要來試試這個模式囉!
目前都是在同一個 Topic 收發訊息,而且也使用相同的帳號密碼,明天要來創立兩個不同的 Topic 和兩位使用者的帳號密碼,MQTTlens 模擬用戶端,而python 則是在收到 MQTTlens 的訊息之後經過運算後回傳訊息。