Реализовано в примере приложения для 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)
}