בממשקי ה-API של Home, אפשר לעקוב אחרי שינויים במצב בבית באמצעות תהליכים ב-Kotlin. אפשר לעקוב אחרי שינויים במבנים, בחדרים, במטא-נתונים של המכשיר ובמצב המכשיר ב-Home APIs באמצעות כל ממשק API שעובר בירושה מממשק HomeObjectsFlow
. כדי לעשות זאת, צריך לאסוף מהתהליך. מידע נוסף על תהליכים זמין במאמר מידע על תהליכים.
כשמשהו נוסף, נמחק או משתנה באוסף, המערכת מחזירה את קובץ snapshot העדכני ביותר של האוסף.
המפתח צריך להסיק את השינויים הספציפיים על ידי השוואה של קובץ ה-snapshot הזה לעותק ישן יותר. אפשר להשתמש לשם כך בשדה id
שסופק לכל סוג של אובייקט הורה בממשקי Home API.
איך משתמשים בתהליכים
נבחן כמה דוגמאות בסיסיות לאיסוף מנתונים בממשקי ה-API של Home. בדוגמאות הבאות, צריך ליצור מופע של 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 של Home. בקישור הבא תוכלו למצוא רשימה מלאה: Trait
.
device.trait(OnOff).collect {
if (it != null) {
println("Got new state update! ${it.onOff}")
}
}
מעקב אחר שינויים בסוג ספציפי במכשיר
השינויים הבאים בסוגי המכשירים מפעילים את האוסף הזה:
- שינויים בכל מאפיין בסוג המכשיר שנוצר
להשתמש בכל סוג מכשיר Matter שנתמך בממשקי ה-API של Home. ברשימה המלאה מפורטות 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>
:
הפונקציה
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
}
}