自从上回决定在宿舍智能化上瞎折腾点什么东西之后,首先就注意到了自己的这个台灯。每次需要点开特定的 App 进行开关,而且在断网之后就无法使用,最致命的一点是官方 App 的 Widget 经常挂掉,导致了体验的割裂和不适。偶然在 YeeLight 的论坛里看见了这款灯泡接入 Apple HomeKit 的方法,便决定抱着试一试的折腾心理玩一把。
写这篇教程的目的,算是一个抛砖引玉。这也许是中文网站上最简单的倒腾 HomeKit 的教程,只需要准备好相应的硬件,跟着步骤一步一步走,大约半个小时就能完成。当然,折腾所在的目的是为了那种成功之后的喜悦感,市面上有很多产品也许会比这一套系统便宜,但是这样就再也享受不到 Do It Yourself 的乐趣了。
准备好了吗?那我们就开始吧。
前期探索
首先我想把 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 -- ,如下图所示。
将以下代码复制到终端:
{
"bridge": {
"name": "YeeBridge",
"username": "18:00:27:40:BC:1B",
"port": 51825,
"pin": "031-45-154"
},
"platforms": [
{
"platform" : "yeelight",
"name" : "yeelight"
}
]
}
粘贴完成后,按Esc键,输入 :wq(冒号不能少,并且是英文字符)然后回车。
之后,便可以运行 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 服务是否正常运行。
如果以上均成功运行,那么恭喜你,一切都大功告成。
后记
当初想要折腾 HomeKit 的初衷,就是为了好玩,但是折腾的过程总是辛苦而又迷茫的。面对着中文论坛社区里少之又少的教程,和蹩脚的英语阅读能力,加上我没有任何编程的基础,我走了很多弯路,整整花了三天时间才折腾完。但是折腾的乐趣就是在这里,当自己对着 Siri 喊一句「开灯」,然后台灯就亮起来的时候,真的觉得特别开心。
折腾成功之后,有很多朋友问我,能不能用普通的电器加一个 Wi-Fi 开关接入 HomeKit ,或者是其他各种脑洞大开的想法。我想其实都是可以的,网上我有看到过一些牛人的教程,变着法的去玩 HomeBridge。但是自己折腾起来确实是力不从心,文科生毕竟还是写点矫情小文章比较实际......(笑)
如果你感兴趣,可以不断去尝试。自动化、远程化、慵懒化,这便是我认为的智能未来生活。我折腾的智能宿舍不过是一个简单的起点,以后也许还会有更多的想法去实现。
最后,感谢 GitHub 上的无数个大神,和勇于探索的各位国人们。尽管我只是做了一点极其微小的模仿工作,但是没有他们的研究,我想我的这个想法永远只会是想法。还要感谢 @zzzzw 同学的帮助,在他的建议和修改下,简化了很多步骤。