外掛模組

  • 當前所說的外掛僅指裝置類外掛,外掛為SA提供額外的裝置發現和控制功能;
  • 外掛通過實現定義的grpc介面,以grpc服務的形式執行,提供介面給SA呼叫
  • 外掛同時需要http服務提供h5頁面及靜態檔案

1. SA中外掛的工作流程

1.1 外掛部署流程

  1. 外掛開發者將開發好的外掛服務編譯成docker映象提供給SA
  2. SA根據外掛的映象地址判斷本地是否已經拉取或更新
  3. 使用者安裝外掛後,SA根據映象執行起容器,外掛往註冊中心註冊服務
  4. SA通過服務發現發現新的外掛服務

1.2 外掛使用流程

  1. 使用者在介面上發現裝置時對所有外掛服務呼叫Discover介面,外掛根據實現的介面返回所發現的裝置
  2. 使用者新增裝置並標記裝置對應的外掛
  3. 使用者請求裝置的H5地址,進去外掛自定義頁面
  4. 通過交互發起自定義指令給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對命令中的值進行解析和校驗 模型例子如下:

5. 示例專案