鵝廠分佈式大氣監測系統:架構介紹及案例解析

引言

爲了跟蹤小區級的微環境質量,騰訊內部發起了一個實驗性項目:細粒度的分佈式大氣監測

我們希望基於騰訊完善的產品與技術能力,與志願者們共同建設一套用於監測生活環境大氣的系統,監測終端就分佈在志願者的身邊,所以這個系統的數據,更貼近每個人的生活空間,以及提供更細粒度的數據監測能力。

上一期我們分享了分佈式大氣監測系統的組成和追蹤分析,本篇文章將延續之前文章的脈絡,從系統架構的角度來介紹目前正在構建的大氣監測系統,並逐個模塊介紹其設計思路和要點。

設計要求

1. 低使用門檻

這套系統將要吸引志願者一起共建大氣監測點,所以必須保證在端側及平臺操作上都應該儘可能簡單。

2. 低開發成本

大氣監測是一個典型的端雲配合的物聯網場景。我們瞭解到騰訊雲已經有了一整套的物聯網產品。爲了讓我們這個兼職部隊,在業餘時間能快速地構建一個高可靠的業務系統,我們會儘可能地使用騰訊雲的物聯網產品及其他雲產品,用以加速這套業務系統開發。

3. 更多元的擴展空間

以單項監控服務爲起點,孵化一套具備快速擴展和廣泛適用能力的監測物聯網架構,同時以大氣監測爲案例,進行可用性驗證。

架構詳細設計

1. 總體設計

整個系統計劃由如下幾個模塊組成:

  • 數據採集模塊:在終端側採集傳感器的監測數據。
  • 無線接入模塊:提供多種無線協議,支持終端接入網絡。
  • 設備接入模塊:在雲平臺側處理各種無線接入協議及設備數據規整。
  • 業務處理模塊:管理終端設備,分析傳感器數據及可視化。

架構概要設計圖如下所示:

2. 數據採集模塊

數據採集模塊負責在終端側採集傳感器的監測數據。

這裏有2個設計要求:

  • 支持多樣化的傳感器。我們的系統應該不限制傳感器的品牌,這樣數據源會有不同的精度和協議格式,需要架構上做些處理。
  • 支持多樣化的終端硬件。開發者手頭物聯網開發板,我們系統應支持儘量多的開發板,保證項目的可玩性,吸引極客們加入進來。

模塊設計思路

  • 端側不處理傳感器數據。一方面傳感器存在精度差異,一方面有別於政府專用監測點,生活監測點必然存在數據干擾,基於這兩點無法保證端側的數據準確性。設計上端側不處理傳感器數據,在平臺匯聚後由業務處理模塊進行區域數據分析,濾除個例誤差。
  • 端側不限制傳感器數據格式。開發者可能會對接多種傳感器,不同品牌、不同型號的傳感器均可能存在不同的數據格式,爲了減少端側的開發工作量,藉助“設備接入模塊”的平臺設備數據解析引擎,傳感器數據可以在後端在做協議格式規整。
  • 端側不限制硬件形態。騰訊物聯網終端操作系統(TencentOS tiny)是騰訊面向物聯網領域開發的實時操作系統,已經對接了市面上主流的芯片架構以及物聯網開發板,通過 TencentOS tiny 輸出 example 指導開發者。同時其他開發者也可基於 Arduino、樹莓派等硬件形態開發相應終端,我們通過社區傳播優秀的接入實踐教程,進一步豐富終端硬件形態。

3. 無線接入模塊

無線接入模塊提供多樣的無線接入方式,讓終端入網並接入設備接入平臺。

無線接入這邊有一個硬性要求,大部分終端應該都安裝在室內及陽臺,仍需要部分終端安裝於街道上,用以監測戶外真實的大氣環境。

模塊設計思路

由於 LPWAN 具有低功耗、遠距離等優勢,我們可選用 LPWAN 相關技術來滿足戶外街道的終端接入需求。目前最主流的是 LoRa 和 NB-IoT 兩種無線接入方式。

NB-IoT 同 GPRS 一樣,都要購買 sim 卡;LoRa 則需要購買 LoRaWAN 網關。二者都存在一定的搭建成本。但在 LoRa 方面,鵝廠提供了開放共享的騰訊 LoRa 社區網絡,其中包括騰訊在深圳自建的數百個LoRa網關,用戶可查找附近的社區LoRa網關就近完成 LoRaWAN 設備接入,降低應用開發門檻。

同時考慮在成本和便利性的優勢,市面上一個WiFi開發板在20塊錢左右,直接通過家庭路由器便可以接入平臺,因此我們仍希望能支持 WiFi 接入方式。

綜上,在無線接入模塊的設計,我們首選 LoRa、輔以 WiFi,同時仍能儘量支持其他的無線接入方式。

4. 設備接入模塊

設備接入模塊負責各類終端設備的平臺側接入,並且進行不同設備協議的規整,發送給業務處理模塊。

爲了讓業務系統快速支撐海量物聯網設備連接,毫無疑問需要選擇成熟的物聯網平臺進行開發。騰訊雲物聯網開發是目前騰訊雲主推的一站式開發平臺。除了具備海量連接的可靠能力,還支持 LoRa、WiFi、蜂窩網絡 等多種接入協議。

另外很重要的一點,騰訊雲物聯網開發平臺還爲用戶提供產品開發及定義數據模板的能力,可以定義統一的大氣傳感器產品。同時靈活的設備數據解析引擎,可以將不同的傳感器協議格式進行腳本處理,轉化成我們需要的統一的數據模版格式,滿足我們端側不限制傳感器數據格式的需求。

最後物聯網開發平臺中可以配置相應的第三方服務器 URL,將規整後的設備協議推送給我們的業務處理模塊。

5. 業務處理模塊

業務處理模塊負責管理終端設備,分析傳感器監測數據。

在設備管理部分的設計中,由於物聯網開發平臺已經可以定義具體數據模版的產品,因此我們在這個大氣監測系統將會定義具體的幾種大氣監測產品,如pm2.5,如voc。業務處理模塊中只需進行指定產品的設備管理,用戶無需再操心具體的產品json協議,降低用戶的使用門檻。

在業務處理部分,涉及API網關、SCF雲函數、雲數據庫及騰訊雲圖等多款雲端組件,eckygao 已在系統功能與架構概述中進行了的闡述。

案例解析

春節前我們快速討論確定了這套系統架構。並且在 TencentOS tiny 團隊的幫助下,在不到2天的時間內,快速搭建了整套系統及5個監測點。

下文介紹具體案例,方便大家加深理解這個系統架構。

1. LoRa PM2.5 節點

在數據採集部分,我們採用了目前 NUCLEO LoRa 開發套件作爲主控,串口連接攀藤 PMS7003 PM2.5 傳感器。

軟件上基於 TencentOS tiny 快速開發了一個固件版本,後續相關同事會再分享一篇具體的嵌入式軟件設計分析。下圖是具體的傳感器數據協議,開發板直接透傳數據 payload 給到雲端。

2. LoRa 網關

在無線接入部分,5 個監測點直接安裝了 5 個社區LoRa網關。

3. 騰訊雲物聯網開發平臺

傳感器的原始數據上傳到騰訊雲物聯網開發平臺後,經過設備數據解析腳本的處理,原始的傳感器協議格式已轉化爲具體的產品屬性,以json格式推送給大氣監測平臺。

如下是針對攀藤 PMS7003 PM2.5 傳感器編寫的數據解析腳本:

function RawToProtocol(fPort, bytes) {
    var data = {
        "method": "report",
        "clientToken" : new Date(),
        "params" : {}
    };
    var i = 0;
    
    data.params.PM1_CF1 = (bytes[i++] << 8) | bytes[i++];
    data.params.PM2d5_CF1 = (bytes[i++] << 8) | bytes[i++];
    data.params.PM10_CF1 = (bytes[i++] << 8) | bytes[i++];
    
    data.params.PM1 = (bytes[i++] << 8) | bytes[i++];
    data.params.PM2d5 = (bytes[i++] << 8) | bytes[i++];
    data.params.PM10 = (bytes[i++] << 8) | bytes[i++];
    
    data.params.particles_0d3 = (bytes[i++] << 8) | bytes[i++];
    data.params.particles_0d5 = (bytes[i++] << 8) | bytes[i++];
    data.params.particles_1 = (bytes[i++] << 8) | bytes[i++];
    data.params.particles_2d5 = (bytes[i++] << 8) | bytes[i++];
    data.params.particles_5 = (bytes[i++] << 8) | bytes[i++];
    data.params.particles_10 = (bytes[i++] << 8) | bytes[i++];
    
    data.params.version = bytes[i++];
    data.params.Error = bytes[i++]
    
    return data;
}

下圖是 LoRa PM2.5 節點在物聯網開發平臺中的設備屬性呈現:

4. 業務平臺最終效果

最後再附上一張大氣監測平臺的騰訊雲圖呈現效果。

鵝廠“手搓一個分佈式大氣監控系統”系列正在持續更新中,歡迎大家持續關注,解鎖更多精彩內容~

本文轉載自公衆號雲加社區(ID:QcloudCommunity)。

原文鏈接

https://mp.weixin.qq.com/s/LRl_XzmyxauG2EJ0qBvjPg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章