機器對機器通信的協議選擇 - 級別:n00b
我正在為灌溉泵和連接的管道建構一個監控系統。至此我已經完成了感測器網路。一切都連接到一個微控制器板(實際上是 4 個 Teensy 3.0板),並且該板被程式為以預定間隔輸出一串格式化數據(讀數)。
我想要做的是通過 USB 串列將板連接到RaspberryPI(或其他一些 SBC),並讓電腦將從感測器板接收到的讀數發送到遠端伺服器進行記錄。
我考慮過的選項是:
1 - Syslog…它很早就讓我想到了一種可能性,因為它似乎提供了我需要的幾乎所有東西。不過,複雜性讓我害怕。
2 - REST…讓RaspberryPI通過網路將數據逐行發佈到伺服器上的CouchDB。
3 - HTTP… 與 node.js 保持開放的 HTTP 連接並“寫入”數據行。它當然需要由第二個 node.js 腳本接收以儲存在數據庫中。
現在到要求:
~ 它需要輕巧且相對較快。會有很多數據(1s 間隔),而 RaspberryPI 不是強大的。
~ 我非常喜歡壓縮字元串的選項。上行鏈路是通過 3G 進行的,我希望採用“小型”月度計劃。
〜加密會很好,但不是強制性的。偏執狂對鄉下人很強烈……
〜我真的需要這個盡可能KISS。
長話短說,我認為這是某種網路串列連接,其中一台電腦將一行接一行地饋送到另一台電腦。
那麼,我在這裡有哪些選項更可取?或者更好,有沒有人有更好的主意?
老實說,如果有人有好的觀點,我願意編輯甚至重新發布這個問題。
編輯:
到目前為止,所有評論和答案都已得到讚賞和考慮。
Syslog 確實很棒,但我確實需要避免複雜性和成本。此外,經過一些測試,RaspberryPI 似乎在啟動 rsyslog 後不久就停止了。
到目前為止,已經決定 DBMS 將成為 CouchDB。
顯而易見的選擇是使用 curl 或殘留的 node.js 伺服器在數據到達後立即對數據庫伺服器進行 REST 呼叫。這雖然簡單而有效,但出於多種原因並不可取。安全也是一個問題;我不喜歡在現場使用微型 PC 直接呼叫 DBMS 的想法。
我開始賞金的原因是我希望有人可以提出以下構想:“遠端微型PC和DBMS之間的某種持久連接。數據將通過某種協議格式化並通過此連接轉發為了在另一端被接收。這個連接需要盡可能的輕量級,盡可能少的成本”。
您是否考慮過使用 SMTP(電子郵件)?Raspberry 上有兩個程序:一個讀取數據並將它們附加到文件中,另一個(可能在 crontab 中)移動文件(可能聚合一些文件)並通過電子郵件將它們發送到目標機器。這樣一來,採樣頻率和日誌記錄頻率之間就沒有耦合,如果您可以接受的話(例如,每 20 秒或每分鐘發送一封電子郵件)。
郵件可以被壓縮、加密(使用 SMTP TLS)。此外,它具有彈性:如果您失去了上行鏈路,我們將在鏈路恢復時發送數據。從您的日誌記錄過程的角度來看,連結始終是“向上的”。
在您的 couchdb 伺服器(或連接到 couchdb 的另一台機器)上,您創建一個專用使用者並在其 .forward 中放置一個腳本,用於解壓縮消息並將其提供給 couchdb。
如果要進行身份驗證,可以使用從共享密鑰到 PGP 簽名的多種方案!
我們這樣做是為了給我們的數據倉庫提供數據,因為我們不希望它上面有任何類型的傳入連接(https 或 ssh),誠然不是以 1 秒的採樣率(但有更大的數據)。
最後但同樣重要的是,您可以單獨測試每個組件(記錄器、發送器、接收器和 db-feeder),而無需執行所有基礎架構。