带有HomeKit的单独在家—第一部分

苹果公司发布HomeKit时,我感到非常激动,我已经耐心尝试了近20年,但一直未能成功地实现家庭自动化。 很多年前,当我第一次研究家庭自动化时,当时的技术就是所谓的X10。

X10是一个非常聪明的主意,请记住,那时没有无处不在的互联网,也没有WiFi。 X10依赖于用于传输电力的现有电缆。 这有一定的逻辑,所有能够自动化的东西也需要动力来驱动该自动化,因此利用现有的铜缆基础设施是明智的。 现在,我相信大家都知道,我们通常不会以铜作为直流电(DC)传输电力,我们使用交流电(AC),尽管您可能会惊讶地知道实际上有多少电子设备实际使用直流电。 使用DC来传输电力只是效率不高(尽管现在可以做到,有时对于真正的长距离传输来说更好)。 鉴于我们使用交流电将其传输给消费者,因此一些明亮的火花意识到,由于大多数家用电流使用两个异相的功率波来激励电子沿着铜线流动,因此在每个周期中都有一个时间点电线上没有发生传输。

在这段安静的时间里,只要设备很快,设备就可以在家里的电网中愉快而清晰地传输其喜欢的任何信号。 简而言之,这就是X10的概念。 聪明的主意。 可怕的实施。

农场生活和三阶段的艰难教训

在那些日子里,我住在一个农场里,过去我花了很多时间在打开和关闭水泵的周围走来走去,并确保关闭水闸。 这些宏伟的愿景让我坐在书房中的Power Mac G5上,使用了我计划编写的一个性感的可可小应用程序,打开和关闭水泵,并在必要时轮询门并关闭它们。 哇,我错了吗? 尽管如此,我还是从美国购买了必要的工具包,但是当它到达时,我惊恐地发现我不得不与RS232串行接口进行通讯。 在这里,我们不是在谈论USB,而是在谈论一种非常笨拙的慢速协议,该协议会在有线时间一次传输一位,并且它不是双工的。 如果有人在说话,没有人可以说话。 我之前已经开发过软件,可以通过串行接口与REUTERS数据馈送进行通讯,这真是太糟糕了。 我花了很长时间才弄对,并且调试它是一场噩梦。 所以我震了。 不过,我坚持不懈,最终能够使用我用C编写的代码从我的Mac打开下一个房间的灯。现在考虑一下。

我的下一个尝试是让灯泡在楼上打开和关闭,而我仍在楼下的书房中,但是-可以-不能-可以。 它让我感到困惑,如果所有套件都在楼下,它就可以很好地工作,但在楼上却无法工作。 最终,在尝试了所有可以想到的内容并完善了代码之后,我放弃了,因为这变得太难了,而且花费了太长时间。 仅仅几年后,我的一位电气工程师朋友解释了原因。 正如我提到的,我住在一个农场,农场利用三相电。 发生的事情是,给农舍布线的电工使用了第1周期和第3周期为底层供电,并使用了第1周期和第2周期为第一层供电,自然,X10设备在使用时只有半个电路试图在楼上说话,那当然没有用。 我以为那只是因为我对串行接口的编程没用(嗯,这可能是对的),但至少故障不是我的。

情况已大大改善。

我很高兴地说,现代的体验有了很大的改善。 最终说服我探索HomeKit的是我在takealot.com上看到的一则广告。 他们在宣传一款价格不到R3,000的Phllips Hue入门套件。 考虑到我在X10上浪费的时间和金钱,这是很划算的。 因此,当我的包裹最终到达时,我很兴奋能上路,但对过去的经历感到紧张。

明智的选择是,如果您决定走这条路,请执行我忽略的两项检查。 确保您购买的工具包或配件适合您家中的插座,其次,要确保其配备与南非电源插座兼容的插头。

Phillips Hue入门套件

我购买的工具包包含一个Bridge(稍后将介绍)和两个Phillips Hue灯泡。 我从来没有想到,当我们大多数人将刺刀配件用于灯座时,它们可能会给我送上旋入式灯泡。 las,我收到了两个旋入式灯泡,但惊讶地发现我指定用于自动化的两个灯实际上是旋入式灯泡。 我还购买了另外两个灯泡,幸运的是,这两个都是刺刀配件。 该套件随附了一个桥接器,该桥接器会讨论HAP(HomeKit附件)协议,为桥接器供电的变压器,用于将桥接器连接到网络的以太网电缆(因此,请确保您在某处有一个免费的RJ45端口)和一个非常苗条的手册。

Phillips Hue灯泡通过WiFi谈论私有协议,我认为原因之一是Apple要求所有直接与iOS上的应用程序对话的HomeKit配件不仅要经过自身认证,而且还必须包含Apple认证协处理器。 苹果非常重视隐私和安全性,坦率地说,鉴于存在恶意使用物联网的机会,我认为他们的关注是适当的。 当然,他们也希望从苹果派中脱颖而出。

苹果的HomeKit

HomeKit的概念很少而且很简单。 HAP是HomeKit附件协议,它是由Apple开发的定制协议,该协议已有文档记录,免费提供,并且可以非商业目的免费使用。 该协议有两个载体,即IP或蓝牙。 HAP由配件使用,配件是直接与iOS或tvOS上的HomeKit交互的硬件(或稍后讨论的软件)。 此外,在某些情况下,设备并不一定要直接与HomeKit通话(Phillips Hue灯泡就是一个很好的例子),在这种情况下,网桥将通过HAP与HomeKit进行接口,并通过HAP将私有设备“发布”到HomeKit。 为了使HomeKit自动化,您需要一个HomeKit Hub,它可能需要是iPhone以外的其他设备(稍后会有更多介绍)。


使它们一起工作

将Hue Bridge连接到我的iPhone是一项微不足道的练习,Apple已经对普通的非技术用户如何应对这一问题进行了深思熟虑,并且他们有许多机制可以简化配件和HomeKit的配对。 许多配件的包装或其包装上都带有QR码,iOS上的HomeKit App可让您简单地扫描代码并将它们配对。 或者,如果配件启用了蓝牙,则可以将iPhone放在旁边,如果他们可以发现对方,则可以通过这种方式配对。 第三种方法是通过与每个配件相关联的识别码,在iPhone上键入该代码来启动它们的发现。 最后一种方法是用于直接与HAP通讯的设备。 HomeKit扫描网络并使用Bonjour(Apple的基于DNS的发布服务)尝试建立连接。

因此,我几乎没有时间配置HomeKit应用程序,并且我的灯正常工作。 iOS上的HomeKit应用程序具有简单而优雅的界面,可让您按房间或收藏夹对配件进行分组。 主界面向您显示已配置的内容,正在运行的内容,并使您可以通过按住代表所涉及附件的图标来控制每个附件的详细信息。

自动化配件

自动化配件会带来一个有趣的问题,为了安排自动化事件,生成自动化事件的设备必须与配件位于相同的物理位置(在iPhone处于所有日落之后,家里可能不是在日落) 。 这意味着您不能使用iPhone来执行此操作,除非您从未将其移出房屋(这是不太可能的)。 因此,要使附件自动化,您需要定义所谓的HomeKit集线器。 集线器可以是任何不会离开家的iOS设备(例如,您在家中离开的iPad),也可以是tvOS设备。 将Apple TV设置为HomeKit Hub非常简单,我必须在tvOS设置应用中导航至Home Kit,然后打开Home Kit,然后重新启动Apple TV。 但是,有一个警告:-HomeKit使用iCloud共享其配对和配置,这意味着您必须使用与在iPhone上登录的相同的HomeKit Hub上的iCloud帐户登录。 这种分发HomeKit配置的机制的简单性既有优点(因为它很简单),也有缺点(因为像这样共享Apple ID可能并不总是很方便)。

能够将Apple TV用作HomeKit Hub确实非常有用。 定义集线器后,便可以使用iPhone上的Home应用程序来设置自动化程序。 这真的很酷,因为如果您不在家里,则集线器可以在指定时间执行任何一组操作,例如日出,日落或集线器定义的任何其他时间。 自动化还包括对简单的GeoFencing的支持,您可以添加诸如“每个人都离开家时”之类的条件,在这种情况下,HomeKit会监视其了解的每个人(不一定是家中所有人)何时离开家,以及然后开始行动。

现在来玩转位

当然,作为开发人员,创建我们自己的软件总是比使用别人的软件更有趣。 为了开发HomeKit的软件,您将需要一台至少安装了Xcode 6的Mac,并且是Apple Developer Programme的成员。 您可能在此阶段在想,如果您没有启用HomeKit的附件,那么您将无能为力。 苹果公司想到了这一点,并非常友好地创建了HomeKit附件模拟器。 这是一个非常整洁的应用程序,可让您在Mac上创建虚拟配件,以便在编写代码时可以使用。 当然,如果您的网络上确实有HomeKit配件,您也可以使用它们测试代码。

HomeKit配件模拟器未预装Xcode,您需要自行下载并安装。 在developer.apple.com上登录到您的帐户,然后导航到“下载”部分。 在页面底部,您将看到一个链接,上面写着“看不到您想要的东西,更多下载”。 单击该链接,然后展开标记为“ Xcode 9的其他工具”的链接。 在这里,您将找到一个名为“ Xcode 9.dmg的其他工具”的DMG文件的链接。 下载此dmg,进行安装,然后将“ Xcode Tools”文件夹复制到“应用程序”文件夹中。 在“ Xcode Tools”的“ Hardware”文件夹中,您会找到HomeKit附件模拟器。 运行该应用程序将为您提供一个如下图所示的窗口。 使用文件菜单创建所需数量的附件或桥。

例如,您可以使用“文件>>新建>> IP摄像机…”菜单项将监视摄像机封装在HAP包装中,如下图所示:-

替代模拟器

Apple HomeKit配件模拟器让我思考,HAP只是一种软件协议,Mac可以完美地说出IP和蓝牙,因此如果希望采用未启用HomeKit的组件(例如Raspberry PI,来自云的供稿或类似内容)怎么办?并使其看起来像启用了HAP的附件,那该怎么办呢? 我做的第一件事是快速阅读了HAP协议规范。 这是一个漫长,详细的过程,看起来需要很多工作才能从头开始实施,但是我确定有人一定会一直按照与我类似的思路来思考并实施它。 果然,在互联网上搜索了几分钟后,我在GitHub上找到了以下内容

布克/ HAP

HAP – Homekit附件协议的快速实现

github.com

这是在Swift中对HAP协议的完整记录和几乎完整的实现。 它利用了IBM的Kitura Web服务框架,并提供了一个很好的基础。 该项目是使用SPM(Swift软件包管理器)开发的,这是一种管理CocoaPods和Carthage依赖关系的替代方法。 我个人是SPM的忠实拥护者,但是如果您还没有为Linux上的Swift开发,那么您可能还没有探索过SPM。 在我可以从SPM项目生成Xcode项目之前,我需要安装libsodium(一个开放源代码加密库),但是使用HomeBrew(brew install libsodium)可以轻松实现这一点。 完成此操作后,我必须使用SPM(swift包generate-xcodeproj)来生成Xcode项目,我不需要这样做,因为我可以使用SPM(swift build)从命令行构建该包,但是我想要查看代码,而Xcode就是最好的选择。 生成Xcode项目后,我发现某些依赖项对于Swift 4来说已经有些过时了,我花了一些时间来更新Package.swift文件,然后才能构建该项目。 我的Package.swift文件最终看起来像下面的文件,将项目所依赖的软件包的版本号更改为以下版本,从而使项目可以干净地构建(并非没有警告,但没有错误)。

调整了Swift HAP Bridge的名称,并在Xcode中构建并运行hap-server方案后,我能够在iPhone上的Home应用中成功找到该桥(Sapphire Swift Bridge)并添加所有(虚拟)配件从虚拟网桥(如右图所示)

这是向HomeKit生态系统添加自定义解决方案的一种真正巧妙的方法。 例如,目前支持HomeKit的IP摄像机数量有限,但我打算购买带有API的IP摄像机,然后使用此工具包为其编写Swift虚拟附件,并将其集成到我的HomeKit生态系统中。


本文的第二部分将探讨使用Apple提供的HomeKit框架。

Interesting Posts