مراقبة حالة الجهاز

في Home APIs، يمكن رصد التغييرات في الحالة في المنزل من خلال استخدام عمليات في Kotlin. يمكن رصد التغييرات في الهياكل والغرف والبيانات الوصفية للأجهزة و حالة الجهاز في واجهات برمجة تطبيقات Home باستخدام أي واجهة برمجة تطبيقات ترث من HomeObjectsFlow واجهة. ويتم ذلك من خلال الجمع من عملية التنقّل. اطّلِع على لمحة عن مسارات المستخدمين لمزيد من المعلومات عن مسارات المستخدمين.

عند إضافة أي عنصر في مجموعة أو حذفه أو تعديله، يتم عرض أحدث لقطة لمجموعة.

على المطوّر استنتاج التغييرات المحدّدة من خلال مقارنة هذه لقطة الشاشة بنسخة قديمة. يمكن استخدام حقل id المقدَّم لكل نوع من أنواع العناصر الرئيسية في Home APIs للقيام بهذا الغرض.

كيفية استخدام مسارات الإحالات الناجحة

لنلقِ نظرة على بعض الأمثلة الأساسية على جمع البيانات من عمليات المعالجة في Home APIs. بالنسبة إلى الأمثلة التالية، يجب إنشاء مثيل من 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" }!!

تتبُّع التغييرات في سمة معيّنة على جهاز

استخدِم أيّ سمة متوافقة مع الجهاز وواجهات برمجة التطبيقات Home API. للاطّلاع على القائمة الكاملة، يُرجى الاطّلاع على Trait.

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

تتبُّع التغييرات التي تطرأ على نوع معيّن على جهاز

تؤدي التغييرات التالية على نوع جهاز إلى تنشيط هذه المجموعة:

استخدام أي نوع من أجهزة Matter المتوافقة مع واجهات برمجة التطبيقات Home APIs للاطّلاع على القائمة الكاملة، يُرجى الاطّلاع على 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 APIs، تُستخدَم الأحداث لرصد التغييرات في حالة أحد الأجهزة.

للاشتراك في الأحداث على جهاز معيّن، اتصل بأحد الخيارات الثلاثة التاليين: 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
  }
}