pigeon物聯網平臺- developer portal web服務設計及實現

pigeon是在以前的工做基礎上,進行反思,而且學習參考了目前的物聯網平臺,像最近出現的amazon aws iot, samsung sami等等,初步構想出的一個大致輪廓的open source IoT Cloud platform,後面我會專門寫一篇來詳細介紹下我構思的IoT平臺pigeon,如今我先介紹下developer portal。
 
developer portal背景,業務介紹
它是pigeon的其中一個服務, 功能在於提供給設備開發者來將他們開發的設備註冊到pigeon平臺,具體地說,就是把他們設備的元信息,保存到pigeon,這個服務的 目的在於給用戶的控制設備請求和gateway(及具體devices接收指令進行自動操做)之間制定了通訊規範,以及gateway的設備插件倉庫(好比用戶購買了camera設備,該款camera 在pigeon平臺已註冊,用戶在user portal上搜索下載該camera插件到gateway, 這樣就能夠打通了
 pigeon平臺, gateway(agent), camera之間的通道,用戶能夠進行操控camera)
 
一個在pigeon保存的新添加的設備類型,包括兩個部分:設備信息和設備屬性元數據。
其中設備信息包含設備類型在pigeon平臺惟一性的devtype, 該款設備的製造商manufacturer,版本信息version, 該款設備的用途和功能描述description;
而設備屬性元數據meta:則是該類型設備的功能抽象,如燈light,它有屬性power,值爲on/off,  colors屬性,那麼咱們能夠把light的meta簡單抽象爲
{"power":"boolean", "color":"int"}.之後對於light設備的控制操做,用戶能夠簡單的經過get/set這兩個屬性請求來達到目的(當用戶發送的控制請求到達pigeon雲平臺後,pigeon的內部服務能夠檢查該請求是否符合該設備類型存儲在平臺上的meta信息,若符合才發送給用戶的gateway)
 
developer portal的設計和實現

之前習慣了用C/C++開發,花幾天學習了html, javascript, nodejs, express, 才知道神馬開發效率,這也是java, 和衆多腳本語言大行其道的緣由,在移動互聯網時代,所謂的小步快跑,快速迭代,更是利器,固然C/C++在底層,和性能要求高的領域仍是有其優點。採用了nodejs的express框架來實現,使用redis來存儲,久聞大名,初次使用後的較深體會是因爲keys的o(n)時間複雜度,須要本身建立索引,還有就是須要本身來作語義上的事務處理。javascript

開發者帳號信息及設備信息的redis存儲模型設計

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':{...}}.
(即我在另一篇文章物聯網command原型設計提到的,同時支持屬性設置和動做操做,同時能夠參考 https://developer.samsungsami.io/sami/api-spec.html)
 
能夠在 https://github.com/europelee/pigeon 看下提交的developer portal代碼,歡迎交流!
相關文章
相關標籤/搜索