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