如何将任何智能设备连接到 HomeKit(使用 Raspberry Pi)

许多智能家居设备并未直接支持苹果的HomeKit,而是选择与亚马逊的Alexa、谷歌的智能家居平台或其他系统进行整合。然而,借助树莓派的这个巧妙方法,你可以通过开源的Homebridge软件,为你任何的智能设备都加上HomeKit的支持。

让任何智能设备兼容HomeKit

如果你是HomeKit的忠实用户,你可能已经注意到,市场上直接支持HomeKit的智能设备选择相对较少。例如,一些价格实惠的智能灯泡,它们唯一缺少的可能就是HomeKit的支持。以亚马逊上的一款TECKIN四件装智能灯泡为例,撰写本文时,它的售价约为40美元,远低于一个LIFX灯泡的价钱。

当然,这些灯泡在质量上可能不如LIFX。它们的颜色可能不够鲜艳,在安静的环境中可能会发出轻微的嗡嗡声。但考虑到它们的价格如此亲民,其性价比仍然非常高。

不过,它们的主要问题是不支持HomeKit。当然,这些灯泡并非完全无法使用——它们可以使用Google Home、Alexa、IFTTT以及制造商自己的应用进行控制。对于只使用TECKIN智能灯泡的用户来说,这可能足够了。

但是,由于你无法直接通过HomeKit访问它们,所以你无法使用苹果的“家庭”应用、控制中心的快捷方式或Siri来控制它们。你也无法将它们与其他品牌的灯泡添加到同一个场景或自动化操作中。如果你已经投入了HomeKit生态系统,这无疑会是一个很大的遗憾。

认识Homebridge

幸运的是,有一个方法可以使这些智能设备变得更加实用。HomeKit的API允许设备充当桥梁,例如飞利浦Hue的桥接器,从而连接运行在其他协议上的子设备。你只需将桥接器添加到HomeKit中,它就会在HomeKit中注册与其相连的所有灯。每当你请求更新灯光时,你的手机就会与桥接器通信,而桥接器会与灯光通信。

简而言之,桥接器只是在不同的API之间传递信息。既然你可以通过互联网控制TECKIN灯泡,那么完全可以通过软件将它们连接到HomeKit,而无需额外的硬件。

如果你有一个树莓派(像5美元的树莓派Zero就很理想),你可以将其设置为一个桥梁,使用的框架名为Homebridge。这是一个轻量级的NodeJS应用程序,它模拟HomeKit的API,并将请求转发到你的非HomeKit智能设备。

基本上,你需要在树莓派上运行Homebridge,它会将每个“哑”设备添加到苹果的“家庭”应用中。当你尝试通过“家庭”应用或Siri控制灯泡时,Homebridge会负责与设备通信。设置完成后,你会感觉这些设备就像一开始就支持HomeKit一样。

这需要Homebridge始终运行,所以你不应该在笔记本电脑上安装它。树莓派是一个理想的选择,但如果你有一台旧设备,你可以将其重新用作一个始终运行的服务器或桌面,也可以将其安装在上面。

Homebridge是一个框架,你可以使用插件进行扩展。它拥有一个相当大的社区支持,所以几乎任何智能设备都有可能找到相应的Homebridge插件来增加对它的支持。如果你的设备没有现成的插件,但你的智能设备提供了API,而且你具备一定的技术能力,你可以自己编写一个。

但对于大多数用户来说,设置过程只是安装Homebridge和你设备的品牌插件,并进行一些配置。如果你熟悉命令行操作,并且愿意花一些时间,这个过程并不算复杂。

安装和配置Homebridge

Homebridge是一个NodeJS应用程序,所以你必须先安装Node和npm才能使用它。如果你的机器运行Linux,你可能可以直接从包管理器中获取它们。

在Ubuntu上,你必须输入以下命令来手动设置Node的存储库,然后安装nodejs:

curl -sL https://deb.nodesource.com/setup_13.x | sudo -E bash -
sudo apt-get install -y nodejs

或者,你可以参考Node的下载页面,获取针对你的特定操作系统安装指南。

如果你使用的是Linux系统,还需要安装一些依赖项,如下所示:

sudo apt-get install libavahi-compat-libdnssd-dev

安装完成后,你可以通过npm全局安装Homebridge,如下所示:

sudo npm install -g --unsafe-perm homebridge

由于Homebridge只是一个框架,你还需要安装你需要的品牌插件。例如,对于TECKIN灯泡,插件是homebridge-tuya-web,你也要将其全局安装。

你可以输入以下命令:

npm i homebridge-tuya-web -g

一切安装就绪后,就可以开始使用了!输入以下命令运行Homebridge并初始化所有内容:

homebridge

它会提示你缺少一个配置文件,你需要创建它。默认目录是~/.homebridge/,但你可以使用-U参数来移动它。

输入以下命令,在这个文件夹中创建一个新的JSON配置文件:

nano ~/.homebridge/config.json

无论你使用哪个插件,都需要以下基本配置:

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

  "description": "Custom HomeBridge Server",

  "ports": {
    "start": 52100,
    "end": 52150,
  },

  "platforms": [

  ]
}

这将为Homebridge配置默认端口、名称、PIN码以及可以分配给其他设备的端口范围。

在空的platforms数组中,你需要放置每个插件的配置。你可以在每个插件的GitHub页面上找到相关的说明和示例。

在下面的示例中,用于TECKIN灯泡的homebridge-tuya-web插件需要知道你的用户名和密码才能连接到灯泡应用的API,以及其他一些信息:

  "platforms": [
     {
       "platform": "TuyaWebPlatform",
       "name": "TuyaWebPlatform",
       "options":
         {
           "username": "username",
           "password": "password",
           "countryCode": "1",
           "platform": "smart_life",
           "pollingInterval": 10
         }
     }
   ]

完成所有配置后,就可以运行Homebridge了。再次运行它,你的终端应该会显示一个巨大的二维码,你可能需要缩小终端窗口才能完整看到它。使用苹果的“家庭”应用扫描这个二维码,将其以及所有连接的设备添加到HomeKit中。

Homebridge会加载你的插件,并且应该在屏幕上为它找到的每个设备记录一条消息。添加完成后,你应该可以在HomeKit中看到它们,并且它们应该功能正常。

我注意到与我的LIFX灯泡相比,响应速度稍有延迟。这可能是因为灯泡是通过API而不是直接控制的。此外,起初灯泡在显示白色和暖白色时并不完全正确,但在进行了一些调整之后,我能够设置正确的场景。

你可以随时在自己的应用程序中配置设备,等待苹果的“家庭”应用更新,然后在HomeKit中使用预先配置好的设置创建场景。

如果你需要重新添加Homebridge,你需要删除config目录下的persist/文件夹,然后在“桥接器”选项卡下的任何已连接灯泡的设置中从HomeKit中删除桥接器。

将Homebridge添加为服务

如果你希望Homebridge一直运行,你可能需要将其配置为在崩溃或树莓派重新启动时自动重启。你可以通过Unix服务来实现这一点。请在确认Homebridge工作正常后进行此设置。

首先,添加一个名为homebridge的新服务用户:

sudo useradd -M --system homebridge

设置密码:

sudo passwd homebridge

接下来,你需要将Homebridge的配置移动到你的个人主目录之外。/var/lib/homebridge/ 应该没问题:

sudo mv ~/.homebridge /var/lib/homebridge/

确保使用homebridge用户拥有该目录及其所有子文件夹的所有权:

sudo chown -R homebridge /var/lib/homebridge/

完成后,你可以创建服务。为此,请在/etc/systemd/system/中创建一个名为homebridge.service的新文件:

sudo nano /etc/systemd/system/homebridge.service

然后粘贴以下配置:

[Unit]
Description=Homebridge service
After=syslog.target network-online.target

[Service]
Type=simple
User=homebridge
ExecStart=/usr/bin/homebridge -U /var/lib/homebridge
Restart=on-failure
RestartSec=10
KillMode=process


[Install]
WantedBy=multi-user.target

重新加载服务守护程序以使用你的更改对其进行更新:

sudo systemctl daemon-reload

现在,你应该能够启用你的服务(使其在启动时自动运行):

sudo systemctl enable homebridge

并启动它:

sudo systemctl start homebridge

如果你需要调试由服务配置引起的错误,可以通过输入以下命令查看服务的日志:

journalctl -fn 50 -u homebridge