Удаление устройства подразумевает его вывод из эксплуатации. Пользователь может сделать это через 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
, указывающую на то, что устройство не может быть списано, поскольку оно имеет несколько источников.
Чтобы удалить устройство с несколькими источниками, выполните следующую процедуру:
- Удалите связь Cloud-to-cloud , как описано в разделе «Устройства Non-Matter» .
- Выведите из эксплуатации устройство Matter , как описано в разделе Устройства Matter .
Порядок этих шагов важен. При попытке вывести устройство Matter из эксплуатации до удаления связи Cloud-to-cloud возникнет исключение HomeException
.