使用homebridge以及IRkit来声控电灯开关

需要的东西

  • 树莓派。作为用来跑homebridge的服务器。
  • IRkit。请上Amazon自行购买。
  • 带遥控的灯。

跳过的准备阶段

按照irkit的说明把初始化,连上家里的无线网。 树莓派自然也是要安装完系统这种。

开搞

  1. 树莓派安装node之后,需要安装 homebridge以及 homebridge的irkit plugin。
    我树莓派的系统是ubuntu-mate 16.04, 个人偏好使用anyenv这个工具安装管理所有常用编程语言。
1
2
3
4
$ sudo apt-get install libavahi-compat-libdnssd-dev

$ npm install -g --unsafe-perm homebridge
$ npm install -g homebridge-irkit
  1. 建立homebridge的config文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# ~/.homebridge/config.json
{
"bridge": {
"name": "Homebridge",
"username": "CD:22:3D:E3:CE:30",
"port": 51826,
"pin": "031-45-156"
},

"description": "The SAMPLE",

"platforms": [],

"accessories": [
{
"accessory": "IRKit",
"name": "電気",
"irkit_host": "irkitxxxxx.local",
"on_form": {"format":"raw","freq":38,"data":[省略]},
"off_form": {"format":"raw","freq":38,"data":[省略]}
}
]
}

这里的 on_formoff_form 其实是我们要post给irkit的内容。irkit接收外界的http的request然后会根据我们post的内容发出信号控制开关。

那么我们肿么知道开关电灯要发出什么信号呢?

答案是,我们先把遥控器对准irkit射一下。然后利用irkit提供的api来获取刚刚irkit接收到的遥控器发来的信号。

1
2
3
4
5
6
7
% curl -i "https://irkitxxxxx.local/messages" -H "X-Requested-With: curl"
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Server: IRKit/2.1.3.13.gbe33d36
Content-Type: text/plain

{"format":"raw","freq":38,"data":[18031,8755,1190,1190,1190,3341,1190,3341,1190,3341,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,1190,1190,3341,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,1190,3341,1190,3341,1190,3341,1190,3341,1190,3341,1190,65535,0,9379,18031,4400,1190]}

注意,我们get了一次之后,内容就清空了,只有我们再射一次,才能再get到内容。
总之,分别获取一下开和关的按钮的数据,填入相应的on_formoff_form就行了。

  1. 试一下

在树莓派上启动homebridge。然后打开iphone,找到home那个应用,连上家里wifi之后自动就能检索到我们的开灯关灯设备了。
把siri喊出来试一下呗。

效果如下

https://pi.bocchi.tokyo/index.php/s/wqW8wysOQEU84KS