裝置資料模型

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

裝置和端點

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

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

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

節點角色

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

  • Commissioner:執行調試的節點。
  • 控制器:可控制一或多個節點的節點。例如 Google Home app (GHA)Google AssistantGoogle Nest Hub (2nd gen)。部分裝置類型 (例如開/關燈具開關) 具有「控制器」角色。
  • 受控節點:可由一或多個節點控制的節點。大多數裝置類型都可以是受控裝置,但有些裝置類型具有控制器角色,例如開關燈具。開關燈具的控制器只能是控制器。但不能是受控端。
  • OTA 供應器:可提供 OTA 軟體更新的節點。
  • OTA 要求者:可要求 OTA 軟體更新的節點。

叢集

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

節點也可能有幾個端點,每個端點都會建立相同功能的例項。舉例來說,燈具可能會公開個別燈具的獨立控制項,或電源延長線可能會公開個別插座的控制項。

屬性

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

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

指令

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

活動

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

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

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

裝置類型

總而言之,當裝置製造商規劃新裝置時,應納入哪些叢集組合?

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

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

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

用戶端和伺服器

叢集可能是「用戶端叢集」或「伺服器叢集」。雖然伺服器是有狀態的,且會保留屬性、事件和指令,但用戶端是無狀態的,其職責是與遠端伺服器叢集啟動互動,因此會執行以下操作:

  • 讀取寫入遠端屬性。
  • 讀取遠端事件。
  • 啟動遠端指令。

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

舉例來說,我們可能有兩盞檯燈:節點 A節點 B。兩個節點都實作 On/Off Light 裝置類型。這個裝置類型包含一個開/關伺服器叢集,用於控制各自的實體燈具輸出。

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

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

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

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

描述元叢集

顧名思義,Descriptor Cluster Server 會提供檢視資訊。說明端點列舉其:

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

每種裝置類型都需要實作描述元標記叢集。根裝置類型是在端點 0 中定義。讀取其 Descriptor 叢集可讓用戶端瞭解如何遍歷可用端點的完整樹狀結構,並執行適用的作業。

委派者或控制裝置 (例如手機或中樞) 可以使用描述元叢集中的資訊,模擬裝置 (燈、開關、幫浦、溫度控制器) 和裝置的特定例項所實作的特定功能,向使用者顯示正確的使用者介面。

伺服器叢集

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

用戶端叢集

ClientList 屬性會在端點中列出叢集客戶端。

裝置類型清單

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

零件清單

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

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

其他端點的 PartsList 通常會是空白。舉例來說,溫度感應器必須使用溫度測量伺服器叢集,而其他都不需要。

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


  1. Matter 規格規定裝置可有多個節點。舉例來說,智慧型手機可能會有多個應用程式,每個應用程式都是不同的節點。為了讓您瞭解本入門課程的內容,所有裝置都會包含單一節點。大部分實體裝置都會遵循這個模式。