یک دستگاه را بردارید

حذف یک دستگاه شامل از رده خارج کردن آن از ساختار است. کاربر می‌تواند این کار را با استفاده از Google Home app (GHA) انجام دهد و یک برنامه می‌تواند به صورت برنامه‌نویسی شده یک دستگاه خانه هوشمند را از رده خارج کند. محدودیت‌هایی در مورد اینکه کدام دستگاه‌ها می‌توانند حذف شوند وجود دارد. همچنین، حذف یک دستگاه می‌تواند بر ساختار و تجربه کاربری برنامه شما تأثیر بگذارد.

آنچه می‌توانید حذف کنید

شما می‌توانید دستگاه‌های زیر را از طریق APIهای Home و با استفاده از برنامه‌نویسی حذف کنید:

  • Matter دستگاه‌هایی است که برنامه شما به آنها مجوز می‌دهد.
  • پل‌های Matter ، مشروط بر اینکه برنامه شما به تمام دستگاه‌های متصل از طریق پل دسترسی داشته باشد. حذف پل، تمام دستگاه‌های Matter متصل به آن را حذف می‌کند.

آنچه را که نمی‌توانید حذف کنید

دستگاه‌های زیر را نمی‌توان از طریق APIهای Home به صورت برنامه‌نویسی شده حذف کرد:

  • دستگاه‌هایی که برنامه شما برای آنها مجوز کاربر ندارد، Matter .
  • دستگاه‌های مجزایی که از پشت یک پل Matter به هم متصل شده‌اند.
  • دستگاه‌های متصل Cloud-to-cloud .
  • دستگاه‌های دو مسیره (دستگاه‌هایی که هم Matter و هم Cloud-to-cloud را پیاده‌سازی می‌کنند).

نکات مهم قبل از حذف دستگاه

وقتی برنامه شما دستگاهی را حذف می‌کند، آن دستگاه از کل ساختار حذف می‌شود و بر همه کاربران و همه برنامه‌ها، از جمله GHA ، تأثیر می‌گذارد. بسته به نوع دستگاه، ممکن است عوارض جانبی دیگری نیز در از رده خارج کردن دستگاه وجود داشته باشد:

  • دستگاه‌هایی که چندین نوع دستگاه را پیاده‌سازی می‌کنند: اگر دستگاهی چندین عملکرد داشته باشد - برای مثال، یک چراغ هوشمند که به عنوان هاب نیز عمل می‌کند، حذف آن، تمام دستگاه‌های مرتبط را نیز حذف می‌کند. برنامه باید در صورت تحت تأثیر قرار گرفتن چندین عملکرد دستگاه، به کاربر اطلاع دهد.
  • تاریخچه دستگاه: حذف یک دستگاه ممکن است منجر به حذف تاریخچه دستگاه شود.
  • سطوح مشترک: هنگام برداشتن وسایل از روی سطوح مشترک احتیاط کنید، زیرا این کار می‌تواند عواقب ناخواسته‌ای برای دیگران داشته باشد.
  • احراز هویت: جداسازی دستگاه فقط باید روی سطوح دارای مجوز، مانند تلفن همراه، انجام شود، نه روی دستگاه‌های غیرمجاز مانند تلویزیون. انجام این کار نقض سیاست‌های توسعه‌دهندگان Google Home است.

حذف یک دستگاه

بررسی واجد شرایط بودن یک دستگاه برای حذف شدن پرهزینه است و فقط باید در صورت لزوم انجام شود. برای بررسی اینکه آیا یک دستگاه واجد شرایط حذف شدن است، از دستور زیر استفاده کنید:

val eligibility = device.checkDecommissionEligibility()

if (eligibility is DecommissionEligibility.Ineligible) {
  println("The device cannot be decommissioned.")
} else if (eligibility is DecommissionEligibility.EligibleWithSideEffects) {
  println("The device can be decommissioned but there will be side effects on other devices.")
} else if (eligibility is DecommissionEligibility.Eligible) {
  println("The device can be decommissioned.")
}

دستگاه‌های ماده

اگر دستگاه Matter پشت پل Matter نباشد، می‌توانید آن را به صورت برنامه‌نویسی حذف کنید.

برای حذف یک دستگاه Matter ، decommissionDevice() روی آن فراخوانی کنید:

val decommissionedDeviceIds = device.decommissionDevice()

اگر فراخوانی خطایی ایجاد نکند، یعنی با موفقیت انجام شده است.

می‌توانید بررسی کنید که آیا شناسه دستگاه در میان شناسه‌های برگردانده شده توسط decommissionDevice() وجود دارد یا خیر:

if (decommissionedDeviceIds.contains(deviceId)) {
  println("Decommission successful!")
} else {
  println("Decommission failed!")
}

دستگاه‌های غیرمادی

دستگاه‌های غیر Matter را نمی‌توان به صورت برنامه‌نویسی حذف کرد. برای حذف یک دستگاه غیر Matter ، می‌توانید یک درخواست همگام‌سازی (به بخش درخواست همگام‌سازی مراجعه کنید) ارسال کنید، یا یکپارچه‌سازی Cloud-to-cloud را حذف کنید (به بخش حذف یکپارچه‌سازی Cloud-to-cloud راه‌اندازی شده مراجعه کنید).

اگر decommissionDevice() روی یک دستگاه غیر Matter فراخوانی کنید، خطای HomeException رخ می‌دهد.

پس از حذف یک دستگاه Matter ، وجود دستگاه را بررسی کنید تا از حذف موفقیت‌آمیز آن اطمینان حاصل کنید:

var removedDevice: HomeDevice? = null
runBlockingCustom {
  try {
    removedDevice = homeManager.devices().get(deviceId)
  } catch (exception: Exception) {
    println("removal successful!")
  }
}
if (removedDevice != null) {
  println("removal failed!")
}

دستگاه‌های چند منبعی

دستگاه‌های چندمنبعی ، دستگاه‌هایی هستند که از هر دو API Cloud-to-cloud و Matter استفاده می‌کنند. اگر واجد شرایط بودن برای از رده خارج کردن چنین دستگاهی را بررسی کنید، با خطای DecommissionIneligibleReason.multiSourceDevice مواجه خواهید شد که نشان می‌دهد چون دستگاه چندمنبعی است، نمی‌توان آن را از رده خارج کرد.

برای حذف یک دستگاه چند منبعی، از روش زیر استفاده کنید:

  1. ارتباط Cloud-to-cloud همانطور که در دستگاه‌های غیرمادی توضیح داده شده است، حذف کنید.
  2. دستگاه Matter را همانطور که در بخش دستگاه‌های Matter توضیح داده شده است، از کار بیندازید.

ترتیب این مراحل مهم است. اگر قبل از حذف ارتباط Cloud-to-cloud ، سعی کنید دستگاه Matter را از کار بیندازید، خطای HomeException رخ می‌دهد.