ডিভাইসটি চালু করার পর যে বৈশিষ্ট্যগুলো ব্যবহার করা যেতে পারে, সেগুলো হলো:
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)
ডিভাইসের বৈশিষ্ট্যগুলিতে সাবস্ক্রাইব করা: এটি ডিভাইসের বৈশিষ্ট্যগুলিতে সাবস্ক্রাইব করে, বিশেষত OTA আপডেটের তথ্য শোনার জন্য
OtaSoftwareUpdateRequestorTraitটি খোঁজে।টাইমআউট নির্ধারণ করা: এটি একটি ৩০-সেকেন্ডের টাইমআউট নির্ধারণ করে। যদি সেই সময়ের মধ্যে ট্রেইট থেকে কোনো আপডেট না আসে, তাহলে সাবস্ক্রিপশনটি শেষ হয়ে যায়।
OTA স্ট্যাটাস আপডেট পরিচালনা (
receiveValue): যখনOtaSoftwareUpdateRequestorTraitএকটি নতুন স্ট্যাটাস প্রদান করে, তখন এই ব্লকটি কার্যকর হয়। এটি OTA আপডেটের বর্তমান অবস্থা এবং অগ্রগতি লগ করে। এরপর এটি এই নতুন তথ্য প্রতিফলিত করার জন্য অ্যাপ্লিকেশনটির অভ্যন্তরীণ অবস্থা (step) আপডেট করে।সমাপ্তি পরিচালনা (
sink): সাবস্ক্রিপশন শেষ হলে এই ব্লকটি কার্যকর হয় এবং সমাপ্তির বিষয়টি লগ করে। যদি প্রসেসটি ডাউনলোডিং অবস্থায় থাকে, তাহলে অ্যাপ্লিকেশন স্টেট পরবর্তী ধাপে (.settings) চলে যায়।সাবস্ক্রিপশন লাইফসাইকেল পরিচালনা:
.store(in: &cancellables)লাইনটি নিশ্চিত করে যে, যখন সাবস্ক্রিপশনটির মালিক অবজেক্টটি ডিঅ্যালোকেট করা হয়, তখন সাবস্ক্রিপশনটি যথাযথভাবে পরিচালিত এবং বাতিল হয়ে যায়।
আরও তথ্যের জন্য, OtaSoftwareUpdateRequestorTrait ট্রেইট রেফারেন্সটি দেখুন।
কনফিগারেশন সম্পন্ন বৈশিষ্ট্য
ক্যামেরা সক্রিয় করার জন্য এই ট্রেইটটি আবশ্যক নয়, তবে AppConfigurationComplete অ্যাট্রিবিউটটিকে true সেট করার মাধ্যমে এটি অ্যাপটিকে ট্র্যাক করতে দেয় যে ডিভাইসটি কখন সম্পূর্ণরূপে সেট আপ এবং ব্যবহারযোগ্য হয়েছে। এই ট্রেইটটি OtaSoftwareUpdateRequestorTrait পরে ব্যবহার করা উচিত।
let configDoneTrait = try await device.types.get(OtaRequestorDeviceType.self)?.traits[Google.ConfigurationDoneTrait.self]
_ = try await configDoneTrait?.update {
$0.setAppConfigurationComplete(true)
}