इस गाइड में, iOS पर डिवाइसों और डिवाइस के मेटाडेटा को ऐक्सेस करना सेक्शन के बाद की जानकारी दी गई है. साथ ही, डिवाइस को कंट्रोल और ऐक्सेस करने के अन्य उदाहरण भी दिए गए हैं.
यहां दिए गए कई उदाहरणों में इस्तेमाल किए गए Matter
OnOffTrait
जैसे खास डिवाइस टाइप या खासताओं का इस्तेमाल करने के लिए, उन्हें इंपोर्ट करना होगा:
import GoogleHomeSDK
import GoogleHomeTypes
यह देखना कि कोई ट्रैट किसी निर्देश के साथ काम करता है या नहीं
किसी खास डिवाइस के लिए कोई निर्देश काम करता है या नहीं, यह देखने के लिए ट्रैट-लेवल supports
फ़ंक्शन का इस्तेमाल करें.
उदाहरण के लिए, किसी डिवाइस पर चालू/बंद करने की सुविधा के toggle
कमांड के काम करने की जांच करने के लिए:
// Check if the OnOff trait supports the toggle command. if onOffTraitTest.supportsToggleCommand { print("onOffTrait supports toggle command") } else { print("onOffTrait does not support stateful toggle command") }
किसी डिवाइस पर निर्देश भेजना
कोई निर्देश भेजना, किसी ट्रैट से स्टेटस एट्रिब्यूट को पढ़ने जैसा ही है. डिवाइस को चालू या बंद करने के लिए, OnOffTrait
टॉगल कमांड का इस्तेमाल करें. इसे Google Home नेटवर्क के डेटा मॉडल में toggle()
के तौर पर दिखाया गया है. इस तरीके से, onOff
को false
में बदला जाता है, अगर यह true
है. इसके अलावा, false
को true
में बदला जाता है, अगर यह false
है:
// Calling a command on a trait. do { try await onOffTraitTest.toggle() } catch let error as HomeError { // Code for handling the exception }
अगर निर्देशों को लागू करने के फ़्लो में कोई समस्या का पता चलता है, तो निर्देशों से कोई अपवाद दिख सकता है. डेवलपर के तौर पर, आपको इन अपवादों को ठीक से मैनेज करने के लिए, do-catch
ब्लॉक का इस्तेमाल करना चाहिए. साथ ही, उन मामलों में उपयोगकर्ताओं को पूरी जानकारी देनी चाहिए जिनमें गड़बड़ियों को ठीक किया जा सकता है. बिना मैनेज किए गए अपवाद, ऐप्लिकेशन के रनटाइम को रोक देंगे और आपके ऐप्लिकेशन को क्रैश कर सकते हैं.
इसके अलावा, स्थिति को साफ़ तौर पर सेट करने के लिए, off()
या on()
निर्देशों का इस्तेमाल करें:
do { try await onOffTraitTest.off() try await onOffTraitTest.on() } catch let error as HomeError { // Code for handling the exception }
डिवाइस की स्थिति बदलने का निर्देश भेजने के बाद, जब वह पूरा हो जाए, तो डिवाइस की स्थिति पढ़ना में बताए गए तरीके से स्थिति को पढ़ा जा सकता है, ताकि उसे अपने ऐप्लिकेशन में मैनेज किया जा सके.
पैरामीटर के साथ कोई निर्देश भेजना
कुछ निर्देशों में पैरामीटर का इस्तेमाल किया जा सकता है. जैसे, OnOffTrait
या LevelControlTrait
पर मौजूद पैरामीटर:
offWithEffect
// Turn off the light using the DyingLight effect. do { try await onOffTraitTest.offWithEffect( effectIdentifier: Matter.OnOffTrait.EffectIdentifierEnum.dyingLight, effectVariant: 0 ) } catch let error as HomeError { // Code for handling the exception }
moveToLevel
// Change the brightness of the light to 50% do { try await levelControlTraitTest.moveToLevel( level: UInt8(127), transitionTime: 0, optionsMask: Matter.LevelControlTrait.OptionsBitmap(), optionsOverride: Matter.LevelControlTrait.OptionsBitmap() ) } catch let error as HomeError { // Code for handling the exception }
यह देखना कि कोई ट्रैट किसी एट्रिब्यूट के साथ काम करता है या नहीं
ऐसा हो सकता है कि कुछ डिवाइसों पर Matter ट्रीट काम करे, लेकिन कोई खास एट्रिब्यूट काम न करे. उदाहरण के लिए, हो सकता है कि Cloud-to-cloud डिवाइस, Matter के साथ मैप किए गए हर Matter एट्रिब्यूट के साथ काम न करे. ऐसे मामलों को मैनेज करने के लिए, isSupported
प्रॉपर्टी का इस्तेमाल करके देखें कि एट्रिब्यूट किसी डिवाइस के लिए काम करता है या नहीं.
उदाहरण के लिए, किसी डिवाइस पर चालू/बंद करने की सुविधा के onOff
एट्रिब्यूट के काम करने की जांच करने के लिए:
// Check if the OnOff trait supports the onOff attribute. if onOffTrait.attributes.$onOff.isSupported { print("onOffTrait supports onOff state") } else { print("onOffTrait is for a command only device!") }
Matter स्पेसिफ़िकेशन या Cloud-to-cloud smart home स्कीमा में, कुछ एट्रिब्यूट के लिए वैल्यू सबमिट करना ज़रूरी नहीं है. इन एट्रिब्यूट के लिए, यह तय किया जा सकता है कि एट्रिब्यूट से मिली nil वैल्यू, डिवाइस की ओर से उस वैल्यू की रिपोर्ट न करने की वजह से मिली है या एट्रिब्यूट की वैल्यू असल में nil
है. इसके लिए, isSupported
के साथ-साथ isNullable
का इस्तेमाल करें:
// Check if a nullable attribute is set or is not supported. if let deviceType = await device.types.get(OnOffLightDeviceType.self) { if let onOffTrait = deviceType.traits[Matter.OnOffTrait.self] { if onOffTrait.attributes.startUpOnOff == nil { if onOffTrait.attributes.$startUpOnOff.isSupported { print( "onOffTrait supports startUpOnOff and it is nil. Check the spec for the contextual meaning." ) } else { print("onOffTrait does not support startUpOnOff!") } } else { print( "onOffTrait supports startUpOnOff and it is set to \(onOffTrait.attributes.startUpOnOff)" ) } } }
ट्रैट एट्रिब्यूट अपडेट करना
अगर आपको किसी एट्रिब्यूट की वैल्यू बदलनी है और ट्रेट का कोई भी कमांड ऐसा नहीं करता है, तो हो सकता है कि एट्रिब्यूट की वैल्यू साफ़ तौर पर सेट की जा सके.
किसी एट्रिब्यूट की वैल्यू बदली जा सकती है या नहीं, यह दो बातों पर निर्भर करता है:
- क्या एट्रिब्यूट में बदलाव किया जा सकता है?
- क्या किसी ट्रेट कमांड को भेजने के साइड इफ़ेक्ट के तौर पर, एट्रिब्यूट की वैल्यू बदल सकती है?
इस जानकारी के लिए, ट्रेट और उनके एट्रिब्यूट के रेफ़रंस दस्तावेज़ देखें.
इसलिए, प्रॉपर्टी के ऐसे कॉम्बिनेशन जो यह तय करते हैं कि किसी एट्रिब्यूट की वैल्यू कैसे बदली जा सकती है:
रीड-ओनली और अन्य निर्देशों से इस पर कोई असर नहीं पड़ता. इसका मतलब है कि एट्रिब्यूट की वैल्यू नहीं बदलती. उदाहरण के लिए,
SwitchTrait
काcurrentPosition
एट्रिब्यूट.सिर्फ़ पढ़ने के लिए है और दूसरे निर्देशों से इस पर असर पड़ता है. इसका मतलब है कि एट्रिब्यूट की वैल्यू सिर्फ़ कमांड भेजने पर बदल सकती है. उदाहरण के लिए,
LevelControlTrait
काcurrentLevel
एट्रिब्यूट रीड-ओनली होता है. हालांकि,moveToLevel
जैसे निर्देशों की मदद से इसकी वैल्यू में बदलाव किया जा सकता है.इनमें डेटा लिखा जा सकता है और अन्य निर्देशों का इन पर कोई असर नहीं पड़ता. इसका मतलब है कि आपके पास, ट्रैट के
update
फ़ंक्शन का इस्तेमाल करके, एट्रिब्यूट की वैल्यू को सीधे तौर पर बदलने का विकल्प है. हालांकि, ऐसे कोई भी निर्देश नहीं हैं जिनसे एट्रिब्यूट की वैल्यू पर असर पड़े. उदाहरण के लिए,DoorLockTrait
काWrongCodeEntryLimit
एट्रिब्यूट.इनमें डेटा लिखा जा सकता है और इन पर अन्य निर्देशों का असर पड़ता है. इसका मतलब है कि आपके पास, ट्रैट के
update
फ़ंक्शन का इस्तेमाल करके, एट्रिब्यूट की वैल्यू को सीधे तौर पर बदलने का विकल्प है. साथ ही, कोई निर्देश भेजने पर एट्रिब्यूट की वैल्यू बदल सकती है. उदाहरण के लिए,ThermostatTrait
केoccupiedCoolingSetpoint
एट्रिब्यूट में लिखा जा सकता है. साथ ही, इसेsetpointRaiseLower
कमांड की मदद से अपडेट भी किया जा सकता है.
किसी एट्रिब्यूट की वैल्यू बदलने के लिए, अपडेट फ़ंक्शन का इस्तेमाल करने का उदाहरण
इस उदाहरण में, DoorLockTrait.wrongCodeEntryLimit
एट्रिब्यूट की वैल्यू साफ़ तौर पर सेट करने का तरीका बताया गया है.
एट्रिब्यूट की वैल्यू सेट करने के लिए, ट्रैट के update
फ़ंक्शन को कॉल करें और उसे अपडेट फ़ंक्शन पास करें, जो नई वैल्यू सेट करता है. सबसे पहले, पुष्टि करें कि ट्रेट के साथ कोई एट्रिब्यूट काम करता है या नहीं.
उदाहरण के लिए:
if doorLockTraitTest.attributes.$wrongCodeEntryLimit.isSupported { let _ = try await doorLockTraitTest.update { $0.setWrongCodeEntryLimit(3) } }