Android-এর জন্য Home API-তে, হোমে স্ট্যাটাসে পরিবর্তন লক্ষ্য করা
ফ্লো
ব্যবহারের মাধ্যমে সম্ভব হয়
Kotlin-এ। Home API-তে স্ট্রাকচার, রুম, ডিভাইসের মেটাডেটা এবং ডিভাইসের স্ট্যাটাসে পরিবর্তন লক্ষ্য করা
HomeObjectsFlow
ইন্টারফেস থেকে ইনহেরিট করা যেকোনও API-এর মাধ্যমে করা যেতে পারে। এটি ফ্লো থেকে
সংগ্রহ করার মাধ্যমে করা হয়।
কোনও কালেকশনের কোনও আইটেম যোগ, মুছে ফেলা বা পরিবর্তন করা হলে, কালেকশনের লেটেস্ট স্ন্যাপশট রিটার্ন করা হয়।
এই স্ন্যাপশটটি একটি পুরানো কপির সাথে তুলনা করে নির্দিষ্ট পরিবর্তনগুলি অনুমান করা ডেভেলপারের উপর নির্ভর করে। এই উদ্দেশ্যে id ফিল্ড ব্যবহার করা যেতে পারে যা Home API-তে প্রতিটি পেরেন্ট অবজেক্ট
টাইপের জন্য প্রদান করা হয়।
ফ্লো কীভাবে ব্যবহার করবেন
Home 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()!!
নির্দিষ্ট ডিভাইসে হওয়া পরিবর্তন ট্র্যাক করুন
কোনও ডিভাইসে নিম্নলিখিত পরিবর্তনগুলি এই সংগ্রহকে ট্রিগার করে:
- কানেক্টিভিটি স্ট্যাটাস
- ডিভাইসের নাম
- Room মেম্বারশিপ
- কাজ করে এমন ট্রেটের সেট
- কাজ করে এমন ধরনের সেট
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" }!!
কোনও ডিভাইসের নির্দিষ্ট বৈশিষ্ট্যে হওয়া পরিবর্তন ট্র্যাক করুন
ডিভাইস এবং Home API-এর সাথে কাজ করে এমন যেকোনও বৈশিষ্ট্য ব্যবহার করুন। সম্পূর্ণ তালিকা দেখতে, Trait দেখুন।
val trait = device.type(DimmableLightDevice)?.map { it.trait(OnOff)}.first()
trait?.collect {
if (it != null) {
println("Got new state update! ${it.onOff}")
}
}
কোনও ডিভাইসে নির্দিষ্ট ধরনের পরিবর্তন ট্র্যাক করা
ডিভাইসের ধরনে নিম্নলিখিত পরিবর্তন হলে এই কালেকশন ট্রিগার হয়:
- তৈরি করা ডিভাইসের ধরন-এর মধ্যে যেকোনও বৈশিষ্ট্যে পরিবর্তন করা
Home 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")
}
}
ইভেন্টে সাবস্ক্রাইব করুন
Home API-তে, কোনও ডিভাইসের স্ট্যাটাসে পরিবর্তন শনাক্ত করতে ইভেন্ট ব্যবহার করা হয়।
নির্দিষ্ট ডিভাইসে ইভেন্ট সাবস্ক্রাইব করতে, তিনটি
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
}
}
এনটিটি রিলেশন ইভেন্টে সাবস্ক্রাইব করুন
আপনি এমন ইভেন্ট শুনতে পারেন যা প্রতিবার কোনও এন্টিটি (যেমন,
স্ট্রাকচার, রুম, ডিভাইস বা অটোমেশন) যোগ, সরানো বা আপডেট করার সময় নির্গত হয়। এইসব
ইভেন্ট হল
HomeObjectChangeEvent-এর
ইনস্ট্যান্স এবং এতে পরিবর্তিত এন্টিটির আইডি থাকে।
আপনার পছন্দের ইভেন্ট তৈরি করে এমন স্ট্রিম পেতে, সংশ্লিষ্ট ফ্লো মেথড দ্বারা তৈরি HomeObjectsFlow<T>-এ
stream() মেথড
কল করুন:
| এন্টিটি | ইন্টারফেস | ফ্লো পদ্ধতি |
|---|---|---|
Structure
|
HasStructures
|
structures()
|
Room
|
HasRooms
|
rooms()
|
HomeDevice
|
HasHomeDevices
|
devices()
|
Automation
|
HasAutomations
|
automations()
|
যেমন, ডিভাইসে হওয়া পরিবর্তন আপনি কীভাবে ম্যানেজ করবেন তা এখানে দেওয়া হল:
val devicesStream = home.devices().stream() // Collect and react to device changes. devicesStream.collect { deviceEvent -> when (deviceEvent) { is HomeObjectAddedEvent -> println("New device now available with id: ${deviceEvent.id}") is HomeObjectUpdatedEvent -> println("Device ${deviceEvent.id} has been updated") is HomeObjectRemovedEvent -> println("Device is removed from your account") else -> {} } }