包头 网站建设,北京营销型网站定制,网站建设模板系统,校园网站建设方向如果你对智能家居有所了解#xff0c;那应该或多或少听人聊起过 HomeKit。由 Apple 开发并主推的的 HomeKit 既因为产品选择少、价格高而难以成为主流#xff0c;又因其独特的优秀体验和「出身名门」而成为智能家居领域的焦点。HomeKit 究竟是什么#xff1f;能做什么#…如果你对智能家居有所了解那应该或多或少听人聊起过 HomeKit。由 Apple 开发并主推的的 HomeKit 既因为产品选择少、价格高而难以成为主流又因其独特的优秀体验和「出身名门」而成为智能家居领域的焦点。HomeKit 究竟是什么能做什么怎么做到的
▍HomeKit 是什么
想要准确描述 HomeKit定义是不可或缺的第一步。然而HomeKit 和相关的术语其实长期被不少人所混淆。我们来看看 Apple 自己是怎么定义 HomeKit的 这是 Apple 推出的一组软件开发工具。用 HomeKit 创建的 App 可让您从 Apple 设备控制家中已连接的配件如电灯、锁或暖气和冷气。 ——《Apple 词典》 以上的定义说明HomeKit 的本质其实是一个「开发套件」。它包含了很多常常被大家简称为 HomeKit 的部分包括
iOS 等系统上的 HomeKit 框架智能家居设备采用的 HomeKit 设备协议HomeKit Accessory Protocol以下简称 HAP 协议HomeKit 设备开发工具包HomeKit Accessory Development Kit
有些人还可能将 iOS 等系统上预装的「家庭」app 同 HomeKit 混淆但两者完全不同我们将在之后对「家庭」app 作进一步的介绍这里就不做展开说明。
Apple 开发者网站中列出的多个 HomeKit 相关的板块
有了这个定义我们也就不难理解「Works with Apple HomeKit」这一 HomeKit 官方认证的真实含义了——它表明这一外设兼容于 HomeKit可以和其它兼容 HomeKit 的软硬件进行交互。那么「Works with Apple HomeKit」认证以下简称 HomeKit 认证到底有何特殊之处呢是否经过认证对于一般的 HomeKit 用户来说有影响吗
▍Works with Apple HomeKit
「Works with Apple HomeKit」认证以下简称 HomeKit 认证是苹果 MFi 计划 的一部分这意味着想要通过 HomeKit 认证的厂商需要先加入 MFi然后为单项产品申请 HomeKit 认证。苹果对 MFi 计划有着充分的掌控说 HomeKit 认证的「含金量」绝大多数来源于其优秀的产品口碑也不为过。
「Works with Apple HomeKit」标志Apple 开发者
实际上苹果对 HomeKit 设备的要求并不算高这一认证成为「品质保障」很大程度上可以说「全靠同行衬托」。与其他智能家居平台直接限制芯片模组的策略不同目前的 HomeKit 认证并不干涉产品的软件设计和硬件实现而是对工厂采取备案制。拥有自主生产线的大公司可以为自己的工厂申请资质通过审查后就获得了生产 HomeKit 认证设备的资格智能家居领域中占多数的初创公司则可以直接联系已经拥有资质的代工厂委托其进行生产。这样的模式可以为代工厂带来新的订单同时也杜绝了「小作坊」生产的可能性。 部分 HomeKit 认证代工厂绝大多数来自中国MFi 官网
除了生产上的管控外苹果还要求 HomeKit 申请者拥有其它标准组织例如 Wi-Fi 联盟或蓝牙技术联盟的认证。HomeKit 视觉元素的使用同样受到严格的限制。HomeKit 的设备一般采用静态设置码进行配对厂商需要根据规范印刷设置码并保证随机生成、一机一码。对许多 HomeKit 用户来说设置码贴纸已经成为了 HomeKit 最具代表性的要素之一。
截至目前「Works with Apple HomeKit」认证同商用版 HAP 协议是高度绑定的。如果没有申请 HomeKit 认证设备厂商就无法获取商用版 HAP 协议文档HomeKit 认证也只面向实现了商用版 HAP 协议的设备开放。不过在 WWDC21 大会上苹果已经宣布 HomeKit 将包括对 CHIPMatter协议的支持因此未来这一认证很有可能将向符合要求的 Matter 设备开放。由于 Matter 设备尚未上市且暂时无法认证如果没有特殊说明在以后的文章中「HomeKit 设备」均指代 HAP 设备。
HomeKit 框架将包含 CHIPMatter子框架WWDC 2021
HomeKit 认证的核心之一是「Works with Apple HomeKit」标志的使用许可。通过 HomeKit 认证的产品可以将「Works with Apple HomeKit」标志打印在产品的包装和说明书上或者在官网、电商等平台使用这一商标进行宣传。与「Made for iPhone」等其它 MFi 标志类似智能家居厂商可以利用苹果的品牌宣传自己的产品这一定程度上可以提升产品的溢价。
MFi 计划「全家福」MFi 官网
与长期处于争议焦点的 MFi 认证芯片类似HomeKit 认证也需要使用定制的安全芯片。厂商需要在此基础上进行设计并且向苹果申请少量安全模块进行试产试产品通过认证后方能量产。在 2019 年HomeKit 认证开放了服务器验证方案。选择软件服务器验证的厂商可以直接进行预生产并将产品提交认证在获得认证后苹果服务器将同步认证信息产品也就可以通过 HomeKit 框架的检验了。
HomeKit 自适应照明
HomeKit 认证设备还可以使用更多的 HomeKit 功能。诸如自适应照明、HomeKit 安全视频等 HomeKit 进阶功能都必须通过 HomeKit 认证才能激活。如果说未经过 MFi 和 MFMMade for MagSafe认证的第三方充电线无法激活 iPhone 快充仅仅是让充电变得更慢那缺少设备 HomeKit 认证可就会带来实打实的功能缺失了。
▍未认证的 HAP 设备
在发布之初HomeKit 仅支持本地的硬件验证。只要正确使用了 HomeKit 安全芯片即使产品本身尚未取得认证也能通过 HomeKit 的检验。然而用于试产的芯片数量少管控严格几乎没有流向市场一般消费者很难接触到。在购买时消费者可能遇到的「未认证 HomeKit 设备」主要有两种情况采用软件验证方式并且未获得认证的采用非商用版 HAP 协议的。在通过 HomeKit 添加设备时如果所添加的设备未能通过验证系统将通过弹窗进行提醒。
由于软件验证方案不需要特殊硬件商用版 HAP 协议的绝大多数基础功能如今均已经被破解且可以直接使用。大名鼎鼎的 HomeBridge 项目就是基于逆向破解的 HAP 协议。HomeKit 会通过「HomeKit 已认证」属性来标记认证状态。在「家庭」app 中这一属性默认隐藏只在验证不通过时展示「家庭」app 还会在顶部横幅提示「此配件尚未经过认证可能无法配合 HomeKit 稳定运行」。
采用破解版 HAP 协议的 Homebridge 添加后有「尚未认证」横幅Microhoo
非商用版 HAP 协议无法获得认证也不会有横幅提示它的使用体验更接近一般的认证设备。任何注册的 Apple 开发者都可以在网站上获取该协议但采用非商用版 HAP 协议的设备不得用于商业目的也不能公开分发或者销售。这实际上是不少人坚持使用破解版协议而不是公开的非商用版协议的原因。不过由于两种协议的原理和设计基本一致下文的原理介绍均基于非商用版协议进行讲解。
值得注意的一点是无论是以上哪种情况未认证的 HomeKit 设备均不能使用「Works with Apple HomeKit」商标进行宣传采用非商用版 HAP 协议的设备更是不允许公开销售。如果大家在选购 HomeKit 设备前后发现了相关的违规情况应该考虑向苹果举报并进行维权。
▍HAP 的通信机制和安全性
在之前的图例中我们已经展示了 iOS 设备上的 HomeKit 框架是如何工作的而其中的 HAP 子框架和 HAP 设备之间通信的「语言」正是 HAP 协议。HAP 协议包含了为基于 IP 的设备和基于低功耗蓝牙Bluetooth LE以下简称 BLE的设备设计的两套安全的通信协议。我们可以通过了解 HAP 通信协议一窥 HomeKit 设备与终端指 iPhone 等控制端设备设备日常通信的方式。
HAP 实际上由两套协议所组成
对于基于 BLE 的设备iCloud 将跨设备同步配对信息因此可以直接用 BLE 建立设备间的点对点通信。为满足 BLE 的数据包大小限制HAP 协议还规定了数据包拆分发送的规则。对于基于 IP 的设备HAP 则充分利用了自家的 Bonjour 协议进行广播和发现并利用 HTTP 进行通信。HomeKit 请求都是由终端设备向 HomeKit 设备发起然后 HomeKit 设备将按要求更新状态并向终端设备返回信息。HomeKit 还规定了包括加密流stream传输在内的其他连接形式但应用较少我们就不多介绍了。
终端设备每发现一台已配对的 HomeKit 设备就会尝试与之建立会话session。HomeKit 设备在初始配置时会生成一对永久密钥。二者会根据交换的随机数据和已记录的永久密钥生成一对临时密钥其有效期仅维持到当前会话结束为止。所有通信均采用带数据校验的对称加密因此可以保证可靠性和安全性。任何解码错误或连接断开都会结束当前会话从而最大程度地防范攻击风险。
说到这里其实 HomeKit 最大的特点已经呼之欲出了与其它智能家居协议通过服务器或者智能音箱作为「中介」进行操作不同HAP 通信协议在设计上就有点对点、本地和安全这三大特点。这也意味着 HomeKit 完全可以在没有互联网编注与之相对的是家庭局域网的恶劣环境中正常工作——我们将在介绍 HomeKit 安全路由器时详细分析其应用。也正是因为这点HomeKit 无法像其它平台那样通过服务端控制来筛选认证设备只能采用本地安全芯片。即使后来开放了软件验证选项在无法联网验证的环境下也只会显示警告并不会影响使用。
▍HomeKit 本地运行机制详解
HomeKit 设备列表、永久密钥和房间分组等信息由 iCloud 负责管理与同步而实际的设备控制等操作全部在本地完成。为了保障安全性终端通过 HAP 控制 HomeKit 设备的过程相比其它智能家居平台要繁琐不少——当然这些差异对用户几乎是无感知的。
如果你有兴趣对 HomeKit 的控制方式进行更深入的了解我们可以一起来深入探究一下 HomeKit 工作的每一个环节并且还可以从中发现 HomeKit 体验不佳的症结当然跳过这一节也对后续内容的理解不会产生任何影响。
为了成功建立会话HomeKit 设备和终端设备需要进行双向的配对。HomeKit 设备上记录了所有可信任设备的列表一旦发生变化iCloud 就会通过终端向 HomeKit 设备发送指令来进行更新以保证其他设备可以正常连接。不在列表中的设备会被直接拒绝访问。对于 BLE 设备而言这种机制十分接近 AirPods 的「通过 iCloud 自动连接」可以实现一次配对、多设备无感连接。
对于基于 IP 的 HomeKit 设备它们将根据 mDNS多播 DNSMulticast DNS协议在局域网中广播自己的 .local 本地域名编注说明自己是谁和 IP 地址编注说明自己在哪里。mDNS 的原理就好比是在一个随机入住的酒店里房客可以时不时向所有房间广播自己的名字和房间号认识他的其他房客会将他当前的房间号保存下来。根据本地缓存的 mDNS 信息终端设备就可以用固定的域名访问到局域网中的某个 HomeKit 设备而无需担心其 IP 地址发生变化。
Bonjour 允许局域网内的设备间互相识别并建立连接Apple 开发者
Bonjour 是苹果在十几年前基于 mDNS 和 DNS-SDDNS 服务发现DNS Service Discovery开发的一套软件它在二者的基础上提供了更高级的接口。HomeKit 设备会使用 Bonjour 注册一个专属服务HomeKit 则通过查询服务信息来判断该设备是否属于当前「家庭」。终端设备同样会与基于 IP 的 HomeKit 设备自动建立会话。如果终端设备有监视 HomeKit 设备状态的需求例如传感器的状态变化通知或家庭中枢的自动化触发等它将通过 HTTP 维持一个 TCP 长连接来接收实时消息。
如果 HomeKit 设备数量增加呢我们假设当前家庭中注册了 30 个基于 IP 的 HomeKit 设备其中 5 个状态受到监视和 10 个 基于 BLE 的 HomeKit 设备那么每台终端设备都需要
和 10 台蓝牙外设保持连接和 5 个 IP 设备维持 HTTP 长连接。
不仅如此在每台终端设备初次激活 HomeKit 时会发送多达 60 条 HTTP 请求来进行配对整个局域网中至少存在着 30 个 Bonjour 节点它们在不停进行着 mDNS 广播。当我们打开「家庭」app 时它会通过 HomeKit 请求所有包含在「家庭状态」和「常用配件」中的配件状态而这些 HTTP 和蓝牙请求全部是「瞬发」的
从以上的例子中我想大家应该已经发现了 HomeKit 体验的「杀手」所在。
▍HomeKit 体验的两大杀手
大量 mDNS 节点、瞬发 HTTP 请求、长连接这些 HomeKit 的行为对路由器产生了巨大的压力使路由器成为 HomeKit 体验的最大瓶颈和头号杀手。传统的智能家居平台只需要在每台 IP 设备和服务器间维持一个 TCP 长连接终端设备的所有控制指令和状态获取都直接向服务器进行请求再由服务器下发到设备上。而 HomeKit 的点对点特性则规定任何指令都需要独立的本地 HTTP 请求对路由器的瞬时交换能力提出了不小的挑战。
传统智能家居平台和 HomeKit 的长连接、最大瞬时请求数量随 IP 设备数量变化
由于 HomeKit 设备发现完全依赖 Bonjour这对路由器的 mDNS 兼容性也是不小的考验。如果没有进行针对性的优化路由器很可能因为频繁的 mDNS 广播报文而导致性能下降如果优化策略有问题也可能导致 HomeKit 无法正常工作。
网件 Orbi 路由器曾因为 mDNS 优化算法不佳导致 HomeKit 问题不得不推出紧急更新Orbi 社区论坛
HomeKit 体验的另一大杀手则是蓝牙——相比基于 IP 的局域网通信蓝牙通信虽然功耗低、成本低但速度也远远不及 Wi-Fi。为保障安全性和通用性相比其它智能家居协议HomeKit 指令体积更大、数量也更多传输速度自然也就更慢。即使是经过优化后蓝牙设备发送状态更新消息也就是触发自动化和推送通知的延迟也只能达到亚秒级是一般 TCP 请求的百倍已经处于人可感知的范畴。此外蓝牙设备信号覆盖范围有限单个蓝牙设备很难做到全屋可连接因此通过个人终端连接时很可能出现「未响应」的情况。在后文中我们将看到 HomeKit 是如何通过「家居中枢」来优化蓝牙设备的使用体验的。
▍HomeKit 对 Wi-Fi 系统的挑战
相较于路由器HomeKit 对于 Wi-Fi 的性能需求并不突出但 Wi-Fi 系统的孱弱仍然有可能成为影响 HomeKit 体验的隐患。这样的挑战是目前阶段绝大多数智能家居平台中普遍存在的下面我们来简要介绍一下。
目前大部分 Wi-Fi 智能家居设备只支持 2.4GHz 频率的 Wi-Fi 4 协议而且功率较低穿墙性能和抗干扰能力都较弱。摄像头、传感器等智能家居设备还往往被放在家中的角落靠单一路由器进行覆盖很可能出现死角。此外智能家居设备几乎都不支持 MIMO为了服务这些设备其他无线设备例如手机、电脑的信号很可能受到影响。
考虑到 Wi-Fi 接入目前仍然是智能家居单品的主流入网方式在布置 HomeKit以及其他智能家居系统前建议先升级自己的无线 AP 布局。对于已经入住的家庭来说mesh 路由系统是扩展无线覆盖最省心的选择还在装修阶段的也可以提前布局 ACAP 方案。为智能家居布设 Wi-Fi 应当尽量确保所有可能安装智能家居设备的位置都有较强的 2.4GHz 信号覆盖以免设备发生断连掉线。
mesh 路由器间可以自动连接合并为一张低延迟的「大网」网件 Orbi 官网
▍HomeKit 家居中枢工作原理
HomeKit 家居中枢是 HomeKit 另一个十分特别的存在——在其他智能家居平台中往往由服务器或网关来承担自动化和远程访问等功能。云端自动化功能灵活但十分依赖互联网访问并且可能存在安全和隐私风险物联网网关虽然位于本地是离设备最近的「关卡」但它性能有限难以承担复杂的逻辑也往往不支持并行处理多个自动化容易成为自动化性能的「瓶颈」。
智能家居自动化的基本流程
HomeKit 创新性地采用了「家居中枢」作为自动化设备。家居中枢位于同一局域网内HTTP 请求仅有毫秒级延迟。即使是数年前的 A8 芯片相比其他智能家居设备所使用的芯片依旧拥有碾压级的性能完全不用担心并行和复杂逻辑问题。由于操作系统「师出同门」HomeKit 家居中枢甚至支持「快捷指令」这样高度自由的自动化方案。曾经有朋友吐槽过同样的自动化逻辑使用 HomeKit 这样的「外挂」执行速度竟然快于米家的网关自动化这正暴露出网关设备的性能不足。HomeKit 自动化「纾解」了网关设备的「非网关功能」反倒提升了整个智能家居系统的性能。
复杂自动化触发延迟对比示意图
除此之外HomeKit 家居中枢还承担着多重意义上的「网关」职能。家居中枢可以作为「代理」执行 HomeKit 指令并且将非 IP 设备桥接到局域网中。由家居中枢代理的 HomeKit 请求和终端设备直接发出的请求 几乎没有差异。
对于蓝牙设备来说它是将蓝牙设备桥接到局域网的网关。蓝牙设备只需要和家居中枢保持连接HomeKit 就可以通过 HTTP 访问家居中枢进行代理操作而无需每个终端设备都进行连接。这样以来既减轻了蓝牙设备的压力又通过「信号择优」的方式提高了蓝牙的设备的响应性能。
引入家居中枢前后的蓝牙设备拓扑图
以上方案充分扩展了蓝牙设备的连接范围但还没有彻底解决传输速率不足和延迟高的问题。HomePod mini 上首先引入的基于 Thread 的 HAP 协议作为对蓝牙 BLE 的补充不仅大大提高了响应性还利用Thread 稳定、低延迟的 mesh 组网进一步扩大了 HomeKit 设备的「朋友圈」。在接入 HomeKit 后支持 Thread 的蓝牙 HomeKit 设备可以被家居中枢所识别然后自动加入包含家居中枢的 Thread 网络。如此一来家居中枢就成为了设备的 Thread 网关接收到相关请求后会通过 Thread 而不是蓝牙来进行通信由此解决了延迟问题。
引入 Thread 前后的蓝牙设备拓扑图
除了蓝牙和 Thread 网关家居中枢还是所有 HomeKit 设备的「互联网网关」。如果 iPhone 等个人终端并不处于同一局域网中它们将首先通过 iCloud 连接到家居中枢并通过家居中枢「代理」进行远程访问。家居中枢和 HomeKit 设备间、家居中枢和个人终端间会分别建立点对点加密会话iCloud 虽然可能进行二次加密但并不能获取真正传递的信息可以说是一种将安全性做到极致的设计。
传统智能家居平台和 HomeKit已设置家具中枢的长连接、最大瞬时请求数量随 IP 设备数量变化
▍理解 HomeKit 抽象模型
在上文中我们介绍了 HomeKit 的底层通信机制它根据设备采用的通信协议分为两种不同的类型。在这些协议的基础上HomeKit 建立了统一的抽象模型来描述它的智能逻辑。相比为了安全性而不惜将问题「复杂化」的通信协议HomeKit 的抽象模型设计十分简洁。它只包含三个不同层次的核心概念
设备accessory服务service属性characteristic
「服务」是对某一类设备功能的抽象。除了名为「设备信息」用于展示制造商、序列号、固件版本等信息的一个必须的服务外大部分设备只包含一个服务和自己的功能相匹配。为了最大程度的抽象和复用部分服务类型会可能「附加」其它服务。例如「空气净化器」就可以附加「风扇」服务如果一个设备同时包含「空气净化器」和「风扇」服务HomeKit 会推断出这是一台空气净化器「风扇」控制的是空气净化器的风速并且二者的开关状态应当同步。
每个服务都规定有可选和必选属性例如「设备信息」服务中制造商、型号等属性都是必须提供的。属性反映设备的某个特征或者状态例如开关状态、传感器数据等。属性支持多种不同的权限组合设备制造商信息是只读paired read的开关既可读paired read又可写paired write传感器数据等可以用于触发自动化的则必须具备通知notify权限。支持推送消息的关键属性则需要在通知的基础上实现事件event。除此之外还有立即写timed write、写返回write with response、广播broadcast、隐藏hidden等权限。设备还可以定义私有属性这些属性在「家庭」app 中将向一般用户隐藏但可以被 HomeKit 用于控制以及自动化等操作。
VOCOlinc FlowerBud 香薰机的 HomeKit 逻辑层次不含私有属性
通过以上介绍我们不难发现HomeKit 规定了每个设备只能拥有一个主要服务它反映了该设备的主体功能。然而HomeKit 中的服务定义又十分克制很多带有额外传感器的 HomeKit 设备并不能用单一设备来描述。HomeKit 中每个物理设备即单个 IP 或 BLE 设备可以对应一个或多个逻辑设备以下简称子设备HomeKit 可以通过接口获取逻辑设备列表。在「家庭」app 中我们可以通过「作为单一板块整体显示」和「作为单独板块分开显示」按钮将子设备聚合或分开显示。
「家庭」app 中的子设备列表、聚合显示和拆分显示
桥接器网关是一类特殊的设备它承担着将非 BLE 或 IP 设备接入 HomeKit 的功能。通过桥接器接入 HomeKit 的设备可以以「产品组合」的形式通过 HomeKit 认证宣传和销售时除了印刷「Works with Apple HomeKit」标志还需注明支持 HomeKit 的桥接器型号。有些设备既有自己的功能又可以用作桥接器例如 Aqara 空调伴侣 P3也有一些设备只有桥接功能「家庭」app 将它们隐藏到了「家庭设置 中枢与桥接」中。我们可以在这一页面查看或移除桥接器。
「家庭」app 中的桥接器列表、详情和子设备视图
▍HomeKit 设备入网与初始化
作为「HomeKit 原理」的最后一块拼图我们需要谈谈 HomeKit 设备的入网和初始设置流程。为了在本地完成设备的配置和认证HomeKit 不像米家等平台那样提供「支持设备列表」和操作指南而是完全依靠蓝牙和 Bonjour 发现discover附近的设备。这样反倒创造出了更一致的设备添加流程成为了 HomeKit 的一大标志性体验。
对于 BLE 设备来说未经注册的设备会不停「广播」一个特殊的「HAP 配对」服务HomeKit 将监听这类广播消息从而识别附近正在等待配对的设备。Wi-Fi 设备的入网则实际上使用了 MFi 无线设备配置功能这一功能只对 MFi 计划的认证硬件开放并且需要专用 BLE 蓝牙芯进行服务广播片以被 iOS 设备发现。还有一类 IP 设备并不通过 HomeKit 的配对流程接入局域网。它们可能使用有线连接或者拥有更复杂的功能例如电视机因此这类设备将直接通过 Bonjour 被发现。
个人终端设备将结合设置码来自动发现对应的 HomeKit 设备确认它还未添加到 HomeKit然后为设备配网。绝大多数 HomeKit 设备采用的静态设置码会以贴纸的形式出现在机身或者说明书等位置目前主要有二维码贴纸和 NFC 贴纸两种。使用 iOS 或 iPadOS 设备的摄像头或 iPhone 的 NFC 扫描对应贴纸都可以激活配对流程。使用动态设置码的带屏幕设备需要在屏幕上展示二维码供扫描例如电视机和机顶盒。
已经正确配对或接入后后下一步需要进行初始设置。整个流程采用安全远程密码交换协议Secure Remote Password protocol需要进行三个来回的信息传递期间将验证设置码的有效性并为 HomeKit 设备生成一个长期密钥。这一密钥在还原出厂设置前都将保持不变。设置完成后HomeKit 就会尝试和该设备建立会话以上流程全部无错误则设备添加成功。
SRP-6 加密原理SRP-6 论文
HomeKit 设备添加流程