iOS-এ ডিভাইসগুলি নিয়ন্ত্রণ করুন

এই নির্দেশিকাটি 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 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
}

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 স্কিমাতে বাতিলযোগ্য। এই বৈশিষ্ট্যগুলির জন্য, আপনি isNullable ব্যবহার করে isNullable এর সাথে isSupported ব্যবহার করে নির্ধারণ করতে পারেন যে অ্যাট্রিবিউটের দ্বারা প্রত্যাবর্তিত একটি শূন্য ডিভাইসটি সেই মানটি রিপোর্ট না করার কারণে হয়েছে কিনা বা বৈশিষ্ট্যটির মানটি আসলে 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)"
      )
    }
  }
}

বৈশিষ্ট্য বৈশিষ্ট্য আপডেট করুন

আপনি যদি একটি প্রদত্ত অ্যাট্রিবিউটের মান পরিবর্তন করতে চান এবং বৈশিষ্ট্যের কোনো কমান্ড তা করে না, তাহলে অ্যাট্রিবিউটটি তার মান স্পষ্টভাবে সেট করা সমর্থন করতে পারে।

একটি বৈশিষ্ট্যের মান পরিবর্তন করা যাবে কিনা তা নির্ভর করে দুটি বিষয়ের উপর:

  • বৈশিষ্ট্য লিখনযোগ্য?
  • একটি বৈশিষ্ট্য কমান্ড পাঠানোর একটি পার্শ্ব প্রতিক্রিয়া হিসাবে বৈশিষ্ট্যের মান পরিবর্তন হতে পারে?

বৈশিষ্ট্য এবং তাদের বৈশিষ্ট্যগুলির জন্য রেফারেন্স ডকুমেন্টেশন এই তথ্য প্রদান করে।

অতএব, বৈশিষ্ট্যগুলির সংমিশ্রণগুলি নির্দেশ করে যে কীভাবে একটি বৈশিষ্ট্যের মান পরিবর্তন করা যেতে পারে:

  • শুধুমাত্র পঠনযোগ্য এবং অন্যান্য কমান্ড দ্বারা প্রভাবিত হয় না । এর মানে হল যে অ্যাট্রিবিউটের মান পরিবর্তন হয় না। উদাহরণস্বরূপ, 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)
  }
}