Traits после инициализации для добавления камеры

   Реализовано в примере приложения для iOS   

После ввода устройства в эксплуатацию можно использовать следующие характеристики:

OtaSoftwareUpdateRequestorTrait

Этот типаж предоставляет интерфейс для отслеживания беспроводного обновления ПО на камере. После ввода в эксплуатацию камера инициирует обновление и сообщает о своем состоянии приложению. Как только приложение получит статус о завершении обновления программного обеспечения, камера сможет начать прямую трансляцию.

Ниже приведен образец кода и объяснение того, как можно использовать этот трейт.

device.types.subscribe(OtaRequestorDeviceType.self)
  .receive(on: DispatchQueue.main)
  .compactMap { $0.traits[Matter.OtaSoftwareUpdateRequestorTrait.self] }
  .removeDuplicates()
  .timeout(.seconds(30), scheduler: DispatchQueue.main)
  .sink { [weak self] completion in
    guard let self else { return }
    Logger.debug("OTA trait subscription completed unexpectedly: \(completion).")
    if case .otaDownload = self.step {
      Logger.debug("Advancing to settings step due to OTA trait subscription completion")
      self.step = .settings
    }
  } receiveValue: { [weak self] otaTrait in
    Logger.debug(
      "OTA update is in progress, state: \(otaTrait.attributes.updateState), progress: \(otaTrait.attributes.updateStateProgress ?? 0)"
    )

    self.step = .otaDownload(
      state: otaTrait.attributes.updateState ?? .querying,
      progress: Double(otaTrait.attributes.updateStateProgress ?? 0) / 100.0)
    }
  }
  .store(in: &cancellables)
  • Подписка на признаки устройства. Приложение подписывается на признаки устройства, в частности ищет OtaSoftwareUpdateRequestorTrait, чтобы получать информацию о беспроводных обновлениях.

  • Установка времени ожидания: устанавливает время ожидания 30 секунд. Если в течение этого времени от свойства не будет получено обновление, подписка завершится.

  • Обработка обновлений статуса OTA (receiveValue). Этот блок выполняется, когда OtaSoftwareUpdateRequestorTrait предоставляет новый статус. В нем регистрируется текущее состояние и ход беспроводного обновления. Затем он обновляет внутреннее состояние приложения (step), чтобы отразить эту новую информацию.

  • Обработка завершения (sink). Этот блок выполняется, когда подписка заканчивается, и регистрирует завершение. Если процесс находился в состоянии скачивания, состояние приложения переходит к следующему шагу (.settings).

  • Управление жизненным циклом подписки. Строка .store(in: &cancellables) обеспечивает правильное управление подпиской и ее отмену, когда объект, которому она принадлежит, освобождается.

Подробную информацию можно найти в справочнике по типажам OtaSoftwareUpdateRequestorTrait.

ConfigurationDoneTrait

Этот типаж не требуется для активации камеры, но позволяет приложению отслеживать, когда устройство полностью настроено и готово к использованию. Для этого атрибуту AppConfigurationComplete присваивается значение true. Этот признак следует использовать после OtaSoftwareUpdateRequestorTrait.

let configDoneTrait = try await device.types.get(OtaRequestorDeviceType.self)?.traits[Google.ConfigurationDoneTrait.self]
_ = try await configDoneTrait?.update {
  $0.setAppConfigurationComplete(true)
}