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

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

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

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

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

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

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

  • Matter устройств, для которых у вашего приложения нет разрешений пользователя.
  • Отдельные устройства, подключенные через мост Matter.
  • Связано устройств: Cloud-to-cloud.
  • Устройства с двумя путями передачи данных, отличные от камер (устройства, которые реализуют как Matter, так и Cloud-to-cloud, кроме поддерживаемых камер и дверных звонков).
  • Неподдерживаемые камеры и дверные звонки, в том числе умные дисплеи со встроенными камерами и устаревшие камеры, которые не поддерживают Matter (см. раздел Камеры и дверные звонки).

Важные примечания перед удалением устройства

Когда ваше приложение удаляет устройство, оно удаляется из всей структуры, что влияет на всех пользователей и все приложения, включая GHA. В зависимости от типа устройства могут возникнуть дополнительные побочные эффекты:

  • Если устройство выполняет несколько функций, например умная лампа также является концентратором, при его удалении будут удалены все связанные с ним устройства. Если проблема затрагивает несколько функций устройства, приложение должно сообщить об этом пользователю.
  • При удалении камеры или дверного звонка безвозвратно удаляются все данные, связанные с этим устройством, в том числе архив непрерывной видеозаписи, архив видеозаписей событий, записанные клипы и данные из библиотеки знакомых лиц.
  • Отключение камеры не отменяет активные подписки, например Google Home Premium или услуги мониторинга партнеров. Подписки продолжаются, пока пользователь не отменит их.
  • При отключении камеры или дверного звонка платформа Home API показывает пользователю управляемый Google экран с подтверждением, на котором объясняется, что архив видеозаписей будет удален без возможности восстановления. Пользователь должен подтвердить это сообщение, прежде чем устройство будет удалено.
  • Будьте осторожны при удалении устройств на общих поверхностях, поскольку это может иметь непредвиденные последствия для других пользователей.
  • Удалять устройства можно только на аутентифицированных платформах, например на мобильном телефоне, но не на неаутентифицированных устройствах, таких как телевизоры. Это нарушает правила для разработчиков продуктов для 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.

Чтобы удалить устройство Matter, вызовите на нем функцию decommissionDevice():

val decommissionedDeviceIds = device.decommissionDevice()

Если при вызове не возникает ошибки, значит он выполнен успешно.

Вы можете проверить, есть ли идентификатор устройства среди тех, которые возвращает метод decommissionDevice():

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

Камеры и дверные звонки

Вы можете программно удалить поддерживаемые камеры и дверные звонки, используя decommissionDevice() .

Поддерживаемые модели:

  • Google Nest Cam (indoor, wired)
  • Google Nest Cam (outdoor or indoor, battery)
  • Google Nest Cam with floodlight
  • Google Nest Doorbell (battery)
  • Google Nest Doorbell (wired)
  • Совместимые камеры и дверные звонки партнеров (например, Walmart onn.)

Следующие устройства Камера и дверной звонок нельзя отключить программно:

  • Умные дисплеи со встроенными камерами, например Google Nest Hub Max.
  • Устаревшие камеры и дверные звонки Nest, которые не поддерживают функцию "Дом вдали"Matter и подключаются только через облачные сервисы, например Nest Cam Indoor (первого поколения), Nest Cam Outdoor (первого поколения), Nest Cam IQ и Nest Doorbell (проводной, первого поколения).
  • Сторонние Cloud-to-cloud камеры и дверные звонки.

Когда ваше приложение инициирует отключение камеры или видеодомофона, платформа показывает пользователю управляемый Google экран подтверждения. На этом экране пользователь получает информацию о том, что при удалении камеры будут безвозвратно удалены все связанные с ней данные, в том числе непрерывная видеозапись, история событий, клипы и данные из библиотеки знакомых лиц.

Если пользователь закроет или отменит экран подтверждения, decommissionDevice() вызовет исключение HomeException.

Отключение камеры не отменяет активные подписки на нее (например, Google Home Premium). Пользователи должны отменять подписки отдельно через поставщика услуг.

kotlin try { val decommissionedDeviceIds = device.decommissionDevice() if (decommissionedDeviceIds.contains(device.id)) { // Camera was successfully decommissioned } } catch (e: HomeException) { // Handle cancellation or decommission error }

Устройства, не поддерживающие Matter

Устройства, не относящиеся к Matter (кроме поддерживаемых камер и дверных звонков), нельзя удалить программным способом. Чтобы удалить другие устройства, не относящиеся к Matter, можно отправить запрос на синхронизацию (см. Запрос на синхронизацию) или удалить интеграцию 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!")
}