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

এই নির্দেশিকাটি "iOS-এ ডিভাইস এবং ডিভাইসের মেটাডেটা অ্যাক্সেস" থেকে অগ্রসর হয়ে ডিভাইস নিয়ন্ত্রণ এবং অ্যাক্সেসের আরও কিছু উদাহরণ তুলে ধরেছে।

নির্দিষ্ট ডিভাইস টাইপ বা ট্রেইট ব্যবহার করতে হলে, যেমন এখানকার অনেক উদাহরণে ব্যবহৃত Matter OnOffTrait , সেগুলোকে অবশ্যই ইম্পোর্ট করতে হবে:

import GoogleHomeSDK
import GoogleHomeTypes

কোনো ট্রেইট কমান্ড সমর্থন করে কিনা তা পরীক্ষা করুন

কোনো নির্দিষ্ট ডিভাইসের জন্য কোনো কমান্ড সমর্থিত কিনা তা পরীক্ষা করতে ট্রেইট-লেভেল 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")
}

একটি ডিভাইসে কমান্ড পাঠান

একটি কমান্ড পাঠানো একটি ট্রেইট থেকে স্টেট অ্যাট্রিবিউট পড়ার মতোই। ডিভাইসটি চালু বা বন্ধ করতে, OnOffTrait টগল কমান্ডটি ব্যবহার করুন, যা গুগল হোম ইকোসিস্টেম ডেটা মডেলে toggle() হিসেবে সংজ্ঞায়িত করা আছে। এই মেথডটি onOff true হলে false এ, অথবা false হলে true তে পরিবর্তন করে।

// Calling a command on a trait.
do {
  try await onOffTraitTest.toggle()
} catch let _ as HomeError {
  // Code for handling the exception
}

কমান্ডের কার্যপ্রবাহে কোনো সমস্যা ধরা পড়লে তা একটি এক্সেপশন রিটার্ন করতে পারে। একজন ডেভেলপার হিসেবে, এই এক্সেপশনগুলো সঠিকভাবে হ্যান্ডেল করার জন্য আপনার একটি do-catch ব্লক ব্যবহার করা উচিত এবং যেসব ক্ষেত্রে ত্রুটিগুলো সমাধানযোগ্য, সেসব ক্ষেত্রে ব্যবহারকারীদের কাছে বিস্তারিত তথ্য তুলে ধরা উচিত। আনহ্যান্ডেলড এক্সেপশন অ্যাপের রানটাইম বন্ধ করে দেবে এবং এর ফলে আপনার অ্যাপ ক্র্যাশ করতে পারে।

বিকল্পভাবে, অবস্থাটি স্পষ্টভাবে সেট করতে off() বা on() কমান্ড ব্যবহার করুন:

do {
  try await onOffTraitTest.off()
  try await onOffTraitTest.on()
} catch let _ 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 _ 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 _ as HomeError {
  // Code for handling the exception
}

কোনো ট্রেইট কোনো অ্যাট্রিবিউটকে সাপোর্ট করে কিনা তা পরীক্ষা করুন

কিছু ডিভাইস একটি Matter ট্রেইট সমর্থন করলেও, একটি নির্দিষ্ট অ্যাট্রিবিউট সমর্থন নাও করতে পারে। উদাহরণস্বরূপ, Matter -এ ম্যাপ করা একটি Cloud-to-cloud ডিভাইস সব Matter অ্যাট্রিবিউট সমর্থন নাও করতে পারে। এই ধরনের পরিস্থিতি সামাল দিতে, কোনো নির্দিষ্ট ডিভাইসের জন্য অ্যাট্রিবিউটটি সমর্থিত কিনা তা পরীক্ষা করার জন্য ট্রেইট-লেভেলের 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 স্কিমাতে কিছু অ্যাট্রিবিউট নাল (nullable) হতে পারে। এই অ্যাট্রিবিউটগুলোর ক্ষেত্রে, isSupported-এর পাশাপাশি isNullable ব্যবহার করে আপনি নির্ধারণ করতে পারেন যে, অ্যাট্রিবিউটটি থেকে ফেরত আসা ' nil' মানটি ডিভাইসের সেই মানটি রিপোর্ট না করার কারণে এসেছে, নাকি 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 \(String(describing: 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)
  }
}