Чтение транзакций

Чтение транзакции

Один из первых вариантов использования узлов в Matter – чтение атрибута из другого узла, например значения температуры от датчика. В таких взаимодействиях первым действием должен быть запрос на чтение.

Последовательность операций транзакции чтения
Рисунок 1. Транзакция чтения

Действие "Прочитать запрос"

Направление: инициатор -> цель

В этом действии инициатор запрашивает у цели следующие данные:

  • Запросы атрибутов – список из нуля или более атрибутов целевого объекта. Этот список состоит из нуля или более путей к запрошенным атрибутам целевого объекта.
  • Запросы событий. Список из нуля или более путей к запрошенным событиям целевого объекта.

После того как целевое устройство получит запрос на чтение, оно соберет данные отчета и отправит их в виде действия.

Действие с данными отчета

Направление: Цель -> Инициатор

В этом действии целевой объект отвечает:

  • Отчеты об атрибутах – список из нуля или более атрибутов, запрошенных в запросе на чтение.
  • Отчеты о событиях – список из нуля или более событий, о которых сообщалось.
  • Suppress Response – флаг, определяющий, нужно ли подавлять ответ о статусе на это действие.
  • Идентификатор подписки. Если отчет относится к транзакции с подпиской, он должен содержать целое число, которое идентифицирует эту транзакцию.

Действие "Ответ на статус"

Направление: от целевого объекта к инициатору или от инициатора к целевому объекту.

После того как инициатор получит запрошенные данные, по умолчанию он должен создать действие "Ответ о статусе". Это действие отправляется инициатором в подтверждение получения данных. Если установлен флаг Suppress Status Response (Подавить ответ о статусе), инициатор не должен отправлять действие Status Response (Ответ о статусе).

После того как инициатор отправит действие "Ответ о статусе" или получит действие "Данные отчета" с включенным флагом "Подавить ответ", запрос на чтение или отчет будет завершен.

Действие "Ответ о статусе" содержит поле status, в котором указывается, успешно ли выполнена операция, или код ошибки.

Чтение ограничений

Действия "Запрос на чтение" и "Данные отчета" доступны только для Unicast. Кроме того, пути этих запросов не могут быть направлены на группу узлов.

Действие "Ответ о статусе" доступно только для Unicast и не может быть сгенерировано в качестве ответа на групповую передачу.

Транзакция по подписке

Последовательность операций транзакции подписки
Рисунок 2. Транзакция подписки

Действие "Запрос на подписку"

Направление: инициатор -> цель

Помимо однократного действия "Запрос на чтение", инициатор может также подписаться на периодические обновления атрибута или события. Таким образом, одно и то же действие с данными отчета может быть создано в результате периодического обновления данных, которое следует за транзакцией по подписке.

Взаимодействие с подпиской создает связь между двумя узлами, в которой целевой узел периодически генерирует действия с данными отчета для инициатора. Инициатор – подписчик, а цель – издатель.

Действие "Запрос на подписку" содержит:

  • Минимальный интервал – минимальный интервал между отчетами.
  • Максимальный интервал – максимальный интервал между отчетами.
  • Attribute Reports (Отчеты об атрибутах) – список из нуля или более атрибутов, запрошенных в запросе на действие чтения.
  • Отчеты о событиях: список из нуля или более событий, о которых сообщается.

После запроса на подписку целевое устройство отвечает инициатору действием "Данные отчета", содержащим первую партию сообщаемых данных: подготовленные опубликованные данные.

Затем инициатор подтверждает действие с данными отчета с помощью ответа о статусе "Действие отправлено целевому объекту". Когда целевое устройство получает действие "Ответ о статусе" без ошибок, оно отправляет действие "Ответ на подписку".

После этого целевой сервис будет периодически отправлять действие "Данные отчета" с согласованным интервалом, а инициатор будет отвечать на эти действия до тех пор, пока подписка не будет потеряна или отменена.

Действие "Подписаться"

Направление: Цель -> Инициатор

Это последнее действие в транзакции подписки, которое завершает процесс. В рамках сервиса мы предлагаем:

  • Идентификатор подписки – целое число, которое идентифицирует подписку.
  • Минимальный интервал – окончательный, определенный минимальный интервал между отчетами.
  • Максимальный интервал – окончательный, определенный максимальный интервал между отчетами.

Ограничения на подписку

  • Действие "Запрос подписки" и действие "Ответ на запрос подписки" являются действиями, доступными только в Unicast.
  • У всех действий с данными отчета в рамках взаимодействия с подпиской должен быть один и тот же идентификатор подписки.
  • Если подписчик не получит действие с данными отчета в течение максимального согласованного интервала между действиями, подписка будет прекращена.
  • В соответствии с предыдущим правилом издатель может прекратить взаимодействие с подпиской, просто перестав отправлять периодические действия с данными отчетов.
  • Подписчик может завершить взаимодействие с подпиской, ответив на действие с данными отчета кодом статуса INACTIVE_SUBSCRIPTION.