Android 版 Google Home API 提供了一个统一的 API surface,使开发者能够与用户住宅中的实体状态进行交互。这些实体可以描述与用户的结构和房间关联的设备和非设备信息。
Home API 定义了用户可以与之互动的以下实体:
- 结构表示包含房间和设备的住宅。
- 房间是结构的一部分,包含设备。
- 设备会实现包含属性的特征、符合类型、发出事件并响应命令。
- 设备组是结构中用户定义的设备集合。
- 自动化操作是结构的一部分,使用住宅元数据和设备来自动执行住宅中的任务。
图 1 展示了此架构:
Home API 设备类型可能由 Matter(一种智能家居开放标准)提供支持,也可能是 Google Home 生态系统中的 Cloud-to-cloud 设备。某些设备类型可能同时包含这两项功能。如需了解详情,请参阅 Android 上支持的设备类型。
在 Matter 中,设备功能按集群分组,在 Home API 中表示为 Matter 标准 trait。Home API 支持当前 Matter 规范中定义的标准 Matter 集群集。
在 Google Home 生态系统中,设备功能按智能家居特征分组,这些特征在 Home API 中表示为 Google 智能家居特征。Home API 支持 Cloud-to-cloud 计划中定义的一组智能家居特性。
其他 trait(例如特定于制造商的集群和平台 trait)也可用。如需了解详情,请参阅 Android 上的数据模型。
生态
Google Home 生态系统提供了一个简化的基础,用于构建、管理、保护和集成智能家居体验。图 2 展示了所有组件如何协同工作。
该生态系统包括 Google 自动化引擎,该引擎用于存储和运行自动化操作,这些自动化操作提供了一种在住宅中自动执行任务和设备设置的方法。
Home API 使用 OAuth 2.0 授予对住宅中设备的访问权限。OAuth 允许用户向应用或服务授予权限,而无需公开其登录凭证。
Google Home Developer Console 用于管理 Home API 项目的所有阶段,从品牌验证、开发、测试和认证,到最终发布。它简化了开发流程,同时通过 Google Home 生态系统提供强大的工具和分发渠道。
语言
Android 版 Home API 是用 Kotlin 编写的,提供了一个惯用的 Kotlin 接口,该接口使用 Flow 来管理状态和订阅。与标准订阅 API 相比,这具有许多优势。
如果您还不熟悉协程、Flow 和 Jetpack Compose,建议您先熟悉一下相关的 Kotlin 文档:
- 使用 Kotlin 开发 Android 应用
- 学习适用于 Android 的 Kotlin
- Android 上的 Kotlin 协程。以下特定 Codelab 可能会很有用:
- Android 上的 Kotlin 数据流,更具体地说是 StateFlow。
- 状态和 Jetpack Compose,特别是
collectAsStateWithLifecycle()函数。此函数会根据显示该状态的界面是否实际位于前台,自动管理数据流的订阅和取消订阅。 - 如果您使用的是 Automation API,阅读 Kotlin 类型安全构建器有助于了解 Automation DSL 的工作原理。
实体标识符
Home API 中的每个实体都有一个 ID,代表其主要标识符。此 ID 是一个唯一且稳定的标识符,在实体的生命周期内永远不会更改。此 ID 可用于缓存对象或检查是否相等,因为实体的元数据可能会发生变化。
请参阅 HasId 接口,了解哪些实体具有 ID。
术语映射
Home API 中的实体与 Matter 和 Cloud-to-cloud 概念的对应关系如下:
| Home API | Matter | Cloud-to-cloud |
|---|---|---|
| 特征 | 集群 | 特征 |
| 属性 | 属性 | 属性、状态 |
| 命令 | 命令 | 命令 |
| 活动 | 活动 | Follow up response, Notification |