Voici les traits qui peuvent être utilisés une fois l'appareil mis en service :
OtaSoftwareUpdateRequestorTrait
Ce trait fournit une interface permettant de surveiller une mise à jour logicielle OTA sur la caméra. Une fois la caméra mise en service, elle lance la mise à jour et indique son état à l'application. Une fois que l'application reçoit l'état indiquant que la mise à jour logicielle est terminée, la caméra peut commencer à diffuser en direct.
L'exemple de code et l'explication suivants montrent comment utiliser le trait.
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)
S'abonner aux caractéristiques de l'appareil : il s'abonne aux caractéristiques de l'appareil, en recherchant spécifiquement
OtaSoftwareUpdateRequestorTraitpour écouter les informations sur les mises à jour OTA.Définir un délai avant expiration : définit un délai avant expiration de 30 secondes. Si aucune mise à jour n'est reçue de la caractéristique dans ce délai, l'abonnement se termine.
Gérer les mises à jour de l'état OTA (
receiveValue) : lorsqueOtaSoftwareUpdateRequestorTraitfournit un nouvel état, ce bloc est exécuté. Il enregistre l'état actuel et la progression de la mise à jour OTA. Il met ensuite à jour l'état interne de l'application (step) pour refléter ces nouvelles informations.Gestion de la fin de l'abonnement (
sink) : ce bloc est exécuté lorsque l'abonnement se termine et enregistre la fin de l'abonnement. Si le processus était en état de téléchargement, l'état de l'application passe à l'étape suivante (.settings).Gérer le cycle de vie de l'abonnement : la ligne
.store(in: &cancellables)garantit que l'abonnement est correctement géré et résilié lorsque l'objet qui le possède est désalloué.
Pour en savoir plus, consultez la documentation de référence sur le trait OtaSoftwareUpdateRequestorTrait.
ConfigurationDoneTrait
Ce trait n'est pas nécessaire pour l'activation de la caméra, mais il permet à l'application de suivre le moment où l'appareil est entièrement configuré et utilisable en définissant l'attribut AppConfigurationComplete sur true.
Ce trait doit être utilisé après OtaSoftwareUpdateRequestorTrait.
let configDoneTrait = try await device.types.get(OtaRequestorDeviceType.self)?.traits[Google.ConfigurationDoneTrait.self]
_ = try await configDoneTrait?.update {
$0.setAppConfigurationComplete(true)
}