হোম এপিআই-এ, কোটলিনে ফ্লো ব্যবহারের মাধ্যমে বাড়িতে রাজ্যের পরিবর্তনগুলি পর্যবেক্ষণ করা সম্ভব হয়৷ HomeObjectsFlow
ইন্টারফেস থেকে উত্তরাধিকারসূত্রে পাওয়া যেকোনো API দিয়ে হোম API-এ কাঠামো, রুম, ডিভাইস মেটাডেটা এবং ডিভাইসের অবস্থার পরিবর্তন পর্যবেক্ষণ করা যেতে পারে। এটি প্রবাহ থেকে সংগ্রহ করে করা হয়। প্রবাহ সম্পর্কে আরও তথ্যের জন্য প্রবাহ প্রবর্তন দেখুন।
যখন একটি সংগ্রহের কোনো আইটেম যোগ করা হয়, মুছে ফেলা হয়, বা সংশোধন করা হয়, সংগ্রহের সর্বশেষ স্ন্যাপশট ফেরত দেওয়া হয়।
এই স্ন্যাপশটটিকে একটি পুরানো কপির সাথে তুলনা করে নির্দিষ্ট পরিবর্তনগুলি অনুমান করা বিকাশকারীর উপর নির্ভর করে৷ হোম এপিআই-এ প্রতিটি প্যারেন্ট অবজেক্টের জন্য প্রদত্ত id
ক্ষেত্রটি এই উদ্দেশ্যে ব্যবহার করা যেতে পারে।
কিভাবে প্রবাহ ব্যবহার
আসুন হোম API-এ ফ্লো থেকে সংগ্রহ করার কিছু মৌলিক উদাহরণ দেখি। নিম্নলিখিত উদাহরণগুলির জন্য, বাড়িতে সংগ্রহগুলি অ্যাক্সেস করার আগে Home
একটি উদাহরণ তৈরি করতে হবে:
val context = LocalContext.current
val homeManager = Home.getClient(context)
একটি কাঠামোর পরিবর্তনগুলি ট্র্যাক করুন
একটি কাঠামোতে নিম্নলিখিত পরিবর্তনগুলি এই সংগ্রহকে ট্রিগার করে:
- কাঠামোর নাম
homeManager.structures().map { it.firstOrNull() }.collect {
println("Structure ${it.id} updated to ${it}")
}
val structure = homeManager.structures().list().firstOrNull()!!
একটি নির্দিষ্ট ডিভাইসে পরিবর্তনগুলি ট্র্যাক করুন
একটি ডিভাইসে নিম্নলিখিত পরিবর্তনগুলি এই সংগ্রহটিকে ট্রিগার করে:
- সংযোগের অবস্থা
- ডিভাইসের নাম
- রুম সদস্যপদ
- সমর্থিত বৈশিষ্ট্যের সেট
- সমর্থিত প্রকারের সেট
structure
.devices()
.map { devices -> device.filter { it.name == "Bedroom Lamp" }.single() }
.collect {
println("The bedroom lamp has changed!")
}
val device = structure.devices().list().firstOrNull { it.name == "Bedroom Lamp" }!!
একটি ডিভাইসে একটি নির্দিষ্ট বৈশিষ্ট্যের পরিবর্তনগুলি ট্র্যাক করুন৷
ডিভাইস এবং হোম এপিআই দ্বারা সমর্থিত যেকোনো বৈশিষ্ট্য ব্যবহার করুন। একটি সম্পূর্ণ তালিকার জন্য, Trait
দেখুন।
device.trait(OnOff).collect {
if (it != null) {
println("Got new state update! ${it.onOff}")
}
}
একটি ডিভাইসে একটি নির্দিষ্ট ধরনের পরিবর্তন ট্র্যাক করুন
একটি ডিভাইসের প্রকারে নিম্নলিখিত পরিবর্তনগুলি এই সংগ্রহটিকে ট্রিগার করে:
- জেনারেট করা ডিভাইসের প্রকারের মধ্যে যেকোনো বৈশিষ্ট্যের পরিবর্তন
হোম API দ্বারা সমর্থিত যেকোনও Matter ডিভাইস টাইপ ব্যবহার করুন। একটি সম্পূর্ণ তালিকার জন্য, DeviceType
দেখুন।
device.type(DimmableLightDevice).collect { type ->
println("Got new state update! ${type.trait(LevelControl)?.currentLevel}")
}
একটি কাঠামোর একটি রুমে পরিবর্তনগুলি ট্র্যাক করুন
একটি ঘরে নিম্নলিখিত পরিবর্তনগুলি এই সংগ্রহটিকে ট্রিগার করে:
রুম থেকে কখন ডিভাইস যোগ করা বা সরানো হয় তা ট্র্যাক করতে, devices()
ফ্লো ব্যবহার করুন।
structure.rooms().collect {
println("Got a new updated set of rooms!")
for (room in it) {
println("Got room $room")
}
}
ইভেন্ট সদস্যতা
হোম এপিআই-এ, ডিভাইসের অবস্থার পরিবর্তন শনাক্ত করতে ইভেন্ট ব্যবহার করা হয়।
একটি নির্দিষ্ট ডিভাইসে ইভেন্টে সদস্যতা নিতে, তিনটি HomeDevice
এর একটিতে কল করুন। events
ফাংশন, যার প্রতিটি একটি Flow<Event>
:
events(event: EventFactory<T>)
একটি নির্দিষ্ট ধরণের ইভেন্টের জন্য একটি প্রবাহ ফেরত দেয়:val eventFlow = homeDevice.type(DoorLockDevice).first().events(DoorLock.DoorLockAlarmEvent)
events(trait: TraitFactory<T>)
একটি বৈশিষ্ট্য দ্বারা প্রেরিত সমস্ত ইভেন্টের একটি প্রবাহ ফেরত দেয়:val eventflow = homeDevice.type(DoorLockDevice).first().events(DoorLock)
events()
বস্তুর জন্য উপলব্ধ ইভেন্টের একটি প্রবাহ ফেরত দেয়:val eventflow = homeDevice.type(DoorLockDevice).first().events()
একটি ফ্লো থেকে ইভেন্টগুলি গ্রাস করতে, flow.collect()
ফাংশনটি ব্যবহার করুন:
eventflow.collect { event ->
if (event != null) {
logger.atInfo().log("Received event %s", event)
// do something
}
}