RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MQTT應(yīng)用指南

瑞科慧聯(lián)(RAK) ? 2022-08-23 11:54 ? 次閱讀

#概述

本文旨在幫助已經(jīng)購買RAK商業(yè)網(wǎng)關(guān)產(chǎn)品并且使用內(nèi)置LoRa Server功能的用戶,了解如何通過MQTT訂閱商業(yè)網(wǎng)關(guān)內(nèi)置LoRa Server的數(shù)據(jù),使用戶了解商業(yè)網(wǎng)關(guān)的工作原理,方便用戶在自己的應(yīng)用服務(wù)器獲取節(jié)點(diǎn)數(shù)據(jù),達(dá)到便捷使用應(yīng)用服務(wù)器完成數(shù)據(jù)展示和數(shù)據(jù)分析的目的。

本文將以RAK公司的商業(yè)網(wǎng)關(guān)產(chǎn)品(室內(nèi)網(wǎng)關(guān)RAK7258或室外網(wǎng)關(guān)RAK7249)為例,介紹如何配置商業(yè)網(wǎng)關(guān)使用內(nèi)置MQTT服務(wù)器和私有(外置)MQTT服務(wù)器,以及如何訂閱節(jié)點(diǎn)數(shù)據(jù)和向節(jié)點(diǎn)發(fā)送數(shù)據(jù)等。

#LoRaWAN和MQTT簡介

本章節(jié)介紹LoRaWAN網(wǎng)絡(luò)和MQTT網(wǎng)絡(luò),用于幫助用戶對(duì)LoRaWAN和MQTT的工作原理有一個(gè)簡單直觀的了解。如果您已經(jīng)熟悉了LoRaWAN和MQTT的工作原理,可跳過此章節(jié)。

#LoRaWAN簡介

LoRaWAN網(wǎng)絡(luò)包含的角色Figure 1: LoRaWAN網(wǎng)絡(luò)包含的角色

從上圖可以看出,LoRaWAN網(wǎng)絡(luò)包括如下3個(gè)角色,各個(gè)角色的作用如下所示:

  • 終端設(shè)備(End Nodes):即節(jié)點(diǎn)設(shè)備,負(fù)責(zé)數(shù)據(jù)采集,并將數(shù)據(jù)加密后以無線信號(hào)的形式傳遞給網(wǎng)關(guān)。
  • 網(wǎng)關(guān)(Concentrator/Gateway):將終端發(fā)送的數(shù)據(jù)透?jìng)鹘oNS服務(wù)器。
  • NS服務(wù)器(Network Server):根據(jù)數(shù)據(jù)身份信息、密鑰對(duì)網(wǎng)關(guān)轉(zhuǎn)發(fā)的數(shù)據(jù)進(jìn)行解密、處理。

RAK簡化LoRaWAN實(shí)際部署條件,RAK商業(yè)網(wǎng)關(guān)集成了NS服務(wù)器,它配合節(jié)點(diǎn)可以輕松搭建LoRaWAN網(wǎng)絡(luò)。

#MQTT簡介

MQTT代表MQ遙測(cè)傳輸,是一種發(fā)布/訂閱極其簡單和輕量級(jí)的消息傳遞協(xié)議,用于受限設(shè)備和低帶寬、高延遲或不可靠的網(wǎng)絡(luò)。設(shè)計(jì)原則是使網(wǎng)絡(luò)帶寬和設(shè)備資源要求最小化以及確??煽啃浴_@些原則使該協(xié)議成為物聯(lián)網(wǎng)世界的理想選擇。

MQTT網(wǎng)絡(luò)角色Figure 2: MQTT網(wǎng)絡(luò)角色

如上圖所示,MQTT網(wǎng)絡(luò)角色包括如下3個(gè),各個(gè)角色的作用如下所示:

  • 發(fā)布者(Publisher):發(fā)布信息。
  • 訂閱者(Subscriber):收集發(fā)布者發(fā)布的信息。
  • MQTT Broker:接收發(fā)布信息并將信息向訂閱者進(jìn)行展示。

MQTT Broker同比是新聞發(fā)布網(wǎng)站,發(fā)布者是新聞發(fā)布成員,訂閱者是瀏覽、查看新聞的用戶。

#MQTT在LoRaWAN網(wǎng)絡(luò)中的作用

MQTT在LoRaWAN網(wǎng)絡(luò)中的作用Figure 3: MQTT在LoRaWAN網(wǎng)絡(luò)中的作用

實(shí)際應(yīng)用1:使用RAK商業(yè)網(wǎng)關(guān)內(nèi)置的MQTT Broker功能。

RAK商業(yè)網(wǎng)關(guān)獲取數(shù)據(jù)并發(fā)送給內(nèi)置NS,內(nèi)置NS將數(shù)據(jù)發(fā)布至內(nèi)置的MQTT Broker,用戶通過第三方程序訂閱數(shù)據(jù)。這種應(yīng)用情況下,RAK商業(yè)網(wǎng)關(guān)既是發(fā)布者,又是MQTT Broker。

注意:

  • 如果使用網(wǎng)關(guān)內(nèi)置的MQTT Broker,則無法通過公網(wǎng)訂閱或發(fā)布數(shù)據(jù)。
  • 網(wǎng)關(guān)內(nèi)置的MQTT Broker僅適用于項(xiàng)目研發(fā)和測(cè)試階段,由于內(nèi)置的MQTT Broker沒有密碼、證書等驗(yàn)證方式,容易被其他人竊取傳感器數(shù)據(jù),因此,不建議在生產(chǎn)部署時(shí)使用。

實(shí)際應(yīng)用2:使用用戶私有的MQTT Broker功能。

RAK商業(yè)網(wǎng)關(guān)獲取數(shù)據(jù)并發(fā)送給內(nèi)置NS,內(nèi)置NS將數(shù)據(jù)發(fā)布至第三方MQTT Broker,用戶通過第三方程序訂閱數(shù)據(jù)。這種應(yīng)用情況下,RAK商業(yè)網(wǎng)關(guān)僅為發(fā)布者。

#訂閱節(jié)點(diǎn)數(shù)據(jù)和向節(jié)點(diǎn)發(fā)送數(shù)據(jù)

本節(jié)以RAK商業(yè)網(wǎng)關(guān)為例,介紹如何通過MQTT.fx工具訂閱節(jié)點(diǎn)上報(bào)的數(shù)據(jù)和向節(jié)點(diǎn)發(fā)送數(shù)據(jù)。您可以通過單擊MQTT.fx下載MQTT.fx工具(MQTT客戶端)。

#配置商業(yè)網(wǎng)關(guān)使用內(nèi)置服務(wù)器

1、在瀏覽器地址欄中輸入商業(yè)網(wǎng)關(guān)的IP地址192.168.230.1,按"Enter",進(jìn)入如下界面。

商業(yè)網(wǎng)關(guān)登錄界面Figure 4: 商業(yè)網(wǎng)關(guān)登錄界面

2、在打開的商業(yè)網(wǎng)關(guān)登錄界面中輸入用戶名和密碼,單擊"Login"。

默認(rèn)用戶名和密碼都為root。

3、在左側(cè)導(dǎo)航欄中選擇“LoRa Network > Network Settings”。

4、在“LoRaWAN Network Settings”界面上,設(shè)置"Mode"為"Network Server"模式。

配置RAK7249使用內(nèi)置服務(wù)器Figure 5: 配置RAK7249使用內(nèi)置服務(wù)器

5、單擊“Switch mode”切換模式。

約15秒左右,網(wǎng)關(guān)即可切換為Network Server模式。在該模式下,商業(yè)網(wǎng)關(guān)既是網(wǎng)關(guān),又是NS服務(wù)器。

#添加節(jié)點(diǎn)到商業(yè)網(wǎng)關(guān)的內(nèi)置服務(wù)器

1、在商業(yè)網(wǎng)關(guān)左側(cè)導(dǎo)航欄中選擇“LoRa Network > Application”,進(jìn)入應(yīng)用概覽頁面。

2、輸入應(yīng)用名稱,單擊“Add”,如下圖所示。

注意:

本示例采用"Type1 : Unified Application Key",即同一Application中,所有節(jié)點(diǎn)設(shè)備使用相同的Application Key。不需要單獨(dú)為設(shè)備設(shè)置Application Key。支持通過OTAA自動(dòng)添加設(shè)備。如果您想使用“Type2 : Separate Application Key”,請(qǐng)參考Web 平臺(tái)配置指南。

新增應(yīng)用Figure 6: 新增應(yīng)用

在應(yīng)用配置頁面根據(jù)頁面提示配置應(yīng)用信息,如下圖所示。

配置應(yīng)用Figure 7: 配置應(yīng)用

  • Name:應(yīng)用名稱,用戶自定義。
  • Auto Add LoRa Device:是否開啟自動(dòng)添加設(shè)備。開啟后,如果設(shè)備的Application Key與Application EUI通過身份驗(yàn)證,設(shè)備將被自動(dòng)添加到服務(wù)器上。
  • Application EUI:標(biāo)識(shí)唯一的應(yīng)用提供者,開啟自動(dòng)添加設(shè)備后需要填寫。單擊讓系統(tǒng)自動(dòng)生成Application EUI。需與節(jié)點(diǎn)設(shè)備三元組信息中的“AppEUI”保持一致。
  • Application Key:由應(yīng)用程序擁有者分配給終端。單擊讓系統(tǒng)自動(dòng)生成Application Key。需與節(jié)點(diǎn)設(shè)備三元組信息中的“AppKey”保持一致。
  • Description:應(yīng)用描述信息,用戶自定義。

注意:您也可以使用Micro USB線連接節(jié)點(diǎn)設(shè)備到PC,后使用串口工具打開相應(yīng)端口分別發(fā)送AT+APPEUIAT+APPKEY獲取Application EUI和Application Key的值后填寫到此處,可省去后續(xù)配置節(jié)點(diǎn)的步驟。本示例采用系統(tǒng)自動(dòng)生成的方法。

4、單擊"Save & Apply"保存配置。

5、在系統(tǒng)自動(dòng)返回的應(yīng)用概覽頁面,單擊"Edit"進(jìn)入應(yīng)用配置頁面添加節(jié)點(diǎn)。

應(yīng)用概覽頁面Figure 8: 應(yīng)用概覽頁面

6、輸入節(jié)點(diǎn)的Device EUI后,單擊“Add”,如下圖所示。Device EUI可在節(jié)點(diǎn)設(shè)備的標(biāo)簽上獲取,也可使用Micro USB線連接節(jié)點(diǎn)設(shè)備到PC,后使用串口工具打開相應(yīng)端口發(fā)送AT+DEVEUI進(jìn)行查詢。

添加節(jié)點(diǎn)設(shè)備Figure 9: 添加節(jié)點(diǎn)設(shè)備

7、在節(jié)點(diǎn)配置頁面配置節(jié)點(diǎn)設(shè)備信息,如下圖所示。

配置節(jié)點(diǎn)設(shè)備信息Figure 10: 配置節(jié)點(diǎn)設(shè)備信息

  • Device name:節(jié)點(diǎn)設(shè)備名稱,用戶自定義。
  • Class:節(jié)點(diǎn)設(shè)備類型,需與節(jié)點(diǎn)保持一致。這里以節(jié)點(diǎn)出廠默認(rèn)配置Class A為例。
  • Join mode:節(jié)點(diǎn)設(shè)備的入網(wǎng)方式,需與節(jié)點(diǎn)保持一致。這里以節(jié)點(diǎn)設(shè)備出廠默認(rèn)配置OTAA為例。
  • Frame-counter Width:報(bào)文序號(hào)計(jì)數(shù)器長度。
  • LoRaWAN MAC Version:LoRaWAN協(xié)議版本號(hào)。
  • LoRaWAN Regional Parameters Reversion:LoRaWAN區(qū)域參數(shù)版本號(hào)。
  • Enable LPTP:是否開啟LPTP協(xié)議。LPTP協(xié)議是RAK自定義的LoRa?報(bào)文分片/重組協(xié)議,僅部分RAK節(jié)點(diǎn)產(chǎn)品(RAK7421、RAK7431及RAK4203)支持。
  • Description:節(jié)點(diǎn)的描述信息,用戶自定義。

8、單擊"Save & Apply"保存配置。

#使用商業(yè)網(wǎng)關(guān)內(nèi)置的MQTT Broker

用戶可通過商業(yè)網(wǎng)關(guān)內(nèi)置的Application Server Integration功能使用MQTT客戶端訂閱NS Topic消息來獲取節(jié)點(diǎn)數(shù)據(jù),也可以使用MQTT客戶端向節(jié)點(diǎn)發(fā)送數(shù)據(jù)。

#配置商業(yè)網(wǎng)關(guān)使用內(nèi)置的MQTT Broker

1、在商業(yè)網(wǎng)關(guān)左側(cè)導(dǎo)航欄中選擇"LoRa Network > Global Integration"。

2、在"Application Server Integration"頁面上,設(shè)置應(yīng)用服務(wù)器集成的相關(guān)參數(shù)。

如果使用內(nèi)置的MQTT Broker,則“MQTT Broker Address”和“MQTT Broker Port”參數(shù)的值保持默認(rèn)即可。如果您不了解MQTT協(xié)議的topic,建議保持MQTT topic相關(guān)參數(shù)的默認(rèn)配置。此處使用內(nèi)置的MQTT Broker,全部參數(shù)保持默認(rèn)配置,如下圖所示。

配置商業(yè)網(wǎng)關(guān)使用內(nèi)置的MQTT BrokerFigure 11: 配置商業(yè)網(wǎng)關(guān)使用內(nèi)置的MQTT Broker

3、單擊"Save & Apply"保存配置。

#通過MQTT.fx客戶端訂閱節(jié)點(diǎn)數(shù)據(jù)

1、打開MQTT.fx工具,主界面如下圖所示。

MQTT.fx工具主界面Figure 12: MQTT.fx工具主界面

2、單擊左上角的新建圖標(biāo),如下圖所示。

新建圖標(biāo)Figure 13: 新建圖標(biāo)

3、在下圖中紅框處輸入網(wǎng)關(guān)的IP地址。

輸入網(wǎng)關(guān)的IP地址Figure 14: 輸入網(wǎng)關(guān)的IP地址

4、單擊“Connect”。最右側(cè)的黑色圓形變成綠色,說明已經(jīng)成功連接到網(wǎng)關(guān)內(nèi)置的MQTT Broker。

成功連接到網(wǎng)關(guān)內(nèi)置的MQTT BrokerFigure 15: 成功連接到網(wǎng)關(guān)內(nèi)置的MQTT Broker

5、選擇“Subscribe”頁簽。

6、在“Subscribe”頁簽的輸入框中輸入待訂閱的topic,單擊輸入框右側(cè)的“Subscribe”。

輸入待訂閱的topic時(shí),topic的格式應(yīng)該與商業(yè)網(wǎng)關(guān)"Application Server Integration"頁面上Uplink Topic的格式保持一致,如下圖所示,其中,application_ID需要替換成實(shí)際的application ID的值,device_EUI需要替換成節(jié)點(diǎn)的device_EUI的值。

Uplink Topic參數(shù)Figure 16: Uplink Topic參數(shù)

application ID的值和device_EUI的值請(qǐng)參考下面兩個(gè)圖來獲取。

獲取application IDFigure 17: 獲取application ID

獲取device_EUIFigure 18: 獲取device_EUI


以上面兩個(gè)圖中獲取的application ID和device_EUI的值為例,則需要在輸入框中輸入的topic為:application/2/device/00d939567c667e1e/rx,如下圖所示。

訂閱節(jié)點(diǎn)上報(bào)的數(shù)據(jù)Figure 19: 訂閱節(jié)點(diǎn)上報(bào)的數(shù)據(jù)

· 如果要訂閱一個(gè)應(yīng)用下的所有節(jié)點(diǎn)數(shù)據(jù),例如:要訂閱應(yīng)用2下的所有節(jié)點(diǎn)數(shù)據(jù),則需要輸入如下topic:

application/2/device/+/rx

· 如果要訂閱所有應(yīng)用下的所有節(jié)點(diǎn)數(shù)據(jù),則需要輸入如下topic:

application/+/device/+/rx

7、使用節(jié)點(diǎn)成功join之后發(fā)送一條數(shù)據(jù)。例如:要在節(jié)點(diǎn)側(cè)發(fā)送一條“HelloRakwireless”,因?yàn)楣?jié)點(diǎn)需要接收16進(jìn)制的數(shù)據(jù),將“Hello Rakwireless”轉(zhuǎn)換為16進(jìn)制,即“48656c6c6f52616b776972656c657373”,則發(fā)送的AT命令如下圖所示。

在節(jié)點(diǎn)側(cè)發(fā)送數(shù)據(jù)示例Figure 20: 在節(jié)點(diǎn)側(cè)發(fā)送數(shù)據(jù)示例

8、在MQTT.fx界面上查看已訂閱的節(jié)點(diǎn)數(shù)據(jù),如下圖所示。

在MQTT.fx界面上查看已訂閱的節(jié)點(diǎn)數(shù)據(jù)Figure 21: 在MQTT.fx界面上查看已訂閱的節(jié)點(diǎn)數(shù)據(jù)

上圖中"data"字段的值即為節(jié)點(diǎn)發(fā)送的數(shù)據(jù),只是這些數(shù)據(jù)進(jìn)行了base64編碼,對(duì)"data"字段的值進(jìn)行base64解碼后即可看到原始數(shù)據(jù)。

9、查看商業(yè)網(wǎng)關(guān)web管理界面上節(jié)點(diǎn)發(fā)送的數(shù)據(jù)是否與MQTT.fx界面上一致。

查看商業(yè)網(wǎng)關(guān)web管理界面Figure 22: 查看商業(yè)網(wǎng)關(guān)web管理界面

#通過MQTT.fx客戶端向節(jié)點(diǎn)發(fā)送數(shù)據(jù)

1、在MQTT.fx工具的主界面上,選擇“Publish”頁簽。

2、在“Publish”頁簽的輸入框2中輸入topic,在輸入框3中輸入{"confirmed": true,"data": "SGVsbG8=","fPort":10},單擊“Publish”。

注意:

{"confirmed": true,"data": "SGVsbG8=","fPort": 10}中字段的說明如下所示:

"confirmed"的取值包括true和false。
"data"的取值即要發(fā)送的數(shù)據(jù),需要對(duì)數(shù)據(jù)進(jìn)行base64編碼。
"fPort"的取值即要發(fā)送的端口號(hào),有效端口號(hào)為1~255。

輸入topic時(shí),topic的格式應(yīng)該與商業(yè)網(wǎng)關(guān)"Application Server Integration"頁面上Downlink Topic的格式保持一致,如下圖所示,其中,application_ID需要替換成實(shí)際的application ID的值,device_EUI需要替換成節(jié)點(diǎn)的device_EUI的值。

Downlink Topic參數(shù)Figure 23: Downlink Topic參數(shù)

application ID的值和device_EUI的值請(qǐng)參考下面兩個(gè)圖來獲取。

獲取application IDFigure 24: 獲取application ID

獲取device_EUIFigure 25: 獲取device_EUI

以上面兩個(gè)圖中獲取的application ID和device_EUI的值為例,則需要在輸入框2中輸入的topic為:application/2/device/00d939567c667e1e/tx,如下圖所示。

通過MQTT.fx向節(jié)點(diǎn)發(fā)送數(shù)據(jù)Figure 26: 通過MQTT.fx向節(jié)點(diǎn)發(fā)送數(shù)據(jù)

注意:

通過MQTT.fx客戶端向節(jié)點(diǎn)發(fā)送數(shù)據(jù)后,Class C模式下節(jié)點(diǎn)會(huì)立刻收到MQTT.fx下發(fā)的數(shù)據(jù),Class A模式下節(jié)點(diǎn)會(huì)在下一次上發(fā)數(shù)據(jù)之后收到MQTT.fx下發(fā)的數(shù)據(jù)。

3、在節(jié)點(diǎn)端查看接收到的數(shù)據(jù),如下圖所示。

查看節(jié)點(diǎn)端接收到的數(shù)據(jù)Figure 27: 查看節(jié)點(diǎn)端接收到的數(shù)據(jù)

#使用用戶私有的MQTT Broker

本節(jié)介紹在商業(yè)網(wǎng)關(guān)上配置用戶私有的MQTT Broker信息、連接MQTT客戶端與用戶私有的MQTT Broker、通過MQTT客戶端訂閱節(jié)點(diǎn)數(shù)據(jù)和通過MQTT客戶端向節(jié)點(diǎn)發(fā)送數(shù)據(jù)的具體方法。

#配置商業(yè)網(wǎng)關(guān)使用用戶私有的MQTT Broker

1、在商業(yè)網(wǎng)關(guān)左側(cè)導(dǎo)航欄中選擇"LoRa Network > Global Integration"。

2、在"Application Server Integration"頁面上,設(shè)置應(yīng)用服務(wù)器集成的相關(guān)參數(shù)。

如果要使用用戶私有的MQTT Broker,則需要配置如下參數(shù)。

  • MQTT Broker Address:用戶私有的MQTT服務(wù)器的IP地址。
  • MQTT Broker Port:MQTT服務(wù)器的端口號(hào),默認(rèn)端口號(hào)為1883。
  • Enable User Authentication:打開用戶認(rèn)證開關(guān)。
  • Username:訪問MQTT服務(wù)器的用戶名。
  • Password:訪問MQTT服務(wù)器的用戶密碼。

如果您不了解MQTT協(xié)議的topic,建議保持MQTT topic相關(guān)參數(shù)的默認(rèn)配置。

此處使用用戶私有的MQTT Broker且保持MQTT topic相關(guān)參數(shù)的默認(rèn)配置,如下圖所示。

配置商業(yè)網(wǎng)關(guān)使用用戶私有的MQTT BrokerFigure 28: 配置商業(yè)網(wǎng)關(guān)使用用戶私有的MQTT Broker

3、單擊"Save & Apply"保存配置。

#連接MQTT.fx客戶端至用戶私有的MQTT Broker

1、打開MQTT.fx。

2、單擊設(shè)置圖標(biāo),如下圖所示。

設(shè)置圖標(biāo)Figure 29: 設(shè)置圖標(biāo)

系統(tǒng)彈出“Edit Connection Profiles”對(duì)話框。

3、在“Edit Connection Profiles”對(duì)話框中,單擊左下角的+。

4、設(shè)置“Profile Name”、“Broker Address”、"Broker Port",單擊“User Credentials”,輸入“User Name”和“Password”,如下圖所示。

新建Profile并配置參數(shù)Figure 30: 新建Profile并配置參數(shù)

5、單擊右下角的“OK”。

6、“Edit Connection Profiles”對(duì)話框自動(dòng)關(guān)閉,MQTT.fx主界面中已自動(dòng)選擇了剛創(chuàng)建的Profile。

7、在MQTT.fx主界面中單擊“Connect”。最右側(cè)的黑色圓形變成綠色,說明已經(jīng)成功連接到用戶私有的MQTT Broker。

#通過MQTT.fx客戶端訂閱節(jié)點(diǎn)數(shù)據(jù)

具體方法請(qǐng)參考通過MQTT.fx客戶端訂閱節(jié)點(diǎn)信息。

#通過MQTT.fx客戶端向節(jié)點(diǎn)發(fā)送數(shù)據(jù)

具體方法請(qǐng)參考通過MQTT.fx客戶端向節(jié)點(diǎn)發(fā)送數(shù)據(jù)。

前面章節(jié)介紹了通過MQTT如何訂閱節(jié)點(diǎn)的上行數(shù)據(jù)Uplink以及如何向節(jié)點(diǎn)下發(fā)數(shù)據(jù)Downlink,節(jié)點(diǎn)還有其他三種類型的數(shù)據(jù),分別是Join、Ack和Status。其中Join是節(jié)點(diǎn)入網(wǎng)時(shí)的信息,Ack是向節(jié)點(diǎn)下發(fā)數(shù)據(jù)之后節(jié)點(diǎn)回復(fù)的確認(rèn)信息,Status是節(jié)點(diǎn)的電池電量信息。

下面將分別介紹這五種數(shù)據(jù)的具體格式和含義。

#Uplink

{

  "applicationID": "1", // 節(jié)點(diǎn)所屬應(yīng)用的id

  "applicationName": "test-app", // 節(jié)點(diǎn)所屬應(yīng)用的名稱

  "devEUI": "3637343457387e11", // 節(jié)點(diǎn)的devEUI

  "deviceName": "dev-5205", // 節(jié)點(diǎn)名稱

  "timestamp": 1592730721, // 接收到節(jié)點(diǎn)數(shù)據(jù)的Unix時(shí)間戳 

  "fCnt": 6,

  "fPort": 2,

  "data": "AQIDBA==", // base64編碼后的數(shù)據(jù),解碼之后就是節(jié)點(diǎn)實(shí)際上發(fā)的數(shù)據(jù)

  "data_encode": "base64", // 數(shù)據(jù)的編碼類型

  "adr": true, // 節(jié)點(diǎn)是否開啟了adr

  "rxInfo": [ // 所有接收到節(jié)點(diǎn)數(shù)據(jù)的網(wǎng)關(guān)信息

?    {

?      "gatewayID": "d896e0fff010611e", // 網(wǎng)關(guān)的gateway_id

?      "loRaSNR": 13.3, // 當(dāng)前網(wǎng)關(guān)的信噪比

?      "rssi": -71, // 當(dāng)前網(wǎng)關(guān)的RSSI

?      "location": { // 對(duì)應(yīng)網(wǎng)關(guān)的經(jīng)緯度以及海拔信息

?        "latitude": 0,

?        "longitude": 0,

?        "altitude": 0

?      }

?    }

  ],

  "txInfo": {

?    "frequency": 486300000, // 節(jié)點(diǎn)發(fā)送數(shù)據(jù)使用的的頻率

?    "dr": 2 // 節(jié)點(diǎn)當(dāng)前的data rate

  }

}

#Downlink

{

  "devEUI":"3637343457387e11", // 節(jié)點(diǎn)的devEUI信息

  "confirmed": true, // This dl pkt need confirm or not.

  "fPort": 2, // The port will be used for sending this packet

  "data": "AgAAAA==" // 發(fā)送給節(jié)點(diǎn)的數(shù)據(jù),經(jīng)過base64編碼

}

#Join

{

  "applicationID": "1",

   "applicationName": "test-app",

  "deviceName": "dev-5205",

  "devEUI": "3637343457387e11",

  "devAddr": "02000001" // Join成功之后分配給節(jié)點(diǎn)的短地址

}

#Ack

只有服務(wù)器給節(jié)點(diǎn)下發(fā)了confirmed類型的數(shù)據(jù)后,節(jié)點(diǎn)才會(huì)回復(fù)Ack。

注意:節(jié)點(diǎn)不一定立即回復(fù)Ack,Ack可能會(huì)在節(jié)點(diǎn)下一次發(fā)送上行數(shù)據(jù)時(shí)攜帶。

{

  "applicationID": "1",

  "applicationName": "test-app",

  "deviceName": "dev-5205",

  "devEUI": "3637343457387e11",

  "acknowledged": true, 

  "fCnt": 7

}

#Device Status

{

  "applicationID": "1",

  "applicationName": "test-app",

  "deviceName": "dev-5205",

  "devEUI": "3637343457387e11",

  "battery": 254, // 電池剩于電量的分級(jí)。254表示電源滿電狀態(tài),1表示電池電量即將耗盡。

  "margin": 8, // 是最近一次成功接收DevStatusReq命令的解調(diào)信噪比

  "externalPowerSource": false, // 是否使用了額外的電源

  "batteryLevelUnavailable": false, // 節(jié)點(diǎn)的電量級(jí)別是否有效

  "batteryLevel": 100 // batteryLevelUnavailabl為true的情況下,batteryLevel表示電量百分比

}

#程序示例

以下是使用python代碼調(diào)用MQTT訂閱節(jié)點(diǎn)的上行數(shù)據(jù)并將對(duì)應(yīng)內(nèi)容打印出來,每收到一條上行數(shù)據(jù),程序會(huì)主動(dòng)向節(jié)點(diǎn)發(fā)送一個(gè)下行數(shù)據(jù),內(nèi)容是“Hello rak”。使用代碼前請(qǐng)仔細(xì)閱讀代碼注釋。

以下源碼基于python3運(yùn)行環(huán)境,在運(yùn)行代碼前,需要使用命令pip3 install paho-mqtt安裝依賴庫。

#!/usr/bin/env python 



import json

import base64

import paho.mqtt.client as mqtt

from datetime import datetime

 

\# mqtt服務(wù)器IP

mqtt_ip = '111.230.247.253'

\# mqtt服務(wù)器端口

mqtt_port = 1883

\# mqtt用戶名

mqtt_username = 'rakwireless'

\# mqtt密碼

mqtt_password = 'rakwireless.com'

\# mqtt訂閱topic。該topic可以訂閱所有節(jié)點(diǎn)信息

mqtt_rx_topic = 'application/+/device/+/rx'

 

\# 將字符串轉(zhuǎn)換為16進(jìn)制

def str_to_hex(s):

  return r"\x"+r'\x'.join([hex(ord(c)).replace('0x', '') for c in s])

 

\# 一旦訂閱到消息,回調(diào)此方法

def on_message(mqttc, obj, msg):

  on_print_rak_node_info(msg.payload)

 

\# 打印訂閱到的節(jié)點(diǎn)信息

def on_print_node_rx_info(json_rx):

  try:

?    devEUI     = json_rx['devEUI']

?    applicationID        = json_rx['applicationID']

?    applicationName  = json_rx['applicationName']

?    deviceName        = json_rx['deviceName']

?    timestamp      = json_rx['timestamp']

?    fCnt           = json_rx['fCnt']

?    fPort           = json_rx['fPort']

?    data       = json_rx['data']

?    data_hex       = str_to_hex(base64.b64decode(data).decode("utf-8"))

?    \# 將時(shí)間戳轉(zhuǎn)換為本地時(shí)間

?    str_local_time = datetime.fromtimestamp(timestamp)

 

?    print('---------------- devEUI:[%s] rxpk info -------------------' % devEUI)

?    print('+\t applicationName:\t%s' % applicationName)

?    print('+\t applicationID:\t\t%s' % applicationID)

?    print('+\t deviceName:\t\t%s' % deviceName)

?    print('+\t datetime:\t\t%s' % str_local_time)

?    print('+\t fCnt:\t\t\t%d' % fCnt)

?    print('+\t fPort:\t\t\t%d' % fPort)

?    print('+\t data:\t\t\t%s' % data)

?    print('+\t data_hex:\t\t%s' % data_hex)

?    print('----------------------------------------------------------')

 

 

  except Exception as e:

?    print(e)

  finally:

?    pass

 

\# 訂閱到節(jié)點(diǎn)的數(shù)據(jù)之后,向節(jié)點(diǎn)發(fā)送“Hello rak”字符串

def on_print_rak_node_info(payload):

  json_str = payload.decode()

  try:

?    json_rx = json.loads(json_str)

?    on_print_node_rx_info(json_rx)

 

?    dev_eui = json_rx['devEUI']

?    app_id = json_rx['applicationID']

 

?    \# 商業(yè)網(wǎng)關(guān)默認(rèn)的tx topic

?    tx_topic = 'application/%s/device/%s/tx' % (app_id, dev_eui)

?    str_hello = "Hello Rak"

 

?    tx_msg = '{"confirmed":true,"fPort":10,"data":"%s" }' % str(base64.b64encode(str_hello.encode("utf-8")), "utf-8")

 

?    \# 發(fā)布消息

?    mqttc.publish(tx_topic, tx_msg, qos=0, retain=False)

?    print('Send \'Hello rak\' to node %s' % dev_eui)

 

  except Exception as e:

?    raise e

  finally:

?    pass

 

mqttc = mqtt.Client()

mqttc.on_message = on_message

 

\# 如果沒有用戶名和密碼,請(qǐng)注釋改行

mqttc.username_pw_set(mqtt_username, password=mqtt_password)

 

\# 連接mqtt broker,心跳時(shí)間為60s

mqttc.connect(mqtt_ip, mqtt_port, 60)

 

mqttc.subscribe(mqtt_rx_topic, 0)

 

mqttc.loop_forever()
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 節(jié)點(diǎn)
    +關(guān)注

    關(guān)注

    0

    文章

    218

    瀏覽量

    24419
  • MQTT
    +關(guān)注

    關(guān)注

    5

    文章

    650

    瀏覽量

    22487
  • RAK
    RAK
    +關(guān)注

    關(guān)注

    0

    文章

    48

    瀏覽量

    2081
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Air201:MQTT實(shí)用示例的終極指南

    今天我們學(xué)習(xí)的是關(guān)于Air201的MQTT實(shí)用示例的終極指南。
    的頭像 發(fā)表于 11-07 19:30 ?162次閱讀
    Air201:<b class='flag-5'>MQTT</b>實(shí)用示例的終極<b class='flag-5'>指南</b>

    Air780E模組AT指令下的MQTT應(yīng)用:技術(shù)指南

    今天我要講的是Air780E模組AT指令下的MQTT應(yīng)用,希望對(duì)大家有所幫助。
    的頭像 發(fā)表于 11-07 14:02 ?327次閱讀
    Air780E模組AT指令下的<b class='flag-5'>MQTT</b>應(yīng)用:技術(shù)<b class='flag-5'>指南</b>

    MQTT協(xié)議網(wǎng)關(guān)的工作原理及功能特性

    在物聯(lián)網(wǎng)的快速發(fā)展中,MQTT協(xié)議網(wǎng)關(guān)作為連接物聯(lián)網(wǎng)設(shè)備與消息代理服務(wù)器的重要橋梁,扮演著不可或缺的角色。MQTT是一種基于發(fā)布/訂閱模式的輕量級(jí)通信協(xié)議,特別適用于低帶寬、不穩(wěn)定網(wǎng)絡(luò)環(huán)境下
    的頭像 發(fā)表于 09-18 17:00 ?474次閱讀
    <b class='flag-5'>MQTT</b>協(xié)議網(wǎng)關(guān)的工作原理及功能特性

    MQTT網(wǎng)關(guān):物聯(lián)網(wǎng)中的關(guān)鍵橋梁

    MQTT網(wǎng)關(guān):物聯(lián)網(wǎng)中的關(guān)鍵橋梁 在物聯(lián)網(wǎng)(IoT)的廣闊世界中,MQTT網(wǎng)關(guān)扮演著至關(guān)重要的角色。MQTT,全稱為Message Queuing Telemetry Transport,是一種
    的頭像 發(fā)表于 08-22 14:15 ?389次閱讀
    <b class='flag-5'>MQTT</b>網(wǎng)關(guān):物聯(lián)網(wǎng)中的關(guān)鍵橋梁

    合宙Air780EP模塊——AT指令MQTT接入OneNET開發(fā)指南

    物聯(lián)網(wǎng)設(shè)備要互動(dòng),Air780EP模塊是橋梁。用AT指令告訴MQTT:“幫我把話帶給OneNET吧!”MQTT就忙著打包數(shù)據(jù),像寄信一樣傳給OneNET。OneNET收到后,處理、存著或再轉(zhuǎn)發(fā)。這
    的頭像 發(fā)表于 08-19 16:40 ?2205次閱讀
    合宙Air780EP模塊——AT指令<b class='flag-5'>MQTT</b>接入OneNET開發(fā)<b class='flag-5'>指南</b>

    MQTT應(yīng)用看這篇!合宙Air780EP_LuatOS_MQTT應(yīng)用指南

    Air780EP 是合宙的低功耗4G模組之一,支持LuatOS的腳本二次開發(fā),即使是不太懂技術(shù)的老板,也能輕松使用 Air780EP開發(fā)產(chǎn)品。 本文應(yīng)各位大佬邀請(qǐng),詳細(xì)講解了Air780EP 的MQTT的應(yīng)用教程!
    的頭像 發(fā)表于 08-08 17:13 ?1904次閱讀
    <b class='flag-5'>MQTT</b>應(yīng)用看這篇!合宙Air780EP_LuatOS_<b class='flag-5'>MQTT</b>應(yīng)用<b class='flag-5'>指南</b>

    780EP模塊 AT開發(fā)-MQTT應(yīng)用指南

    簡介關(guān)聯(lián)文檔和使用工具:AT固件獲取AT指令手冊(cè)材料準(zhǔn)備[EVB_Air780EP(V)]開發(fā)板一套,包括天線SIM卡USB線PC電腦串口調(diào)試工具(如果沒有準(zhǔn)備,推薦可以使用llcom,下載地址:https://llcom.papapoi.com)AT固件獲?。?/div>
    的頭像 發(fā)表于 07-26 11:22 ?494次閱讀
    780EP模塊 AT開發(fā)-<b class='flag-5'>MQTT</b>應(yīng)用<b class='flag-5'>指南</b>

    MQTT物聯(lián)網(wǎng)平臺(tái)是什么

    MQTT物聯(lián)網(wǎng)平臺(tái)是一種軟件平臺(tái),它基于MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸)協(xié)議,為物聯(lián)網(wǎng)(IoT)設(shè)備提供連接、管理和數(shù)據(jù)處理的服務(wù)
    的頭像 發(fā)表于 07-18 14:22 ?582次閱讀

    為什么使用MQTT而不是HTTP?

    MQTT協(xié)議通過TCP/IP運(yùn)行,基于無損通信的雙向發(fā)布-訂閱模型,確保MQTT消息高效無損地傳遞。
    發(fā)表于 04-28 11:07 ?919次閱讀
    為什么使用<b class='flag-5'>MQTT</b>而不是HTTP?

    MQTT物聯(lián)網(wǎng)平臺(tái)是什么?MQTT物聯(lián)網(wǎng)平臺(tái)的功能

    MQTT(Message Queuing Telemetry Transport)是一種基于客戶端-服務(wù)器架構(gòu)的發(fā)布/訂閱模式的消息傳輸協(xié)議。它基于TCP/IP協(xié)議棧構(gòu)建,設(shè)計(jì)輕巧、開放、簡單和規(guī)范
    的頭像 發(fā)表于 04-01 10:20 ?726次閱讀

    MQTT網(wǎng)關(guān)是什么?MQTT網(wǎng)關(guān)的功能

    MQTT網(wǎng)關(guān)是支持MQTT協(xié)議的物聯(lián)網(wǎng)網(wǎng)關(guān),是一種用于連接不同設(shè)備和云端平臺(tái)之間的中間件。它充當(dāng)了設(shè)備和云端服務(wù)之間的數(shù)據(jù)傳輸橋梁。MQTT網(wǎng)關(guān)能夠接收來自各種設(shè)備的數(shù)據(jù),并將其發(fā)送到云端平臺(tái),同時(shí)
    的頭像 發(fā)表于 03-18 17:10 ?799次閱讀

    MQTT協(xié)議網(wǎng)關(guān)解決方案設(shè)計(jì)與實(shí)施

    MQTT協(xié)議網(wǎng)關(guān)是一個(gè)中間件,負(fù)責(zé)接收來自不同MQTT客戶端的消息,并將這些消息轉(zhuǎn)發(fā)到MQTT服務(wù)器;同時(shí),也能接收來自MQTT服務(wù)器的消息,并將其轉(zhuǎn)發(fā)給相應(yīng)的
    的頭像 發(fā)表于 03-11 14:07 ?497次閱讀

    什么是MQTT?MQTT協(xié)議中的方法

    MQTT是一種輕量級(jí)消息傳遞協(xié)議,由IBM開發(fā),于1999年首次發(fā)布。它使用發(fā)布/訂閱模式并在設(shè)備、服務(wù)器和應(yīng)用程序之間轉(zhuǎn)換消息。
    的頭像 發(fā)表于 02-25 17:04 ?1322次閱讀
    什么是<b class='flag-5'>MQTT</b>?<b class='flag-5'>MQTT</b>協(xié)議中的方法

    MQTT物聯(lián)網(wǎng)平臺(tái)是什么?MQTT物聯(lián)網(wǎng)平臺(tái)的功能有哪些

    MQTT(Message Queuing Telemetry Transport)是一種基于客戶端-服務(wù)器架構(gòu)的發(fā)布/訂閱模式的消息傳輸協(xié)議。它基于TCP/IP協(xié)議棧構(gòu)建,設(shè)計(jì)輕巧、開放、簡單和規(guī)范
    的頭像 發(fā)表于 01-24 09:23 ?1145次閱讀

    什么是MQTT網(wǎng)關(guān)

    什么是MQTT網(wǎng)關(guān)? MQTT網(wǎng)關(guān)通過發(fā)布/訂閱模式實(shí)現(xiàn)物聯(lián)網(wǎng)設(shè)備的雙向通信,具有輕量級(jí)、可擴(kuò)展、實(shí)時(shí)性和安全性等優(yōu)勢(shì),廣泛應(yīng)用于智能家居、工業(yè)物聯(lián)網(wǎng)和智能交通等領(lǐng)域。然而,在設(shè)備管理、網(wǎng)絡(luò)可靠性
    的頭像 發(fā)表于 12-26 17:23 ?644次閱讀
    RM新时代网站-首页