Удалить устройство

Удаление устройства подразумевает его вывод из эксплуатации. Пользователь может сделать это через Google Home app (GHA) , а приложение может программно вывести из эксплуатации устройство умного дома. Существуют ограничения на количество устройств, которые можно удалить. Кроме того, удаление устройства может повлиять на структуру и пользовательский опыт использования приложения.

Что можно удалить

Через Home API можно программно удалить следующие устройства:

  • Устройства Matter для которых у вашего приложения есть разрешения.
  • Мосты Matter , при условии, что ваше приложение имеет доступ ко всем устройствам, подключенным через мост. Удаление моста приведет к удалению всех подключенных к нему устройств Matter .

Что нельзя удалить

Следующие устройства невозможно удалить программно через Home API:

  • Устройства 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 , как описано в разделе «Устройства Non-Matter» .
  2. Выведите из эксплуатации устройство Matter , как описано в разделе Устройства Matter .

Порядок этих шагов важен. При попытке вывести устройство Matter из эксплуатации до удаления связи Cloud-to-cloud возникнет исключение HomeException .