裝置資料模型

Matter 的裝置具有明確定義的資料模型 (DM),這是裝置功能的階層模型。階層的頂層有「裝置」

裝置和端點

所有裝置 (包括智慧型手機和居家助理) 都包含節點1。「節點」是網路中可明確識別及定址的資源,使用者可將其視為功能完整的資源。Matter 中的網路通訊源自於節點,

「節點」是一組 端點。每個端點都會包含一組功能。舉例來說,端點可能與燈光功能有關,而另一個與動作偵測有關,而另一則牽涉到裝置 OTA 等公用程式的另一項交易。

裝置、節點和端點的階層
圖 1:裝置、節點和端點

節點角色

「節點角色」是一組相關行為,每個節點可能有一或多個角色。節點角色包括:

  • Commissioner:執行佣金的節點。
  • 控制器:可控制一或多個節點的節點。範例包括 Google Home app (GHA)Google AssistantGoogle Nest Hub (2nd gen)。部分裝置類型 (例如「開啟/關閉燈具切換」) 具備「控制器」角色。
  • 控制層:可由一或多個節點控管的節點。除了某些具有控制器角色的裝置類型 (例如「開啟/關閉燈具切換功能」) 之外,大多數的裝置類型都可以做為控制組。「開/關燈」開關只能做為控制器。不可為受控者。
  • OTA 供應商:可提供 OTA 軟體更新的節點。
  • OTA 要求者:可要求 OTA 軟體更新的節點。

叢集

在節點的「端點」中,會有一或多個「叢集」。這只是裝置階層中的另一個步驟,這類步驟可將特定功能分組,例如智慧型插座的「開啟/關閉」叢集,或將可調暗的光源端點上的「層級控制項」叢集分組。

一個節點也可能有多個端點,每個端點都會建立相同功能的執行個體。舉例來說,燈具可能會曝露個別燈具的獨立控制項,或電源條子可能會曝露個別插座的控制。

屬性

在最後一層中,我們會找到「Attributes」,也就是節點所保留的狀態,例如「level Control」叢集的「目前層級」屬性。屬性可以定義為不同的資料類型,例如 uint8、字串或陣列。

節點、端點、屬性和指令的階層
圖 2:節點、端點、屬性和指令

指令

除了屬性之外,叢集也提供指令,這些指令可以執行動作。這些函式相當於 Matter 的遠端程序呼叫的 DM。指令類似動詞,例如門鎖叢集的「鎖門」。指令可能會產生回應和結果;在 Matter 中,這類回應也會往反向方向定義為指令。

活動

最後,叢集也可以擁有事件,可視為過往狀態轉換的記錄。雖然屬性代表「目前」狀態,但事件是「過往」的日誌,且包含單調遞增計數器、時間戳記和優先順序。可用來擷取狀態轉換,以及不必使用屬性就能建立的資料模型。

完整範例裝置
圖 3:Matter 裝置互動模型的階層範例

端點 0 會保留給公用程式叢集使用。公用程式叢集是特定的叢集,專門用來提供端點的服務功能,例如探索、定址、診斷和軟體更新。另一方面,應用程式叢集支援主要動作,例如開啟/關閉或溫度測量。

裝置類型

當裝置製造商要規劃新裝置時,應該一併加入哪些叢集組合?

Matter 規格需要裝置實作或擴充一或多個裝置類型。「裝置類型」是必要和選用的叢集集合,用於定義實體裝置頂層屬性,例如「Dimmable Light」、「Door Lock」或「Video Player」

裝置類型並非透過 Matter 規格主要文件指定,而是隨附的文件:「Device Library」。同樣地,所有應用程式叢集都會在應用程式叢集程式庫中定義。您可以前往 Connectivity Standards Alliance (Alliance) 成員網站查看這三份文件。

每個導入裝置類型的端點都必須實作定義該裝置類型的必要叢集。除了必要的叢集外,端點可能會實作其他叢集,包括一或多個「裝置類型」的選用叢集,甚至是不屬於「裝置類型」的叢集。

用戶端和伺服器

叢集可以是用戶端叢集伺服器叢集。雖然伺服器有狀態且包含屬性、事件和指令,但用戶端「無狀態」,其責任是利用遠端伺服器叢集啟動互動,因此執行以下動作:

  • 讀取至其遠端屬性,或寫入
  • 讀取遠端事件。
  • 叫用遠端指令。

雖然 DM 在節點中屬於階層結構,但節點之間的關係並非如此。Matter 中的節點沒有垂直控制器/週邊設備或領先者/追蹤者關係。相反地,關係是水平,任何叢集可以是「伺服器」或「用戶端」。因此,就不同的叢集和功能而言,節點可能是伺服器「和」用戶端。

例如,我們可能會有兩個桌燈,分別是「節點 A」和「節點 B」。兩個節點都會實作「開/關燈」裝置類型。此裝置類型包含開啟/關閉伺服器叢集,可控制各自的實體光源輸出。

不過,如同一般桌燈,實體裝置也會為本機開啟/關閉開關加入「開/關燈切換」裝置類型。此裝置類型必須實作開啟/關閉用戶端叢集,以便控制伺服器叢集。

燈具同時導入開/關燈和燈具開關
圖 4:用戶端與伺服器叢集

在這個範例中,節點 A 上的開啟/關閉用戶端叢集正在變更節點 A 和節點 B 上/關閉伺服器叢集的屬性,而節點 B 的用戶端叢集只會變更節點 B 上的伺服器叢集。

下一節將詳細說明用戶端和伺服器叢集的互動方式:互動模型

描述元叢集

顧名思義,描述元叢集伺服器會提供自我檢查資訊。其中會「說明」端點列舉其以下項目:

  • 伺服器叢集。
  • 用戶端叢集。
  • 裝置類型。
  • 其他端點,也稱為「零件」。

每種裝置類型都需要實作描述元叢集。根裝置類型在端點 0 上定義。讀取其描述元叢集可讓用戶端掌握可用端點的完整樹狀結構,並執行適用的作業。

調試者或控制裝置 (例如電話或中樞) 可利用描述元叢集上所找到的資訊,為裝置 (燈具、開關、泵、溫度控制器) 和該特定裝置執行個體實作的特定功能建立模型,向使用者顯示正確的 UI。

伺服器叢集

ServerList 屬性會列出端點中的叢集伺服器。

用戶端叢集

ClientList 屬性會列出端點中的叢集用戶端。

裝置類型清單

DeviceTypeList 屬性是端點支援的裝置類型清單,以及其各自的修訂版本。其中必須包含至少一個裝置類型。

零件清單

PartsList 包含用於實作此裝置類型的端點清單。

端點 0 的 PartsList (根節點) 包含裝置以外的所有端點 (端點 0)。

其他端點的 PartsList 通常為空白。舉例來說,溫度感應器要求使用溫度測量伺服器叢集,在其他情況下則不必。

其他裝置類型可能會以多個裝置類型執行個體的樹狀結構組成。舉例來說,影片播放器裝置類型可以由電視、影片播放器、揚聲器,以及不同的內容應用程式裝置類型組成,每個類型都位於不同的端點。


  1. Matter 規格判定裝置可能有多個節點。舉例來說,智慧型手機可能會有多個應用程式,每個應用程式都是不同的節點。為符合本入門,所有裝置會包含單一節點。大多數實體裝置都應遵循此模式。