Siri 帮我开灯

去年就说了,今年会做一些物联网的小东西,这里就先发一篇读者自己研究的文章,给大家起个头,其实现在物联网并不需要什么太高深的硬解知识或者技术了,只要大家感兴趣,都可以很方便的用一些手边很方便能买到的设备来玩转物联网~

先上图,不废话(图太大了,还是算了)

苹果自从发布了 HomeKit,可以方便的把家里的智能设备连接在一起,结合 Siri 可以说说话就让家里的设备运转起来。但是苹果没有认证的设备,我们还是没有办法使用的。好在有nfarina逆向了苹果的协议,做出了homebridge才使得众多智能设备接入 HomeKit 成为现实。

材料准备

  1. 树莓派(我手上的是树莓派 3B)
  2. Yeelight 灯一个(我用的是 Yeelight 台灯)
  3. iPhone 或者 iPad 一个,要求 iOS10 以上(这里我使用 iPad)

Yeelight 设置局域网控制(极客模式)

先说一下 Yeelight 的极客模式,这里极客模式和局域网控制是一个东西,我刚买的时候还是极客模式,几个月之后极客模式变成了局域网控制。我特地去问了客服,这两个是一个东西,客服截图上显示的还是极客模式,而我这里显示的却是局域网控制。如果你手上也是显示的是局域网控制,不要奇怪,当成一样的就好了,不影响使用。

我们先从灯的设置开始。先用手机下载一个 Yeelight 的 APP(应用商店里搜一下就有了),输入账号密码登录。登录之后需点击右上角的加号添加一台设备,选择你手上所使用的设备,我这里是台灯。下图是添加好的样子,添加过程中需要输入 WiFi 密码。

连接好之后,点击刚刚添加的台灯,进入控制页,选择右下角的三角形。

在弹出的页面中选择局域网控制(极客模式)

把局域网控制的开关给打开

Yeelight 台灯的设置就这些,没有了。

树莓派的配置

这里默认已经在树莓派上装好了系统,并且接上电源,连接了网络并且要和 Yeelight 灯在同一个局域网。没有的话参考树莓派入门。不用树莓派用其它的也是可以的,需要根据自己的系统进行相应的调整。

安装 Node.js

首先打开终端,通过ssh连接上树莓派,我们的操作都是在命令行下进行。Windows 可以使用 Xshell、PuTTY 等工具。

ssh pi@192.168.1.x #这里换成你自己的IP,回车后输入密码

接下来安装 Node.js

curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -sudo apt-get install -y nodejs
node -v # 查看一下是否安装成功,成功会输出类似 v9.x.x

为 npm(node 的包管理工具,安装好 Node.js 就有) 配置淘宝源,在终端中输入vi .npmrc 按下i后输入下面内容

registry = https://registry.npm.taobao.org

输好后按下ESC(一般在 F1 旁边),输入:,接着按下wq回车。 不做这一步也是可以的,但是国内速度可能会稍慢。

安装 homebridge

装好了 Node.js 就可以安装 homebridge,homebridge 是一个把设备接入 HomeKit 的工具(类似桥梁的作用),没有它就不能使用没有经过苹果认证的设备。

sudo apt-get install libavahi-compat-libdnssd-dev 
sudo npm install -g --unsafe-perm homebridge hap-nodejs node-gyp

安装 Yeelight 插件

装好了 homebridge 还需要装上插件才能使用对应的智能设备,这里我使用的 Yeelight 台灯,所以还要安装 homebridge-yeelight 这个插件。

sudo npm install -g homebridge-yeelight

插件配置

插件装好了之后,我们需要配置一下让 homebridge 识别我们。

cd ~/.homebridge  # 没有的话手动创建,使用 mkdir ~/.homebridgevi config.json

打开文件之后按下i键,复制下面的内容到里面。

{
    "bridge": {
        "name": "Homebridge",
        "username": "CC:22:3D:E3:CE:30",
        "port": 51826,
        "pin": "031-45-154"
    },

    "platforms": [
        {
            "platform" : "yeelight",
            "name" : "yeelight"
        }
    ]}

写好之后按下ESC,输入:后再输入wq回车,该操作会保存文件并退出vi回到终端。 解释一下上面 bridge 中的配置

  • name 一个名称,在家庭 APP 上添加配件时显示,可以随意填写
  • username 一个唯一标识符,类似 MAC 地址,可以随意填写,格式不能变
  • port homebridge 的端口号,可以任意,但是需要没有被系统占用的
  • pin 密码,验证的时候用,可以任意,但是必须是 8 位数字,格式如上
  • platforms 里的东西是插件里规定的,就这么写吧,不用改。

启动 homebridge

在终端中输入下面命令,启动 homebridge

homebridge

会看到一个二维码和我们刚刚配置的 pin(图中红色方框中的),二维码暂时用不到,pin 会在接下来用到。到这里树莓派上的操作都完成了。

接入 HomeKit

打开 iPad,进入家庭 APP,选择添加配件。

在弹出的窗口中扫描终端显示的 pin(就是刚刚运行 homebridge 的地方),这一步通常是不能正确识别的,别担心后面可以手动输入。

来到这里估计估计你已经没有识别出 pin,没关系,我们手动输入 pin。

输入正确的 pin 后,可以看到 Homebridge 显示在 iPad 上了,点击 Homebridge 添加。这里的 Homebridge 就是我们在配置文件里设置的bridge.name

点击后会提示未认证配件,选择仍然添加。不添加怎么玩?

接下来的是一些设置,我们默认不动,选择下一步。

可以看到 Yeelight 灯出现了。在下图红框框中,我把名字改为台灯,这样方便 Siri 识别。改好之后点击右上角完成。

回到家庭 APP 主页,台灯已经显示出来。到这里已经已经成功的把 Yeelight 台灯接入 HomeKit。

开机自启动

照着上面的配置好了,也能够使用了。但是每次使用都要我手动运行homebridge太麻烦了,有没有开机自启动?有,接下来就来配置开机自启动。

先验证一下 homebridge 的路径

which homebridge

如果输出不是/usr/bin/homebridge,那么你需要把下面拷贝第 13 行的cmd="DEBUG=* /usr/bin/homebridge"改为cmd="DEBUG=* 刚刚输出的东西"

制作启动脚本

sudo vi /etc/init.d/homebridge

按下键盘上i,把下面的内容拷贝进去

#!/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/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

按下ESC,输入:后按下wq回车保存并退出编辑。

设置权限

保存之后我们还要给执行的文件权限,不然开机之后还是没法自动启动的。

sudo chmod 755 /etc/init.d/homebridgesudo update-rc.d homebridge defaults

重启之后 homebridge 就会自己运行。

参考

  1. homebridge
  2. homebridge_yeelight
  3. 用树莓派实现 HomeKit 控制台灯
  4. 借助树莓派与 HomeBridge ,将 YeeLight 彩光灯接入 Apple HomeKit
  5. 从米家到 HomeKit,你只需要一个树莓派

原文发布于微信公众号 - Android群英传(android_heroes)

原文发表时间:2018-02-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

Linux 新手必会的21条命令合集

1907
来自专栏小白课代表

软件分享 | AutoCAD 2019 安装教程。

1897
来自专栏鹅厂优文

鹅厂优文 | 企点PC端性能测试-UI卡顿分析

本文以一个企点融合工作台测试中发现的案例说明如何获得UI卡顿数据,以及如何分析数据,定位问题。

1K12
来自专栏张戈的专栏

重置多说配置后的问题,这是不让我从良的节奏啊(附禁用谷歌在线字体的方法)!

本想今天发文从良,金盆洗手,从此不再折腾博客,安心写文章的。结果,发现多说又不能同步服务器评论到本地了!特么真是怕什么来什么啊!想来这金盆暂时用不着了。。。 想...

4015
来自专栏农夫安全

运维的福利,黑客的噩梦

CYWL_Team服务器防御工具1.0 0x01开发前言 很多小黑都希望搭建自己的博客,论坛,来记录自己在安全之路上面的点点滴滴,不过总是被一些大牛来进行恶搞,...

3718
来自专栏FreeBuf

最新XSS 0day漏洞来袭,影响最新版本IE浏览器(含POC)

安全研究人员近日发现了一个严重的XSS 0day漏洞,该漏洞可影响最新版本的IE浏览器,将用户暴露在被攻击和身份盗窃的危险之中。 漏洞信息 该漏洞能够影响完全修...

1996
来自专栏24K纯开源

Final Cut Pro X效果插件开发总结

一、介绍       最近公司需要针对Final Cut Pro(FCP)开发一款效果插件,用于对公司自己开发的视频格式进行后期处理。Final Cut Pro...

3478
来自专栏熊二哥

Linux快速入门01-基础概念

4年多前,刚到上海时报过一个关于Oracle的培训班,在那里接触到了Linux,不过一直都没真正去试着使用它。现在经过慢慢的成长,越来越觉得,Linux是每一个...

2205
来自专栏数据和云

122Architecture 全面解读 - 第一篇 全局解析+ADG+IM模块

Oracle自发布12.1之后,就一直声称要全面转云,在之后的三四年里,一直杳无音信,大家都在猜测,Oracle又在憋什么大招,果然,2017阳春三月,大招来了...

3719
来自专栏coding

yii2实战之初见端倪PHP框架大PK安装yii2项目初始化配置服务小结

1405

扫码关注云+社区