Matter 中的裝置具有定義明確的資料模型 (DM),這是裝置功能的階層式模型。此階層的頂層中有「裝置」。
裝置和端點
所有裝置 (包括智慧型手機和居家助理) 是由「節點」1 組成。「節點」是網路中可明確識別及定址的資源,使用者可將其視為功能完整的資源。Matter 中的網路通訊源自節點並終止。
節點是一組「端點」。每個端點都包含一組功能集。舉例來說,端點可能與燈光功能有關,而另一個與動作偵測有關,以及與裝置 OTA 等公用程式交易。
![裝置、節點和端點的階層](https://developers.home.google.com/static/matter/primer/images/primer-device-node.png?authuser=7&hl=zh-tw)
節點角色
「節點角色」是一組相關行為。每個節點可能都有一或多個角色。節點角色包括:
- Commissioner:執行佣金的節點。
- 控制器:可控制一或多個節點的節點。例如 Google Home app (GHA)、Google Assistant 和 Google Nest Hub (2nd gen)。部分裝置類型 (例如開啟/關閉燈具開關) 會具備「控制器」角色。
- 控制層:可由一或多個節點控管的節點。除了某些具有「控制器」角色的裝置類型 (例如開啟/關閉光源切換) 以外,大多數裝置類型都可以做為控制組。「開/關」開關「只能」做為控制器。不可能成為受害人。
- OTA 供應商:提供 OTA 軟體更新的節點。
- OTA 要求者:可要求 OTA 軟體更新的節點。
叢集
在「端點」中,節點有一或多個叢集。這些是裝置階層中的另一個步驟,因為它們會將特定功能分組,例如將智慧型插座上的開啟/關閉叢集,或是可調暗光源端點上的水平控制叢集。
一個節點也可能有多個端點,每個端點都建立相同功能的執行個體。舉例來說,燈具可能會曝露個別燈具或電源條的獨立控制,因此可能曝露個別插座的控制。
屬性
在最後一個層級可以看到「屬性」,也就是節點保留的狀態,例如等級控制叢集的「目前層級」屬性。屬性可定義為不同的資料類型,例如 uint8、字串或陣列。
![節點、端點、屬性和指令的階層](https://developers.home.google.com/static/matter/primer/images/primer-node-endpoint-attribute.png?authuser=7&hl=zh-tw)
指令
除了屬性之外,叢集還具有「指令」,這些指令是可能會執行的「動作」。兩者在 Matter 遠端程序呼叫的即時訊息中相同。指令類似「動詞」,例如「門鎖」叢集上的「鎖門」。指令可能會產生回應和結果;在 Matter 中,這類回應也會定義為反向指令的指令。
活動
最後,叢集也可能有「事件」,這可以視為過去狀態轉換的記錄。屬性代表「目前」狀態,但事件是「過往」的日誌,並包含單調遞增的計數器、時間戳記和優先順序。可以擷取狀態轉換,以及無法透過屬性立即達成的資料模型。
![完整範例裝置](https://developers.home.google.com/static/matter/primer/images/primer-device-type.png?authuser=7&hl=zh-tw)
系統會為公用程式叢集保留 Endpoint 0。公用程式叢集是特定的叢集,用來提供端點的服務功能,例如探索、位址處理、診斷和軟體更新。另一方面,應用程式叢集支援開啟/關閉或溫度測量等主要動作。
裝置類型
裝置製造商在規劃新裝置時,應該一併納入哪些叢集組合呢?
Matter 規格要求裝置實作或擴充一或多個裝置類型。「裝置類型」是一組必要和選用的叢集,這些叢集定義了實體裝置的頂層屬性,例如「調光燈」、「門鎖」或「影片播放器」。
Matter 規格主要文件不會指定裝置類型,而是隨隨附文件「裝置程式庫」指定。同樣地,所有應用程式叢集都是在應用程式叢集程式庫中定義。您可以在 Connectivity Standards Alliance (Alliance) 成員網站找到這三項文件。
每個實作裝置類型的端點都必須實作定義該裝置類型的必要叢集。除了必要叢集外,端點還可以實作其他叢集,包括一或多個裝置類型的選用叢集,甚至是不屬於裝置類型的叢集。
用戶端和伺服器
叢集可能是用戶端叢集或伺服器叢集。雖然伺服器有狀態並保存屬性、事件和指令,但用戶端無狀態,負責透過遠端伺服器叢集啟動互動,因此能執行:
- 讀取及寫入其遠端屬性。
- 讀取其遠端事件。
- 叫用其遠端指令。
雖然 DM 在節點中是階層式,但節點之間的關係並非如此。Matter 中的節點沒有垂直控制器/週邊裝置或主要/追蹤者關係。相反地,關聯為水平:任何叢集可能是「Server」或「Client」。因此,就不同叢集和功能而言,節點可能會同時是伺服器和用戶端。
舉例來說,假設我們有兩個表格燈,分別是「Node A」和「Node B」。這兩個節點都會實作開啟/關閉裝置類型。這個裝置類型含有開啟/關閉伺服器叢集,用於控制各自的實體光源輸出內容。
不過,與一般桌燈一樣,實體裝置也將提供開啟/關燈切換裝置類型,用於開啟或關閉桌面/關閉開關。此裝置類型必須實作開啟/關閉用戶端叢集,才能控制伺服器叢集。
![支援開/關燈和燈具開關的燈](https://developers.home.google.com/static/matter/primer/images/primer-client-server.png?authuser=7&hl=zh-tw)
在此範例中,節點 A 上的開啟/關閉用戶端叢集正在變更節點 A 和節點 B 上/關閉伺服器叢集的屬性,而節點 B 的用戶端叢集則只變更節點 B 上的伺服器叢集。
下一節將詳述用戶端與伺服器叢集的互動方式:互動模型。
描述元叢集
顧名思義,描述元叢集伺服器會提供自我檢查資訊。其中「說明」端點列舉了其:
- 伺服器叢集。
- 用戶端叢集
- 裝置類型。
- 額外端點,又稱「零件」。
每種裝置類型都需要導入描述元叢集。根裝置類型是在 Endpoint 0 定義。讀取其描述元叢集可讓用戶端掌握整個可用端點的樹狀結構,並執行適用的作業。
調試器或控制裝置 (例如手機或中樞裝置) 可以使用描述元叢集中的資訊 (燈具、開關、泵、溫度控制器) 和由該特定裝置執行個體實作的特定功能來模擬裝置,向使用者顯示正確的 UI。
伺服器叢集
ServerList
屬性會列出端點中的叢集伺服器。
用戶端叢集
ClientList
屬性會列出端點中的叢集用戶端。
裝置類型清單
DeviceTypeList
屬性是端點支援的裝置類型清單及其各自的修訂版本。當中必須包含至少一個裝置類型。
零件清單
PartsList
包含用於實作此裝置類型的端點清單。
端點 0 的 PartsList
(根節點) 包含裝置本身以外的所有端點 (端點 0)。
其他端點的 PartsList
通常為空白。舉例來說,溫度感應器會規定溫度測量伺服器叢集,但不會顯示其他項目。
其他裝置類型可組成多個裝置類型執行個體的樹狀結構。舉例來說,影片播放器裝置類型可由電視、影片播放器、喇叭和不同的內容應用程式裝置類型組成,並分別在不同端點上。
-
Matter 規格判定裝置可能有多個節點。舉例來說,智慧型手機可能會有多個應用程式,每個應用程式都是不同的節點。為方便說明,所有裝置都會包含一個節點。大部分實體裝置通常都會採用此模式。 ↩