Proposal of new LASS data format (under discussion)
Event 連結
- Event - LASS-MQTT 資料格式再進化規格討論
Agenda
- 8:30 - 8:40 打招呼時間
- 8:40 - 9:00 LJ 針對提案的 proposal, 說明或是 Q&A
- 9:00 - 9:15 針對已在 hackpad comment 的部份討論
- 9:15 - 9:30 針對在 FB 建議的事項討論
- 9:30 - 10:00 嘗試下出結論
結論:表決通過
- 經熱烈的溝通與討論,LJ 的提案表決通過,含以下的修正
- 1. MQTT length 在 device 端,長度限制由 512 改到 14xx, device 盡可能支援,有不能支援的 device, 未來再討論作法(哈爸改 LinkItONE library 的支援, 科大改 Ameba 的支援)
- 2. Meta Data都有歷史紀錄可以查(可以給 JSON api) 如果沒有更新就以最新的一次更新為準
- 3. 不分 dynamic/static
- 4. LJ 有空會提 mata data 格式的建議
緣由
- 目前的 MQTT message長度已經到達極限
- 有些資料似乎不需要一直傳(例如固定點的 gps 座標)
建議將固定式與移動式資料分離,以利於後台分析並增加測試區,於開發測試階段使用測試區,區分正式與測試資料
- 用sensor id 的方式很不直覺且不利於後端處理(例如 s_t0 s_t1 s_t2 都代表溫度)
提案
- 將資料分為 meta data, dynamic value, static value 三種類別
- meta data描述硬體組成,例如感測器種類,可靠性分類(測試模組中或已穩定運作的佈點等區分)
- dynamic value 描述短時間內產生變化的感測值,例如PM2.5 量測值
- static value 描述短時間內未發生變化的感測值,例如定點的GPS座標
- meta data, dynamic value, static value 用 APP 和 device_id 作為 index,每筆資料皆加上傳送時的 timestamp
- static value 可當做 heart beat,用以確認感測點仍上線
- 資料傳輸的頻率: meta data < static value < dynamic value
優點
- 可大幅減少資料傳輸量
- 不再需要一次將所有資料塞在一個 MQTT msg 中
- 若感測器太多,可用多個 mqtt msg 傳送
- 相同的物理性質(例如溫度)可用相同的代號(temperature),僅需要在 meta-data中敘明感測器型號即可
缺點
- 和既有的資料格式不相容
- 程式撰寫比較複雜,不同類別的資料要有所區別,且分別進行傳送
Q&A
Lanma Chiu
Q1: 有人喜歡內文使用Json格式嗎?雖然長了點,但各式接收端好處理。
A1-1: 資料格以越簡單的方式表示,甚至 device 收到 MQTT 也容易實現 Paser, 個人不建議用 JSON
後端有轉 JASON API 的 service, 可參考
Tzu-Te Wang
Q2:
我的建議是,
1. 所有資料都是即時更新,在MQTT協議裡叫做retain message
2. 不需要加上時間,服務器上就有時間了,最多就是紀錄最後更新的時間
3. GPS不要在MQTT裡傳送,採用device id (unique)對應至GPS-->寫進資料庫,隱私考量
4.
建議的Topic格式:
/國碼(例如886)/區碼(02)/LASS/device id(HEX)/感應器類別(例如T0)/資料數值(十六進制, IEEE754標準)
/國碼(例如886)/區碼(02)/LASSTEST/test device id(HEX)/感應器類別(例如T0)/資料數值(十六進制, IEEE754標準)
這樣當我要收集台灣區的溫度資料只要scubscribe "/886/#/T0" 就有了
我要收集台南市的空汙資料只要訂閱 "/886/06/#/PM2.5" 就有了
我要分析台南市的空汙及溫度濕度的關係只要訂閱 "/886/06/LASS/+"
我要收集美國的資料只要訂閱topic開頭是 "/1/+/LASS/+"
未來topic可以平行擴充,例如 "/886/02/EARTHQUAKE/+" 表示地震數據
因為資料是retain的,所以,我只需要將所有收到的數據加起來平均。
META用來發佈到服務器讓服務器去做資料登入資料庫
例如發布
/device id/GPS/LAT 訊息23.nnnn 代表讓服務器中的資料庫更改我的GPS座標
/device id/OWNER 訊息 "老王"(utf-8編碼的16進位數字) 資料庫中就能變更我的訊息
要做長期統計資料的話,向服務器訂閱就好了,需要的人自己去架服務器寫app