ক্যামেরা অনবোর্ডিংয়ের জন্য কমিশনিং-পরবর্তী বৈশিষ্ট্য

ডিভাইসটি চালু হওয়ার পরে যে বৈশিষ্ট্যগুলি ব্যবহার করা যেতে পারে তা হল:

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)
}