Rimuovere un dispositivo

La rimozione di un dispositivo comporta la sua disattivazione dalla struttura. Un utente può eseguire questa operazione utilizzando Google Home app (GHA) e un'app può ritirare in modo programmatico un dispositivo per la smart home. Esistono limitazioni in merito ai dispositivi che possono essere rimossi. Inoltre, la rimozione di un dispositivo può influire sulla struttura e sull'esperienza utente della tua app.

Cosa puoi rimuovere

Puoi rimuovere i seguenti dispositivi a livello di programmazione tramite le API Home:

  • Matter dispositivi per i quali la tua app dispone delle autorizzazioni.
  • Matter, a condizione che la tua app abbia accesso a tutti i dispositivi connessi tramite il bridge. Se rimuovi il bridge, vengono rimossi tutti i dispositivi Matter collegati.

Elementi che non puoi rimuovere

I seguenti dispositivi non possono essere rimossi a livello di programmazione tramite le API Home:

  • Matter dispositivi per i quali la tua app non dispone delle autorizzazioni utente.
  • Singoli dispositivi connessi dietro un bridge Matter.
  • Cloud-to-cloud dispositivi collegati.
  • Dispositivi dual-path (dispositivi che implementano sia Matter che Cloud-to-cloud).

Considerazioni importanti prima di rimuovere un dispositivo

Quando la tua app rimuove un dispositivo, questo viene rimosso dall'intera struttura, interessando tutti gli utenti e tutte le app, inclusa GHA. A seconda del tipo di dispositivo, potrebbero verificarsi effetti collaterali aggiuntivi in seguito al ritiro di un dispositivo:

  • Dispositivi che implementano più tipi di dispositivi: se un dispositivo ha più funzioni, ad esempio una smart light che funge anche da hub, la sua rimozione comporta anche la rimozione di tutti i dispositivi associati. L'app deve informare l'utente se saranno interessate più funzioni del dispositivo.
  • Cronologia dei dispositivi: l'eliminazione di un dispositivo potrebbe comportare la rimozione della relativa cronologia.
  • Piattaforme condivise: fai attenzione quando elimini i dispositivi sulle piattaforme condivise, perché ciò può avere conseguenze impreviste per gli altri.
  • Autenticazione: la rimozione del dispositivo deve essere eseguita solo su superfici autenticate, come un cellulare, non su dispositivi non autenticati come le TV. In questo modo, si violano le norme per gli sviluppatori di Google Home.

Rimuovere un dispositivo

La verifica dell'idoneità di un dispositivo alla rimozione è costosa e deve essere eseguita solo quando necessario. Per verificare se un dispositivo è idoneo per la rimozione, utilizza il seguente comando:

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

Dispositivi Matter

Puoi rimuovere un dispositivo Matter a livello di programmazione se il dispositivo non si trova dietro un bridge Matter.

Per rimuovere un dispositivo Matter, chiama decommissionDevice() dal dispositivo:

val decommissionedDeviceIds = device.decommissionDevice()

Se la chiamata non genera un errore, è andata a buon fine.

Puoi verificare se l'ID del dispositivo è tra quelli restituiti da decommissionDevice() :

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

Dispositivi non Matter

I dispositivi non Matter non possono essere rimossi a livello di programmazione. Per rimuovere un dispositivo non Matter, puoi inviare una richiesta di sincronizzazione (vedi Richiedi sincronizzazione) o eliminare l'integrazione Cloud-to-cloud (vedi Eliminare un'integrazione cloud-to-cloud avviata).

Se chiami decommissionDevice() su un dispositivo non Matter, viene generata un'eccezione HomeException.

Dopo aver rimosso un dispositivo non Matter, verifica la presenza del dispositivo per confermare che sia stato rimosso correttamente:

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

Dispositivi multi-sorgente

I dispositivi multisorgente sono dispositivi che utilizzano sia le API Cloud-to-cloud che quelle Matter. Se controlli l'idoneità al ritiro di un dispositivo di questo tipo, riceverai un DecommissionIneligibleReason.multiSourceDevice, che indica che, poiché il dispositivo è multi-source, non può essere ritirato.

Per rimuovere un dispositivo multisorgente:

  1. Rimuovi l'associazione Cloud-to-cloud come descritto in Dispositivi non Matter.
  2. Ritira il dispositivo Matter come descritto in Dispositivi Matter.

L'ordine di questi passaggi è importante. Se tenti di ritirare il dispositivo Matter prima di rimuovere l'associazione Cloud-to-cloud, viene generato un HomeException.