cnmb11 发表于 2017-9-7 10:21:51

RaspberryPi折腾记(贰)——搭建HomeBridge,桥接Apple HomeKit

本帖最后由 cnmb11 于 2017-9-7 11:33 编辑

[上期回顾]上期主讲内容:1. 在树莓派上安装Raspbian Jessie操作系统;2. 通过SSH和VNC远程登录树莓派;3. 实现树莓派的无线连接。详见:RaspberryPi折腾记(壹)——安装Raspbian Jessie系统及基础功能
    本期主要讲解在树莓派上搭建HomeBridge,桥接Apple的HomeKit(Apple的智能家居平台),实现在iOS设备上通过系统级应用Home(家庭App)和Siri语音控制智能家居设备(主要是米家生态链的智能设备)。

[第贰回]    搭建HomeBridge,桥接Apple HomeKit一.    HomeBridge目前支持的米家智能设备列表:1. 米家多功能网关升级版(二代)2. 米家智能插座-ZigBee版3. 米家智能插座-基础版4. 米家智能插座-USB版5. 米家智能插线板6. 青米智能插线板7. 青米智能插线板-USB版8. Yeelight床头灯9. Yeelight LED智能灯泡-彩光版10. Yeelight LED智能灯泡-白光版11. Yeelight LED-吸顶灯12. 米家LED智能台灯13. 米家空调伴侣14. Aqara空调伴侣15. 米家人体传感器16. 米家门窗传感器17. 米家温湿度传感器18. Aqara温湿度传感器19. 智米电风扇20. 米家小白摄像机(只能控制开关)21. 米家扫地机器人22. 米家空气净化器(正在适配)23. 米家无线开关(正在适配)24. Aqara墙壁开关-单火双键版25. Aqara墙壁开关-单火单键版26. Aqara墙壁开关-零火双键版27. Aqara墙壁开关-零火单键版28. Aqara86型无线开关-双键版29.Aqara86型无线开关-单键版30. Aqara86型墙壁插座31. 魔方控制器32. 米家烟雾报警器33. 米家天然气报警器34. Aqara窗帘电机35. Aqara水浸传感器… …    我手中的设备如下:1. 米家多功能网关升级版(二代)2. 米家智能插座-ZigBee版3. 米家智能插座-基础版4. 米家智能插线板5. Yeelight床头灯6. Yeelight LED智能灯泡-白光版7. 米家LED智能台灯8. 米家空调伴侣9. 米家温湿度传感器10. 米家小白摄像机11. 米家扫地机器人12. 米家无线开关    本教程只涉及到我有的设备,其它设备的教程请自行搜索教程(百度、Google、GitHub、NPM等网站)。    注:本教程中所涉及的软件和插件,均来自于开发者分享。

二.    修改Raspbian软件源地址1. 什么是软件源?    软件源是Linux系统(Raspbian是一个基于Debian的OS,Debian是基于Linux内核的OS)免费的应用程序安装仓库,很多的应用软件都会这收录到这个仓库里面。直接使用软件源中的软件进行安装就无需自行编译,这对于速度不快的树莓派来说能节省不少时间。
    软件源配置文件为/etc/apt/sources.list,里面写了你所用的软件源地址(注意不是软件安装包在这个文件夹,而是仅有服务器的描述信息,所有的软件安装获取还是需要联网的)。
    Rasbpian有一个官方的软件源(就是默认写在配置文件中的地址),然而官方的软件源在国外,下载速度很慢。国内一些大学和企业由于需要大量下载软件,或者为了公益目的,就会下载到自己的服务器上,提供更快的下载速度。    我们把软件源地址从默认的国外服务器切换到国内服务器上,有两个目的:1. 为了提高下载和安装软件的速度;
2. 为了确保下载的软件包是完整且可靠的。
2. 修改软件源1. SSH登录树莓派;


2. 编辑sources.list;    pi@raspberrypi:~$ sudo nano /etc/apt/sources.list
3. 在deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi前面加上 # 号,把这一条源地址注释掉;并在上一行空白处添加以下两条,每条一行;
[*]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

4. 编辑完毕,同时按下 Ctrl+O,点击 回车保存,再同时按下 Ctrl+X退出nano编辑器,返回 pi@raspberrypi:~$ 界面。
5. 更新软件源    pi@raspberrypi:~$ sudo apt-get update
三.    安装HomeBridge的依赖组件1. 安装node.js    pi@raspberrypi:~$ curl -sLhttps://deb.nodesource.com/setup_7.x | sudo -E bash -     pi@raspberrypi:~$ sudo apt-get install -y nodejs 2. 安装Avahi和相关依赖软件包     pi@raspberrypi:~$ sudo apt-get install -y build-essential    pi@raspberrypi:~$ sudo apt-get install -ylibavahi-compat-libdnssd-dev     pi@raspberrypi:~$ sudo npm install -g --unsafe-permhomebridge
四.    安装相关插件1. 安装MiAqara插件,支持米家二代多功能网关及子设备(米家智能插座-ZigBee版、米家温湿度传感器、米家无线开关);       pi@raspberrypi:~$ sudo npm install -g homebridge-mi-aqara2. 安装Yeelight插件,支持Yeelight LED智能灯泡-白光版和米家LED智能台灯;      pi@raspberrypi:~$ sudo npm install -g homebridge-yeelight
注:本次教程只涉及这两个插件,下次教程会有基础版插座、米家插线板、扫地机器人和小白摄像机。
五.    获取小米多功能网关的sid和password1. 找一台Android手机(不建议使用iPhone来获取,出故障的概率比较大);2. 下载 米家 App,打开并登陆你的小米账号;3. 找到多功能网关图标,点击图标下方的文字,进入多功能网关操作界面,点击左上角的…图标;4. 点击进入 关于;5. 疯狂点击底部的 插件版本,紧接着会出现 局域网通信协议 和 网关信息 ;6. 点击 网关信息,找到图示位置,抄写下来,这是网关的mac地址;7. 点击 加密,进入 局域网通信协议,在 局域网通信协议 后面 勾选,此时会出现一组密码,点击右边的 刷新(建议多刷新几遍),记下 密码(注意:如果密码是小写,就记录小写,如果是大写,就记录大写,必须区分大小写!)
六.    创建Config.json1. 在/home/pi/路径下新建.homebridge文件夹;      pi@raspberrypi:~$ sudo mkdir .homebridge
2. 在/home/pi/.homebridge/路径下创建config.json文件,并编辑。pi@raspberrypi:~$ sudo nano .homebridge/config.json

{    "bridge": {      "name": "Homebridge",      "username": "EE:22:11:EE:06:11",      "port": 51826,      "pin": “000-00-001”    },    "platforms": [      {            "platform": "MiAqaraPlatform",            "sid": ["你的二代网关的mac地址,去掉:号,改成小写"],            "password": ["你的二代网关的局域网通信协议的密码"]      },      {            "platform": "yeelight",            "name": "yeelight"      }}
Example:
3. 编辑完毕,同时按下 Ctrl+O,点击 回车保存,再同时按下 Ctrl+X退出nano编辑器,返回 pi@raspberrypi:~$ 界面;
七.    启动Homebridge1. 启动Homebridge;    pi@raspberrypi:~$ homebridge -D2. 如果出现MiAqaraPlatform start success和下面的Homebridge的代码(000-00-001),即启动成功。

八.    设置Homebridge开机自启动
1. Homebridge启动成功后,一旦我们退出SSH或者重启树莓派,Homebridge服务就会关闭,所以我们需要把Homebridge设置为开机自启动;
2. 解锁root权限,修改root密码;    pi@raspberrypi:~$ sudo passwd root    Enter new UNIX password: 输入你想设置的密码    Retype new UNIX password: 再次输入你想设置的密码    pi@raspberrypi:~$ sudo passwd --unlock root
3. 这里会提示passwd: password expiry information changed. 原因是新版的系统默认禁止 ssh 登录 root 账户,我们需要修改一下配置文件;    pi@raspberrypi:~$ sudo nano /etc/ssh/sshd_config4. 用 Ctrl + W 搜索 PermitRootLogin,找到之后将PermitRootLogin without-password改成PermitRootLogin yes,然后按 Ctrl+O 保存,回车之后,按 Ctrl+X 退出编辑器;
5. 在/etc/init.d/路径下创建homebridge自启动脚本;    pi@raspberrypi:~$sudo nano /etc/init.d/homebridge6. 在nano下编辑homebridge自启动脚本;#!/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 INFOdir="/home/pi"cmd="DEBUG=* /usr/local/bin/homebridge"user="pi"name=`basename $0`pid_file="/var/run/$name.pid"stdout_log="/var/log/$name.log"stderr_log="/var/log/$name.err"get_pid() {    cat "$pid_file"}is_running() {    [ -f "$pid_file" ] && ps -p `get_pid` > /dev/null 2>&1}case "$1" in    start)    if is_running; then      echo "Already started"    else      echo "Starting $name"      cd "$dir"      if [ -z "$user" ]; then            sudo $cmd >> "$stdout_log" 2>> "$stderr_log" &      else            sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &      fi      echo $! > "$pid_file"      if ! is_running; then            echo "Unable to start, see $stdout_log and $stderr_log"            exit 1      fi    fi    ;;    stop)    if is_running; then      echo -n "Stopping $name.."      kill `get_pid`      for i in 1 2 3 4 5 6 7 8 9 10      # for i in `seq 10`      do            if ! is_running; then                break            fi            echo -n "."            sleep 1      done      echo      if is_running; then            echo "Not stopped; may still be shutting down or shutdown may have failed"            exit 1      else            echo "Stopped"            if [ -f "$pid_file" ]; then                rm "$pid_file"            fi      fi    else      echo "Not running"    fi    ;;    restart)    $0 stop    if is_running; then      echo "Unable to stop, will not attempt to start"      exit 1    fi    $0 start    ;;    status)    if is_running; then      echo "Running"    else      echo "Stopped"      exit 1    fi    ;;    *)    echo "Usage: $0 {start|stop|restart|status}"    exit 1    ;;esacexit 0
7. 编辑完后,按 Ctrl+O 保存,回车之后,按 Ctrl+X 退出编辑器;
8. 赋予/etc/init.d/homebridge脚本 755 权限;    pi@raspberrypi:~$ sudo chmod 755 /etc/init.d/homebridge

9. 添加自启动管理;    pi@raspberrypi:~$ sudo update-rc.d homebridge defaults
10. 安装chkconfig;    pi@raspberrypi:~$ sudo apt-get install chkconfig
11. 将homebridge脚本添加到chkconfig;    pi@raspberrypi:~$ sudo chkconfig --add homebridge
12.重新加载服务;    pi@raspberrypi:~$ sudo systemctl daemon-reload
13. 重启树莓派,测试Homebridge是否可以自启动。    pi@raspberrypi:~$ sudo reboot
九.    iPhone&iPad添加设备1. iPhone&iPad在App Store上搜索 家庭 并下载安装;2. 打开家庭App,点击右上角的 + 号,选择添加配件,点击 没有代码或无法扫描 ;3. 界面会显示homebridge的图标,输入你的homekit代码,添加完成。详见:iPhone端操作视频

发表于 2017-9-7 12:17:00

非常感谢,详细的原创教程,支持楼主!

cnmb11 发表于 2017-9-7 13:55:32

Jones 发表于 2017-9-7 12:17
非常感谢,详细的原创教程,支持楼主!

:handshake

hongqiang 发表于 2017-9-9 16:59:13

说的很细致,感谢分享

myron412 发表于 2017-9-11 04:08:17

很详细,谢谢楼主分享

hihowru 发表于 2017-9-11 10:51:41

虽然我还没购入小米产品,不过还是支持您的分享,谢谢您:lol

mr-one 发表于 2017-9-11 13:20:17

very nice, support!!

isami2007 发表于 2017-9-11 16:08:36

好教程,收藏了!~

Zzh0725 发表于 2017-9-12 06:01:04

好教程。必须支持

inkool 发表于 2017-9-14 14:51:11

楼主的教程很详细
页: [1] 2 3 4 5
查看完整版本: RaspberryPi折腾记(贰)——搭建HomeBridge,桥接Apple HomeKit