iOS-এ মাল্টিপার্ট ডিভাইস

কিছু Matter ডিভাইস একই ধরনের ডিভাইসের একাধিক এন্ডপয়েন্ট দিয়ে তৈরি করা হয়। অন্যান্য Matter ডিভাইসগুলি হায়ারার্কিক্যাল, যেখানে এন্ডপয়েন্টগুলি অন্যান্য এন্ডপয়েন্টের মধ্যে নেস্ট করা থাকে। Home API-তে, উভয় ধরনের ডিভাইসকেই মাল্টিপার্ট ডিভাইস হিসেবে উল্লেখ করা হয়।

ফ্ল্যাট রিপ্রেজেন্টেশন

Home API-এর 1.8 রিলিজের আগে, মাল্টিপার্ট ডিভাইসগুলিকে Home API দ্বারা আলাদা, অসম্পর্কিত ডিভাইসের সেট হিসাবে উপস্থাপন করা হয়। এটিকে ফ্ল্যাট প্রতিনিধিত্ব বলা হয়।

যেমন, চারটি সুইচ সহ একটি ওয়াল প্যানেল ডিভাইস Home API-তে চারটি আলাদা এবং সম্পর্কহীন ডিভাইস হিসেবে দেখা যায়। এবং একটি হায়ারার্কিক্যাল Matter ডিভাইস যেমন একটি রেফ্রিজারেটর Home API-তে ডিভাইসের সেট হিসেবে দেখানো হতে পারে, যার প্রতিটি একটি এন্ডপয়েন্টের সাথে সম্পর্কিত।

  • একাধিক সুইচ সহ ওয়াল প্যানেলের উদাহরণ যা নেটিভ Matter
          রিপ্রেজেন্টেশন ও Home API-এর ফ্ল্যাট রেন্ডারিং দেখায়

    ৪-সুইচ ওয়াল প্যানেলের ফ্ল্যাট রিপ্রেজেন্টেশন।

  • রেফ্রিজারেটরের উদাহরণ যা নেটিভ Matter উপস্থাপনা এবং
          Home API-এর ফ্ল্যাট রেন্ডারিং দেখায়

    ফ্রিজের ফ্ল্যাট রিপ্রেজেন্টেশন

ছবি ১: ফ্ল্যাট রেন্ডারিংয়ের উদাহরণ

মাল্টিপার্ট রিপ্রেজেন্টেশন

Home API-এর 1.8 রিলিজ থেকে শুরু করে, API-তে একটি মাল্টিপার্ট ডিভাইসকে একটি ডিভাইস হিসেবে দেখানো যেতে পারে। এই আচরণ চালু করতে, Home ইনস্ট্যান্সে devices() মেথড কল করুন এবং enableMultipartDevices প্যারামিটার true-এ সেট করুন:

let multipartDevices = try await self.home.devices(enableMultipartDevices: true).list()
let multipartDevice = multipartDevices.first { $0.id == powerStrip.device.id }
let outlets = try await device.types.getAll(of: OnOffPluginUnitDeviceType.self)

নিম্নলিখিত ডায়াগ্রাম থেকে বোঝা যায় যে enableMultipartDevices বিকল্পটি Home API-তে মাল্টিপার্ট ডিভাইসের উপস্থাপনাকে কীভাবে প্রভাবিত করে:

  • একাধিক সুইচ সহ ওয়াল প্যানেলের উদাহরণ যা নেটিভ Matter
    রিপ্রেজেন্টেশন এবং Home API-এর মাল্টিপার্ট রেন্ডারিং দেখায়

    ওয়াল প্যানেলের মাল্টিপার্ট রিপ্রেসেন্টেশন।

  • রেফ্রিজারেটরের উদাহরণ যা নেটিভ Matter রিপ্রেজেন্টেশন এবং Home
    API-এর মাল্টিপার্ট রেন্ডারিং দেখায়

    রেফ্রিজারেটরের মাল্টিপার্ট উপস্থাপনা।

ছবি ২: মাল্টিপার্ট রেন্ডারিংয়ের উদাহরণ

enableMultipartDevices প্যারামিটার বাদ দিয়ে অথবা এটি false-এ সেট করে, আপনি সবসময় ফ্ল্যাট রিপ্রেজেন্টেশন পেতে পারেন।

মাল্টিপার্ট ডিভাইসের মধ্যে, ডিভাইসের ধরনের প্রতিটি কম্পোনেন্ট ইনস্ট্যান্সকে পার্ট বলা হয়।

ডিভাইসের ধরন বা Matter সিম্যান্টিক ট্যাগ ব্যবহার করে, প্যারেন্ট ডিভাইস বা কোনও পার্টে সরাসরি অ্যাক্সেস করা যেতে পারে, হায়ারার্কি অনুযায়ী। SemanticTag-এর সাথে Home API-তে সিম্যান্টিক ট্যাগ প্রয়োগ করা হয়।

DeviceType ক্লাস ডেভেলপারদের parts() পদ্ধতির মাধ্যমে ডিভাইস ট্রি ট্রাভার্স করতে দেয়:

let outlet1 = await device.parts.getAll(of: OnOffPluginUnitDeviceType.self).first {
  $0.tags.contains(SemanticTag.CommonNumber.one)
}
let outlet3 = await device.parts.getAll(of: OnOffPluginUnitDeviceType.self).first {
  $0.tags.contains(SemanticTag.CommonNumber.three)
}

পরের উদাহরণে দেখানো হয়েছে যে কীভাবে রেফ্রিজারেটর ডিভাইসের বিভিন্ন অংশ অ্যাক্সেস করতে হয়:

let refrigerator: RefrigeratorDeviceType? =
   await home.devices(enableMultipartDevices: true).first { $0.id == FRIDGE_ID }
// Get different cabinets of the refrigerator
let freezer = refrigerator!.parts(type: TemperatureControlledCabinetDeviceType.self).first {
  $0.tags.contains(SemanticTag.Refrigerator.freezer)
}