কিছু Matter ডিভাইস একই ধরনের ডিভাইস দিয়ে তৈরি একাধিক এন্ডপয়েন্ট দিয়ে তৈরি হয়। অন্যান্য Matter ডিভাইস হল হায়ারার্কিক্যাল, যেখানে এন্ডপয়েন্ট অন্য এন্ডপয়েন্টের মধ্যে নেস্ট করা থাকে। Home API-তে, দু'ধরনের ডিভাইসকেই মাল্টিপার্ট ডিভাইস বলা হয়।
ফ্ল্যাট রিপ্রেজেন্টেশন
Home API-এর 1.8 রিলিজের আগে, মাল্টিপার্ট ডিভাইসকে Home API-এর মাধ্যমে আলাদা, সম্পর্কহীন ডিভাইসের সেট হিসেবে দেখানো হয়। এটি ফ্ল্যাট উপস্থাপনা হিসেবে উল্লেখ করা হয়।
যেমন, চারটি সুইচ সহ একটি ওয়াল প্যানেল ডিভাইস 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 বিকল্প
হোম API-তে মাল্টিপার্ট ডিভাইসের উপস্থাপনাকে প্রভাবিত করে:
ওয়াল প্যানেলের মাল্টিপার্ট উপস্থাপনা।
রেফ্রিজারেটরের মাল্টিপার্ট উপস্থাপনা।
enableMultipartDevices প্যারামিটার বাদ দিয়ে অথবা এটিকে false হিসেবে সেট করে আপনি সবসময় ফ্ল্যাট রেপ্রেজেন্টেশন পাওয়ার বিকল্প পাবেন।
মাল্টিপার্ট ডিভাইস নেভিগেট করা
মাল্টিপার্ট ডিভাইসের মধ্যে, ডিভাইসের ধরনের প্রতিটি কম্পোনেন্ট ইনস্ট্যান্সকে পার্ট বলা হয়।
ডিভাইসের ধরন বা Matter সিম্যান্টিক
ট্যাগ ব্যবহার করে, সরাসরি অভিভাবক ডিভাইস বা কোনও পার্ট
হায়রার্কিক্যাল পদ্ধতিতে অ্যাক্সেস করা যেতে পারে। Home API-তে সেম্যান্টিক ট্যাগ প্রয়োগ করা হয়
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) }