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 वर्शन से, एक से ज़्यादा हिस्सों वाले डिवाइस को एपीआई में एक ही डिवाइस के तौर पर दिखाया जा सकता है. इस सुविधा को चालू करने के लिए, 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 में कई हिस्सों वाले डिवाइस को कैसे दिखाया जाता है:

  • कई स्विच वाला वॉल पैनल, जिसमें Matter के नेटिव वर्शन और Home API की मल्टीपार्ट रेंडरिंग को दिखाया गया है

    वॉल पैनल को कई हिस्सों में दिखाया गया है.

  • रेफ़्रिजरेटर का उदाहरण, जिसमें Matter के नेटिव वर्शन और 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)
}