Implémenté dans l'application exemple pour iOS
Les caractéristiques pouvant être utilisées après la mise en service de l'appareil sont les suivantes :
OtaSoftwareUpdateRequestorTrait
Ce trait fournit une interface permettant de surveiller une mise à jour logicielle OTA sur la caméra. Une fois mise en service, la caméra lance la mise à jour et signale 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 ce 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éfinition d'un délai avant expiration : un délai de 30 secondes est défini. Si aucune mise à jour n'est reçue de la caractéristique pendant ce délai, l'abonnement prend fin.
Gestion des mises à jour de l'état OTA (
receiveValue) : lorsqueOtaSoftwareUpdateRequestorTraitfournit un nouvel état, ce bloc est exécuté. Il consigne 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 l'achèvement (
sink) : ce bloc est exécuté à la fin de l'abonnement et consigne l'achèvement. Si le processus était à l'é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 annulé lorsque l'objet qui le possède est désalloué.
Pour en savoir plus, consultez la documentation de référence sur la caractéristique OtaSoftwareUpdateRequestorTrait.
ConfigurationDoneTrait
Ce trait n'est pas requis pour l'activation de la caméra, mais il permet à l'application de savoir quand 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)
}