起因
偶然看到JohnHarrod的一篇文章介绍将Yeelight彩光灯接入IOS的家庭App中去,并用Siri语音控制。只需买个灯泡就可在Mac上部署其支持的homebridge桥,因此心一痒就动手了。但出门总是要带走电脑的。于是我考虑用树莓派来做桥服务器。同时也规划下家里的智能家居,尽可能多的接入家中的设备,让生活更加便利。
目标是:
- 低成本构建高体验的智能家居,可以语音控制。
- 打造一个相对完整的智能家居体验,不仅限于灯光。
- 将不支持智能家居的旧设备也改造成智能设备。
- 可移植性强,方便搬家时带走。
效果见最后
准备
硬件成本核算:
- 树莓派3代B型 200元
- 树莓派电源(5V 2.5A) 安卓的2A充电器也行,2.5A可以支持高功率运行,算是为了日后准备吧。
- 16G SD卡(最好是class 10速度的) 50元
- 网线一根
- Yeelight灯泡 99元
- 小米网关二代 149元
- 小米温湿度感应器 49元
- 小米人体动作感应器 59元
- 小米门窗感应器 49元
- 小米智能插座Zigbee版:控制热水器 69元
- 小米 空调伴侣 暂时不支持homebridge 199元
- 罗技Harmony Hub(控制接入家中一切的红外设备:空调、电视机、音响、电扇、空气净化器、电动晾衣架。) 299元
Future work:
- Aqara墙壁开关(可移植性差,以后考虑)
- 门锁
- 电动窗帘:红外遥控电动窗帘+harmony即可
- 空气净化器(不想用小米的(链接),性能不够好,其他品牌的就得想办法自己折腾,可以找一下支持红外控制的净化器)
- 摄像头
- SSH指令(链接)
- 蓝牙设备(音箱)(链接)
- Home Assistant支持设备
不计空调伴侣, 总共1023元,不算Harmony的话应该724元,成本合理。
需要自备硬件
- 支持IOS10的手机或平板。。。毕竟是Homekit嘛,总要有iPhone的。
- 安卓手机一台(用来获取网关密码,因此借一台也可以)。
- 路由器。。。这个不会有人没有吧。
安装
Yeelight灯泡
Yeelight可以参考我之前写的yeelight安装指南。我的站点国内访问太慢,大家可以看站内JohnHarrod的文章,就是记得下载高版本NodeJs。
小米网关及相关感应器
- 将小米网关插电,下载“米家”App。将手机连入2.4Ghz的Wi-Fi网络,按照指示添加网关,然后添加其他的感应器。
获取网关的MAC地址及通讯密码
网关信息是之后的homebridge配置文件中需要的,但只能从安卓手机的“米家”App中可以获得。
- 点击App进入网关选项--》进入屏幕右上角的“...”--》进入“关于”--》连续按机屏幕下方版本号区域激活开发者模式
- 点击“局域网通讯协议”选项,打开局域网通讯协议,并记下密码
- 返回上一级菜单,开发者模式中会出现一个“网关信息”的选项--》记录MAC地址('mac'字段后面那一串6对的字母数字)
树莓派
树莓派是英国剑桥大学教授主持的一个致力于推广孩童计算机教育的硬件项目,主要使用的是Linux系统raspbian系统,也可以安装Debian GNU/Linux 、Fedora、Arch Linux 、RISC OS、二代B以上还支持Window10 IoT。
3代model B的配置:
- 搭载1.2GHz 的64位四核处理器(ARM Cortex-A53 1.2GHz 64-bit quad-core ARMv8 CPU)。
- 增加802.11 b/g/n无线网卡。
- 增加低功耗蓝牙4.1适配器。
主要是作为homebridge的服务器,使不支持homekit的设备被homekit识别。
不熟悉Linux命令的朋友,只要跟着复制粘贴命令就好了。
安装系统
我是选择在购买SD卡时让商家给我拷贝了一份系统进去,实际上也可以自己下载烧录到SD卡上。
- 我们下载的raspbian jessie版本系统,不同的版本在安装后续软件上会有不同的错误,我使用的是这个版本。树莓派系统下载地址
- Windows下面可以采用SDFormatter对SD卡进行格式化,再使用Window32 Disk Image来烧入SD卡中。(这一步就节约了1o元,所以建议直接买带系统的卡)。
- 连上电源线(mini USB)、网线直接连接到家里的路由器上、插入SD卡。系统会自动开机安装。
- 使用家里的电脑(同一个局域网网段下)打开终端,输入ssh登录命令,
ssh pi@raspberrypi.local#初始密码为raspberry
修改镜像源,原始的系统更新源在国内速度比较慢,导致安装其他程序时超时报错,可以更换成国内的或者开启SS服务。
使用nano文本编辑器编辑源文件,系统自带的vi的操作非常反直觉,nano也是系统自带的,操作接近于普通的文本编辑器。使用ctrl+O保存,ctrl+X来退出。建议编辑前采用cp命令备份一份原文件,或者按照如下操作。
pi@raspberrypi:~$ sudo nano /etc/apt/sources.list 使用#注释掉原有的源地址,使用鼠标右击粘贴上新的源。
deb http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib deb-src http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib
更新
pi@raspberrypi:~$sudo apt-get update && sudo apt-get upgrade安装NodeJS及依赖和Homebridge及相关插件
安装NodeJS,注意至少要安装6.0以上的版本,不然连接网关后启动会不断报错。
curl -sL https://deb.nodesource.com/setup_6.x |sudo -E bash - sudo apt-get install -y nodejssudo apt-get install -y build-essential
安装Avahi
sudo apt-get install libavahi-compat-libdnssd-dev安装Homebridge
sudo npm install -g --unsafe-perm homebridge hap-nodejs node-gypcd /usr/local/lib/node_modules/homebridge/sudo npm install --unsafe-perm bignumcd /usr/local/lib/node_modules/hap-nodejs/node_modules/mdnssudo node-gyp BUILDTYPE=Release rebuild
安装homebridge-aqara, aqara协议的网关及感应器
sudo npm install -g homebridge-aqara安装homebridge-yeelight, yeelight灯泡的插件
sudo npm install -g homebridge-yeelight创建homebridge的配置文件config.json
mkdir /home/pi/.homebridge/sudo nano /home/pi/.homebridge/config.json
Homebridge配置文件的内容及格式
需要将网关的密码和MAC地址,以及aqara网关及yeelight的配置信息。#注释部分请删除
PIN需要记下来,之后用于加入家庭app
{
"bridge": {
"name": "YeeBridge",
"username": "随意的MAC地址",
"port": 51827, # 可用的端口号
"pin": "031-45-157" # 最后连入家庭app时需要输入的设备验证码,保证格式对可以随便填写
},
"platforms": [
{
"platform" : "yeelight",
"name" : "yeelight"
},
{
"platform" : "AqaraPlatform",
"sid" : ["283c07f9946a"], #填写网关的MAC地址,小写,连写
"password" : ["网关密码"]
}
]
}配置开机启动homebridge
配置到这里,只要在终端输入homebridge就可以运行了。但是关闭终端后就会关闭,而且万一出现断电重启的情况,服务就会关闭。因此我们要配置一个开机启动homekit的配置。homebrige的github页面上推荐了三种方式,我采用里面最方便的方式init.d的方法。
首先从这里下载一个配置文件,并复制所有内容。下载
然后使用如下命令在init.d目录下创建一个homebridge启动的文件:
sudo nano /etc/init.d/homebridge[进入后粘贴上下载的配置文件的内容]
修改文件内容如下,不要忘记provide也要写:
#!/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/homebridgesudo update-rc.d homebridge defaults
启动:
sudo /etc/init.d/homebridge start之后在关机重启,homebridge就会自动启动了。
添加所有红外设备进Homekit
发现一个罗技Harmony Hub的红外遥控器设备,支持28万种设备(支持红外学习新设备),300元以内,它也有插件接入homebridge。安装后,家中红外设备,例如空调、电视机、空气净化器、电动晾衣架都可以通过Siri控制。根据说明接入红外设备,最多7个。
安装过程:
全程需要全局科 学 上 网
- 下载电脑客户端MyHarmony,有Mac和Win版。
- USB连接Hub到电脑,识别Hub。网络连接2.4Ghz的WiFi。
- 识别到WiFi,输入WiFi密码。
- 注册账户用于在不同设备上管理设置,建议用邮箱。
- 提示你要连接Remote遥控器才可以继续,点击右下角的Skip键。虽然上面写的是只有Remote的情况下的Skip,实际上也适用于只有Hub的情况下。
- 识别完成,进入管理界面。会提示你给你的Hub起一个名字。然后提示你添加设备。
- 通过设备的品牌名和设备号(model)来添加,数据库内搜索不到的,可以手动添加,并通过红外学习遥控器。
- 左边菜单栏有Activity,可以设置自动化控制活动。例如:看电视=打开电视+机顶盒+音响+调整到你最喜欢的频道。最后每个Activity会作为一个插座类设备添加到Homekit中。
- 下面是设置Harmony的插件和配置文件。
通过终端进入树莓派终端,然后安装Harmony Hub的插件
sudo npm -g install homebridge-harmonyhub修改配置文件,将config.json修改成如下:
{
"bridge": {
"name": "YeeBridge",
"username": "随意的MAC地址",
"port": 51827, # 可用的端口号
"pin": "031-45-157" # 最后连入家庭app时需要输入的设备验证码,保证格式对可以随便填写
},
"platforms": [
{
"platform" : "yeelight",
"name" : "yeelight"
},
{
"platform" : "AqaraPlatform",
"sid" : ["283c07f9946a"], #填写网关的MAC地址,小写,连写
"password" : ["网关密码"]
},
{
"platform": "HarmonyHub",
"name": "Harmony Hub"
}
]
}最后重启homebridge服务。
添加设备进入家庭App
这里可以参考Apple官方的操作指南
将iphone连入同一个局域网,打开家庭App,新建家庭就可以添加homebridge了。
这个时候你会发现,app问你要一个验证码,用来验证设备。正规的homekit设备是有这个的,但是我们的并没有,这个东西我一开始找了5分钟,才发现其实启动homebridge服务器的时候,终端就已经生成了,我们找到后手动输入就好了。
就是配置文件里PIN的部分。
此时,所有的设备都会出现在App里,你可以按住,选择编辑,修改他们所在房间和名字类别。
远程控制及自动化
远程控制
为了保证安全,Homekit的默认支持环境是局域网下,但是如果你有ipad可以升级到iOS10的系统,或者Apple TV四代以上,就可以在设置里将其配置为中控,这样在家外也可以控制这些设备了。
如果没有这些设备,也没关系,米家app里也有可以远程控制的。
自动化
自动化可以让你设置各种规则,来自动控制你家中的设备。其格式为当发生什么情况时,执行什么操作。
可以使用各种设备的信息状态、时间来作为条件控制其他设备甚至自动化条目。
例如:
IF(当):网关光感器检测到暗,同时有人进入卧室
执行:打开卧室灯
IF(当):温度检测器检测到超过30度,且门窗关闭,且家中感应到有人
执行:打开空调,设置为制冷模式25度。需要小米空调伴侣或者万能遥控器
IF(当):有窗打开,或温度低于23度,或家中无人
执行:关闭空调
IF(当):网关暗,客厅感应有人
执行:打开客厅夜灯,3分钟后关闭
坑
除非有特殊需求,不要给树莓派设置静态IP,因为yeelight采用TCP进行通讯,一旦路由器的DHCP给Yeelight设备配置了不同网段的IP,会导致无法控制灯泡。在此鸣谢Yeelight的员工,晚上8点多还和我积极的沟通,帮我找到问题。
NodeJs版本不要太低,也别太高,5-6最为合适,低了网管运行不了,高了会出现还没解决的问题。
小米的其他设备加入homebridge的进度不是很快,在知乎上关注负责这块的工程师,看他快有一个月没有大改动了。但说会支持空调助手,我觉得支持万能遥控器比较重要,可以快速提高可玩性。
给树莓派准备点散热垫,或者金属立柱散热,风扇散热效果不怎么好。还很闹。
最后效果




