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 条评论
登录 后参与评论

相关文章

来自专栏coding

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

16250
来自专栏FreeBuf

极客都应该知道的Linux技巧

是什么区分开普通的Linux用户和超级极客的呢?很简单:用在学习那些使长时工作转变为一瞬间工作的技巧、诀窍、秘诀和技术上的时间。如果你想提高效率而又不用做这些搜...

29980
来自专栏娱乐心理测试

几款特好用图片工具

做项目测试时,需要小程序码的图片,在官网中只能下载图片,保存本地,可我需要的是网络图片,百度喽!

27320
来自专栏24K纯开源

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

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

45080
来自专栏進无尽的文章

基础篇-iOS后台运行以及相关

对于APP的前后台运行情况的了解,有助于我们在实际开发中规避一些问题,以及采取稳妥的方法处理和解决问题,是很必须的。

69710
来自专栏小白课代表

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

26770
来自专栏FreeBuf

正确姿势:如何调戏蹭网者

这篇文章本来是知乎回答的一个问题,但是由于本人五行缺勤奋,所以一直没写(其实是忘了=。=),下面是我的一个实验,如何通过squid调戏那些蹭网的人。没什么技术含...

26780
来自专栏FreeBuf

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

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

22160
来自专栏FreeBuf

更适合作为主系统使用的Parrot Security简介

Parrot 是一个基于Debian的专注于渗透测试和隐私保护的Linux发行版,但是更加方便日常使用,有贴心的使用体验,丰富的工具,更注重隐私保护。 The...

97150
来自专栏农夫安全

运维的福利,黑客的噩梦

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

40780

扫码关注云+社区

领取腾讯云代金券