অ্যান্ড্রয়েডে ডিভাইসের অবস্থা মনিটর করুন

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

যখন কোনও সংগ্রহের কোনও আইটেম যোগ করা, মুছে ফেলা বা পরিবর্তন করা হয়, তখন সংগ্রহের সর্বশেষ স্ন্যাপশটটি ফেরত পাঠানো হয়।

এই স্ন্যাপশটটি একটি পুরনো কপির সাথে তুলনা করে নির্দিষ্ট পরিবর্তনগুলি অনুমান করা ডেভেলপারের উপর নির্ভর করে। হোম এপিআই-তে প্রতিটি প্যারেন্ট অবজেক্ট টাইপের জন্য প্রদত্ত id ক্ষেত্রটি এই উদ্দেশ্যে ব্যবহার করা যেতে পারে।

প্রবাহ কীভাবে ব্যবহার করবেন

হোম এপিআই-তে ফ্লো থেকে সংগ্রহের কিছু মৌলিক উদাহরণ নিচে দেওয়া হল। নিম্নলিখিত উদাহরণগুলির জন্য, হোমে সংগ্রহ অ্যাক্সেস করার আগে 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" }!!

একটি ডিভাইসে একটি নির্দিষ্ট বৈশিষ্ট্যের পরিবর্তনগুলি ট্র্যাক করুন

ডিভাইস এবং হোম API দ্বারা সমর্থিত যেকোনো বৈশিষ্ট্য ব্যবহার করুন। সম্পূর্ণ তালিকার জন্য, Trait দেখুন।

    val trait = device.type(DimmableLightDevice)?.map { it.trait(OnOff)}.first()

    trait?.collect {
      if (it != null) {
        println("Got new state update! ${it.onOff}")
      }
    }

একটি ডিভাইসে একটি নির্দিষ্ট ধরণের পরিবর্তনগুলি ট্র্যাক করুন

ডিভাইসের ধরণের নিম্নলিখিত পরিবর্তনগুলি এই সংগ্রহটিকে ট্রিগার করে:

হোম এপিআই দ্বারা সমর্থিত যেকোনো Matter ডিভাইস টাইপ ব্যবহার করুন। সম্পূর্ণ তালিকার জন্য, DeviceType দেখুন।

device.type(DimmableLightDevice).collect { type ->
    println("Got new state update! ${type.trait(LevelControl)?.currentLevel}")
}

কোনও কাঠামোর ঘরে পরিবর্তনগুলি ট্র্যাক করুন

একটি ঘরে নিম্নলিখিত পরিবর্তনগুলি এই সংগ্রহটিকে ট্রিগার করে:

কোনও রুম থেকে ডিভাইসগুলি কখন যোগ করা বা সরানো হচ্ছে তা ট্র্যাক করতে, devices() flow ব্যবহার করুন।

structure.rooms().collect {
  println("Got a new updated set of rooms!")

  for (room in it) {
    println("Got room $room")
  }
}

ইভেন্টগুলিতে সাবস্ক্রাইব করুন

হোম এপিআই-তে, ইভেন্টগুলি ডিভাইসের অবস্থার পরিবর্তন সনাক্ত করতে ব্যবহৃত হয়।

একটি নির্দিষ্ট ডিভাইসে ইভেন্ট সাবস্ক্রাইব করতে, তিনটি HomeDevice . events ফাংশনের একটিতে কল করুন, যার প্রতিটি একটি Flow<Event> প্রদান করে:

  1. events(event: EventFactory<T>) একটি নির্দিষ্ট ধরণের ইভেন্টের জন্য একটি প্রবাহ প্রদান করে:

    val eventFlow = homeDevice.type(DoorLockDevice).first().events(DoorLock.DoorLockAlarmEvent)
    
  2. events(trait: TraitFactory<T>) একটি বৈশিষ্ট্য দ্বারা প্রেরিত সমস্ত ইভেন্টের একটি প্রবাহ প্রদান করে:

    val eventflow = homeDevice.type(DoorLockDevice).first().events(DoorLock)
    
  3. 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 এর উদাহরণ এবং পরিবর্তিত সত্তার ID বহন করে।

আপনার পছন্দের ইভেন্ট তৈরি করে এমন একটি স্ট্রিম অর্জন করতে, HomeObjectsFlow<T> এ সংশ্লিষ্ট Flow পদ্ধতি দ্বারা তৈরি 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 -> {}
  }
}