隨著物聯網行業的快速發展,涌現出越來越多物聯網云服務平臺。如何快速實現應用開發,如何管理,如何讓設備快速上云,成為關注的焦點。
??本文將描述如何使用NB860系列模組通過MQTT指令快速接入利爾達IoT基礎服務平臺,并介紹兩者數據交互操作流程,詳細的AT交互流程可以幫助用戶或開發人員盡快完成相關的應用開發。
??所需產品
??本次接入的利爾達IoT基礎服務平臺是我司自主研發的云平臺,為設備提供安全可靠的連接管理能力,整合物聯網產業鏈上下游,向下連接智能設備,向上承接物聯網應用,形成端到云完整鏈路物聯網解決方案,賦能企業各類IOT場景接入。
??另外用到的利爾達NB860/MB960/MB260系列模組是基于5G NB-IoT芯片自主開發的第三代NB-IoT模組。該款模組集高性價比、高安全性和低功耗等優點于一身,新增藍牙、OpenCPU、GNSS定位等能力,為智能表計、智能煙感、智能停車、智慧路燈等百萬級成熟NB-IoT應用提供了更優選擇。
??利爾達NB860/MB960/MB260系列模組支持TCP/UDP、MQTT、LwM2M等多種協議接入云平臺,為行業應用開發提供了更多的可能性。今天文章第一期將為大家介紹利爾達NB860模組基于MQTT協議快速接入利爾達IoT基礎服務平臺,實現數據交互。
??快速上云設備端完整AT示例流程
??如上圖所示,示例流程展示了設備在配置及連接后進行收發數據的調試操作,在實際應用開發中通過開發MCU代碼適配參數,即可完成了訂閱推送(應用APP/Web)前所有開發工作,下文將以上步驟給大家做詳細講解。
??Lierda X平臺操作流程
??※ 用戶注冊
??1、訪問https://account.xiot.senthink.com/login,點擊注冊按鈕,進入注冊頁面
??2、填寫注冊信息,完成注冊
??3、完成信息認證,開通物聯網平臺
圖1 注冊頁面
??※ 設備接入前準備事項
??設備在接入利爾達IoT基礎服務平臺之前,需要先完成下事項:
??1、在平臺提供的管理后臺注冊一個硬件廠商賬號,云平臺會為該賬號分配一個廠商的唯一標識OpenID;
??2、注冊廠商賬號后,需要在平臺提供的管理后臺上創建一個產品類,云平臺會為該產品分配一個產品的唯一標識 ProductID 以及產品的密鑰 ProductKey(用于入網加密以及會話 Key 的更新,注意保密!);
??3、設備接入利爾達IoT基礎服務平臺之前,必須要將基礎參數燒錄進設備。
??*至此,接入前的準備工作完成!
??※ 注冊,創建產品設備
??前提條件:已在利爾達IoT基礎服務平臺注冊賬號。
圖2 產品創建頁面
??步驟1:創建產品
??1、登錄物聯網平臺控制臺
??2、在云平臺頁面,找到產品管理,單擊產品管理進入產品詳情頁面。在中間導航欄,選擇創建產品,單擊創建產品,如下圖所示。
圖3 產品創建
??步驟2:設置物模型、topic消息等,添加自定義Topic
??1、登錄物聯網平臺控制臺。
??2、在產品管理頁面,找到對應的產品,單擊產品進入產品詳情頁面。
??3、在產品頁面,找到需要自定義Topic類的產品,并單擊對應操作欄中的查看按鈕。
??4、在產品詳情頁面,單擊Topic類詳情 > 自定義Topic > 定義Topic類。
??5、配置參數,單擊確認。
圖4 新建topic
??步驟3:創建設備
??1、登錄物聯網平臺控制臺。
??2、在左側導航欄,選擇設備管理 > 設備列表。
??3、在設備頁面,單擊添加設備。
??4、在添加設備對話框中,輸入設備信息,單擊確認。
圖5 設備創建
??執行結果
??設備注冊成功后,將自動彈出設備證書彈框。您可以查看、一鍵復制設備證書信息,包含DeviceID、DeviceSecret、OpenID、ProductID和ProductKey,是設備與物聯網平臺進行通信的重要身份認證,建議您妥善保管。
??后續步驟
??1、在設備列表頁,單擊對應設備,進入設備詳情頁。您可以查看設備證書信息、數據加密密鑰、繼承產品的基礎信息、禁用/啟用設備、設備狀態、激活時間、最后在線/離線時間等。
??2、在設備詳情頁,可對設備在線調試、遠程配置和日志分析。
??3、在設備列表頁,可以刪除不再使用的設備。刪除設備不可撤回,請謹慎操作。
??至此,平臺側操作已全部完成。
??※ 設備側操作
??上電檢查流程
??1、AT //判斷模組是否上電開機成功
??2、AT+CFUN=1 //關閉飛行模式
??3、AT+CEREG? //判斷PS域附著狀態,第二個參數為1或5表示附著正常。
??設置服務端IP或域名
??使用AT+MQTTCFG="host",0,"host_name",1883命令設置服務端IP或域名。其中,:服務端的IP或域名:1~2000字節字符串。LierdaX平臺MQTT接入默認域名為:mqtt.xiot.senthink.com,1883。
??示例:AT+MQTTCFG="host",0,"mqtt.xiot.senthink.com",1883
??設置客戶端標識
??使用AT+MQTTCFG="clientid",,命令設置客戶端標識
??連接ID:取值0~2。
??客戶端標識符:字符串類型,1~128字節字符串。賢芯平臺clientid可在設備詳情頁查看。
??示例: AT+MQTTCFG="clientid",0,"ACF37***************EA9F3582"
??連接服務端
??使用AT+MQTTCONN=,,,,命令連接服務端,在收到+MQTTCONNACK: 0,0,0 OK即已經成功連接上平臺。
??連接ID:取值0~2。
??SSL TCP連接使能:
??0:不采用;
??1:采用SSL TCP連接。
??will_flag 遺囑標志,取值0或1:
??0:不帶遺囑;
??1:CONNECT報文帶有遺囑。
??用戶名:0~512字節的字符串。密碼:0~512字節的字符串。
??注:賢芯平臺登錄賬號以及密碼在創建設備時自動生成,可在設備詳情頁查看。
??示例:AT+MQTTCONN=0,0,0,"5*******-********-8************3","7*******************AB2C2"
??訂閱MQTT消息
??使用AT+MQTTSUB=,,,[,,] [,,]命令訂閱消息,已經訂閱成功的消息可在平臺上的設備topic列表查看。
??< Link_ID > 連接ID:取值0~2。
??報文標識符:取值1~65535。
??主題名:0~512字節字符串。一次最多可訂閱3個主題。
??訂閱消息QOS等級:取值0~2。
??示例:
??AT+MQTTSUB=0,1,"/sys/5********/*********/86**********83/downlink",1
??收←◆
??+MQTTSUBACK: 0,1,0
??OK
??設備請求入網(Join)
??設備上報的通用入網 Topic:/sys/device/join
??設備在進行正式的數據通信之前,必須先向 IoT 平臺請求入網。設備應主動與 IoT 平臺建立 TCP Socket 鏈接。在成功建立鏈接后,設備必須向平臺發送請求入網數據幀,以讓平臺為設備分配通信資源;否則平臺將拒絕與設備進行通信。
??請求入網數據幀使用的 Command 為 2;數據幀格式和內容如下所示:
??{ "MessageId" : 1231,
??"HeaderCtrl":2, //命令碼
??"Mode":0, //0:不加密, 1:加密
??"Nonce":10, //1-128 隨機數
??"Payload":{
??"OpenID":"E0C040B1",
??"ProductID":"A4BC6002",
??"NodeEui":"....", //設備標識
??"ClientID":"....", //認證后返回的 ClientID "Type":0, //0:一型一密免注冊,1:一型一密預注冊,2:一機一密預注冊
??"Sign":"FE448731"
??}
??}
??設備向 IoT 平臺發起的入網請求數據幀中包含了Payload域,用于攜帶額外的信息。Payload域中包含的內容及說明如下所示:
??平臺收到入網請求后,根據當前產品類型是免注冊還是預注冊,重新計算 Sign 并與設備上報的 Sign 值進行對比,不同類型設備的 Sign 計算規則詳見2.4小節。
??平臺收到設備的入網請求數據幀并成功認證設備身份后,會為該設備分配通信資源 ,然后使用同樣的Command(2)響應設備。IoT平臺返回Topic:/sys/{openId}/{productId}/{deviceId}/downlink,響應設備入網請求的數據如下:
??{ "HeaderCtrl":2, //命令碼
??"MessageId" : 1231,
??"Mode":0, //0:不加密, 1:加密
??"Nonce":10, //1-128 隨機數
??"Payload":{
??"Code":0,
??"SessionID":"4655434B"
??}
??}
??Join指令的 Code 說明:對于設備請求入網指令(Join),Code 定義為平臺回復設備的入網請求的響應碼。
??響應碼定義如下表所示:
??如果設備發送了入網請求,等待超時后沒有收到平臺的任何回復,則有可能是網絡 問題導致數據丟失,建議檢查網絡并重試。只有響應碼(Code)值為 0 的時候,響應數據中的 Payload 中所攜帶的 SessionID 才是 IoT 平臺分配的有效的 SessionID:
??設備成功入網后,IoT平臺返回了 SessionID。設備需要使用入網安全密鑰ProductKey和本次回復中的隨機數Nonce來計算生成后續與 IoT平臺進行通信過程中用于加密用戶應用數據的密鑰(SessionKey),計算方法如下描述(偽代碼):
??加密方式:AES128_ECB_PKCS5Padding SessionKey = ENCRYPT( ProductKey , SessionID + Nonce);
??示例:
??ProductKey :A0 1A 24 79 67 25 73 DF 84 53 7D F4 C7 3D 3F CC
??SessionID:46 55 43 4B
??Nonce(123):7B
??則拼接結果為:46 55 43 4B 7B 加密運算結果為:40 8C 79 0F 85 BF 60 E6 D4 F1 C1 3C 6A 5C 4C 8B SessionKey = 408C790F85BF60E6D4F1C13C6A5C4C8B
??如果使用非加密模式進行應用數據的傳輸,則可以忽略此步驟,即不需要計算 SessionKey 的值。
??特別注意:設備的入網請求數據如果設置了Mode 為1,則平臺會在設備心跳和設備數據上行時檢查設備的SessionKey是否過期,如果平臺監測到設備的SessionKey過期,則會主動更新設備SessionKey并下發給設備;如果入網請求數據設置了 Mode 位為 0,則平臺不會檢查設備的 SessionKey 是否過期。
??入網sing值計算請參考文檔《Lierda_NB860&MB960&MB260_Application_Notes_MQTT對接Lierda X平臺》
??備注:設備每次與 IoT 平臺建立新的 MQTT 鏈接后(首次連接或者斷線重連),都必須向平臺重新請求入網,否則平臺將拒絕與設備進行通信。
??數據交互
??通過AT+MQTTPUB=,,,,,命令向平臺發布消息。
??連接ID:取值0~2。
??報文標識符:取值1~65535。
??發布消息QOS等級:取值0~2。
??保留標志:取值0~1。
??主題名:0~512字節字符串。
??有效載荷:0~1500字節字符串。
??示例:
??AT+MQTTPUB=0,1,0,0,"/sys/5********/*********/86**********83/uplink","{ "MessageId" : 1231,"HeaderCtrl":4,"Mode":1,"Nonce":10,"Payload":"CB963****************EFE"}"
??□
??[11:06:12.040]收←◆
??[11:06:12.060]收←◆
??+MQTTPUBACK: 0,1,0
??OK
??[11:06:13.680]收←◆
??+MQTTRECV:0,8,1,0,/sys/5********/*********/86**********83/downlink,{"MessageId":1231,"HeaderCtrl":4,"Code":"200","Msg":"SUCCESS"}
??+MQTTRECV:0,9,1,0,/sys/5********/*********/86**********83/uplink_ack,{"MessageId":1231,"HeaderCtrl":4,"Code":"200","Msg":"SUCCESS"}
??設備上報數據可在運行日志中查看;下發透傳數據可在在線調試中實現。
??至此,我們已完成基于MQTT協議的端(Lierda NB860模組)到云(Lierda X平臺)對接并實現數據交互功能。下一期我們將介紹NB860模組配合X平臺進行云云對接快速上云,敬請期待。
審核編輯:符乾江
-
云平臺
+關注
關注
1文章
1308瀏覽量
38988 -
利爾達
+關注
關注
1文章
204瀏覽量
9811 -
NB-IoT
+關注
關注
412文章
1448瀏覽量
184582
發布評論請先 登錄
相關推薦
評論