几十块实现用siri控制家电

2017-07-05
3月份第一次写这篇文章的时候,还没买树莓派,在这个orangepi上安装的流程和树莓派完全相同,后来用树莓派搞的时候直接就照搬了,一下内容是在orangepi和raspberrypi上安装和配置期间陆陆续续完成的,私以为对linux系统的设备都有参考价值。

在orangepi安装homekit

在虚拟机尝试过homebridge之后,大概知道这东西怎么运行了,所以是时候入手一块树莓派了。但是树莓派并没有很便宜,我在淘宝找了一晚上,终于找到了orangepi这个东西,只要59块,512内存,H2+的CPU,还支持wifi,跑个homebridge和homeassistant应该问题不大。于是三天后,一块orangepi就到了。

准备

官方下载了ubuntu server的img,用Etcher烧录到tf卡(win下用win32 diskimager)。插上内存卡,插网线,通电。路由器查看ip地址,然后用终端ssh登录到orangepi。

ssh root@192.168.2.241 -p 22

然后按照惯例跑一遍

sudo apt-get update
sudo apt-get upgrade

其实我也不知道为啥要跑这个,反正所有的教程都有跑这些东西,所以我也跑一边。时间大约20分钟。

安装homebridge和homeassistant

安装依赖包

homebridge需要nodejs和npm,nodejs需要curl,还要git,所以:

sudo apt-get install -y samba screen git

sudo apt-get install -y curl apt-transport-https ca-certificates
curl –fail -ssL -o setup-nodejs https://deb.nodesource.com/setup_6.x
sudo bash setup-nodejs
sudo apt-get install -y nodejs build-essential

另外,homebridge需要avahi依赖包:

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

安装homebridge

根据homebridge的GitHub页面 上的readme,用npm安装

sudo npm install -g –unsafe-perm homebridge

安装可能会失败,失败的话多跑几次就可以了,我就这样弄好的。
安装完之后测试一下homebridge能不能正常运行

homebridge

不出意外的话homebridge已经开始运行了,并且会出现homekit的匹配ID

control+c退出来,进行下一步。

安装homeassistant

安装依赖包

homeassistant需要python和pip,python已经是系统集成了的,所以装个pip就行了

sudo apt-get install python3-pip

安装homeassistant

根据homeassistant页面上的指南,直接安装就行了

pip3 install homeassistant

安装完成之后打开homeassistant的图形界面:

hass –open-ui

这样才会自动生成一个configuration.yaml文件,如果直接hass的话会因为缺少yaml报错,所以现用以上命令执行一下,之后再用hass就可以了。
然后在浏览器打开 http://localhost:8123/ 就可以看到homeassistant的控制面板了。

control+c退出来,进行下一步。

安装homebridge-homeassistant插件

把homebridge和homeassistant链接起来,就需要用到这个插件。

sudo npm install -g homebridge-homeassistant

配置两个插件

在路由器的dhcp服务器上可以看到broadlink的IP和mac地址,复制下来。
打开homeassistant的配置文件,把broadlink的设备添加进去。

cd /.homeassistant
sudo nano configuration.yaml

然后会打开一个文本编辑器
把以下的内容复制到文本编辑器最末端

1
2
3
4
switch:
platform: broadlink
host: IP_ADDRESS
mac: 'MAC_ADDRESS'

这里要补充以下,由于md语法的问题,好像空格不会显示。第一行的switch顶格,以下三行都要缩进两个空格。
IP地址和mac就是刚才在DHCP服务器上记录的。

然后control+x,y,return,退出来就完成了yaml的配置,再打开homeassistant

hass

此时终端上就会显示找到了broadlink设备,再过一会儿homeassistant服务就打开了。

给homeassistant添加broadlink的红外命令

再在浏览器打开刚才那个8123的网页,进入homeassistant的控制面板,在左边列表里找到development tools,里面第一个图标就是Call Service,用这个可以学习红外信号的那个码,至于是什么码我也不知道
具体操作很简单,我就不多说了。
然后会在终端里面看到那个码,复制下来再添加到homeassistant的yaml文件里。
最终在yaml里就有broadlink设备的信息和遥控器的命令了

1
2
3
4
5
6
7
platform: broadlink
host: IP_ADDRESS
mac: 'MAC_ADDRESS'
switches:
reciever:
command_on: 'switch_packet on'
command_off: 'switch_packet off'

同样是yaml语法,要注意缩进。

control+x保存并退出,homeassistant的配置文件就编辑好了,再hass的话就可以在homeassistant的控制面板上看到刚才设置的开关了。

将homebridge连接到homeassistant

第一次执行homebridge的时候,应该有人注意到缺少config.json文件,所以现在要给homebridge添加一个config.json文件。

cd /.homebridge
sudo nano config.json

编辑好以下的文本,复制到nano编辑器中
其中 第4行的mac地址要改为开发板的mac地址,13行的host要改为开发板的ip地址:8123

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"bridge": {
"name": "Homebridge",
"username": "AB:CD:EF:12:34:56",
"port": 51826,
"pin": "123-45-678"
},

"platforms": [
{
"platform": "HomeAssistant",
"name": "HomeAssistant",
"host": "http://192.168.2.241:8123",
"password": "raspberry",
"supported_types": ["fan", "garage_door", "input_boolean", "light", "lock", "media_player", "rollershutter", "scene", "switch"]
}
]
}

复制进去直接保存就行了。

然后运行homebridge

homebridge

应该会卡在homeassistant的步骤,所以要另外开一个终端,运行homeassistant,然后再在这个终端里运行homebridge。

一番尝试之后,是不是homebridge也运行起来了?

ios端设置

在手机上打开homekit的应用”家庭“,然后将homebridge添加到家庭中,接下来的操作就不多说了,太简单了。

设置两个应用的开机自动启动

2017-03-26 凌晨四点在家里居然成功了。homeassistant的自动启动,按照官方的文本就可以了,但是要等一等……我是真的傻眼了……
homebridge通过rc.local实现自启,homeassistant通过init.d方式也实现了。

homebridge - rc.local

rc.local确实好用,并且稳定可用。每次树莓派开机都能自动运行hb,但是有一个缺点就是调试的时候十分不方便,killall一下,就没法再启动,所以用init.d来实现开机服务项更加理想。

homebridge - init.d

sudo nano /etc/init.d/homebridge
复制这一段进nano编辑器并保存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/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/bin/homebridge"
user="pi"

这边提一点,原文中的这个init.d文件里的cmd=”DEBUG路径,对应的是 /usr/local/bin/homebridge,由于raspbian的文件路径不太相同,所以改为 /usr/bin/homebridge。

然后赋予权限

sudo chmod 755 /etc/init.d/homebridge
然后添加到开机任务
sudo update-rc.d homebridge defaults

这样开机启动项就添加完成了,可是手动打开一下

sudo /etc/init.d/homebridge start

同样的,stop/restart也可以实现。
检查日志

tail -f /var/log/homebridge.log
tail -f /var/log/homebridge.err

homeassistant -init.d

参考官网文档一次完成,这里不加以赘述


参考资料
·homebridge
·homeassistant
·老高的博客
·借助树莓派与 HomeBridge ,将 YeeLight 彩光灯接入 Apple HomeKit
·解放你的双手——让普通家电也能被siri控制
Running HomeBridge on a Raspberry Pi