এই নির্দেশিকাটি iOS-এ অ্যাক্সেস ডিভাইস এবং ডিভাইস মেটাডেটা থেকে অব্যাহত রয়েছে এবং ডিভাইস নিয়ন্ত্রণ এবং অ্যাক্সেসের অতিরিক্ত উদাহরণ উপস্থাপন করে।
 নির্দিষ্ট ডিভাইসের ধরণ বা বৈশিষ্ট্য ব্যবহার করতে, যেমন এখানে অনেক উদাহরণে ব্যবহৃত Matter OnOffTrait , সেগুলি আমদানি করতে হবে:
import GoogleHomeSDK
import GoogleHomeTypes
কোন বৈশিষ্ট্য কোন কমান্ড সমর্থন করে কিনা তা পরীক্ষা করুন
 কোনও নির্দিষ্ট ডিভাইসের জন্য কোনও কমান্ড সমর্থিত কিনা তা পরীক্ষা করতে trait-level supports ফাংশন ব্যবহার করুন।
 উদাহরণস্বরূপ, একটি ডিভাইসের On/Off বৈশিষ্ট্যের 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") }
একটি ডিভাইসে একটি কমান্ড পাঠান
 কমান্ড পাঠানো একটি trait থেকে একটি state attribute পড়ার অনুরূপ। ডিভাইসটি চালু বা বন্ধ করতে, OnOffTrait Toggle কমান্ডটি ব্যবহার করুন, যা Google Home ইকোসিস্টেম ডেটা মডেলে toggle() হিসাবে সংজ্ঞায়িত করা হয়েছে। এই পদ্ধতিটি onOff true হলে false এ পরিবর্তন করে, অথবা false হলে true এ পরিবর্তন করে:
// 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 : 
অফউইথইফেক্ট
// 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 }
মুভটুলেভেল
// 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 বৈশিষ্ট্য সমর্থন করতে পারে, কিন্তু নির্দিষ্ট বৈশিষ্ট্য নয়। উদাহরণস্বরূপ, Matter সাথে ম্যাপ করা একটি Cloud-to-cloud ডিভাইস প্রতিটি Matter বৈশিষ্ট্য সমর্থন নাও করতে পারে। এই ধরণের ক্ষেত্রে, trait-level isSupported বৈশিষ্ট্যটি ব্যবহার করে পরীক্ষা করুন যে অ্যাট্রিবিউটটি কোনও নির্দিষ্ট ডিভাইসের জন্য সমর্থিত কিনা।
 উদাহরণস্বরূপ, একটি ডিভাইসের On/Off বৈশিষ্ট্যের 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 স্কিমায় কিছু অ্যাট্রিবিউট বাতিলযোগ্য। এই অ্যাট্রিবিউটের জন্য, আপনি isNullable এবং isSupported ব্যবহার করে নির্ধারণ করতে পারেন যে অ্যাট্রিবিউট দ্বারা ফেরত আসা nil ডিভাইসটি সেই মানটি রিপোর্ট না করার কারণে, অথবা অ্যাট্রিবিউটের মান আসলে nil কিনা।
// 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)" ) } } }
বৈশিষ্ট্য বৈশিষ্ট্য আপডেট করুন
যদি আপনি কোন প্রদত্ত বৈশিষ্ট্যের মান পরিবর্তন করতে চান, এবং বৈশিষ্ট্যের কোন কমান্ড তা না করে, তাহলে বৈশিষ্ট্যটি তার মান স্পষ্টভাবে সেট করা সমর্থন করতে পারে।
কোনও বৈশিষ্ট্যের মান পরিবর্তন করা যাবে কিনা তা দুটি বিষয়ের উপর নির্ভর করে:
- বৈশিষ্ট্যটি কি লেখা যায়?
- একটি trait কমান্ড পাঠানোর পার্শ্ব প্রতিক্রিয়া হিসেবে কি অ্যাট্রিবিউটের মান পরিবর্তন হতে পারে?
বৈশিষ্ট্য এবং তাদের বৈশিষ্ট্যের জন্য রেফারেন্স ডকুমেন্টেশন এই তথ্য প্রদান করে।
অতএব, বৈশিষ্ট্যের সমন্বয় যা একটি বৈশিষ্ট্যের মান কীভাবে পরিবর্তন করা যেতে পারে তা নির্দেশ করে:
- শুধুমাত্র পঠনযোগ্য এবং অন্যান্য কমান্ড দ্বারা প্রভাবিত হয় না । এর অর্থ হল অ্যাট্রিবিউটের মান পরিবর্তন হয় না। উদাহরণস্বরূপ, - SwitchTraitএর- currentPositionঅ্যাট্রিবিউট ।
- শুধুমাত্র পঠনযোগ্য এবং অন্যান্য কমান্ড দ্বারা প্রভাবিত । এর অর্থ হল, কেবলমাত্র কমান্ড পাঠানোর ফলেই অ্যাট্রিবিউটের মান পরিবর্তন হতে পারে। উদাহরণস্বরূপ, - LevelControlTraitএর- currentLevelঅ্যাট্রিবিউটটি শুধুমাত্র পঠনযোগ্য, তবে এর মান- moveToLevelএর মতো কমান্ড দ্বারা পরিবর্তন করা যেতে পারে।
- লেখা যায় এবং অন্যান্য কমান্ড দ্বারা প্রভাবিত হয় না । এর মানে হল আপনি trait এর - updateফাংশন ব্যবহার করে সরাসরি attribute এর মান পরিবর্তন করতে পারেন, কিন্তু এমন কোন কমান্ড নেই যা attribute এর মানকে প্রভাবিত করবে। উদাহরণস্বরূপ,- DoorLockTraitএর- WrongCodeEntryLimitattribute ।
- লেখা যায় এবং অন্যান্য কমান্ড দ্বারা প্রভাবিত হয় । এর মানে হল আপনি trait এর - updateফাংশন ব্যবহার করে সরাসরি attribute এর মান পরিবর্তন করতে পারেন, এবং attribute এর মান একটি কমান্ড পাঠানোর ফলে পরিবর্তিত হতে পারে। উদাহরণস্বরূপ,- ThermostatTraitএর- occupiedCoolingSetpointattribute লেখা যেতে পারে এবং- setpointRaiseLowerকমান্ডের সাহায্যে আপডেটও করা যেতে পারে।
একটি বৈশিষ্ট্যের মান পরিবর্তন করতে আপডেট ফাংশন ব্যবহারের উদাহরণ
 এই উদাহরণে DoorLockTrait.wrongCodeEntryLimit অ্যাট্রিবিউটের মান কীভাবে স্পষ্টভাবে সেট করতে হয় তা দেখানো হয়েছে।
 একটি অ্যাট্রিবিউট মান সেট করতে, trait এর update ফাংশনটি কল করুন এবং এটিকে একটি update ফাংশন পাস করুন যা নতুন মান সেট করে। প্রথমে যাচাই করা একটি ভালো অভ্যাস যে trait একটি অ্যাট্রিবিউট সমর্থন করে ।
উদাহরণস্বরূপ:
if doorLockTraitTest.attributes.$wrongCodeEntryLimit.isSupported { let _ = try await doorLockTraitTest.update { $0.setWrongCodeEntryLimit(3) } }