Siri 声控智能家居:基于 Homebridge 与 Raspberry Pi

我可靠的老 Raspberry Pi 近几年来已经有几次新的使命。数天以来,NAS 服务器、语音控制 Sonos 服务器,家庭监控摄像头以及音频采样触发设备,还有许多其他的东西。但最近的一个项目,重新点燃了用这台小电脑修补的爱情。

在看了一个令人振奋的视频之后,一个男人用他那纯粹的声音打开一个车库门,我感觉到我想要弄清楚如何获得这样的力量。不久之前,我遇到了 Homebridge,一个在家庭网络上运行的服务器,作为设备和 Apple 的 HomeKit API 之间的桥梁。

所以我擦干净了 Raspberry Pi 的灰尘(无论是在实际上和身体上),并采取了跳水(plunge)。

在干净的安装中,首先要做的就是安装 Node.js(因为 Homebridge 是基于 Node.js 构建的,并通过 NPM 发布)。这个方便的指南提供了如何在 Raspberry Pi 上专门安装 Node.js 的说明。

然后使用 GitHub上 的 Raspberry Pi 特定的安装指南,来安装 Homebridge。即使你不是很熟悉 Unix shell 也是非常简单的。

一旦你在 Raspberry Pi 上运行了 homebridge 并运行,你需要通过苹果公司在 iOS 10 上发布的 “Home” 应用程序将其作为附件来添加。当你添加设备作为附件时,它应该显示出来,您必须在iOS设备上输入代码(默认为 031-45-154)。

尤其是 Homebridge 的伟大之处,在于对所有制造商的设备和设备的社区支持范围广泛。在 NPM 库或 GitHub 中快速搜索 “homebridge” 能找到一系列的相关结果。安装这些插件与通过 NPM 安装 Homebridge 几乎一样简单。您需要设置的是 config.json 文件的附加内容( 可以在 /root/.homebridge~/.homebridge 中找到,具体取决于 Homebridge 的安装位置)。

我只是在我的房子里搜寻,有可能被网络连接的所有东西,所以下面是我找到的东西,以及我如何设置的:

Homebridge WeMo

在购买了 WeMo Switch 和 WeMo Light Bulb 入门套件后,很高兴看到 Belkin 的家庭自动化设备系列可以使用 homebridge-wemo-platform 插件无缝工作。

安装通过 npm 进行:

npm install -g homebridge-platform-wemo

你还必须添加几行到你的 config.json 文件,就差不多了:

“platforms”: [
    {
        “platform”: “BelkinWeMo”,
        “name”: “WeMo Platform”,
        “noMotionTimer”: 60,
        “ignoredDevices”: []
    }
]

关于这些设备的另一个需要注意的事项是,它们将在 iOS 中显示,就像您通过 WeMo 的界面命名它们一样。这也适用于你通过 Siri 开启的名字。

Boy,我第一次通过 Siri 打开灯是不是很神奇?

Sonos

清单上的下一件事就是让两台 Sonos 扬声器与 homebridge 一起工作。我安装使用下面的方式安装 homebridge-sonos 插件:

npm install -g homebridge-sonos

然后将以下内容添加到我的 config.json 文件中:

"accessories": [
    {
        "accessory": "Sonos",
        "name": "Kitchen Speakers",
        "room": "Kitchen",
        "mute": true
    },
    {
        "accessory": "Sonos",
        "name": "Portable Speakers",
        "room": "Portable",
        "mute": true
    }
]

在为扬声器选择名称时,您需要考虑的一件事是您必须能够向 Siri 说出。如果您在名称中包含 “Music” 或 “Sonos”,则很可能会打开 “Music” 或 “Sonos” 应用程序,并且不会开始播放您即将开启扬声器的 Taylor Swift 歌曲。

Sony Bravia TV

当我第一次安装 Homebridge 时,我甚至没有意识到我可以通过 HomeKit 开启和关闭电视。但是当我在 NPM 上探索 “homebridge” 的搜索结果时,我试图绊倒 homebridge-sonybraviatv。在电视和 Raspberry Pi 中都有一些设置。首先,您需要启用远程启动:Settings -> Network -> Remote Start

接下来,您需要通过将身份验证更改为 “Normal and Pre-Shared Key”(位于 Settings->Network->IP Control->Authentication 中)来设置预授权。最后,设置 Pre-Shared KeySettings -> Network -> IP control -> Pre-Shared Key)。

剩下的,你需要做的事情是在 Raspberry Pi 上安装:npm install -g homebridge-sonybraviatv

然后将其添加到您的配件中,然后填写电视机的 IP 地址(可以在电视机的网络设置中找到)以及您之前在电视机上输入的预共享密钥:

"accessories": [
    {
        "accessory": "SonyBraviaTV",
        "name": "TV",
        "ipaddress": "IP ADDRESS HERE",
        "presharedkey": "PRESHARED KEY HERE"
    }
]

电视现在会遵循你的每一个指令。。。

PS4

我最近买了一台 PS4,又一次偶然发现了一个 Homebridge 插件,可以通过 HomeKit 关闭它。homebridge-cmdswitch2 插件允许您使用 Home 应用程序(或 Siri)上的虚拟开关在 Raspberry Pi 上运行 shell 命令。

首先,你需要安装 ps4-waker

npm install -g ps4-waker

然后,您需要在 iOS 设备上下载 Playstation 应用程序,然后通过应用程序连接到 PS4。一旦到达提供 PIN 码的阶段(通过在 PS4 上添加一个设备),您需要启动 ps4-waker 并按照提示输入 PIN 码。

在 PS4 上启用 “Connect to Internet” 和 “Enable Turning On PS4 from Network” 也是必要的。这可以在 Settings -> Power Save Settings -> Set Functions Available in Standby Mode 中找到。

你应该能够测试它是否工作,通过使用 ps4-waker standby 来关闭 PS4 或只是 ps4-waker 打开它。

然后我安装了 homebridge-cmdswitch2 插件:

npm install -g homebridge-cmdswitch2

然后,将以下内容添加到 config.json 文件中:

"platforms": [{
    "platform": "cmdSwitch2",
    "name": "CMD Switch",
    "switches": [{
        "name" : "Playstation",
        "on_cmd": "ps4-waker",
        "off_cmd": "ps4-waker standby",
        "state_cmd": "ps4-waker search | grep -i '200Ok'",
        "polling": true,
        "interval": 5,
        "manufacturer": "Sony Corporation",
        "model": "CUH-1001A",
        "serial": "XXXXXXXXXXX"
    }]
}]

瞧! “Siri, please turn on the Playstation…”

通过 “Home” 应用程序和 Siri 控制所有这些设备是惊人的,但我心中仍然有一个空洞。

我的声音仍然无法打开车库门,就像录像中的那个人一样

车库门

在做了一些研究之后,我决定购买一台八通道的继电器(eBay 有便宜货),并试图对我的车库门进行修补。与其他大多数车库门遥控器相比,改变我的车库门相当简单,因为我的遥控器是一键按下来打开或关闭门。

我打开遥控器,决定通过焊接开关的两侧(这意味着遥控器始终打开)绕过内置开关。

然后我把正极(红色)导线连接到为遥控器供电的9伏电池,并通过在每一边连接一根导线来延长切割每一边的长度。 然后将这些边插入一个继电器的两点。

这就是硬件方面的事情了!

我通过 GitHub 发现了 homebridge-gpio-wpi2 插件,它允许通过 WiringPi 触发 Raspberry Pi 的 GPIO。 你需要安装 WiringPi:

sudo apt-get install wiringpi

然后安装 homebridge-gpio-wpi2

npm install -g homebridge -gpio-wpi2

您还需要将当前用户(运行 homebridge 的用户)添加到 gpio 组以启用访问:

sudo usermod -G gpio $ USER

将其添加到您的配置文件中:

{
    "platforms": [{
        "platform" : "WiringPiPlatform",
        "name" : "Pi GPIO (WiringPi)",
        "overrideCache" : "true",
        "autoExport" : "true",
        "gpiopins" : [{
            "name" : "Garage Door",
            "pin"  : 10,
            "enabled" : "true",
            "mode" : "out",
            "pull" : "down",
            "inverted" : "false",
            "duration" : 0,
            "polling" : "false"
        }]
    }]
}

请注意,配置中的引脚号是 BCM 编号(您可以使用 gpio readall 来检查)。 这让我挠了我的头一两个小时,所以确保你仔细检查。

您需要生成一个脚本,在运行 Homebridge 之前自动设置 GPIO。如果你修改了配置文件,你需要重新生成它。 您也可以在 Homebridge 运行之前,将其设置为在启动时运行。 以下命令生成 bash 脚本:

sudo node /usr/local/lib/node_modules/homebridge-gpio-wpi2/make-gpio-script ~/.homebridge/config.json /usr/local/lib/node_modules/homebridge-gpio-wpi2/set-gpio.sh

最后,我们有一个网络连接的车库门,你可以用你的声音进行控制。

结论

还有更多有趣的功能,我想在未来添加设置:通过 Sonos 的口头通知、新闻头条,通过 Siri 播放特定的歌曲或艺术家,更好的电视控制(改变频道,启动 Netflix 等),并可能与Facebook 当我收到一条消息时,API 可以让灯闪烁(或改变颜色)。

也许即使是把我的 Butter Bot 也整合下来...

尚未评分
您的评分将帮助我们做出更好的玩法

观光\评论区

Copyright © 2017 玩点什么. All Rights Reserved.