转载:智能家居实践(番外篇)—— 接入 HomeKit 实现用 Siri 控制家电

前面我写了一个系列共三篇的智能家居实践,用的是 Amazon Echo 实现语音控制,但是 Amazon Echo 用户群体太小而且这玩意并没有在中国上市,日常使用中也是各种水土不服,让很多朋友有心无力。然而,正如你早就看到的标题中说的那样,我们还有更容易获得的工具,那就是 Siri。

自从苹果推出了 HomeKit 以来,鉴于苹果庞大的用户量,不断开始有家电厂商开发出兼容 HomeKit 的家电。然而第一个吃螃蟹的人总是有代价的,这些电器的价格不是太贵就是中国买不到,所以使用 HomeKit 的仍然是小众群体。

通过 HomeAssistant 我们实现了把普通家电接到同一个平台,并且实现了 Amazon Echo 进行语音控制,能否把 Amazon Echo 替换成 Siri 呢?答案当然是可以的,不然就不会有这篇文章了。

这回又是美帝的极客站出来拯救世界,隆重介绍这个重量级的开源库:homebridge,通过逆向 HomeKit 协议让普通的 Wifi 设备也能接入 HomeKit 从而通过 Siri 控制。你可以这里找到所有 homebridge 相关的 plugin,已经有超过500个了。

所以 homebridge 诞生之初和 HomeAssistant 并没有关系,但你可能注意到了,如果你每一个设备都安装一个 homebridge 相关的 plugin,太分散也不利于管理,所以,最好的办法是,把一个平台整体迁移过来。毋庸置疑,HomeAssistant 是目前管理智能家居最成熟也是最流行的平台,所以你只管把电器设备加到 HomeAssistant 就行,和 HomeBridge 只需要一个 Plugin 连接就行,这个 Plugin 就是 homebridge-homeassistant ,它在 HomeAssistant 和 HomeKit 之间架起了一座桥梁,让 HomeBridge 可以直接使用 HomeAssistant 平台下的所有设备。所以大致的架构图是这个样子的:

HomeBridge 的核心是 HAP-NodeJS 这个框架,用 NodeJS 模拟了一个 HomeKit Accessory Server 。作者 KhaosT 是个在美留学的中国人,曾在苹果的 HomeKit 团队实习过,这也 make sense 了为何是他第一个逆向了苹果的 HomeKit 协议。这里面有个小八卦,当 KhaosT 逆向了 HomeKit 的时候写了篇博客,但由于涉及到商业机密被苹果法务要求删除文章,但好在代码已经早就 fork 开了所以代码才得以流传到现在。试想要是当初代码没有开源,恐怕我们现在还享受不到这一成果。

其实我上面告诉你有 homebridge-homeassistant 这个东西已经可以了,剩下的无非就是看 README 跟着做的事情。所以我不想把安装过程再复制粘贴一遍,我就说一下安装完之后如何和 HomeAssistant 桥接的操作了。

若顺利安装完 HomeBridge,你就能在 pi 用户下找到 .homebridge 这个隐藏目录,把这个目录通过 Samba 共享出来就可以用 Finder 打开了。

然后修改 config.json:

{
    "bridge": {
        "name": "KittensHome", //修改
        "username": "B8:27:EB:A0:2C:A1", //修改
        "port": 45536, //修改
        "pin": "775-82-588" //修改
    },
     "platforms": [
      {
        "platform": "HomeAssistant",
        "name": "HomeAssistant",
        "host": "http://192.168.10.200:8123", //修改
        "password": "xxxxxx", //修改
        "supported_types": ["binary_sensor", "cover", "fan", "input_boolean", "light", "lock", "media_player", "scene", "sensor", "switch"],
        "logging": true
      }
    ]
}

你只需要修改我标记修改的六个地方就行了,bridge.username 就是树莓派的 Mac 地址,port 和 pin 就是 HomeBridge 运行的端口和密码。这个密码等会和 HomeKit 配对使用。这里需要注意 "port" 必须大于0小于65536;username 必须是大写的 Mac 地址。 platforms.host 就是你的 HomeAssistant 所在的 IP 和端口,platforms.password 就是 HomeAssistant 的密码。

然后,请严格按照以下步骤操作,如果你 HomeBridge 启动失败了,再次按照下面步骤重新操作:

1.使用改新的 bridge.name, 新的bridge.port

2.输入命令:sudo killall homebridge 关闭所有正在运行的 HomeBridge 服务

3.手动删除 HomeBridge 文件夹下的 persist 文件夹。

4.输入命令:sudo systemctl restart home-assistant.service 重启 HomeAssistant 服务。

5.务必等 HomeAssistant 服务启动完成,如果你像我之前文章提到的创建了一个 Automation 用于监听启动完成事件然后通过 IFTTT 或其他推送服务就可以很快知道 HA 什么时候启动完成了。或者你也可以通过命令 sudo systemctl status home-assistant.service -l 查看启动进程。然后,命令行输入 homebridge 就可以启动 HomeBridge 服务了。

如果你看到了以下画面,说明 HomeBridge 已经成功启动了,快去看看手机吧。

按照以下步骤,找到 HomeBridge,输入刚才你指定的密码,然后一路下一步,最后就能看到所有 HomeAssistant 下的设备都集成到 HomeKit 了。

不希望显示的设备,你可以在 configuration.yaml 里通过 homebridge_hidden 属性关闭。

customize:
  switch.a_switch:
    homebridge_hidden: true

一旦接入了 HomeKit ,就可以直接用 Siri 控制了,而且能听懂中文了,而且得益于 HomeKit 内建的功能和 Siri 天生具备的语义分析,你可以实现很多 Amazon Echo 做不到的操作,比如改变灯泡颜色,灯泡亮度。

智能家居实践(番外篇)—— 接入 HomeKit 实现用 Siri 控制家电的更多相关文章

  1. python自动化测试应用-番外篇--接口测试2

    篇2                 book-python-auto-test-番外篇--接口测试2 --lamecho辣么丑 大家好! 我是lamecho(辣么丑),今天将继续上一篇python接 ...

  2. #3使用html+css+js制作网页 番外篇 使用python flask 框架 (I)

    #3使用html+css+js制作网页 番外篇 使用python flask 框架(I 第一部) 0. 本系列教程 1. 准备 a.python b. flask c. flask 环境安装 d. f ...

  3. 《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)

    1.简介 前边几篇文章是宏哥自己在本地弄了一个单选和多选的demo,然后又找了网上相关联的例子给小伙伴或童鞋们演示了一下如何自动化测试,这一篇宏哥在网上找了一个问卷调查,给小伙伴或童鞋们来演示一下.上 ...

  4. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  5. iOS冰与火之歌(番外篇) - 基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权

    iOS冰与火之歌(番外篇) 基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权 蒸米@阿里移动安全 0x00 序 这段时间最火的漏洞当属阿联酋的人权活动人士被apt攻击所使用 ...

  6. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV

    这次博客园的排版彻底残了..高清版请移步: https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程: 给深度学习入门者的Python快速教程 - 基础篇 给深度 ...

  7. 可视化(番外篇)——在Eclipse RCP中玩转OpenGL

    最近在看有关Eclipse RCP方面的东西,鉴于Gephi是使用opengl作为绘图引擎,所以,萌生了在Eclipse RCP下添加画布,使用opengl绘图的想法,网上有博文详细介绍这方面的内容, ...

  8. 可视化(番外篇)——SWT总结

    本篇主要介绍如何在SWT下构建一个应用,如何安装SWT Designer并破解已进行SWT的可视化编程,Display以及Shell为何物.有何用,SWT中的常用组件.面板容器以及事件模型等. 1.可 ...

  9. 【重走Android之路】【番外篇】关于==和equals

    [重走Android之路][番外篇]关于==和equals   在实际的编程当中,经常会使用==和equals来判断变量是否相同.但是这两种比较方式也常常让人搞得云里雾里摸不着头脑.下面是我个人做的总 ...

随机推荐

  1. 20145234黄斐《Java程序设计》第五周

    教材学习内容总结 第八章部分 - 异常处理 语法与继承架构 使用try...catch 首先要明确一点:Java中所有错误都会打包为对象 JVM会尝试执行try区块中的程序代码,如果发生错误,执行程序 ...

  2. 最大团 HDU-1530

    传送门: 洛谷 Vjudge    (题目略有不同) 题目描述 • 给定一个图 tt = (V, E) • 求一个点集 S ,使得对于任意 x ≠ y ∈ S ,x 和 y 都有一条边 • |V | ...

  3. 线段树区间更新(set暴力)

    题目链接:https://cn.vjudge.net/contest/66989#problem/I 具体思路:使用栈存储村庄被损坏的顺序,然后set存的是被损坏的村庄,然后每一次查询,直接找到要查询 ...

  4. Java编程思想 4th 第3章 操作符

    有了数据,还需要进行数据间的运算,因此Java中也有数据间运算的各种符号,书本称之为操作符,正确的翻译应该是运算符. Java中的运算符同C++相同,运算符同运算符对象构成表达式,表达式是运算对象及运 ...

  5. RTSP消息交互过程

    c表示客户端,s表示RTSP服务器端 第一步:查询服务器可用方法 1 c---s :OPTION request //查询s有哪些方法可用 s---c:OPTION response //s回应信息的 ...

  6. Docker技术这些应用场景【转】

    场景一:节省项目环境部署时间 1.单项目打包 每次部署项目到测试.生产等环境,都要部署一大堆依赖的软件.工具,而且部署期间出现问题几率很大,不经意就花费了很长时间. Docker主要理念就是环境打包部 ...

  7. mysqli链接数据库示例代码

    $mysqli = new mysqli("localhost", "数据库用户名", "数据库密码", "数据库名称" ...

  8. Vue模板语法总结

    文本 数据绑定最常见的方式就是使用"Mustache"语法(两个大括号{{ }})的文本插值 <span>Message: {{ msg }}</span> ...

  9. phpStudy配置https

    phpStudy配置https 1.打开vhosts-conf配置文件 2.在配置文件中增加如下内容 server { listen 443; server_name tam.gogugong.com ...

  10. java基础34 泛型的使用

    本文知识点(目录): 1.泛型的好处    2.泛型在集合中的常见应用(这里只用String类型举例)    3.在泛型中是不能使用基本数据类型,如果需要使用基本数据类型,那么就使用基本数据类型对应的 ...