2020-10-21_MQTT云端控制臺(tái)的部署和設(shè)置

參考過(guò)官方的流程和步驟,也在網(wǎng)上搜索過(guò)各種BLOG、日志類文章,里面介紹的內(nèi)容不盡詳細(xì),有些省略了關(guān)鍵的步驟和說(shuō)明,稍有理解偏差,就會(huì)導(dǎo)致各種BUG或掉進(jìn)各種坑,使本就陌生的概念變得雜亂無(wú)章或難以理解。經(jīng)過(guò)自己的多次嘗試和修改,總結(jié)以下要點(diǎn)以供參考:

1、從官方指導(dǎo)文件入手(畢竟不同的平臺(tái)有差異,先看官方文檔,了解怎么開(kāi)始),鏈接地址:https://cloud.tencent.com/document/product/634/14442,進(jìn)入下圖所示的網(wǎng)頁(yè)界面,首先從“控制臺(tái)使用手冊(cè)”-“設(shè)備接入準(zhǔn)備”這一節(jié)內(nèi)容開(kāi)始:


官方使用手冊(cè)-控制臺(tái)

2、創(chuàng)建產(chǎn)品的各種設(shè)置:

(1)、由于使用的是ESP 8266硬件,通過(guò)TCP/IP協(xié)議接入互聯(lián)網(wǎng),再接入云服務(wù)器,所以下面的“節(jié)點(diǎn)類型”選擇“設(shè)備”;“產(chǎn)品類型”選擇“普通產(chǎn)品”。

(2)、“產(chǎn)品名稱”按照命名規(guī)則自定義。

(3)、由于需要在ESP 8266硬件里進(jìn)行二次開(kāi)發(fā),自定義控制功能,所以“認(rèn)證方式”選擇“密鑰認(rèn)證”,方便后續(xù)在程序里添加。

(4)、“數(shù)據(jù)格式”建議選擇“自定義格式”,這里的“數(shù)據(jù)格式”設(shè)定和后續(xù)的程序編寫(xiě)和控制臺(tái)中的“規(guī)則引擎”設(shè)置有關(guān)系,如果熟悉JSON格式,且程序有這個(gè)需求,可以選“JSON”;“自定義格式”的設(shè)定,在后續(xù)程序編寫(xiě)時(shí),可以不受數(shù)據(jù)格式的約束,處理起來(lái)比較容易和自由,“規(guī)則引擎”也可以簡(jiǎn)化設(shè)置。

(5)、產(chǎn)品描述為可選項(xiàng)。


3、創(chuàng)建設(shè)備

(1)、這里的設(shè)備就是指實(shí)際相互傳遞消息的終端硬件,如ESP 8266,手機(jī)客戶端APP等。

(2)、創(chuàng)建設(shè)備的界面如下圖所示,根據(jù)命名規(guī)則填一個(gè)設(shè)備名稱,“密鑰”選擇“使用自定義”,在下方輸入屬于該設(shè)備的密鑰(注意備份記錄,以免忘記),然后點(diǎn)擊右側(cè)的“轉(zhuǎn)換成Base64”,最后“保存”:


(手動(dòng)創(chuàng)建新設(shè)備)

(3)、在設(shè)備列表中,點(diǎn)擊對(duì)應(yīng)的設(shè)備“操作”欄下方的“管理”,可以查看該設(shè)備的相關(guān)信息,如下圖所示,在“設(shè)備密鑰”欄,里面的“clientid”、“mqtt username”、“mqtt password”這三項(xiàng)信息在后續(xù)的程序編寫(xiě)時(shí)會(huì)用來(lái)作為接入服務(wù)器的驗(yàn)證信息,編寫(xiě)程序時(shí)直接將這里的信息分別復(fù)制到程序中,該信息產(chǎn)生的算法:官方的python代碼(在“開(kāi)發(fā)者手冊(cè)”-“設(shè)備接入?yún)f(xié)議”-“設(shè)備基于MQTT接入”欄目中),按照服務(wù)器指定的格式自動(dòng)生成這三項(xiàng)信息。


(設(shè)備密鑰信息)


(用于生成接入驗(yàn)證信息的官方python代碼)

4、上述python代碼可移植到自己的程序中,這樣就不用復(fù)制控制臺(tái)里面的三個(gè)密鑰信息了。由于我使用的是Python3,官方代碼是Python2下寫(xiě)的,所以這里進(jìn)行了一些改動(dòng),主要是#5步,生成token:

原始代碼:token = hmac.new(devicePsk.decode("base64"), username.encode('utf-8'), digestmod=hashlib.sha256).hexdigest()

修改后的:token= hmac.new(devicePsk, username.encode('utf-8'), digestmod=hashlib.sha256).hexdigest()

對(duì)應(yīng)的,改函數(shù)IotHmac的三個(gè)入口參數(shù)格式如下:

productID:當(dāng)我在控制臺(tái)里面創(chuàng)建了產(chǎn)品“TEST”后,平臺(tái)自動(dòng)生成了一個(gè)產(chǎn)品ID(如:0BC7M86BMJ),將這個(gè)ID作為productID。

devicename:設(shè)備名,即創(chuàng)建設(shè)備時(shí)自定義的名字,如ESP 8266。

devicePsk:設(shè)備密鑰,原程序中對(duì)應(yīng)一個(gè)Base64編碼的密鑰,由于修改了程序代碼,這里可以輸入普通字符的代表的密鑰,如密碼為pa123,則輸入b'pa123'。

IotHmac(“0BC7M86BMJ”,“ESP 8266”,b'pa123')。

5、第4步函數(shù)返回的數(shù)據(jù)格式是一個(gè)python字典(dict),里面包含了clientid,username,password,用于后續(xù)代碼的mqtt連接。

dict_info= IotHmac("0BC7M86BMJ", "esp8266", b"pa123")

for keyin dict_info.keys():

? ? print(dict_info[key] + '\n')

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容