कुछ Matter डिवाइस, एक ही तरह के डिवाइस के कई एंडपॉइंट से बने होते हैं. अन्य Matter डिवाइस, क्रम के हिसाब से बने होते हैं. इनमें एंडपॉइंट, अन्य एंडपॉइंट में नेस्ट किए जाते हैं. Home APIs में, दोनों तरह के डिवाइसों को मल्टीपार्ट डिवाइस कहा जाता है.
फ़्लैट व्यू
Home APIs के वर्शन 1.8 से पहले, मल्टीपार्ट डिवाइसों को Home APIs में अलग-अलग और असंबद्ध डिवाइसों के तौर पर दिखाया जाता है. इसे फ़्लैट व्यू कहा जाता है.
उदाहरण के लिए, चार स्विच वाला एक वॉल पैनल डिवाइस, Home APIs में चार अलग-अलग और असंबद्ध डिवाइसों के तौर पर दिखता है. साथ ही, क्रम के हिसाब से बने Matter डिवाइस, जैसे कि रेफ़्रिजरेटर को Home APIs में डिवाइसों के सेट के तौर पर दिखाया जा सकता है. इनमें से हर डिवाइस, किसी एक एंडपॉइंट से जुड़ा होता है.
चार स्विच वाले वॉल पैनल का फ़्लैट व्यू.
रेफ़्रिजरेटर का फ़्लैट व्यू
मल्टीपार्ट व्यू
Home APIs के वर्शन 1.8 से, किसी मल्टीपार्ट डिवाइस को एपीआई में एक डिवाइस के तौर पर दिखाया जा सकता है. इस सुविधा को चालू करने के लिए, devices() तरीके को
Home
इंस्टेंस पर कॉल करें और 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 विकल्प, Home APIs में किसी मल्टीपार्ट डिवाइस को दिखाने के तरीके पर कैसे असर डालता है:
वॉल पैनल का मल्टीपार्ट व्यू.
रेफ़्रिजरेटर का मल्टीपार्ट व्यू.
enableMultipartDevices पैरामीटर को छोड़कर या इसे false पर सेट करके, हमेशा फ़्लैट व्यू पाने का विकल्प होता है.
मल्टीपार्ट डिवाइस पर नेविगेट करना
मल्टीपार्ट डिवाइस में, किसी डिवाइस टाइप के हर कॉम्पोनेंट इंस्टेंस को पार्ट कहा जाता है.
डिवाइस टाइप या Matter सिमैंटिक
टैग का इस्तेमाल करके, क्रम के हिसाब से पैरंट डिवाइस या किसी पार्ट को सीधे ऐक्सेस किया जा सकता है. Home APIs में, सिमैंटिक टैग को
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) }