裝置資料模型

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

裝置和端點

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

節點是一組端點。每個端點都包含一組特徵集。舉例來說,某個端點可能與照明功能相關,另一個端點與動作偵測相關,還有一個端點則處理公用程式,例如裝置 OTA。

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

節點角色

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

  • 調試器:執行調試的節點。
  • 控制器:可控制一或多個節點的節點。例如 Google Home app (GHA)、Google Assistant 和 Google Nest Hub (2nd gen)。部分裝置類型 (例如開/關電燈開關) 具有控制器角色。
  • 受控端:可由一或多個節點控制的節點。大多數裝置類型都可以是受控端,但某些具有控制器角色的裝置類型除外,例如開關燈切換器。開關燈具只能是控制器。無法成為受控端。
  • OTA 供應器:可提供 OTA 軟體更新的節點。
  • OTA 要求者:可要求 OTA 軟體更新的節點。

叢集

在端點中,節點有一或多個叢集。這是裝置階層中的另一個步驟,因為它們會將特定功能分組,例如智慧型插座上的開啟/關閉叢集,或可調光燈端點上的等級控制叢集。

節點也可能有多個端點,每個端點都會建立相同功能的執行個體。舉例來說,燈具可能會提供個別燈具的獨立控制項,或延長線可能會提供個別插座的控制項。

屬性

最後一層是「屬性」,也就是節點保留的狀態,例如「等級控制」叢集的「目前等級」屬性。屬性可定義為不同的資料類型,例如 uint8、字串或陣列。

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

指令

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

事件

最後,叢集也可能包含「事件」,可視為過去狀態轉換的記錄。屬性代表「目前」狀態,事件則是「過去」的記錄,包含單調遞增計數器、時間戳記和優先順序。這類事件可擷取狀態轉換,以及無法透過屬性輕鬆達成的資料建模。

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

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

裝置類型

整體而言,裝置製造商在規劃新裝置時,應納入哪些叢集組合?

Matter 規格要求裝置實作或擴充一或多個裝置類型。裝置類型是一組必要和選用的叢集,用於定義實體裝置的頂層屬性,例如「可調光燈具」、「門鎖」或「影片播放器」。

裝置類型並非由 Matter 規格主要文件指定,而是由隨附文件「裝置程式庫」指定。同樣地,所有應用程式叢集都定義在應用程式叢集程式庫中。這三份文件可在 Connectivity Standards Alliance (Alliance) 成員網站找到。

每個實作裝置類型的端點,都必須實作定義該裝置類型的必要叢集。除了強制叢集外,端點也可能實作其他叢集,包括一或多個裝置類型的選用叢集,甚至是裝置類型以外的叢集。

用戶端和伺服器

叢集可能是用戶端叢集或伺服器叢集。伺服器是有狀態,並保留屬性、事件和指令,而用戶端是無狀態,其責任是與遠端伺服器叢集啟動互動,因此執行:

  • 讀取和寫入遠端屬性。
  • 讀取遠端事件。
  • 叫用遠端指令。

雖然 DM 在節點內具有階層結構,但節點之間的關係並非如此。Matter 中的節點沒有垂直控制器/周邊裝置或領導者/追隨者關係。相反地,兩者之間的關係是水平的:任何叢集都可以是「伺服器」或「用戶端」。因此,節點可以同時是伺服器和用戶端,具體取決於不同的叢集和功能。

舉例來說,假設我們有兩盞檯燈:節點 A 和節點 B。兩個節點都會實作開/關燈裝置類型。這類裝置包含開啟/關閉伺服器叢集,可控制各自的實體燈光輸出。

不過,就像一般的檯燈一樣,我們的實體裝置也會包含開/關燈具裝置類型,用於本機開/關切換。這個裝置類型必須實作開啟/關閉用戶端叢集,才能控制伺服器叢集。

同時採用開/關燈和燈具開關的燈具
圖 4:用戶端和伺服器叢集

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

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

描述元叢集

顧名思義,描述元叢集伺服器會提供內省資訊。它會描述端點,列舉其:

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

每種裝置類型都必須導入描述元叢集。根裝置類型定義在端點 0 上。讀取其描述元叢集,用戶端就能查看可用的端點完整樹狀結構,並執行適用的作業。

Commissioner 或控制裝置 (例如手機或中樞) 可以使用描述元叢集中的資訊,為裝置 (燈具、開關、幫浦、溫度控制器) 建立模型,以及該裝置特定執行個體實作的特定功能,向使用者顯示正確的使用者介面。

伺服器叢集

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

用戶端叢集

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

裝置類型清單

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

零件清單

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

端點 0 (根節點) 的 PartsList 包含裝置的所有端點,但不含端點 0 本身。

其他端點的 PartsList 通常會留空。舉例來說,溫度感應器只會強制要求溫度測量伺服器叢集,不會要求其他項目。

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


  1. Matter 規格決定裝置可能有多個節點。舉例來說,智慧型手機可能有多個應用程式,每個應用程式都是不同的節點。在本入門指南中,所有裝置都包含單一節點。大部分實體裝置應會遵循這個模式。↩