移除设备

移除设备是指从结构中停用设备。用户可以使用 Google Home app (GHA) 执行此操作,应用也可以通过编程方式停用智能家居设备。可以移除的设备存在限制。此外,移除设备可能会影响应用的结构和用户体验。

您可以移除哪些内容

您可以通过 Home API 以编程方式移除以下设备:

  • 您的应用拥有权限的 Matter 部设备。
  • Matter 网桥,前提是您的应用可以访问通过网桥连接的所有设备。移除网桥会移除与其关联的所有 Matter 设备。
  • 受支持的摄像头和门铃设备,包括支持 Matter 的 Google Nest 摄像头和门铃,以及兼容的合作伙伴摄像头。 如需详细了解支持和不支持的型号,请参阅摄像头和门铃。

无法移除的内容

以下设备无法通过 Home API 以程序化方式移除:

  • 您的应用缺少用户权限的 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()

如果调用未抛出错误,则表示成功。

您可以检查设备的 ID 是否在 decommissionDevice() 返回的 ID 中:

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。
  • 不支持 Matter 且仅通过云服务连接的旧版 Nest 摄像头和门铃,例如 Nest Cam(室内用,第 1 代)、Nest Cam(室外用,第 1 代)、Nest Cam IQ 和 Nest Doorbell(有线版,第 1 代)。
  • 已关联的第三方 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 集成(请参阅删除已启动的云到云集成)。

如果您在不受支持的非 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!")
}