ویژگیهایی که پس از راهاندازی دستگاه میتوانند مورد استفاده قرار گیرند عبارتند از:
OtaSoftwareUpdateRequestorTrait
این ویژگی رابطی برای نظارت بر بهروزرسانی نرمافزار OTA در دستگاه دوربین فراهم میکند. پس از راهاندازی، دوربین بهروزرسانی را آغاز کرده و وضعیت خود را به برنامه گزارش میدهد. به محض اینکه برنامه وضعیت تکمیل بهروزرسانی نرمافزار را دریافت کند، دوربین میتواند شروع به پخش زنده کند.
کد نمونه و توضیحات زیر نحوه استفاده از این ویژگی را نشان میدهد.
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)
اشتراک در ویژگیهای دستگاه: این تابع در ویژگیهای دستگاه مشترک میشود و بهطور خاص به دنبال
OtaSoftwareUpdateRequestorTraitمیگردد تا اطلاعات بهروزرسانی OTA را دریافت کند.تنظیم زمان انقضا: این گزینه یک زمان انقضای 30 ثانیهای تعیین میکند. اگر در این مدت هیچ بهروزرسانی از trait دریافت نشود، اشتراک پایان مییابد.
مدیریت بهروزرسانیهای وضعیت OTA (
receiveValue): وقتیOtaSoftwareUpdateRequestorTraitوضعیت جدیدی ارائه میدهد، این بلوک اجرا میشود. این بلوک وضعیت فعلی و پیشرفت بهروزرسانی OTA را ثبت میکند. سپس وضعیت داخلی برنامه (step) را بهروزرسانی میکند تا این اطلاعات جدید را منعکس کند.مدیریت تکمیل (
sink): این بلوک زمانی اجرا میشود که اشتراک پایان یابد و تکمیل را ثبت میکند. اگر فرآیند در حالت دانلود باشد، حالت برنامه به مرحله بعدی (.settings) میرود.مدیریت چرخه حیات اشتراک: خط
.store(in: &cancellables) تضمین میکند که اشتراک به درستی مدیریت شده و پس از آزادسازی شیء مالک آن، لغو شود.
برای اطلاعات بیشتر، به مرجع ویژگی OtaSoftwareUpdateRequestorTrait مراجعه کنید.
ConfigurationDoneTrit
این ویژگی برای فعالسازی دوربین ضروری نیست، اما به برنامه اجازه میدهد تا با تنظیم ویژگی AppConfigurationComplete روی true ، زمانی که دستگاه کاملاً راهاندازی و قابل استفاده شد را ردیابی کند. این ویژگی باید پس از OtaSoftwareUpdateRequestorTrait استفاده شود.
let configDoneTrait = try await device.types.get(OtaRequestorDeviceType.self)?.traits[Google.ConfigurationDoneTrait.self]
_ = try await configDoneTrait?.update {
$0.setAppConfigurationComplete(true)
}