MQTT是目前在IoT領域最重要的傳輸方式,MQTT大家都知道具有輕量化傳輸的特點,但是能省下多少流量卻都是理論上大概算一下而已,這次我就用國產的WNB-303 NBIoT套件及遠傳定量卡做測試(關於本套件可參考本文:國產NBIoT WNB-303使用方式),測試項目包括MQTT、HTTP GET、HTTP POST都對ThingSpeak傳輸100次溫度及濕度,本次傳輸接收對象ThingSpeak可參考本文:第14篇 ESP32 資料庫存取ThingSpeak圖表製作,再進入遠傳的後端CPM平台觀察流量消耗變化,讓大家了解MQTT究竟能節省你多少流量。
1. HTTP POST
第一個測試的傳輸方式為HTTP POST,HTTP POST是非常常見的傳輸方式,具有較高的安全性,一般的API都是POST方式傳遞參數,本次就以POST為第一個測試對象,每次傳輸都採用重新連線,也就是每次循環都是 1.連線2.傳輸3.斷線,不保留連線,包括握手都必須重來,這樣更能計算出差異,後續其他兩種協定也都是採用同種方式。
先查看遠傳後台列出目前的傳輸流量11.7147M。
接下來利用POST方式傳輸100次後,剩餘流量為11.8453
兩者相減得總消耗流量:11.8453 – 11.7147 =0.1306M=133.7344K
由於傳輸100次,再除100獲得每次傳輸耗費流量為1.33744K,也就是說每次傳輸都要超過1K的流量,真是恐怖!
2. HTTP GET
GET也是傳統非常常見的參數傳遞方式,但是由於資料傳遞過程直接列在網址內,因此沒有辦法加密不具有安全性,雖然如此對於不需要保密的資料依然是非常常見的。
本次測試一樣測試對ThingSpeak以GET法傳輸100次後查看流量變化。
兩者相減得總消耗流量:11.9547-11.8453 =0.1094M=112.0256K
由於傳輸100次,再除100獲得每次傳輸耗費流量為1.120256K,雖然傳輸量略少於POST,但每次傳輸都依然要超過1K的流量!
3. MQTT
MQTT傳輸對象一樣為ThingSpeak,ThingSpeak只接受自己的MQTT進行傳輸,其MQTT服務網址為mqtt3.thingspeak.com,通訊PORT為1883,帳號、密碼、Client、Topic、Content都必須依照他的規定,關於設定會在後續寫篇專文介紹。
傳輸100次前後的流量變化如下
經計算消耗流量=12.1154-12.0915=0.0239M=24.4736K
相當於每次傳輸耗費流量為0.244K,與上面的GET與POST來說,都可以看出很大的差異,確實省非常多。
4. MQTT : GET : POST 流量比較
整合上面三個數據列表如下,以比例來說,POST每傳一次,可以讓MQTT傳輸5.5次。
若以遠傳30M訂製卡來說,每分鐘傳輸1次,30M流量MQTT用約87天,但GET與POST都不滿20天
若5分鐘傳1次,則MQTT可用435天約一年半,而GET與POST都不滿100天就掛了。
最後算成本的話,每百次的傳輸成本MQTT約0.08元,而GET與POST則是0.36及0.43元。
比較 | MQTT協定 | HTTP GET | HTTP POST |
消耗量 | 0.244K | 1.120K | 1.337K |
以MQTT為1 | 1次 | 4.6次 | 5.5次 |
30M可傳次數 | 125,523次 | 27,422次 | 22,971次 |
1分鐘傳1次 | 可用87天 | 可用19天 | 可用16天 |
5分鐘1次 | 可用435天 | 可用95天 | 可用80天 |
每百次成本 | 0.079元 | 0.364元 | 0.435元 |
最後總結就是,NBIoT這種流量計費的還是用MQTT吧,HTTP的GET或POST就留給WIFI吧。