黃弘毅,韓劍輝,胡小文,韓飛馳
(哈爾濱理工大學 計算機科學與技術學院,黑龍江 哈爾濱150080)
數據的存儲與可視化幾乎是所有依賴數據運行的項目所需解決的一大難題。在傳統開發中,開發者一般選擇將數據存儲到本地數據庫,并通過顯示屏等人機交互接口來實現數據的可視化。但是本地存儲具有一系列的弱勢:(1)相對依賴本地的硬件環境;(2)容易受到各種物理因素的影響,導致數據丟失或損壞,造成不可挽回的損失。在通信技術急劇發展的今天,云端數據庫為我們提供了一個高效安全的平臺,給開發者提供了一個更加具有優勢的選擇,能在很大程度上彌補本地存儲帶來的不足與風險。
系統上位機在本地裝載了具有較小內核且適用于安全操作的Linux系統,通過Pyhton3腳本將本地數據封裝成阿里云物聯網平臺可識別的JSON格式。基于MQTT網絡通訊協議,通過高速4G DTU模塊將本地數據發送到阿里云物聯網平臺的物模型平臺中,通過平臺的物理引擎編寫云產品流轉規則將數據轉儲到具有完善性能且安全的RDS數據庫中進行及時存儲。整個過程十分快捷,且易于維護,降低了風險的發生率,當本地數據被存儲到數據庫中以后,還可以非常方便地在本地編寫Python3腳本,實現對數據庫的進一步操作。該系統所涉及的模塊主要包括三個大步驟以及九個小步驟:
(1)本地數據的人為分析;(2)編寫數據整合腳本;(3)測試腳本性能。
(1)MQTT的性能機制;(2)4G DTU與云端通信;(3)阿里云的簡單測試。
(1)云上轉儲流程細則;(2)本地收發流程細則;(3)本地與云的整體運行測試。
通常,本地數據為分別獨立的變量,每個變量代表實際的物理量。若按位傳輸數據,其缺點以及可能造成的后果如表1所示。

表1 數據按位傳輸的缺點以及可能造成的后果
若要解決諸如此類的問題,就需要開發者根據項目的實際情況,通過按照阿里云平臺的格式,來對本地數據進行相應的封裝。阿里云提供的可以識別的數據格式為JSON格式,本文將通過編寫Python3腳本來實現對數據的合并,然后有序地封裝。以工程中傳輸8個紅外傳感器的實時數據為例,數據整合腳本的詳情如圖1(a)所示。
該腳本的輸入為一個12位的二進制串,前4位為消息包頭,0x00表示這是傳感器的消息,后面8個二進制數表示8個紅外傳感器的值。運行該腳本,得到JSON格式的數據如圖1(b)所示。

圖1 數據整合腳本和數據解析結果
本文采用4G DTU模塊,通過4G網絡,并基于MQTT網絡通訊協議,實現將數據傳輸至阿里云物聯網平臺。
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是構建于TCP/IP協議上,基于發布/訂閱(Publish/Subscribe)模式的輕量級通訊協議[1]。其實現方式如圖2所示。

圖2 MQTT協議實現方式
MQTT協議一共有三種身份,其中發布者和訂閱者都是客戶端,消息的代理為服務器端[2]。客戶端發送的消息共有兩種類型:主題(Topic):主題是消息的類型,訂閱者訂閱該主題后,就可以收到該主題的內容[3]。負載(Payload):負載是消息的內容,是指訂閱者具體要使用的內容[3]。相較于其他網絡傳輸協議,MQTT協議最大的優點是可以用極少的代碼和有限的帶寬,為遠程設備提供實時可靠的消息服務[2]。
阿里云物聯網平臺封裝了許多物理型通信主題可以用于數據通信,如表2所示。

表2 阿里云平臺物理型通信主題
4G DTU模塊通過訂閱阿里云的物理型通信主題,實現將串口接收到的數據發送至其相應的主題上,此時阿里云物聯網平臺便能接受其發送的數據并執行后續操作。
數據的云上轉儲是將原始的Payload數據通過物模型解析傳到物模型數據上,通過規則引擎對數據進行解析,得到SQL語句處理的結果。通過編寫數據傳送規則,將得到的數據轉儲到數據庫中,實現數據的存儲。以8個紅外傳感器采集到的數據為例。首先通過本地Python3腳本,可以得到如圖3(a)所示的原始Payload數據。然后阿里云物聯網平臺會對原始Payload數據進行解析,得到如圖3(b)所示的數據解析結果(此處僅展示部分解析結果)。接著通過編寫如圖4(a)所示的規則引擎SQL語句,可以得到如圖4(b)所示的處理結果。再編寫云產品流轉規則就可以將數據轉儲到RDS數據庫中。

圖3 原始Payload數據和物模型解析結果

圖4 規則引擎SQL語句和規則引擎處理結果
至此,我們已經可以將本地數據發送到云端,并實現數據的云端存儲。但是有時候也需要手動操作數據庫的內容,此時就需要在本地電腦中編寫Python程序來連接云端數據庫并實現對遠端數據庫的操作。
Python3腳本連接云端數據庫一般的操作步驟如下:
(1)連接數據庫;(2)編寫SQL語句實現對數據庫的操作;(3)提交SQL腳本到云端執行;(4)云端執行SQL語句并返回結果。
以刪除數據庫的數據為例,其Python3代碼如圖5所示。

圖5 刪除數據庫中的數據腳本
其中腳本的輸入是SQL語句。阿里云RDS數據庫增刪改查的SQL語句示例如圖6所示。

圖6 阿里云RDS數據庫增刪改查SQL語句示例
這樣,通過在Python3腳本中調用相應的SQL語句就可以實現本地對云端RDS數據庫的操作。
本文詳細講解了如何將傳感器收集到的數據通過4G DTU模塊傳輸至阿里云物聯網平臺,并轉儲至RDS數據庫,實現數據的云端存儲。同時也可以在本地使用Python3腳本實現對云端數據庫的直接操作。這樣完成了項目與云端的數據處理部分,為后續的項目開發奠定了基礎。