如何制作Siri控制的DIY Wi-Fi灯

HomeKit终于面世,可以通过Siri为少数消费类智能家居设备进行语音控制。

可悲的是,我的意思是说实话,您已经购买的任何东西可能都不是兼容。但是,该协议已经过反向工程,并且可以使用HomeKit API的开源仿真器:或者用简单的英语,您现在可以创建“伪造"的HomeKit设备,Siri将像其他任何正式的HomeKit附件一样控制它们。

今天,我们将创建一个Wi-Fi可控灯,并使用Siri对其进行控制。这是一个演示。

这是您需要的:

  • Raspberry Pi(我使用了RPi2,鉴于已升级的ARM体系结构,要安装的Node版本略有不同。 –请参阅后面的注释。)
  • 在Raspberry Pi上安装了MQTT代理。请参阅《 OpenHAB指南》第2部分中的“在Pi上安装Mosquitto"部分。它不需要专门安装在Pi上-您甚至可以使用基于云的MQTT服务器,但是由于本教程无论如何都需要Pi,因此很方便。
  • NodeMCU v2(与Arduino兼容)
  • 新像素LED(我建议使用4像素进行测试,然后您可以添加外部电源并添加任意数量的)
  • 安装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指南,然后在确认工作正常后再回来。安装以下附加库:

  • lmroy的PubSubClient
  • Adafruit的NeoPixels
  • 我们使用的代码是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客户端发送命令(如果更改了主机名,请按照以下说明调整主机名)

  • 您可以发送打开并打开根 officelight 频道以将其打开。将其他任何值发送到该通道以将其关闭。
  • 您可以将0-360之间的数字发送到办公室灯/色相以更改颜色。我们正在使用HSV颜色空间,因此0和360为红色,120为绿色,240为蓝色。
  • 您发送亮度的百分比值(0-100,不包括%符号)。
  • 与饱和度相同。不论指定何种色相,值100都将完全饱和(即纯色),而值零将为纯白色。
  • 一旦确认MQTT驱动的照明灯具可以正常工作,继续。

    配置新的HomeKit附件

    切换回Raspberry Pi,并终止HAP-NodeJS应用(如果尚未安装)。导航到 / accessories 目录。为了简化操作,您可以通过键入以下内容直接下载已经配对到“ officelight"灯具的代码:

    wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js

    本质上,这是默认照明配件的重复,带有一些变量名更改(再次根据Adysan的工作改编,简化了易用性)。这是基于此创建自己的自定义附件的知识。

  • 所有附件都必须命名为* _accessory.js
  • 在以下位置更改IP地址MQTT服务器顶部的options变量
  • 如果您使用不同的灯具名称,请使用唯一的灯具名称搜索/替换“ officelight "的所有实例。您可以通过按 CTRL和\ 在Nano中进行搜索/替换,键入要查找的术语,要替换的术语,然后按 A (表示所有实例)。逐步检查每个变量,以准确了解要更新的变量。
  • 为附件()创建唯一的十六进制用户名
  • 不要更改PIN码。它遵循特定的格式,除非您知道自己在做什么,否则它将无法配对。在灯光之间保持它们相同没有任何问题。
  • 在将它们添加到Elgato Eve应用程序时,可以为灯具赋予一个不同的“ Siri名称",并随时对其进行编辑,以免卡住最初的选择。无需编辑配置文件或重新启动服务器。
  • 一旦有了多个灯具,就可以使用Elgato Eve应用程序按房间对它们进行分组,或创建由多个复杂场景组成的特定场景动作。场景可以包含多种动作,例如:打开办公室灯,将其调暗至25%,变红,然后启动咖啡机。
  • 您需要通过以下方式添加新配件再次选择您的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对其进行编码,则可以创建自己的附件文件。这里有很多潜力,我想您会觉得很有趣。在评论中让我知道您的想法!

    标签: Siri 智能照明