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

Чтение данных о транзакциях

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

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

Действие по запросу на чтение

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

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

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

После получения действия запроса на чтение целевое устройство соберет действие данных отчета с запрошенной информацией.

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

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

В этом действии Target отвечает следующим образом:

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

Статус ответа на приглашение

Направление: Target -> Initiator или Initiator -> Target.

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

После того как инициатор отправит действие Status Response или получит действие Report Data с включенным флагом Suppress Response, запрос на чтение или данные отчетов будет завершен.

Действие Status Response Action содержит только поле status, в котором указывается, что операция выполнена успешно, или приводится код ошибки.

Ограничения на чтение

Действия Read Request Action и Report Data Action доступны только в Unicast. Кроме того, пути этих запросов не могут быть направлены на группу узлов.

Действие Status Response Action доступно только для Unicast и не может быть сгенерировано в ответ на групповую трансляцию.

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

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

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

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

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

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

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

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

После запроса на подписку целевой объект отвечает инициатору действием Report Data, содержащим первый пакет данных отчета – подготовленные опубликованные данные.

Затем инициатор подтверждает действие с данными отчета, отправляя целевому объекту ответ со статусом действия. Получив ответ о статусе без ошибок, целевой объект отправляет ответ о подписке.

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

Действие с ответом на подписку

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

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

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

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

  • Действия Subscribe Request Action и Subscribe Response Action доступны только в Unicast.
  • Все действия с данными отчетов в рамках одного взаимодействия с подпиской должны иметь одинаковый идентификатор подписки.
  • Если Подписчик не получит Действие с данными отчета в течение максимального согласованного интервала между Действиями, подписка будет прекращена.
  • В соответствии с предыдущим правилом Издатель может прекратить Взаимодействие по подписке, просто перестав отправлять периодические Действия с данными отчетов.
  • Подписчик может прекратить Взаимодействие по подписке, ответив на Действие с данными отчета кодом статуса INACTIVE_SUBSCRIPTION.