讀取交易

讀取交易

在 Matter 中與節點互動時,其中一個最先出現的用途是從另一個節點讀取屬性,例如感應器的溫度值。在這類互動中,必須執行的第一個動作是讀取要求動作。

讀取交易的作業順序
圖 1:讀取交易

讀取要求動作

方向:發起者 -> 目標

在這項動作中,發起者會查詢目標,並提供:

  • 屬性要求:零或多個目標屬性的清單。這份清單包含零或多個路徑,指向目標要求的屬性。
  • 事件要求:目標要求事件的路徑清單 (可為零或多個)。

目標收到讀取要求動作後,會使用要求的資訊組合報表資料動作。

報表資料動作

方向:目標 -> 發起者

在這項動作中,目標會回應:

  • 屬性報表:讀取動作要求中要求的零或多個回報屬性清單。
  • 事件報表:零或多個回報事件的清單。
  • Suppress Response:這個旗標決定是否要隱藏這項動作的狀態回應。
  • 訂閱 ID:如果這份報表屬於訂閱交易,則必須包含用於識別訂閱交易的整數。

狀態回應動作

方向:Target -> Initiator 或 Initiator -> Target

發起端收到要求的資料後,預設必須產生狀態回應動作。這項動作由發起端傳送,確認已收到回報資料。如果設定了「Suppress Status Response」旗標,發起端就不得傳送「Status Response Action」。

發起端傳送狀態回應動作,或收到啟用「抑制回應」標記的報表資料動作後,讀取/報表查詢即完成。

狀態回應動作只包含「status」欄位,用於確認作業成功或顯示失敗代碼。

讀取限制

讀取要求動作和報表資料動作僅適用於Unicast。此外,這些要求的路徑不得指定節點群組。

狀態回應動作僅限 Unicast,無法做為群組廣播的回應。

訂閱交易

訂閱交易的作業順序
圖 2:訂閱交易

訂閱要求動作

方向:發起者 -> 目標

除了單一讀取要求動作外,發起端也可以訂閱屬性或事件的定期更新。因此,在訂閱交易後,定期資料更新可能會產生相同的報表資料動作。

訂閱互動會在兩個節點之間建立關係,其中目標會定期向發起端產生報表資料動作。發起者是訂閱者,目標則是發布者。

訂閱要求動作包含:

  • Min Interval Floor:報表之間的最短間隔。
  • Max Interval Ceiling:報表之間的最長間隔。
  • 屬性報表:讀取動作要求中要求的零或多個回報屬性清單。
  • 事件報表:零或多個回報事件的清單。

收到訂閱要求後,目標會以包含第一批報表資料 (預先發布資料) 的回報資料動作回應發起端。

接著,發起端會向目標端傳送狀態回應動作,確認收到報表資料動作。目標收到狀態回應動作,且回報沒有錯誤後,就會傳送訂閱回應動作。

目標隨後會定期傳送「報表資料動作」(間隔時間為協商結果),而發起端會回應這些動作,直到訂閱遺失或取消為止。

訂閱回應動作

方向:目標 -> 發起者

這是訂閱交易的最後一個動作,也是流程的結尾。It includes:

  • 訂閱項目 ID:用於識別訂閱項目的整數。
  • Min Interval:最終確定的報表間隔下限。
  • Max Interval:最終決定的報表間隔上限。

訂閱限制

  • 「訂閱要求動作」和「訂閱回應動作」是 Unicast 專屬動作。
  • 訂閱互動中的所有報表資料動作,都必須有相同的訂閱 ID。
  • 如果訂閱者在協商的最長動作間隔內未收到報表資料動作,訂閱就會終止。
  • 根據前一項規則,發布者只要停止傳送定期報表資料動作,即可終止訂閱互動。
  • 訂閱者可以回覆「報表資料動作」並附上 INACTIVE_SUBSCRIPTION 狀態碼,終止訂閱互動。