Matter、Zigbee 还是厂商 API:选择智能家居集成策略
Matter、Zigbee 与厂商 API 智能家居集成对比:从开发工作量、本地执行、生态广度和厂商锁定等方面,为你的项目做选择。
简要回答 — 文档记载的路径共六步:注册开发者账户、创建项目(获得
appId和密钥)、选择授权模式、接入设备、调用 API,最后配置消息推送和 IP 白名单。授权方式的选择会影响之后的一切。Aqara 账户绑定真实用户的 Aqara Home 设备。项目授权适用于通过 Implementation Tool 接入的 B 端场所。虚拟账户为你自己的终端用户创建一个 Aqara 账户,这样你的 App 不会让他们注册两次,而且该虚拟账户不能在 Aqara Home 中使用,只能通过 SDK 使用。
我们的 AqaraLink 开发者平台概览介绍了平台是什么以及有哪些模块。本文讲的是在其上开发的第一周:操作顺序,以及第一周就必须选定的分支。
opendoc.aqara.com 上的英文开发者文档,以固定顺序列出了云端集成流程。请严格照做,其中有两个步骤依赖前一步创建的配置。
appId 分配给该项目,审核通过时会生成一个默认密钥,可在 Project Details → Key Management 中查看,也可以在那里添加更多。清单中有两点常被忽略,日后会造成麻烦。第一,项目在审核通过之前无法使用。第二,用户和设备数据在项目之间是隔离的,但同一位用户可以被授权给多个项目。因此,为每个客户各建一个项目,并不能在任何实质意义上隔离租户,只会让你要轮换的凭证成倍增加。
这是分岔点。阅读它成本很低,但等你的接入用户体验写好之后再改,代价很高。
| Aqara 账户 | 项目授权 | 虚拟账户 | |
|---|---|---|---|
| 适用对象 | 为 Aqara Home 增添功能的消费者 App | B 端场所:酒店、办公室、学校 | 拥有自己账户体系的你自己的 App |
| 账户来源 | 真实的 Aqara 账户(手机或电子邮件) | Aqara IoT Solution Platform 企业账户 | 由你的后端通过 API 创建 |
| 接入途径 | Aqara Home App | Implementation Tool App | App SDK 或 implementation tool |
| 在 Aqara Home 中可见 | 是 | 否 | 否,仅限 SDK |
“在 Aqara Home 中可见”这一行,正是虚拟账户模式的关键所在,而加粗的限制正是让团队栽跟头的地方。
文档对动机的说明很直白。如果开发者已经有自己的账户体系,想把 Aqara 设备纳入自己的 IoT 生态,又不希望终端用户感觉到有两套账户,就在自己的 App 中集成 Aqara 设备 SDK,并把设备绑定到指定的虚拟账户。虚拟账户的定义是:通过接口创建的虚拟 Aqara 账户,用户可以通过开放 SDK 或 implementation tool 将设备绑定到该账户下。
对为客户做项目的集成商而言:
accountId 是你自己创建的字符串,保证在 appId 下唯一,是一切的根。你的客户不需要创建 Aqara 账户,也不需要知道它的存在。平台会返回 openId,即虚拟用户的唯一标识,这是你的后端保存并在之后每次调用中使用的句柄。config.auth.createAccount 接受一个可选的布尔参数 needAccessToken:false 只返回 openId,true 则同时返回 accessToken、refreshToken 和 expiresIn。可选参数 accessTokenValidity 默认为 7 天,可设为 1 至 24 小时或 1 至 30 天。刷新令牌的有效期为访问令牌过期时间再加 30 天。第 1 步:创建虚拟账户:
`` { "intent": "config.auth.createAccount", "data": { "accountId": "18900001234", "remark": "lumi-1" } } ``
第 2 步:请求授权码,虚拟账户的 accountType 为 2。授权码有效期为 10 分钟。 第 3 步:用 config.auth.getToken 兑换,得到 accessToken、refreshToken、expiresIn 和 openId。
真实 Aqara 账户的路径,从真实账户出发,流程相同:config.auth.getAuthCode,accountType 为 0,授权码有效期 10 分钟,然后调用 config.auth.getToken,其访问令牌默认为 7 天。项目授权是相同的兑换流程,accountType 为 1,授权码来自 IoT Solution Platform 控制台。config.auth.refreshToken 负责续期,三种方式返回令牌的规则相同:刷新令牌的有效期是访问令牌过期时间加 30 天,这是被遗忘的刷新令牌能存在多久的硬性上限。
在硬编码之前,请对照线上的授权管理页面核实当前的参数名和账户类型值。文档的版本与你的集成是分开管理的。
调用发往 https://${domain}/v3.0/open/api,其中 domain 是服务器区域。文档列出了已部署的区域,包括中国大陆、美国、韩国、俄罗斯、欧洲和新加坡,各自有独立的 API 域名和时区,在项目中选择。必需的请求头:Appid、Keyid(你的应用的密钥)、Nonce(随机字符串,每个请求都不同)和 Time。接口需要时才带上 Accesstoken。
签名规则,已对照签名规则页面核实:把请求头参数按 ASCII 排序,拼接成 Accesstoken=xxx&Appid=xxx&Keyid=xxx&Nonce=xxx&Time=xxx,把 Appkey 直接附加在该字符串之后,将结果转为小写,然后做 MD5,32 位。这就是你的 Sign 请求头。
文档中有一个例外:部分接口不需要 Accesstoken,此时 Accesstoken 不参与签名。弄错会产生错误码 106 Invalid sign,而 107 Illegal appKey 则针对你尚未激活的密钥。
| 途径 | 适用场景 | 值得了解的说明 |
|---|---|---|
| Aqara Home app | 已经在使用 Aqara Home App 的用户 | 设备进入他们的真实账户;适合 Aqara 账户授权模式 |
| Implementation Tool app | B 端安装团队、批量添加设备 | 配合 Aqara IoT Solution Platform 使用;项目 → 方案 → 空间 → 添加设备。仅限 Android |
| App SDK | 由你自己的 App 负责接入 | 有带界面和不带界面两种版本;通常是虚拟账户授权的正确选择 |
不带界面的 SDK 比大家想象的要窄:它只用于添加网关设备,子设备再通过 write.device.openConnect 接口添加。带界面的 SDK 提供 Aqara 风格的页面,可以直接使用,也可以重新设计样式。对于 Zigbee,接入是由网关驱动的:你的 App 调用云端 HTTP API 让网关进入配对模式,由网关发现并绑定周围的设备。文档里有一句坦率的说明:开发者平台上没有公布 App SDK 的下载链接,页面指引有需求的开发者联系 Lumi 的海外业务团队。在规划开发冲刺之前,先规划好这次沟通。
对于客户的一个住宅,你需要一个项目、一份 IP 白名单,以及为少量设备准备的 Implementation Tool 或 SDK。对于整个场所,你使用的是 Aqara IoT Solution Platform 上的项目授权,由 Implementation Tool 负责批量添加,并用项目授权码兑换令牌。
范围界定的问题不是“有多少台设备”,而是“合同结束时,设备归谁的身份持有”。在虚拟账户下,客户的设备位于你创建的账户中,客户离开时,整个场所必须迁移,而不是直接停用。在项目授权下,整个场所位于你的项目之内,设备随空间设计一起存在。写下谁可以触发令牌刷新,因为这个人实际上控制着设备。
appId,默认密钥可在 Key Management 中看到Nonce 不会重复
Matter、Zigbee 与厂商 API 智能家居集成对比:从开发工作量、本地执行、生态广度和厂商锁定等方面,为你的项目做选择。

Aqara 自动化与场景 API 开发指南:场景和自动化作为对象有何不同、规则应在何处本地运行,以及如何避免自动化数量失控。

Aqara 推送订阅 Webhook 指南:HTTP 与 MQ 两种投递方式、文档记载的 5% 失败率暂停规则、幂等性、顺序与对账。