今天就跟大家聊聊有關Python中怎么利用MQTT協議連接OneNet,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
一、MQTT簡介
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是IBM開發的一個即時通訊協議,有可能成為物聯網的重要組成部分。該協議支持所有平臺,幾乎可以把所有聯網物品和外部連接起來,被用來當做傳感器和制動器(比如通過Twitter讓房屋聯網)的通信協議。
二、MQTT特點
MQTT協議是為大量計算能力有限,且工作在低帶寬、不可靠的網絡的遠程傳感器和控制設備通訊而設計的協議,它具有以下主要的幾項特性:
1、使用發布/訂閱消息模式,提供一對多的消息發布,解除應用程序耦合;
2、對負載內容屏蔽的消息傳輸;
3、使用 TCP/IP 提供網絡連接;
4、有三種消息發布服務質量:
“至多一次”,消息發布完全依賴底層 TCP/IP 網絡。會發生消息丟失或重復。這一級別可用于如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因為不久后還會有第二次發送。
“至少一次”,確保消息到達,但消息重復可能會發生。
“只有一次”,確保消息到達一次。這一級別可用于如下情況,在計費系統中,消息重復或丟失會導致不正確的結果。
5、小型傳輸,開銷很?。ü潭ㄩL度的頭部是 2 字節),協議交換最小化,以降低網絡流量;
6、使用 Last Will 和 Testament 特性通知有關各方客戶端異常中斷的機制;
三、OneNet平臺MQTT接入說明:點擊查看
四、python代碼完整簡例:(上傳初始化值,實時接收服務端數值變化)
#前期準備,注冊OneNet物聯網平臺,并創建好項目,創建數據流
from __future__ import print_function
import paho.mqtt.client as mqtt
import struct
import json
# CONNECT 方式:
# client_id: DEV_ID
# username: PRO_ID
# password: AUTHINFO(鑒權信息)
# 可以連接上設備云,CONNECT 和 CONNACK握手成功
# temperature:已創建的一個數據流
#更多請查閱OneNet官方mqtt文檔與paho-mqtt開發文檔
#修改成自己的即可
DEV_ID = "29455901" #設備ID
PRO_ID = "12555524" #產品ID
AUTH_INFO = "JHFDJF55586jhk" #APIKEY
TYPE_JSON = 0x01
TYPE_FLOAT = 0x17
#定義上傳數據的json格式 該格式是oneNET規定好的 按格式修改其中變量即可
body = {
"datastreams":[
{
"id":"wendu", #對應OneNet的數據流名稱
"datapoints":[
{
"at":"2016-08-15T14:47:00", #數據提交時間,這里可通過函數來獲取實時時間
"value":55 #數據值
}
]
}
]
}
def build_payload(type, payload):
datatype = type
packet = bytearray()
packet.extend(struct.pack("!B", datatype))
if isinstance(payload, str):
udata = payload.encode('utf-8')
length = len(udata)
packet.extend(struct.pack("!H" + str(length) + "s", length, udata))
return packet
# 當客戶端收到來自服務器的CONNACK響應時的回調。也就是申請連接,服務器返回結果是否成功等
def on_connect(client, userdata, flags, rc):
print("連接結果:" + mqtt.connack_string(rc))
#上傳數據
json_body = json.dumps(body)
packet = build_payload(TYPE_JSON, json_body)
client.publish("$dp", packet, qos=1) #qos代表服務質量
# 從服務器接收發布消息時的回調。
def on_message(client, userdata, msg):
print("溫度:"+str(msg.payload,'utf-8')+"°C")
#當消息已經被發送給中間人,on_publish()回調將會被觸發
def on_publish(client, userdata, mid):
print("mid:" + str(mid))
def main():
client = mqtt.Client(client_id=DEV_ID, protocol=mqtt.MQTTv311)
client.on_connect = on_connect
client.on_publish = on_publish
client.on_message = on_message
client.username_pw_set(username=PRO_ID, password=AUTH_INFO)
client.connect('183.230.40.39', port=6002, keepalive=120)
client.loop_forever()
if __name__ == '__main__':
main()看完上述內容,你們對Python中怎么利用MQTT協議連接OneNet有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。