Dweet.io
Dweet.io是一個有趣且簡單易使用的IoT平台,上圖是該網站的首頁畫面,在首頁中他們這個網站對於自己的說明是「Fast, free and ridiculously simple— it’s like Twitter for social machines.」,如果用中文來說就是簡單到豈有此理!或是簡單到不要不要的!在使用時可以不必付費不必註冊,不必做任何的設定,直接就可以上傳及下載使用。當然免費的不一定最貴,但是功能一定受限!它接受來自任何時間任何地方的JSON格式文字資訊的傳入,如果不付費的話將在保留24小時之後便自動清除,而且對同樣名稱的IOT物件只會保留最後5筆的資料,在這段保存期間內我們可以去查詢或取出這些資訊進行後續的利用分析;換句話說,Dweet.io接受任何來源的文字資訊,只要將資訊集中到Dweet.io,不同端點不同種類的設備便能進行溝通、整合、運算等等後端功能,也可以再透過Dweet.io將訊息回傳給相關的設備,因此,Dweet.io它是一種屬於M2M(Machine to Machineh)環境的訊息溝通仲介平台,就如同MQTT協定一樣,只是更簡單使用而已。
如何使用?
送出IoT資訊
將資料從你的物聯網設備(Thing)送出的動作,Dweet.io稱它為”dweeting”,而將dweeting所傳送的變數稱之為”dweets”,它所傳送的方式是一種相當簡單易懂旳HAPI web API(一種人性化格式的web API,是” Humanized API”的縮寫,可參考https://github.com/jheising/HAPI),舉例來說,要傳送一個hello變數,其值為world的資訊,我們只要在任意的瀏覽器URL網址欄位送出下列的url:
https://dweet.io/dweet/for/my-thing-name?hello=world
如果一次要傳送兩組資訊呢?只要用&字串來連接多個變數,例如下方是我們一次傳送hello=world和foo=bar兩個變數值:
https://dweet.io/dweet/for/my-thing-name?hello=world&foo=bar
這樣透過url來傳送資訊的方式是我們熟知的GET傳送,它雖然方便,但由於傳送的資訊是附加在網址後方,因此不太安全容易被人看到,如果您不想這麼明目張膽的傳送資訊,那麼最好改用POST的方式,不過無論使用GET還是POST,這些資訊的傳遞都沒有經過加密,因此使用時建議最好能能使用有SSL加密的https,而Dweet.io這個雲端網站加密跟不加密的格式都有提供,可由使用者自行決定。
成功的送出了資訊之後,Dweet.io便會回覆如下JSON格式的訊息,我們可用來驗證資料是否有正常送出:
{
“this": “succeeded",“by": “dweeting",“the": “dweet",
“with": {
“thing": “my-thing-name“,
“created": “2014-01-15T17:28:42.556Z",
“content": {“hello": “world",“foo": “bar"}
}
}
下圖是以Chrome瀏覽器傳送”hello=world”的變數後,由Dweet.io網站所回傳來的訊息,紅色線條框起來的部分就是瀏覽器所送出的URL,就是傳送給Dweet.io的”dweets”,也就是IoT的資料訊息部分:
取出IoT資訊
我們將資訊送出並儲存在雲端後,那麼也需要取回來以便讓某一台IoT設備可藉由取回的資訊得知另一台設備的狀態,或者某一台機器可透過雲端發送命令給另一台設備並接收執行的結果,能夠接收、存儲、提供各個連結端提供的資料內容是最基本的IoT平台須具備的功能。
在Dweet.io的環境中我們稱這樣取回的動作為”Getting Dweets”,就像dweeting的動作,Getting Dweets也是相當的簡單直覺,如果我們要把最後一筆傳送給Dweet.io的資料取回時,只要呼叫這樣格式的URL便行了:
https://dweet.io/get/latest/dweet/for/{my-thing-name}
執行上方Getting Dweets動作,Dweet.io會用如下JSON格式的內容回覆:
{
“this": “succeeded",“by": “getting",“the": “dweets",
“with": [{
“thing": “my-thing-name“,
“created": “2014-01-15T18:41:01.583Z",
“content": {“hello": “world",“foo": “bar"}
} ]
}
下圖是以Chrome瀏覽器去取回最後一筆上傳訊息,實際接收到的由Dweet.io網站所回傳來的畫面:
不過要注意的是,由於Dweet.io可提供免費的服務,但是如此一來它只替你儲存最新的5筆、24小時之內的dweets,所有超過這個數目或時間的dweets會自動被刪除。如果要取得最後所有5筆上傳的資料則可用下列的URL就可了:
https://dweet.io/get/dweets/for/{my-thing-name}
下圖是以Chrome瀏覽器接收到由Dweet.io網站所回傳來的最後5筆上傳訊息畫面,由於傳送的資料相同都是”hello=world”,所以這5筆資料的差異只在上傳時間(即“created”部分)不同而已:
監聽IoT資訊
如果要持續的監聽資訊的異動,可改用如下的url,但要注意一些太舊的瀏覽器沒有支援:
https://dweet.io/listen/for/dweets/from/{my-thing-name}
如果是在unix-like的機器,像是我們正在study的Raspberry Pi,可以在command下使用curl指令來持續的監聽:
curl -i https://dweet.io/listen/for/dweets/from/{my-thing-name}
此時dweet.io會持續的與你接收端保持連線,當有新資料時立即送出如下的JSON資訊
{“thing":"my-thing-name“,"created":"2014-02-17T01:10:21.901Z","content":{“foo":"bar"}}
Alert提醒警示功能
Alert也是IoT平台必備的功能之一,它除了讓不同的things透過平台相互溝通,也能主動發出警示,不過這個功能並不是免費的,我們必須先付費之後,才能將上傳的各式IoT設備(我們稱為things)的thing name設定為locked,然後才能加入Alert警示功能,當某個thing被設定為locked之後,它就不再是開放而變成私有的,別人無法存取或觀看。當我們對於送出的資訊不希望別人能夠看到,就需要考慮此項付費功能。
設定警示功能也是透過HAPI的方式來進行,格如下:
https://dweet.io/alert/{recipients}/when/{thing}/{condition}?key={key}
{recipients}代表一串用逗號分隔的email address組合,這些email address都會收到alert通知。
{thing}代表要設定alert的Thing的名稱,也就是上面所儲存的my-thing-name名稱。
{condition} 設定要送出alert的條件,例如:dweet.temp <= 32 || dweet.temp >= 212,代表當temp這個thing的值小於等於32,或大於等於212時。
我們也可以在此加入一些if判斷:
if(dweet.temp <= 32) return “frozen"; else if(dweet.temp >= 212) return “boiling"
設計這些條件時,要注意全部的url長度不要超過2000個字元限制,也不要有無窮的迴圈。
{key} 由於私有的thing才能使用alert功能,這必須付費升級後得到一個key後才能設定私有thing, 因此,使用alert功能時必須附加key值。
最終,整個要傳送alert功能的URL會長得如下:
https://dweet.io/alert/me@mydohmain.com/when/my_thing/dweet.donut_qty<=0?key=abc123
沒有留言:
張貼留言