In der Beispiel-App für iOS implementiert
Nach der Inbetriebnahme des Geräts können die folgenden Attribute verwendet werden:
OtaSoftwareUpdateRequestorTrait
Dieses Attribut bietet eine Schnittstelle zum Überwachen eines OTA-Softwareupdates auf der Kamera. Nach der Inbetriebnahme startet die Kamera das Update und meldet ihren Status an die App. Sobald die App den Status erhält, dass das Softwareupdate abgeschlossen ist, kann die Kamera mit dem Livestreaming beginnen.
Der folgende Beispielcode und die Erläuterung zeigen, wie das Attribut verwendet werden kann.
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)
Geräteattribute abonnieren: Es abonniert die Attribute des Geräts und sucht speziell nach
OtaSoftwareUpdateRequestorTrait, um Informationen zu Over-the-Air-Updates zu erhalten.Zeitlimit festlegen: Es wird ein Zeitlimit von 30 Sekunden festgelegt. Wenn innerhalb dieser Zeit keine Aktualisierung vom Merkmal empfangen wird, endet das Abo.
Over-the-air-Statusaktualisierungen verarbeiten (
receiveValue): Wenn derOtaSoftwareUpdateRequestorTraiteinen neuen Status bereitstellt, wird dieser Block ausgeführt. Der aktuelle Status und der Fortschritt des Over-the-air-Updates werden protokolliert. Anschließend wird der interne Status der Anwendung (step) aktualisiert, um diese neuen Informationen widerzuspiegeln.Abschluss verarbeiten (
sink): Dieser Block wird ausgeführt, wenn das Abo endet, und protokolliert den Abschluss. Wenn sich der Prozess im Status „Wird heruntergeladen“ befand, wechselt der Anwendungsstatus zum nächsten Schritt (.settings).Verwalten des Abo-Lebenszyklus: Die Zeile
.store(in: &cancellables)sorgt dafür, dass das Abo ordnungsgemäß verwaltet und gekündigt wird, wenn die Zuordnung des zugehörigen Objekts aufgehoben wird.
Weitere Informationen findest du in der Referenz zum Attribut OtaSoftwareUpdateRequestorTrait.
ConfigurationDoneTrait
Dieses Attribut ist für die Kameraaktivierung nicht erforderlich, ermöglicht es der App jedoch, zu verfolgen, wann das Gerät vollständig eingerichtet und einsatzbereit ist, indem das Attribut AppConfigurationComplete auf true gesetzt wird.
Dieses Attribut sollte nach dem OtaSoftwareUpdateRequestorTrait verwendet werden.
let configDoneTrait = try await device.types.get(OtaRequestorDeviceType.self)?.traits[Google.ConfigurationDoneTrait.self]
_ = try await configDoneTrait?.update {
$0.setAppConfigurationComplete(true)
}