HomeKit终于面世,可以通过Siri为少数消费类智能家居设备进行语音控制。
可悲的是,我的意思是说实话,您已经购买的任何东西可能都不是兼容。但是,该协议已经过反向工程,并且可以使用HomeKit API的开源仿真器:或者用简单的英语,您现在可以创建“伪造"的HomeKit设备,Siri将像其他任何正式的HomeKit附件一样控制它们。
今天,我们将创建一个Wi-Fi可控灯,并使用Siri对其进行控制。这是一个演示。
这是您需要的:
安装HomeKit桥
We’re going to install a NodeJS application called HAP-NodeJS to the Raspberry Pi: this will form a bridge between HomeKit requests and the Wi-Fi devices. We’ll configure this bridge with one accessory for now, but you can add as many as you like.
我实际上是在将其安装到运行OpenHAB的现有家庭服务器上–我希望稍后将两者连接在一起,但是现在,知道它们可以在同一Raspberry Pi上共存。如果您要这样做,以防万一,请对当前的Pi SD卡进行克隆备份。如果一切出错,则可以恢复到该状态。
从终端或SSH会话进行完全升级开始。
sudo apt-get updatesudo apt-get upgrade
现在安装一些我们需要的核心软件包:
sudo apt-get install npm git-core libnss-mdns libavahi-compat-libdnssd-dev
下一步,我们将安装最新版本的NodeJS。您可能会想通过 apt-get 来做到这一点,但不要这样做-该版本确实已经过时了,将无法使用。相反,请访问nodejs.org,浏览到 download / release / latest-v5.x.0 / 目录,并检查最新版本的链接是什么。您正在寻找Raspberry Pi 2的 linux-armv7l 或原始RPi型号的 linuxarmv6l 。然后,根据需要调整URL和目录名称,使用以下命令下载并安装。
wget https://nodejs.org/download/release/latest-v5.x.0/node-v5.5.0-linux-armv7l.tar.gztar -xvf node-v5.5.0-linux-armv7l.tar.gzcd node-v5.5.0-linux-armv7lsudo cp -R * /usr/local
通过键入
node version
进行确认,您应该会看到v5.5(或最新版本)
下一步,我们要安装一些Node模块。
sudo npm install -g npmsudo npm install -g node-gyp
在第一个命令中,我们实际上是在使用Node Package Manager(npm)进行安装。本身的更新版本。聪明!
现在,要下载名为HAP-NodeJS的HomeKit仿真器:
git clone https://github.com/KhaosT/HAP-NodeJS.gitcd HAP-NodeJSnpm rebuildsudo npm install node-persistsudo npm install srp
这时,我运行了此错误:“ #error此版本的node / NAN / v8需要使用C ++ 11编译器"。如果您遇到这种情况,请使用以下命令安装更新的C ++编译器:
sudo apt-get install gcc-4.8 g++-4.8sudo update-alternatives --install/usr/bin/gccgcc/usr/bin/gcc-4.6 20sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50
现在您应该没有问题了。继续一个一个地运行这些命令:
sudo npm install srpsudo npm install mdns --unsafe-permsudo npm install debugsudo npm install ed25519 --unsafe-permsudo npm install curve25519 --unsafe-perm
这应该就是一切。尝试使用以下命令运行仿真器:
node Core.js
如果收到错误消息指出无法找到此类模块,只需再次使用 sudo npm install 命令,并附加名称缺少任何模块。假设一切正常,您应该会看到一些警告,并且HomeKit桥将运行。成功的模样如下:
您可以立即看到它已经创建了一组6个假设备。稍后,我们将以这些为起点来构建自己的Wi-Fi照明,但现在仅使用它们进行测试。如果使用以下命令启动服务器,您还可以看到更多的调试信息:
DEBUG=* node Core.js
现在跳转到能够运行Siri的Apple设备。奇怪的是,除了注册开发人员之外,苹果公司没有提供库存的HomeKit应用程序,因此请下载免费的Elgato Eve应用程序,这是一个HomeKit管理应用程序,可让您将(甚至非Elgato)设备添加到HomeKit网络中。
首次启动该应用程序时,需要命名您的家,然后继续操作。然后选择“添加附件"。
它将告诉您接下来寻找唯一的“ HomeKit设置代码"。忽略它,然后点击“添加到[家的名称]"。
它还会告诉您设备未通过认证。确实不是。继续吧当您进入屏幕询问附件代码...
选择手动输入代码,然后键入以下内容:
031-45-154
可以在< strong> Light_accessory.js 文件,但稍后会介绍更多。将此附件添加到您的默认房间,将其命名为假光,然后继续在对话框中浏览以选择图标等。
最后,跳回到拥有HAP的SSH会话-NodeJS正在运行。您可能已经看到一条消息,说“我们在吗?" –这是Elgato应用程序正在轮询灯光状态。打开Siri并告诉她“打开假灯",然后尝试再次将其关闭。希望您会看到来自HAP-NodeJS的一些调试消息,表明它已收到命令。
Are we on? No.Turning the light on!Turning the light off!
Fantastic, that’s step one finished. Now we’ll need an actual light, before coming back to configure the bridge again.
构建Wi-Fi灯
此步骤的硬件方面非常简单如果我们只从四个Neopixel开始,那么我们可以直接从NodeMCU开发板及其USB连接为它们供电。如果您使用的是更长的带状电缆,请放心–我们已经在软件中定义了该电缆,因此其余电缆将不会打开。
将红色电源线从Neopixel线束连接到VIN引脚,蓝色接地到GND,绿色信号电缆到NodeMCU上标记为D2的引脚。请特别注意极性:如果将地面和VIN混合在一起,则会通过电路板发送一股电涌,并在此过程中将其破坏。
如果尚未设置Arduino环境要与ESP8266配合使用,请继续并遵循我的ESP8266:Arduino Killer指南,然后在确认工作正常后再回来。安装以下附加库:
我们使用的代码是Github用户Aditya Tannu的修改–我删除了不必要的空中更新功能,在某些缺少的HSV功能中进行了添加,并且仅通过更改一个变量就可以更轻松地创建更多灯光。如果看不到下面嵌入的代码,则可以在此Gist中找到它。
使用您自己的网络信息以及创建的每个夹具(主机)的唯一名称更新以下行。
const char* ssid = "....";const char* password = "...";const char* host = "officelight"; IPAddress MQTTserver(192, 168, 1, 99);
此固定装置的IP地址是通过DHCP自动获取的,它的更改无关紧要,因为我们每次都连接到同一台MQTT服务器。
对于现在我们仅使用4个Neopixels,但是如果您从外部来源为它们供电,则可以稍后增加数量。上传代码,然后进行测试–使用您最喜欢的MQTT客户端发送命令(如果更改了主机名,请按照以下说明调整主机名)。
一旦确认MQTT驱动的照明灯具可以正常工作,继续。
配置新的HomeKit附件
切换回Raspberry Pi,并终止HAP-NodeJS应用(如果尚未安装)。导航到 / accessories 目录。为了简化操作,您可以通过键入以下内容直接下载已经配对到“ officelight"灯具的代码:
wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js
本质上,这是默认照明配件的重复,带有一些变量名更改(再次根据Adysan的工作改编,简化了易用性)。这是基于此创建自己的自定义附件的知识。
您需要通过以下方式添加新配件再次选择您的HomeKit应用。
最后,无论何时重新启动Pi,我们都希望运行HAP-NodeJS应用。在 exit 0 之前,将以下内容添加到您的 etc / rc.local 文件中。
sudo node /home/pi/HAP-NodeJS/Core.js < /dev/null &
您可以看到我已经将其与一些其他已经设置为在启动时启动的命令。
如果这是您第一次使用rc.local,则可能需要将其设置为可执行文件:
sudo chmod 755 /etc/rc.local
如果出于某种原因需要再次在调试模式下运行它,则可以使用以下命令终止正在运行的Node应用程序:
killall node
最后一步:导航至附件目录,然后删除 GarageDoorOpener_accessory.js 。在撰写本文时,这是有问题的,并且会导致服务器在一段时间后崩溃。
您将使用Siri控制什么?
现在您已经掌握了基础知识,您可以控制的内容实际上没有任何限制-如果您可以使用Javascript对其进行编码,则可以创建自己的附件文件。这里有很多潜力,我想您会觉得很有趣。在评论中让我知道您的想法!