?

Docker與ChirpStack在LoRaWan云服務中的應用研究

2022-08-26 01:51倪峰金海峰蘇春芳
現代信息科技 2022年11期
關鍵詞:報文網關鏡像

倪峰,金海峰,蘇春芳

(江陰職業技術學院 計算機科學系,江蘇 江陰 214405)

0 引 言

LoRa與NB-IoT是目前窄帶物聯網領域的研究與應用熱點。LoRa一種低功耗的廣域物聯網技術,它采用了擴頻調制技術,可實現超遠距離的無線傳輸,且兼顧了低功耗的需求,在智能建筑、智慧城市、智能制造等領域有著廣闊的應用前景。Cisco、IBM和Semtech共同發起了LoRaAlliance聯盟,制定了LoRaWan標準規范。國內的中興通訊、騰訊、阿里等企業也紛紛加入LoRaWan的陣營,成立了CLAA聯盟,制定適合中國國情的技術標準,成為全球最大的LoRa物聯網生態圈。LoRa工作在非授權頻段,按照LoRaWan Regional Parameters標準,中國地區有2個ISM免費頻段,分別為CN779-787和CN470-510,其中CN779-787最大功率僅為10 dBm,實際利用價值不高,CN470-510最大發射功率可達17 dBm,是部署LoRaWan的最佳頻段。

如圖1所示,LoRa節點與LoRa網關之間組成星型拓撲結構,網關負責節點數據的透傳,網關與LoRaWan Server之間通過IP網絡進行通信,LoRaWanServer負責網關接入控制、LoRaWan協議解析、RF數據包的收發、數據加密與解密、數據存儲、應用層下行指令的轉發等工作。部分網關內嵌了LoRaWanServer功能,但功能較弱。目前TTN、騰訊云、阿里云、華為云等物聯網開發平臺提供LoRaWanServer功能,也可搭建開源的云服務器如ChirpStack。ChirpStack的前身為著名的開源項目LoRaServer,可通過租用阿里的ECS云服務器、騰訊的CVM云服務器等進行公有云的搭建部署,并實現域名訪問,也可在內部網絡中搭建私有云平臺。ChirpStack的使用非常靈活,且安全性高,主要包括PostgreSQL、Redis、Mosquitto等軟件模塊,一般部署在Linux環境中,但安裝較為煩瑣,后續維護卸載不便,為此國內的銳米通信等曾發布開源的LoRaServer一鍵安裝包。隨著Docker容器技術的發展,提供了更為便捷、輕量化、可移植的解決方案,在本地配置好的鏡像可部署在其他Linux版本的環境中,系統耦合度低,輕便靈活,因此Docker技術目前成為LoRaWan云平臺構建的研究熱點。本文使用Docker容器技術在Ubuntu上安裝部署ChirpStack環境,硬件層選用南京易通匯聯的TJ81 LoRa網關和XC20 LoRa節點,節點使用ClassA工作模式,選用OTAA入網方式,網關接收通道的中心頻點為475 MHz,發射通道中心頻點505 MHz,發射和接收通道左右各5 MHz的帶寬??蛻舳丝赏ㄟ^MQTT協議或訪問ChirpStack提供的Restful API實現數據的上下行。

圖1 LoRa的網絡架構

1 基于Docker的ChirpStack云平臺構建

虛擬化實現了在當前操作系統中模擬運行其他操作系統的功能,傳統的虛擬化技術如VMWare、VisualBox等,依賴于物理CPU和內存,是硬件級別的虛擬化,存在占用資源多、運行慢等缺點。而Docker容器并非模擬完整的操作系統,通過Linux提供的命名空間對不同的容器進行隔離,實現了操作系統級別的虛擬化,通過開源的應用程序容器引擎,將程序和依賴包整合在一個文件中,運行此文件生成一個虛擬容器,程序在此虛擬容器中運行,可發布到任何Linux環境中,容器使用沙箱機制,容器之間不存在任何接口,容器性能開銷較低。

Docker由鏡像、容器、倉庫三部分構成,鏡像是一個最小root文件系統,是靜態的概念,而容器則是鏡像運行時的實體,倉庫是代碼控制中心,用于保存鏡像。如圖2所示,Docker使用C/S架構,Docker客戶端與本地或者遠端主機的守護進程進行通信,守護進程負責構建和維護容器,當需要構建Docker容器時,守護進程從倉庫中拉取鏡像,鏡像可以存放在Docker官方提供的DockerHub中,也可以存放在私有倉庫中。守護進程得到鏡像后,生成Container容器,容器擁有獨立的root文件、進程空間等,用戶程序可以在容器中獨立運行。也可以將構建好的鏡像推送到倉庫中,便于在其他主機上部署和使用。

圖2 Docker的架構

Docker存儲庫中保存了安裝Docker所需組件,可通過HTTPS方式從Docker存儲庫上拉取安裝包自動安裝,安裝需要root權限,主要流程如圖3所示,相關命令由于篇幅所限不再贅述。

圖3 Ubuntu下Docker組件安裝流程

安裝完Docker后,從github上拉取ChirpStack代碼到本機,完成ChirpStack組件的安裝。拉取成功后會在用戶目錄下生成chirpstack-docker目錄,在該目錄下運行sudo docker-compose up命令,在容器中運行ChirpStack組件。

2 ChirpStack云平臺的配置與部署

在Docker容器中運行ChirpStack相應組件,容器中運行了以下進程:(1)chirpstack-network-server:LoRaWan網絡服務器。(2)chirpstack-gateway-bridge:LoRaWan網關通信。(3)chirpstack-application-server:LoRaWan應用服務器。(4)mosquitto:MQTT消息代理。(5)redis:會話存儲。(6)postgresSQL:數據存儲。

按照LoRaWan標準約定,中國地區使用470~510 MHz的頻率范圍,本文使用的TJ81網關遵循相關協議,因此需要設置相應參數,將chirpstack-docker/dockercompose-env.yml配置文件中的NETWORK_SERVER__BAND__NAME字段以及chirpstack-docker/configuration/chirpstack-network-server/chirpstack-network-server.toml中的network_server.band字段的默認值EU868(歐洲)修改為CN_470_510(中國),并將默認的歐洲頻段刪除。

ChirpStack提供Web界面便于用戶自定義配置,主要業務流程如圖4所示。創建Network-server后需將訪問地址修改為chirpstack-network-server:8000。創建Gateway-profiles后將其與Network-server關聯,同時設置網關監聽信道號。本文使用的TJ81 LoRa網關設置的起始頻點為472.3 MHz,按照LoRaWan Regional Parameters V1.0標準的約定,設置Gateway-profile對應的信道號為10至17,共8個信道號,匹配TJ81網關所監聽的8個物理信道,上行頻率范圍:472.3 MHz~473.7 MHz,下行頻率范圍:502.3 MHz~503.7 MHz,信道頻率間隔200 kHz。Service-profiles負責管理服務配置文件,用于定義用戶和組織在網絡服務器上能使用的功能。Device-profiles負責設置設備功能和啟動參數,設置LoRaWan MAC version為目前流行的1.0.2版本,設置LoRaWanRegionalParametersversion為版本A。LoRa節點支持OTAA和ABP兩種入網方式。OTAA入網方式需要節點向NS發送Joinrequest報文,報文中包含DevEUI、AppEUI和AppKey三個參數,DevEUI為節點的身份唯一標識,AppEUI為應用ID,AppKey用于節點計算會話秘鑰。節點發送的Joinrequest報文經網關透傳至NS后,若NS判斷為合法請求,則會下發Joinaccept報文,經網關轉發至節點,節點從中解析出devAddr、appSkey和nwkSkey,其中devAddr為LoRa節點的唯一短地址,其余兩個參數用于數據加密使用。相對而言,ABP的入網方式則簡單許多,直接將devAddr、appSkey和nwkSkey這三個參數配置給ABP終端節點,這三個加密參數將固定不變,相對而言OTAA終端節點每次入網時會動態改變加密參數,安全性高??梢奜TAA入網方式相對復雜,安全性高,而ABP方式簡化入網方式,安全性相對較弱,但由于OTAA入網方式需要接收NS的Joinaccept報文,在一些信號較弱的環境中,可能會導致數據丟包的情況發生,而采用ABP入網方式相對穩定,故這兩種入網方式有各自的優缺點。節點設備有ClassA、ClassB和ClassC三種類型,ClassA數據上行后短暫打開2個接收窗口,其余時間一直處于休眠狀態,優點是省電,但下行數據的實時性受限,若錯過本次接收窗口時間,需等到下次數據上行時才能接收下行數據。ClassB具備ClassA的特點,可根據網關接收的時間同步Beacon信標打開接收窗口,其余時間休眠,下行數據的延遲問題有所提高,設備相對省電。ClassC設備的接收窗口時刻處于打開狀態,能實時接收下行數據,但最為耗電。本文使用的XC20節點采用ClassA工作模式,采用OTAA入網方式,故在此步驟完成相應設置。接下來創建和命名網關,將網關設備與先前創建的Network-server、Service-profile、Gateway-profile相關聯,并輸入網關設備的ID。最后創建Application,命名并關聯Serviceprofile,并將節點設備添加到Application中,為節點設備配置DevEUI和AppKey,并關聯對應的Device-profile。當節點入網后,可在Application中查看到入網數據信息。

圖4 ChirpStack部署流程

3 節點數據上下行驗證

本文中LoRa節點型號為XC20,使用STM32L431CBT6作為主控芯片,使用SEMTECH的SX1278無線擴頻芯片,最大發射功率19 dBm,RSSI -140 dBm,半雙工通信,通信距離超過3千米,通過UART進行AT指令交互。網關型號為TJ81,使用SX1301無線擴頻芯片,8路上行通道、1路下行通道,半雙工通信,最大發射功率24 dBm。網關的起始頻點、ID、服務器IP等必須與ChirpStack配置信息一致。先進行入網狀態查詢,向節點發送“AT+JOIN?”,若返回“+JOIN:1”表示入網成功,可進行數據收發,若返回“+JOIN:0”表示入網失敗,則需進行檢查排故。入網成功后可進行數據的傳輸,數據將進行BASE64加密,向節點發送“AT+UNCONMSG=數據”或“AT+CONMSG=數據”即可將數據經網關轉發至ChirpStack,區別在于是否需要對上行數據進行應答。如圖5所示,節點上行數據后,可在Application中對應的節點下的LoRaWan Frames內實時查閱節點上行數據。如需進行數據下行,則需借助MQTT協議實現,通過MQTTBox工具,可實現Topic的推送和訂閱,進行數據的上下行。也可通過MQTT協議開發用戶層應用程序。

圖5 LoRaWan節點入網與數據響應

4 結 論

本文通過Docker容器技術將ChirpStack部署在Ubuntu系統下,實現了LoRaWan云服務,對比分析了Docker技術與VM技術的特點,對ChirpStack云服務的部署進行了詳細闡述,對LoRa節點的入網方式和工作模式進行了分析和選型,實現LoRa節點數據的上下行。經驗證,ChirpStack在Docker容器中運行穩定,可方便的部署在本地或阿里云等服務器上。后續將對LoRa的傳感層數據采集與傳輸以及應用層程序的開發做進一步研究。

猜你喜歡
報文網關鏡像
海法新港一期自動化集裝箱碼頭電子數據交換報文系統設計與實現
智能燃氣表物聯網運行體系網關技術研究
基于FPGA的工業TSN融合網關設計
基于ARM架構的工業物聯網網關研究與實現
基于報文類型的限速值動態調整
鏡像
鏡像
用戶設備進行組播路徑追蹤的方法及系統
鏡像
基于ENC28J60的嵌入式以太網/CAN網關設計
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合