Folgende Traits können nach der Inbetriebnahme des Geräts verwendet werden:
OtaSoftwareUpdateRequestorTrait
Dieses Merkmal bietet eine Schnittstelle zum Überwachen eines OTA-Softwareupdates auf dem Kameragerät. Nach der Inbetriebnahme initiiert 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äteeigenschaften abonnieren: Es werden die Geräteeigenschaften abonniert, insbesondere
OtaSoftwareUpdateRequestorTrait, um auf Informationen zu OTA-Updates zu warten.Zeitlimit festlegen: Es wird ein Zeitlimit von 30 Sekunden festgelegt. Wenn innerhalb dieses Zeitlimits keine Aktualisierung vom Merkmal empfangen wird, wird das Abo beendet.
OTA-Statusupdates verarbeiten (
receiveValue): WennOtaSoftwareUpdateRequestorTraiteinen neuen Status bereitstellt, wird dieser Block ausgeführt. Er protokolliert den aktuellen Status und den Fortschritt des OTA-Updates. Anschließend wird der interne Status der Anwendung (step) aktualisiert, um diese neuen Informationen zu berücksichtigen.Abschluss verarbeiten (
sink): Dieser Block wird ausgeführt, wenn das Abo endet, und protokolliert den Abschluss. Wenn sich der Prozess im Downloadstatus befand, wird der Anwendungsstatus mit dem nächsten Schritt (.settings) fortgesetzt.Abonnementlebenszyklus verwalten: Die Zeile
.store(in: &cancellables)sorgt dafür, dass das Abo ordnungsgemäß verwaltet und gekündigt wird, wenn das zugehörige Objekt freigegeben wird.
Weitere Informationen finden Sie in der Referenz zum OtaSoftwareUpdateRequestorTrait-Trait.
ConfigurationDoneTrait
Dieses Merkmal ist für die Kameraaktivierung nicht erforderlich, ermöglicht es der App jedoch, zu verfolgen, wann das Gerät vollständig eingerichtet und nutzbar ist, indem das Attribut AppConfigurationComplete auf true gesetzt wird.
Dieses Merkmal 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)
}