Created: June 22, 2021 3:59 PM
Tags: HomeKit, 智能家居, 树莓派
此文曾发布在知乎(https://zhuanlan.zhihu.com/p/31423265)和少数派上,此处是做一个归档,实际写作时间是在2017年
这篇文章是我半年前瞎折腾树莓派的时候写的,本来不适合放在这个专栏里的,毕竟和我司其他大佬的文章比起来,这篇东西实在没有什么技术含量。不过它也不是那么一无是处,至少任何人都可以轻易地读懂并且实现这篇文章里的东西,并且从中体验到coding的乐趣。
Homekit是Apple自iOS10开始提供的智能家居组件,允许第三方将认证过的智能硬件接入iOS系统中,并且通过Siri控制。并且在局域网内使用端到端加密,在安全性上非常不错。而缺点也显而易见,认证硬件贵且少。不过这都不是问题,因为我们有homebridge。
根据苹果HomeKit组前员工写的破解论文,使用NodeJS写的模拟HomeKit API的server框架,在Github上已有7000多个Star。可以通过写对应要求的插件将未被认证的智能设备接入HomeKit。
树莓派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元
小米空气净化器2代 699元
不计空调伴侣和净化器, 总共1023元。
用于自己烧录系统到SD卡
下载yeelight App,按照指示连接上灯泡,然后打开极客模式即可。
网关信息是之后的homebridge配置文件中需要的,但只能从安卓手机的“米家”App中可以获得。
树莓派是英国剑桥大学教授主持的一个致力于推广孩童计算机教育的硬件项目,主要使用的是Linux系统raspbian系统,也可以安装Debian GNU/Linux 、Fedora、Arch Linux 、RISC OS、二代B以上还支持Window10 IoT。
3代model B的配置:
主要是作为homebridge的服务器,使不支持homekit的设备被homekit识别。
不熟悉Linux命令的朋友,只要跟着复制粘贴命令就好了。
我是选择在购买SD卡时让商家给我拷贝了一份系统进去,实际上也可以自己下载烧录到SD卡上。
不熟悉vi的朋友可以使用nano文本编辑器编辑源文件,操作接近于普通的文本编辑器。使用ctrl+O保存,ctrl+X来退出。建议编辑前采用cp命令备份一份原文件。或者使用下面的命令一步将树莓派官网和第三方源替换成清华源。
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
添加如下内容:
network={ ssid="wifiname" psk="password" }
保存后,断开网线,几秒内就会连上wifi
sudo sed -i 's#://archive.raspberrypi.org/debian#s://mirrors.tuna.tsinghua.edu.cn/raspberrypi#g' /etc/apt/sources.list.d/raspi.list sudo sed -i 's#://archive.raspberrypi.org/debian#s://mirrors.tuna.tsinghua.edu.cn/raspberrypi#g' /etc/apt/sources.list.d/raspi.list
sudo apt-get update && sudo apt-get upgrade
首先检查一下,所用树莓派的芯片版本
uname -a
我的返回芯片版本是armv7l:
Linux raspberrypi 4.4.50-v7+ 970 SMP Mon Feb 20 19:18:29 GMT 2017 armv7l GNU/Linux
使用如下命令去下载安装node6,node7还不太稳定,node5对homebridge的兼容不是很好
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - sudo apt-get install -y nodejs
sudo apt-get install libavahi-compat-libdnssd-dev
sudo npm install -g --unsafe-perm 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
sudo npm install -g homebridge-aqara
sudo npm install -g homebridge-yeelight
npm install -g homebridge-mi-air-purifier miio
断开其他智能设备,只保留空气净化器。再输入下面的命令获取净化器的IP和Token
miio --discover --sync
可能会返回多个下列格式的设备信息:
Device ID: 49466088 Model info: Unknown Address: 192.168.1.8 Token: 6f7a65786550386c700a6b526666744d via auto-token Support: Unknown
记下address和token,之后要写到配置文件中
最新版0.5.1有bug,暂时无法启动,已经提了issue,等待作者更新。
sudo npm install -g [email protected]
同样使用上面的miio --discover --sync
来发现空调伴侣及关联的温湿度感应器的device_id(填写在sensorSid值'lumi.'后)
后来发现了罗技Harmony Hub的红外遥控器设备,支持28万种设备(支持红外学习新设备),300元以内,它也有插件接入homebridge。安装后,家中红外设备,例如空调、电视机、空气净化器、电动晾衣架都可以通过Siri控制。根据说明接入红外设备,最多7个。
安装过程:
全程需要全局科 学 上 网
通过终端进入树莓派终端,然后安装Harmony Hub的插件
sudo npm -g install homebridge-harmonyhub
mkdir /home/pi/.homebridge/ sudo nano /home/pi/.homebridge/config.json
需要将网关的密码和MAC地址,以及aqara网关及yeelight的配置信息。#注释部分请删除
pin之后用于加入iphone中的家庭app
{ "bridge":{ "name":"YeeBridge", "username":"任意MAC地址", "port":51827, "pin":"031-45-157" }, "platforms":[ { "platform":"yeelight", "name":"yeelight" }, { "platform":"AqaraPlatform", "sid":[ "填写网关的MAC地址,小写,连写" ], "password":[ "网关密码" ] }, { "platform":"HarmonyHub", "name":"Harmony Hub" }, { "platform":"XiaoMiAcPartner", "ip":"空调伴侣ip", "token":"空调伴侣token", "accessories":[ { "name":"Ac Partner", "type":"climate", "sensorSid": "lumi.{device_id}" } ] } ], "accessories":[ { "accessory":"MiAirPurifier", "name":"Air Purifier", "ip":"净化器IP", "token":"ADDRESS_OF_THE_AIR_PURIFIER", "showTemperature":true, "showHumidity":true, "showAirQuality":true } ] }
配置到这里,只要在终端输入homebridge就可以运行了。但是关闭终端后就会关闭,而且万一出现断电重启的情况,服务就会关闭。因此我们要配置一个开机启动homekit的配置。homebrige的github页面上推荐了三种方式,我采用里面最方便的方式init.d的方法。
首先从这里下载一个配置文件,并复制所有内容。下载
然后使用如下命令在init.d目录下创建一个homebridge启动的文件:
sudo nano /etc/init.d/homebridge
将下面的内容直接复制覆盖文件中的部分,注意 cmd后面填写的位置是你homebridge所在的目录,会出现两种情况。查找homebridge的位置使用如下命令:
`which homebrige
#!/bin/sh
dir="/home/pi"
cmd="DEBUG=* /usr/local/bin/homebridge"
user="pi"`
修改文件的权限:
sudo chmod 755 /etc/init.d/homebridge sudo update-rc.d homebridge defaults
重启后就会自动启动,或者手动启动:
sudo /etc/init.d/homebridge start
这里可以参考Apple官方的[操作指南](在 iPhone、iPad 和 iPod touch 上使用“家庭”应用)
将iphone连入同一个局域网,打开家庭App,新建家庭就可以添加homebridge了。
这个时候你会发现,app问你要一个验证码,用来验证设备。正规的homekit设备是有这个的,但是我们的并没有,这个东西我一开始找了5分钟,才发现其实启动homebridge服务器的时候,终端就已经生成了,我们找到后手动输入就好了。
就是配置文件里PIN的部分。
此时,所有的设备都会出现在App里,你可以按住,选择编辑,修改他们所在房间和名字类别。
为了保证安全,Homekit的默认支持环境是局域网下,但是如果你有ipad可以升级到iOS10的系统,或者Apple TV四代以上,就可以在设置里将其配置为中控,这样在家外也可以控制这些设备了。
如果没有这些设备,也没关系,米家app里也有可以远程控制的(就是非常难用而已)。
自动化可以让你设置各种规则,来自动控制你家中的设备。
例如:
IF(当):网关光感器检测到暗,同时有人进入卧室
执行:打开卧室灯
IF(当):温度检测器检测到超过30度,且门窗关闭,且家中感应到有人
执行:打开空调,设置为制冷模式25度。需要小米空调伴侣或者万能遥控器
最后附上一个第一次成功时录的小视频