起因
偶然看到JohnHarrod的一篇文章介绍将Yeelight彩光灯接入IOS的家庭App中去,并用Siri语音控制。只需买个灯泡就可在笔记本上部署其支持的homebridge桥,因此心一痒就动手了。但出门总是要带走电脑的,中控一消失所带来的方便也就消失了。于是我考虑用树莓派来做桥服务器。同时也规划下家里的智能家居,让生活更加便利。
目标是:
低成本构建高体验的智能家居。
将不支持智能家居的旧设备也改造成智能设备。
效果见最后
准备
硬件:
树莓派3代B型
树莓派电源(5V 2.5A) 安卓的2A充电器也行,2.5A可以支持高功率运行,算是为了日后准备吧。
16G SD卡(最好是class 10速度的)
网线一根
Yeelight灯泡
小米网关二代
小米温湿度感应器
小米人体动作感应器
小米门窗感应器
小米智能插座Zigbee版:控制热水器
小米 空调伴侣 暂时不支持homebridge
Future work:罗技Harmony Hub,控制接入家中一切的红外设备:空调、电视机、音响、电扇、空气净化器、电动晾衣架。
不计空调伴侣, 总共600多元
需要自备硬件
支持IOS10的手机或平板。。。毕竟是Homekit嘛,总要有iPhone的。
安卓手机一台(用来获取网关密码,因此借一台也可以)。
路由器。。。这个不会有人没有吧。
安装
Yeelight灯泡
Yeelight可以参考我之前写的yeelight安装指南。
小米网关及相关感应器
将小米网关插电,下载“米家”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 nodejs
sudo 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-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
安装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”#!/bin/sh
修改文件的权限:
sudo chmod 755 /etc/init.d/homebridge
sudo update-rc.d homebridge defaults
启动:
sudo /etc/init.d/homebridge start
之后在关机重启,homebridge就会自动启动了。
未来计划-添加所有红外设备进Homekit
发现有一个罗技Harmony Hub的红外遥控器设备,支持28万种设备,300元以内,它也有插件接入homebridge。
安装后,家中红外设备,例如空调、电视机、空气净化器、电动晾衣架都可以通过Siri控制。
安装过程:
下载Harmony Hub的安卓或者iOS软件,根据说明接入红外设备,最多7个。
通过终端进入树莓派终端,然后安装Harmony Hub的插件
npm -g install homebridge-harmonyhub
修改配置文件,在config.json文件的platforms部分的yeelight代码块后面拷贝如下内容:
{
“platform”: “HarmonyHub”,
“name”: “Harmony Hub”
},
添加设备进入家庭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的进度不是很快,在知乎上关注负责这块的工程师,看他快有一个月没有大改动了。但说会支持空调助手,我觉得支持万能遥控器比较重要,可以快速提高可玩性。
给树莓派准备点散热垫,或者金属立柱散热,风扇散热效果不怎么好。还很闹。
最后效果