Cechy, których można używać po uruchomieniu urządzenia:
OtaSoftwareUpdateRequestorTrait
Ten atrybut udostępnia interfejs do monitorowania aktualizacji oprogramowania OTA na urządzeniu z kamerą. Po uruchomieniu kamera rozpoczyna aktualizację i przesyła informacje o jej stanie do aplikacji. Gdy aplikacja otrzyma informację o zakończeniu aktualizacji oprogramowania, kamera może rozpocząć transmisję na żywo.
Poniższy przykładowy kod i wyjaśnienie pokazują, jak można używać tego atrybutu.
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)
Subskrypcja cech urządzenia: subskrybuje cechy urządzenia, w szczególności szuka
OtaSoftwareUpdateRequestorTrait, aby nasłuchiwać informacji o aktualizacji OTA.Ustawianie limitu czasu: ustawia 30-sekundowy limit czasu. Jeśli w tym czasie nie otrzymamy od cechy żadnych aktualizacji, subskrypcja zostanie zakończona.
Obsługa aktualizacji stanu OTA (
receiveValue): gdyOtaSoftwareUpdateRequestorTraitpoda nowy stan, ten blok jest wykonywany. Rejestruje bieżący stan i postęp aktualizacji OTA. Następnie aktualizuje stan wewnętrzny aplikacji (step), aby odzwierciedlić te nowe informacje.Obsługa zakończenia (
sink): ten blok jest wykonywany po zakończeniu subskrypcji i rejestruje zakończenie. Jeśli proces był w stanie pobierania, stan aplikacji przechodzi do następnego kroku (.settings).Zarządzanie cyklem życia subskrypcji: wiersz
.store(in: &cancellables)zapewnia prawidłowe zarządzanie subskrypcją i jej anulowanie, gdy obiekt, do którego należy, zostanie zwolniony.
Więcej informacji znajdziesz w dokumentacji cechy OtaSoftwareUpdateRequestorTrait.
ConfigurationDoneTrait
Ten atrybut nie jest wymagany do aktywacji kamery, ale umożliwia aplikacji śledzenie, kiedy urządzenie jest w pełni skonfigurowane i gotowe do użycia, poprzez ustawienie atrybutu AppConfigurationComplete na true.
Tego atrybutu należy używać po znaku OtaSoftwareUpdateRequestorTrait.
let configDoneTrait = try await device.types.get(OtaRequestorDeviceType.self)?.traits[Google.ConfigurationDoneTrait.self]
_ = try await configDoneTrait?.update {
$0.setAppConfigurationComplete(true)
}