デバイスを削除する

デバイスを削除するには、ストラクチャからデバイスの運用を停止します。ユーザーは Google Home app (GHA) を使用してこれを行うことができ、アプリはプログラムでスマートホーム デバイスを廃止できます。削除できるデバイスには制限があります。また、デバイスを削除すると、アプリの構造やユーザー エクスペリエンスに影響する可能性があります。

削除できるもの

Home API を使用して、次のデバイスをプログラムで削除できます。

  • アプリに権限が付与されている Matter 台のデバイス。
  • Matter ブリッジ。ただし、アプリがブリッジ経由で接続されているすべてのデバイスにアクセスできることが条件です。ブリッジを削除すると、それに接続されているすべての Matter デバイスが削除されます。

削除できないもの

次のデバイスは、Home API を介してプログラムで削除できません。

  • アプリにユーザー権限がない Matter 台のデバイス。
  • Matter ブリッジの背後に接続された個々のデバイス。
  • Cloud-to-cloud 台のデバイスがリンクされています。
  • デュアルパス デバイス(MatterCloud-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 デバイスを削除できます。

Matter デバイスを削除するには、そのデバイスで decommissionDevice() を呼び出します。

val decommissionedDeviceIds = device.decommissionDevice()

呼び出しでエラーがスローされなければ、成功です。

デバイスの ID が decommissionDevice() によって返された ID の中に含まれているかどうかを確認できます。

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

Matter 以外のデバイス

Matter 以外のデバイスはプログラムで削除できません。Matter 以外のデバイスを削除するには、同期リクエストを発行するか(同期リクエストを参照)、Cloud-to-cloud 統合を削除します(リリース済みのクラウド間統合を削除するを参照)。

Matter 以外のデバイスで decommissionDevice() を呼び出すと、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!")
}

マルチソース デバイス

マルチソース デバイスは、Cloud-to-cloud API と Matter API の両方を使用するデバイスです。このようなデバイスの廃止資格を確認すると、DecommissionIneligibleReason.multiSourceDevice が返されます。これは、デバイスがマルチソースであるため、廃止できないことを示しています。

マルチソース デバイスを削除するには、次の手順を行います。

  1. Matter 以外のデバイスの説明に沿って、Cloud-to-cloud の関連付けを削除します。
  2. Matter デバイスの説明に沿って Matter デバイスを廃止します。

これらの手順の順序は重要です。Cloud-to-cloud の関連付けを削除する前に Matter デバイスの廃止を試みると、HomeException がスローされます。