iOS पर मल्टीपार्ट डिवाइस

कुछ Matter डिवाइस, एक ही तरह के डिवाइस के कई एंडपॉइंट से बने होते हैं. अन्य Matter डिवाइस, क्रम के हिसाब से बने होते हैं. इनमें एंडपॉइंट, अन्य एंडपॉइंट में नेस्ट किए जाते हैं. Home APIs में, दोनों तरह के डिवाइसों को मल्टीपार्ट डिवाइस कहा जाता है.

फ़्लैट व्यू

Home APIs के वर्शन 1.8 से पहले, मल्टीपार्ट डिवाइसों को Home APIs में अलग-अलग और असंबद्ध डिवाइसों के तौर पर दिखाया जाता है. इसे फ़्लैट व्यू कहा जाता है.

उदाहरण के लिए, चार स्विच वाला एक वॉल पैनल डिवाइस, Home APIs में चार अलग-अलग और असंबद्ध डिवाइसों के तौर पर दिखता है. साथ ही, क्रम के हिसाब से बने Matter डिवाइस, जैसे कि रेफ़्रिजरेटर को Home APIs में डिवाइसों के सेट के तौर पर दिखाया जा सकता है. इनमें से हर डिवाइस, किसी एक एंडपॉइंट से जुड़ा होता है.

  • कई स्विच वाला वॉल पैनल, जिसमें नेटिव Matter का उदाहरण दिखाया गया है. साथ ही, Home API की फ़्लैट रेंडरिंग दिखाई गई है

    चार स्विच वाले वॉल पैनल का फ़्लैट व्यू.

  • रेफ़्रिजरेटर का उदाहरण, जिसमें Matter के नेटिव वर्शन और Home API के फ़्लैट रेंडरिंग को दिखाया गया है

    रेफ़्रिजरेटर का फ़्लैट व्यू

पहली इमेज: फ़्लैट रेंडरिंग के उदाहरण

मल्टीपार्ट व्यू

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 में किसी मल्टीपार्ट डिवाइस को दिखाने के तरीके पर कैसे असर डालता है:

  • कई स्विच वाला वॉल पैनल, जिसमें 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)
}