pigeon是在以前的工做基礎上,進行反思,而且學習參考了目前的物聯網平臺,像最近出現的amazon aws iot, samsung sami等等,初步構想出的一個大致輪廓的open source IoT Cloud platform,後面我會專門寫一篇來詳細介紹下我構思的IoT平臺pigeon,如今我先介紹下developer portal。
其中設備信息包含設備類型在pigeon平臺惟一性的devtype, 該款設備的製造商manufacturer,版本信息version, 該款設備的用途和功能描述description;
而設備屬性元數據meta:則是該類型設備的功能抽象,如燈light,它有屬性power,值爲on/off, colors屬性,那麼咱們能夠把light的meta簡單抽象爲
{"power":"boolean", "color":"int"}.之後對於light設備的控制操做,用戶能夠簡單的經過get/set這兩個屬性請求來達到目的(當用戶發送的控制請求到達pigeon雲平臺後,pigeon的內部服務能夠檢查該請求是否符合該設備類型存儲在平臺上的meta信息,若符合才發送給用戶的gateway)
之前習慣了用C/C++開發,花幾天學習了html, javascript, nodejs, express, 才知道神馬開發效率,這也是java, 和衆多腳本語言大行其道的緣由,在移動互聯網時代,所謂的小步快跑,快速迭代,更是利器,固然C/C++在底層,和性能要求高的領域仍是有其優點。採用了nodejs的express框架來實現,使用redis來存儲,久聞大名,初次使用後的較深體會是因爲keys的o(n)時間複雜度,須要本身建立索引,還有就是須要本身來作語義上的事務處理。javascript
developer portal 建立和管理設備的接口
developer portal提供了REST APIs用來建立和管理設備,具體步驟以下:
1. 首先到developer portal註冊開發者帳號(sign up),而後在用戶settings裏面獲取App Key, 後續的建立管理請求都要使用這個key作認證(在http 請求包添加自定義header: apikey,值爲App Key)。
2. 使用postman發送http請求包作測試。
3.能夠在devices裏面看到本身建立的設備類型列表信息。
建立和管理設備類型的REST API列表(下面是基本的接口,後續還須要增長api來更完整,方便管理設備類型):
-----------------------------------------------------------------------------------------------------------------
1. 建立設備類型
post /v0.1/iot/devices
請求格式:json,
eg: {"devtype":"q46", "manufacturer":"euputddfds", "version":"0.0.1", "description":"hi, eu"}
響應:
建立成功,返回狀態碼201
-----------------------------------------------------------------------------------------------------------------
2.查詢指定設備類型信息
get /v0.1/iot/devices/<devtype>
響應格式:json
eg:{"manufacturer": null, "version": "0.0.1", "description": "hi, eu,new version come on now!\n"}
-----------------------------------------------------------------------------------------------------------------
3.獲取本身建立的設備類型名列表
get /v0.1/iot/devices
響應格式:json
eg: [ "q56", "q66", "q46", "q36", "q6"]
-----------------------------------------------------------------------------------------------------------------
4.修改指定設備類型信息
put /v0.1/iot/devices/<devtype>
請求格式: json,
eg: {"manufacturer":"euputddfds", "version":"0.0.1", "description":"hi, eu"}
響應:
建立成功,返回狀態碼200
-----------------------------------------------------------------------------------------------------------------
5.建立指定設備類型的元數據信息
post /v0.1/iot/devices/<devtype>/meta
請求格式:json
eg:{"id":"string", "pos":"float"}
(設備類型q36的設備屬性有兩個字段id爲string類型,pos爲float類型)
響應:
建立成功,返回狀態碼201
-----------------------------------------------------------------------------------------------------------------
6. 修改指定設備類型的元數據信息
put /v0.1/iot/devices/<devtype>/meta
請求格式:json
eg:{"pos":"int"}
(設備類型q36的設備屬性pos爲int類型)
響應:
建立成功,返回狀態碼200
-----------------------------------------------------------------------------------------------------------------
7. 查詢指定設備類型的元數據信息
get /v0.1/iot/devices/<devtype>/meta
響應格式:json
eg: {"id": "int", "pos": "float"}
-----------------------------------------------------------------------------------------------------------------
8. 刪除指定設備類型的元數據信息
delete /v0.1/iot/devices/<devtype>/meta
響應:
刪除成功,返回狀態碼200
-----------------------------------------------------------------------------------------------------------------
9.刪除指定設備類型(它將刪除全部關於指定設備類型的信息,包括meta)
delete /v0.1/iot/devices/<devtype>
響應:
刪除成功,返回狀態碼200
-----------------------------------------------------------------------------------------------------------------
目前只是初步的實現,還有不少細節須要考慮,迭代,如設備類型信息目前僅devtype,manufacturer,version,description
四個字段,以及設備類型的屬性元信息meta設計目前沒有涉及具體的規範,僅以fieldname:type來設置,未來考慮將其修改爲
形如{'properties':{fieldname:type, fieldname:type}, 'action':{...}}.