Usuwanie urządzenia

Usunięcie urządzenia wiąże się z jego wycofaniem ze struktury. Użytkownik może to zrobić za pomocą Google Home app (GHA), a aplikacja może programowo wycofać inteligentne urządzenie domowe. Istnieją ograniczenia dotyczące tego, które urządzenia można usunąć. Usunięcie urządzenia może też wpłynąć na strukturę i wrażenia użytkowników związane z Twoją aplikacją.

Co możesz usunąć

Za pomocą interfejsów Home API możesz programowo usunąć te urządzenia:

  • Matter urządzenia, do których Twoja aplikacja ma uprawnienia.
  • Matter mostki, pod warunkiem że Twoja aplikacja ma dostęp do wszystkich urządzeń połączonych przez mostek. Usunięcie mostka powoduje usunięcie wszystkich Matter połączonych z nim urządzeń.

Czego nie możesz usunąć

Za pomocą interfejsów Home API nie można programowo usunąć tych urządzeń:

  • Matter urządzenia, do których Twoja aplikacja nie ma uprawnień użytkownika.
  • Pojedyncze urządzenia połączone za mostkiem Matter.
  • Cloud-to-cloud połączone urządzenia.
  • Urządzenia z podwójną ścieżką (urządzenia, które implementują zarówno Matter jak i Cloud-to-cloud).

Ważne kwestie przed usunięciem urządzenia

Gdy Twoja aplikacja usunie urządzenie, zostanie ono usunięte z całej struktury, co wpłynie na wszystkich użytkowników i wszystkie aplikacje, w tym na GHA. W zależności od typu urządzenia wycofanie go z eksploatacji może mieć dodatkowe skutki uboczne:

  • Urządzenia implementujące wiele typów urządzeń: jeśli urządzenie ma wiele funkcji, np. inteligentne oświetlenie, które działa też jako hub, usunięcie go spowoduje też usunięcie wszystkich powiązanych urządzeń. Aplikacja powinna informować użytkownika, jeśli usunięcie urządzenia wpłynie na wiele jego funkcji.
  • Historia urządzenia: usunięcie urządzenia może spowodować usunięcie jego historii.
  • Powierzchnie udostępnione: zachowaj ostrożność podczas usuwania urządzeń na powierzchniach udostępnionych, ponieważ może to mieć niepożądane konsekwencje dla innych użytkowników.
  • Uwierzytelnianie: usuwanie urządzenia powinno być wykonywane tylko na uwierzytelnionych powierzchniach, takich jak telefon komórkowy, a nie na nieautoryzowanych urządzeniach, np. telewizorach. Takie działanie narusza zasady dla deweloperów Google Home.

Usuwanie urządzenia

Sprawdzanie, czy urządzenie można usunąć, jest kosztowne i powinno być wykonywane tylko w razie potrzeby. Aby sprawdzić, czy urządzenie można usunąć, użyj tego polecenia:

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.")
}

Urządzenia Matter

Urządzenie Matter możesz usunąć programowo, jeśli urządzenie nie jest połączone za mostkiem Matter.

Aby usunąć urządzenie Matter, wywołaj decommissionDevice() na nim:

val decommissionedDeviceIds = device.decommissionDevice()

Jeśli wywołanie nie spowoduje błędu, oznacza to, że się powiodło.

Możesz sprawdzić, czy identyfikator urządzenia znajduje się wśród identyfikatorów zwróconych przez funkcję decommissionDevice():

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

Urządzenia inne niż Matter

Urządzeń innych niż Matter nie można usunąć programowo. Aby usunąć urządzenie inne niż Matter , możesz wysłać prośbę o synchronizację (patrz Prośba o synchronizację) lub usunąć integrację Cloud-to-cloud (patrz Usuwanie wdrożonej integracji chmura-chmura).

Jeśli wywołasz funkcję decommissionDevice() na urządzeniu innym niż Matter zostanie zgłoszony wyjątek HomeException.

Po usunięciu urządzenia innego niż Matter sprawdź, czy urządzenie jest obecne , aby potwierdzić, że zostało usunięte:

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