外掛模組
- 當前所說的外掛僅指
裝置類外掛
,外掛為SA提供額外的裝置發現和控制功能; - 外掛通過實現定義的grpc介面,以grpc服務的形式執行,提供介面給SA呼叫
- 外掛同時需要http服務提供h5頁面及靜態檔案
1. SA中外掛的工作流程
1.1 外掛部署流程
- 外掛開發者將開發好的外掛服務編譯成docker映象提供給SA
- SA根據外掛的映象地址判斷本地是否已經拉取或更新
- 使用者安裝外掛後,SA根據映象執行起容器,外掛往註冊中心註冊服務
- SA通過服務發現發現新的外掛服務
1.2 外掛使用流程
- 使用者在介面上發現裝置時對所有外掛服務呼叫Discover介面,外掛根據實現的介面返回所發現的裝置
- 使用者新增裝置並標記裝置對應的外掛
- 使用者請求裝置的H5地址,進去外掛自定義頁面
- 通過交互發起自定義指令給SA,SA將指令轉發給對應的外掛服務
2. 介面
檔案http服務 sdk提供了方便的方法進行靜態檔案掛載和自定義api介面實現
grpc服務, 通過實現protobuf定義的grpc介面來實現外掛服務:
注:grpc介面是通用的定義,SDK對介面實現了封裝,開發者使用SDK時不需要關心,僅需要實現裝置型別即可。
3. sdk
為了方便開發者快速開發外掛以及統一介面,我們提供sdk規範了介面以及預定義了裝置模型,以下為sdk實現功能:
- 外掛服務註冊
- http服務
- grpc服務以及介面封裝(包括裝置屬性獲取、屬性設定、訊息通知等)
- 預定義模型
4. 裝置模型設計
雲對雲接入時,需要對第三方雲的命令進行解析,並通過SA對外掛發起命令。
這就要求外掛實現的命令必須要有統一的規範和標準,這樣第三方就可以通過這個標準來控制SA的所有支援的裝置。
同時也能方便SA更好的通過統一的介面以及命令來管理裝置。
4.1 模型設計
SDK預定義裝置型別以及屬性,開發者通過引入裝置型別實現相關功能。
SDK通過反射獲取裝置的所有屬性,將屬性與命令做好對應關係,這樣可以使得無論裝置是什麼形態,都能有統一的介面以及命令進行控制。
4.1.1 外掛模型定義
欄位解釋
- instance 例項
- attribute 屬性
- val_type 值型別
- val 值
val_type
對於int型,屬性可設定最小和最大值
模型
- light_bulb 燈
attribute | description | val_type | required |
---|---|---|---|
power | 開關 | string | true |
- switch 開關
attribute | description | val_type | required |
---|---|---|---|
power | 開關 | string | true |
- outlet 插座
attribute | description | val_type | required |
---|---|---|---|
power | 開關 | string | true |
- info 裝置詳情
attribute | description | val_type | required |
---|---|---|---|
identity | id | string | true |
model | 型號 | string | true |
manufacturer | 廠商 | string | true |
version | 版本 | string | true |
name | 名字 | string | false |
4.2 模型示例
操作某個屬性時,根據屬性的tag對命令中的值進行解析和校驗 模型例子如下:
