自从上回决定在宿舍智能化上瞎折腾点什么东西之后,首先就注意到了自己的这个台灯。每次需要点开特定的 App 进行开关,而且在断网之后就无法使用,最致命的一点是官方 App 的 Widget 经常挂掉,导致了体验的割裂和不适。偶然在 YeeLight 的论坛里看见了这款灯泡接入 Apple HomeKit 的方法,便决定抱着试一试的折腾心理玩一把。

写这篇教程的目的,算是一个抛砖引玉。这也许是中文网站上最简单的倒腾 HomeKit 的教程,只需要准备好相应的硬件,跟着步骤一步一步走,大约半个小时就能完成。当然,折腾所在的目的是为了那种成功之后的喜悦感,市面上有很多产品也许会比这一套系统便宜,但是这样就再也享受不到 Do It Yourself 的乐趣了。

准备好了吗?那我们就开始吧。 

WechatIMG9.jpeg

前期探索

首先我想把 HomeBridge 安装在我的路由器上。因为 OpenWRT 也是 Linux 的一个嵌入式发行版,我想是没问题的。在网上扒了扒相关资料,发现确实是有人成功过,但是就着步骤做的时候,发现有一个插件总是装不上去。后来去论坛问了问官方的人员,才发现是因为自己的路由器是小米路由器 mini,ROM 空间不足无法安装,遂只能放弃路由器的方法。

后来根据客服人员的建议,我选择了用树莓派的方法。网上的相关资料显示,利用 HomeBridge 这一款插件,可以接入很多原本不支持 Apple HomeKit 的硬件设备。

所需要准备的硬件

以下是楼主折腾的时候所用的硬件,可以根据个人需要自行更改。

  • 树莓派 3 代 B 型及相关最小系统(包含 Micor SD 卡、电源等)
  • MacBook Pro 电脑( Windows PC、Ubuntu、Linux 均可)
  • YeeLight 智能灯泡 
  • 网线一根

当然,如果你有一个足够 ROM 空间的路由器,你可以选择把 HomeBridge 安装在路由器上,具体的教程可以拉到本页最底部,点击相应链接。

折腾过程

以下教程基于楼主运行 macOS Sierra 的 MacBook Pro 和 Raspbian Jessie 的树莓派。 

安装系统及登录树莓派

拿到树莓派之后,接上电源和网线,将写好系统的 Micro SD卡插入树莓派,给树莓派安装系统。我选择的是官方网站提供的 Raspbian Jessie,因为其他系统可能需要安装其他额外的插件。具体的安装教程可以参考网络,楼主的方法是在 Win32 Disk Imager 将下载的 Raspbian 系统镜像直接写进 SD 卡,甚至连格式化都不需要,一键无痛。写完之后插入树莓派,接上电源即可以开机。

在开始安装相关插件之前,因为某些不(G)明(F)的(W)网络的原因,会导致树莓派下载速度会非常的慢。后来在派友的建议下,开启 SS 并选择美国服务器和全局代理即可。所以建议大家在折腾的时候也修改成相关配置。

安装完成之后,用网线连接好树莓派和路由器,打开电脑的终端,用 ssh 登录树莓派。

ssh pi@raspberrypi.local

或者

ssh pi@X.X.X.X

其中 X.X.X.X 为树莓派的 IP 地址,可以在路由器的运行网页查看到。之后终端会要求输入密码,输入 raspberry 回车即可。输入密码的途中终端不会显示任何字符,只需要正常输入即可。

更新树莓派软件源

登录树莓派之后,先升级软件源,在终端下输入以下代码,等待一段时间即可。

sudo apt-get update
sudo apt-get upgrade

打开 Yeelight 的极客模式 

趁着更新软件源的空挡,我们在 App Store 下载官方的 Yeelight 应用,先连接上灯泡,然后点右上角的三根横杠,在下方打开极客模式。

安装 Node.js

回到终端,我们继续来安装 Node.js 。从版本 4.0.0 开始,Node.js 默认支持基于 ARM 的平台,我们只需要输入相关代码即可。

依次在终端输入以下命令:

wget https://nodejs.org/dist/v4.3.2/node-v4.3.2-linux-armv6l.tar.gz 
tar -xvf node-v4.3.2-linux-armv6l.tar.gz 
cd node-v4.3.2-linux-armv6l
sudo cp -R * /usr/local/

完成之后,输入 node -v 检查一下是否安装完成,如果显示 v4.3.2 ,则表示 Node.js 安装成功。

安装 Avahi 和相关依赖软件包

在终端输入以下命令即可:

sudo apt-get install libavahi-compat-libdnssd-dev

安装 HomeBridge 和相关依赖软件包

依次在终端输入以下命令:

sudo npm install -g --unsafe-perm homebridge hap-nodejs node-gyp
cd /usr/local/lib/node_modules/homebridge/
sudo npm install --unsafe-perm bignum
cd /usr/local/lib/node_modules/hap-nodejs/node_modules/mdns
sudo node-gyp BUILDTYPE=Release rebuild

添加 Yeelight 配置文件

输入以下命令:

sudo npm install -g homebridge-yeelight

等待命令运行结束后,输入

cd /home/pi/.homebridge/
vi config.json

点击键盘的 i 键,终端左下角出现 -- INSERT -- ,如下图所示。

WechatIMG2.jpeg

将以下代码复制到终端:

{
    "bridge": {
        "name": "YeeBridge",
        "username": "18:00:27:40:BC:1B",
        "port": 51825,
        "pin": "031-45-154"
    },
    
    "platforms": [
        {
            "platform" : "yeelight",
            "name" : "yeelight"
        }
    ]
}

粘贴完成后,按Esc键,输入 :wq(冒号不能少,并且是英文字符)然后回车。

WechatIMG8.jpeg

之后,便可以运行 HomeBridge :

homebridge

这一步完成之后,HomeBridge 就安装完毕并且开始运行, YeeLight 彩光灯也成功接入 Apple HomeKit ,打开 iOS 10 自带的家庭 App, 点击添加配件即可。会有两个配件,第一个是 YeeBridge ,这是一个桥接器;还有一个才是我们要控制的灯泡。

现在,你就可以享受「嘿 Siri ,帮我开个灯」了。

在树莓派启动后自动运行 HomeBridge 服务

然而我们的折腾完了吗?没有,远远没完。如果现在你关掉终端,你会发现,HomeBridge 停止运行了。我们不可能在电脑上挂着终端使树莓派一直运行这个服务,因此还有最后一步,把 HomeBridge 服务加入到树莓派的系统服务里。

首先我们要开启 root 账户,首先在终端输入:

sudo passwd root

然后会提示你设置 root 账户密码,第一次输入之后还要确认一次,一样两次输入不会有任何字符显示。输入完毕之后,启用 root 账户,输入以下命令:

sudo passwd --unlock root

然后会提示报错:passwd: password expiry information changed.,原因是新版的系统默认禁止 ssh 登录 root 账户,我们需要修改一下配置文件。在终端输入以下命令:

sudo nano /etc/ssh/sshd_config

用 Ctrl + W 搜索「 PermitRootLogin 」,找到之后将PermitRootLogin without-password改成PermitRootLogin yes,然后按 Ctrl + O 保存,回车之后退出编辑器。

GitHub 提供了三种让树莓派启动后自动运行 HomeBridge 服务的方法,我选择的是 init.d 的方式。打开这个网页 ,将文件下载到本地,然后将 template 重命名为 homebridge(或者任何你想要的名字) ,放到树莓派目录 /etc/init.d 下。注意这里一定要用 root 账户,否则会提示没有权限。由于我不会代码及编程,我用的是 WinSCP 登录 root 账户,熟悉代码的小伙伴可以用代码操作。

然后右键用 Text Editor 打开它,把开头的字符按照以下内容修改:

#!/bin/sh
### BEGIN INIT INFO
# Provides: homebridge
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

dir="/home/pi"
cmd="DEBUG=* /usr/local/bin/homebridge"
user="pi"

完成后保存,然后回到终端,依次输入以下代码:

sudo chmod 755 /etc/init.d/homebridge
sudo update-rc.d homebridge defaults

现在,你可以在终端输入 HomeBridge ,等待服务运行之后关掉终端,看是否可以继续使用家庭 App 开关灯泡;或者重启一下树莓派,看看 HomeBridge 服务是否正常运行。

如果以上均成功运行,那么恭喜你,一切都大功告成。

WechatIMG10.jpeg

后记

当初想要折腾 HomeKit 的初衷,就是为了好玩,但是折腾的过程总是辛苦而又迷茫的。面对着中文论坛社区里少之又少的教程,和蹩脚的英语阅读能力,加上我没有任何编程的基础,我走了很多弯路,整整花了三天时间才折腾完。但是折腾的乐趣就是在这里,当自己对着 Siri 喊一句「开灯」,然后台灯就亮起来的时候,真的觉得特别开心。

折腾成功之后,有很多朋友问我,能不能用普通的电器加一个 Wi-Fi 开关接入 HomeKit ,或者是其他各种脑洞大开的想法。我想其实都是可以的,网上我有看到过一些牛人的教程,变着法的去玩 HomeBridge。但是自己折腾起来确实是力不从心,文科生毕竟还是写点矫情小文章比较实际......(笑)

如果你感兴趣,可以不断去尝试。自动化、远程化、慵懒化,这便是我认为的智能未来生活。我折腾的智能宿舍不过是一个简单的起点,以后也许还会有更多的想法去实现。

最后,感谢 GitHub 上的无数个大神,和勇于探索的各位国人们。尽管我只是做了一点极其微小的模仿工作,但是没有他们的研究,我想我的这个想法永远只会是想法。还要感谢 @zzzzw 同学的帮助,在他的建议和修改下,简化了很多步骤。

相关参考资料