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

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

সমতল উপস্থাপনা

হোম এপিআই-এর ১.৮ রিলিজের আগে, মাল্টিপার্ট ডিভাইসগুলোকে হোম এপিআই দ্বারা পৃথক ও সম্পর্কহীন ডিভাইসের একটি সেট হিসেবে উপস্থাপন করা হতো। একে ফ্ল্যাট রিপ্রেজেন্টেশন বলা হয়।

উদাহরণস্বরূপ, চারটি সুইচ সহ একটি একক ওয়াল প্যানেল ডিভাইস হোম এপিআই-তে চারটি স্বতন্ত্র এবং সম্পর্কহীন ডিভাইস হিসাবে প্রদর্শিত হয়। এবং একটি শ্রেণিবদ্ধ Matter ডিভাইস, যেমন একটি রেফ্রিজারেটর, হোম এপিআই-তে ডিভাইসগুলির একটি সেট হিসাবে উপস্থাপিত হতে পারে, যার প্রতিটি একটি এন্ডপয়েন্টের সাথে সঙ্গতিপূর্ণ।

  • একাধিক সুইচ সহ ওয়াল প্যানেলের উদাহরণ, যা নেটিভ ম্যাটার রিপ্রেজেন্টেশন এবং হোম এপিআই-এর ফ্ল্যাট রেন্ডারিং দেখাচ্ছে।

    চারটি সুইচযুক্ত একটি ওয়াল প্যানেলের সমতলীয় চিত্র।

  • রেফ্রিজারেটরের উদাহরণ যেখানে নেটিভ ম্যাটার রিপ্রেজেন্টেশন এবং হোম এপিআই-এর ফ্ল্যাট রেন্ডারিং দেখানো হয়েছে

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

চিত্র ১ : ফ্ল্যাট রেন্ডারিং এর উদাহরণ

বহু-অংশীয় উপস্থাপনা

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

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

নিম্নলিখিত ডায়াগ্রামগুলি দেখায় কিভাবে enableMultipartDevices অপশনটি হোম এপিআই-তে একটি মাল্টিপার্ট ডিভাইসের উপস্থাপনাকে প্রভাবিত করে:

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

    একটি দেয়াল প্যানেলের বহু-অংশীয় উপস্থাপনা।

  • রেফ্রিজারেটরের উদাহরণ যেখানে নেটিভ ম্যাটার রিপ্রেজেন্টেশন এবং হোম এপিআই-এর মাল্টিপার্ট রেন্ডারিং দেখানো হয়েছে।

    একটি রেফ্রিজারেটরের বহু-অংশীয় উপস্থাপনা।

চিত্র ২ : বহু-অংশ রেন্ডারিং এর উদাহরণ

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

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

ডিভাইস টাইপ বা Matter সিমান্টিক ট্যাগ ব্যবহার করে, পার্টগুলোকে সরাসরি প্যারেন্ট ডিভাইসে অথবা শ্রেণিবদ্ধভাবে কোনো পার্টে অ্যাক্সেস করা যেতে পারে। হোম এপিআই-তে SemanticTag এর মাধ্যমে সিমান্টিক ট্যাগগুলো প্রয়োগ করা হয়।

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