একটি বৈশিষ্ট্য একটি কমান্ড সমর্থন করে কিনা পরীক্ষা করুন
একটি বৈশিষ্ট্য কমান্ডের জন্য সমর্থনও পরীক্ষা করা যেতে পারে। এছাড়াও একটি নির্দিষ্ট ডিভাইসের জন্য একটি কমান্ড সমর্থিত কিনা তা পরীক্ষা করতে বৈশিষ্ট্য-স্তর supports
ফাংশন ব্যবহার করুন।
উদাহরণস্বরূপ, অন/অফ বৈশিষ্ট্যের toggle
কমান্ডের একটি ডিভাইসের সমর্থন পরীক্ষা করতে:
// Check if the OnOff trait supports the toggle command. if (onOffTrait.supports(OnOff.Command.Toggle)) { println("onOffTrait supports toggle command") } else { println("onOffTrait does not support stateful toggle command") }
একটি ডিভাইসে একটি কমান্ড পাঠান
একটি কমান্ড পাঠানো একটি বৈশিষ্ট্য থেকে একটি রাষ্ট্র বৈশিষ্ট্য পড়ার অনুরূপ। ডিভাইসটি চালু বা বন্ধ করতে, OnOff
বৈশিষ্ট্যের টগল কমান্ডটি ব্যবহার করুন, যা Google Home ইকোসিস্টেম ডেটা মডেলে toggle()
হিসাবে সংজ্ঞায়িত করা হয়েছে। এই পদ্ধতিটি onOff
true
হলে false
পরিবর্তন করে, অথবা false
হলে true
পরিবর্তন করে:
// Calling a command on a trait. try { onOffTrait.toggle() } catch (e: HomeException) { // Code for handling the exception }
সমস্ত বৈশিষ্ট্য কমান্ডগুলি suspend
ফাংশন এবং শুধুমাত্র তখনই সম্পূর্ণ হয় যখন API দ্বারা একটি প্রতিক্রিয়া ফেরত দেওয়া হয় (যেমন ডিভাইসের অবস্থা পরিবর্তিত হয়েছে নিশ্চিত করা)। এক্সিকিউশন ফ্লোতে কোনো সমস্যা শনাক্ত হলে কমান্ডগুলি একটি ব্যতিক্রম ফেরত দিতে পারে। একজন বিকাশকারী হিসাবে, এই ব্যতিক্রমগুলিকে সঠিকভাবে পরিচালনা করার জন্য আপনার একটি try-catch
ব্লক ব্যবহার করা উচিত এবং যেখানে ত্রুটিগুলি কার্যকর হয় সেগুলির ক্ষেত্রে ব্যবহারকারীদের কাছে বিস্তারিত তথ্য সরবরাহ করা উচিত। পরিচালনা না করা ব্যতিক্রমগুলি অ্যাপ রানটাইম বন্ধ করে দেবে এবং এর ফলে আপনার অ্যাপ ক্র্যাশ হতে পারে।
বিকল্পভাবে, স্পষ্টভাবে স্টেট সেট করতে off()
বা on()
কমান্ডগুলি ব্যবহার করুন:
onOffTrait.off() onOffTrait.on()
রাজ্য পরিবর্তন করার জন্য একটি কমান্ড পাঠানোর পরে, এটি সম্পূর্ণ হয়ে গেলে আপনি আপনার অ্যাপে এটি পরিচালনা করার জন্য একটি ডিভাইসের স্থিতিতে বর্ণিত অবস্থাটি পড়তে পারেন। বিকল্পভাবে, অবজারভ স্টেটে বর্ণিত ফ্লো ব্যবহার করুন, যা পছন্দের পদ্ধতি।
পরামিতি সহ একটি কমান্ড পাঠান
কিছু কমান্ড পরামিতি ব্যবহার করতে পারে, যেমন OnOff
বা LevelControl
বৈশিষ্ট্যে:
অফ উইথ ইফেক্ট
// Turn off the light using the DyingLight effect. onOffTrait.offWithEffect( effectIdentifier = OnOffTrait.EffectIdentifierEnum.DyingLight, effectVariant = 0u, )
moveToLevel
// Change the brightness of the light to 50% levelControlTrait.moveToLevel( level = 127u.toUByte(), transitionTime = null, optionsMask = LevelControlTrait.OptionsBitmap(), optionsOverride = LevelControlTrait.OptionsBitmap(), )
কিছু কমান্ডের ঐচ্ছিক আর্গুমেন্ট থাকে, যা প্রয়োজনীয় আর্গুমেন্টের পরে আসে।
উদাহরণস্বরূপ, FanControl
বৈশিষ্ট্যের জন্য step
কমান্ডের দুটি ঐচ্ছিক আর্গুমেন্ট রয়েছে:
val fanControlTraitFlow: Flow<FanControl?> = device.type(FanDevice).map { it.standardTraits.fanControl }.distinctUntilChanged() val fanControl = fanControlTraitFlow.firstOrNull() // Calling a command with optional parameters not set. fanControl?.step(direction = FanControlTrait.StepDirectionEnum.Increase) // Calling a command with optional parameters. fanControl?.step(direction = FanControlTrait.StepDirectionEnum.Increase) { wrap = true }
একটি বৈশিষ্ট্য একটি বৈশিষ্ট্য সমর্থন করে কিনা পরীক্ষা করুন
কিছু ডিভাইস একটি Matter বৈশিষ্ট্য সমর্থন করতে পারে, কিন্তু একটি নির্দিষ্ট বৈশিষ্ট্য নয়। উদাহরণস্বরূপ, একটি Cloud-to-cloud ডিভাইস যা Matter ম্যাপ করা হয়েছিল তা প্রতিটি Matter অ্যাট্রিবিউটকে সমর্থন নাও করতে পারে। এই ধরনের কেসগুলি পরিচালনা করতে, বৈশিষ্ট্য-স্তরের supports
ফাংশন এবং বৈশিষ্ট্যের Attribute
এনাম ব্যবহার করুন যে বৈশিষ্ট্যটি একটি নির্দিষ্ট ডিভাইসের জন্য সমর্থিত কিনা তা পরীক্ষা করতে।
উদাহরণস্বরূপ, একটি ডিভাইসের অন/অফ বৈশিষ্ট্যের onOff
বৈশিষ্ট্যের সমর্থন পরীক্ষা করতে:
// Check if the OnOff trait supports the onOff attribute. if (onOffTrait.supports(OnOff.Attribute.onOff)) { println("onOffTrait supports onOff state") } else { println("onOffTrait is for a command only device!") }
কিছু বৈশিষ্ট্য Matter স্পেসিফিকেশন বা Cloud-to-cloud smart home স্কিমাতে বাতিলযোগ্য। এই অ্যাট্রিবিউটগুলির জন্য, আপনি নির্ধারণ করতে পারেন যে অ্যাট্রিবিউট দ্বারা প্রত্যাবর্তিত একটি নাল ডিভাইসটি সেই মানটি রিপোর্ট না করার কারণে, অথবা যদি অ্যাট্রিবিউটের মানটি আসলে null
হয় , supports
ছাড়াও isNullable
ব্যবহার করে:
// Check if a nullable attribute is set or is not supported. if (onOffTrait.supports(OnOff.Attribute.startUpOnOff)) { // The device supports startupOnOff, it is safe to expect this value in the trait. if (OnOff.Attribute.startUpOnOff.isNullable && onOffTrait.startUpOnOff == null) { // This value is nullable and set to null. Check the specification as to // what null in this case means println("onOffTrait supports startUpOnOff and it is null") } else { // This value is nullable and set to a value. println("onOffTrait supports startUpOnOff and it is set to ${onOffTrait.startUpOnOff}") } } else { println("onOffTrait does not support startUpOnOff!") }
বৈশিষ্ট্য বৈশিষ্ট্য আপডেট করুন
আপনি যদি একটি প্রদত্ত অ্যাট্রিবিউটের মান পরিবর্তন করতে চান এবং বৈশিষ্ট্যের কোনো কমান্ড তা করে না, তাহলে অ্যাট্রিবিউটটি তার মান স্পষ্টভাবে সেট করা সমর্থন করতে পারে।
একটি বৈশিষ্ট্যের মান পরিবর্তন করা যাবে কিনা তা নির্ভর করে দুটি বিষয়ের উপর:
- বৈশিষ্ট্য লিখনযোগ্য?
- একটি বৈশিষ্ট্য কমান্ড পাঠানোর একটি পার্শ্ব প্রতিক্রিয়া হিসাবে বৈশিষ্ট্যের মান পরিবর্তন হতে পারে?
বৈশিষ্ট্য এবং তাদের বৈশিষ্ট্যগুলির জন্য রেফারেন্স ডকুমেন্টেশন এই তথ্য প্রদান করে।
অতএব, বৈশিষ্ট্যগুলির সংমিশ্রণগুলি নির্দেশ করে যে কীভাবে একটি বৈশিষ্ট্যের মান পরিবর্তন করা যেতে পারে:
শুধুমাত্র পঠনযোগ্য এবং অন্যান্য কমান্ড দ্বারা প্রভাবিত হয় না । এর মানে হল যে অ্যাট্রিবিউটের মান পরিবর্তন হয় না। উদাহরণস্বরূপ,
Switch
বৈশিষ্ট্যেরcurrentPosition
বৈশিষ্ট্য ।শুধুমাত্র পঠনযোগ্য এবং অন্যান্য কমান্ড দ্বারা প্রভাবিত । এর মানে হল যে অ্যাট্রিবিউটের মান পরিবর্তন করার একমাত্র উপায় হল একটি কমান্ড পাঠানোর ফলে। উদাহরণ স্বরূপ,
LevelControl
Matter বৈশিষ্ট্যেরcurrentLevel
অ্যাট্রিবিউটটি শুধুমাত্র পঠনযোগ্য, তবে এর মানটিmoveToLevel
মতো কমান্ড দ্বারা পরিবর্তিত হতে পারে।লেখার যোগ্য এবং অন্যান্য কমান্ড দ্বারা প্রভাবিত হয় না । এর মানে হল যে আপনি বৈশিষ্ট্যের
update
ফাংশন ব্যবহার করে সরাসরি অ্যাট্রিবিউটের মান পরিবর্তন করতে পারেন, কিন্তু এমন কোনো কমান্ড নেই যা অ্যাট্রিবিউটের মানকে প্রভাবিত করবে। উদাহরণস্বরূপ,DoorLock
বৈশিষ্ট্যেরWrongCodeEntryLimit
বৈশিষ্ট্য ।লেখার যোগ্য এবং অন্যান্য কমান্ড দ্বারা প্রভাবিত . এর মানে হল যে আপনি বৈশিষ্ট্যের
update
ফাংশন ব্যবহার করে সরাসরি অ্যাট্রিবিউটের মান পরিবর্তন করতে পারেন এবং কমান্ড পাঠানোর ফলে অ্যাট্রিবিউটের মান পরিবর্তন হতে পারে। উদাহরণ স্বরূপ,Thermostat
বৈশিষ্ট্যেরoccupiedCoolingSetpoint
এট্রিবিউট লেখা হতে পারে কিন্তুsetpointRaiseLower
কমান্ডের সাথে আপডেট করা যেতে পারে।
একটি বৈশিষ্ট্যের মান পরিবর্তন করতে আপডেট ফাংশন ব্যবহার করার উদাহরণ
এই উদাহরণটি দেখায় কিভাবে স্পষ্টভাবে DoorLockTrait.WrongCodeEntryLimit
অ্যাট্রিবিউটের মান সেট করতে হয়।
একটি বৈশিষ্ট্যের মান সেট করতে, বৈশিষ্ট্যের update
ফাংশনটি কল করুন এবং এটিকে একটি মিউটেটর ফাংশন পাস করুন যা নতুন মান সেট করে। বৈশিষ্ট্যটি একটি বৈশিষ্ট্যকে সমর্থন করে কিনা তা প্রথমে যাচাই করা একটি ভাল অভ্যাস।
যেমন:
var doorLockDevice = home.devices().list().first { device -> device.has(DoorLock) } val traitFlow: Flow<DoorLock?> = doorLockDevice.type(DoorLockDevice).map { it.standardTraits.doorLock }.distinctUntilChanged() val doorLockTrait: DoorLock = traitFlow.first()!! if (doorLockTrait.supports(DoorLock.Attribute.wrongCodeEntryLimit)) { val unused = doorLockTrait.update { setWrongCodeEntryLimit(3u) } }