隨著物聯網行業的快速發展,涌現出越來越多物聯網云服務平臺。如何快速實現應用開發,如何管理,如何讓設備快速上云,成為關注的焦點。
本文將描述如何使用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示例流程
向上滑動閱覽
//配置服務器IP及域名
AT+MQTTCFG="host",0,"mqtt.xiot.senthink.com",1883
OK
//配置客戶端標識
AT+MQTTCFG="clientid",0,"B6E092A55031428493AF6AAD6D694AD5"
OK
//連接服務器
[1116.270]發→◇AT+MQTTCONN=0,0,0,"5D6A3E7E-35884709-865186050012583","6387E4120EDD5A214F9A07D4BD2FB051"
+MQTTCONNACK: 0,0,0
OK
//訂閱MQTT消息AT+MQTTSUB=0,1,"/sys/5D6A3E7E/35884709/865186050012583/downlink",1
+MQTTSUBACK: 0,1,0
OK
//設備請求入網
AT+MQTTPUB=0,1,0,0,"/sys/device/join","{"MessageId": 1231,"HeaderCtrl": 2,"Mode": 1,"Nonce": 123,"Payload": {"OpenID": "5D6A3E7E", "ProductID": "35884709","NodeEui": "865186050012583","ClientID": "B6E092A55031428493AF6AAD6D694AD5", "Type": 2,"Sign": "1fb6a0da"}}"
[1142.489]收←◆+MQTTPUBACK: 0,1,0
OK
//收到服務器下發數據
+MQTTRECV: 0,3,1,0,/sys/5D6A3E7E/35884709/865186050012583/downlink,{"HeaderCtrl":2,"Mode":1,"Nonce":14,"Payload":{"Code":0,"SessionID":"75FC7DC3"},"MessageId":1231}
//上發設備端數據AT+MQTTPUB=0,1,0,0,"/sys/5D6A3E7E/35884709/865186050012583/uplink","{ "MessageId" : 1231,"HeaderCtrl":4,"Mode":1,"Nonce":10,"Payload":"CB96395F5065FD121D88B1593EFE"}"+MQTTPUBACK: 0,1,0
OK
//收到服務器下發數據
+MQTTRECV: 0,4,1,0,/sys/5D6A3E7E/35884709/865186050012583/downlink,{"MessageId":1231,"HeaderCtrl":4,"Code":"200","Msg":"SUCCESS"}
+MQTTRECV: 0,5,1,0,/sys/5D6A3E7E/35884709/865186050012583/downlink,{"HeaderCtrl":7,"Mode":0,"Nonce":48,"Payload":"wwdwdwd","MessageId":751504437}
如上圖所示,示例流程展示了設備在配置及連接后進行收發數據的調試操作,在實際應用開發中通過開發MCU代碼適配參數,即可完成了訂閱推送(應用APP/Web)前所有開發工作,下文將以上步驟給大家做詳細講解。
Lierda X平臺操作流程
※ 用戶注冊
1.訪問https://account.xiot.senthink.com/login,點擊注冊按鈕,進入注冊頁面2.填寫注冊信息,完成注冊3.完成信息認證,開通物聯網平臺
圖1 注冊頁面※ 設備接入前準備事項設備在接入利爾達IoT基礎服務平臺之前,需要先完成下事項:1.在平臺提供的管理后臺注冊一個硬件廠商賬號,云平臺會為該賬號分配一個廠商的唯一標識OpenID;2.注冊廠商賬號后,需要在平臺提供的管理后臺上創建一個產品類,云平臺會為該產品分配一個產品的唯一標識 ProductID 以及產品的密鑰 ProductKey(用于入網加密以及會話 Key 的更新,注意保密?。?.設備接入利爾達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"}"
□
[1112.040]收←◆
[1112.060]收←◆
+MQTTPUBACK: 0,1,0
OK
[1113.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平臺進行云云對接快速上云,敬請期待。
-
物聯網
+關注
關注
2904文章
44306瀏覽量
371464
發布評論請先 登錄
相關推薦
評論