Cómo hacer una luz Wi-Fi controlada por Siri DIY

  • Brian Curtis
  • 0
  • 3320
  • 373
Anuncio

HomeKit finalmente está en libertad, permitiendo el control de voz a través de Siri para un puñado de dispositivos domésticos inteligentes para el consumidor.

Lamentablemente, me refiero a un puñado literal: cualquier cosa que ya hayas comprado probablemente no sea compatible. Sin embargo, el protocolo ya ha sido diseñado de forma inversa y está disponible un emulador de código abierto para la API de HomeKit: o en inglés simple, ahora puede crear “falso” Dispositivos HomeKit, y Siri los controlará como cualquier otro accesorio oficial de HomeKit.

Hoy, crearemos una luz controlable por Wi-Fi y la controlaremos con Siri. Aquí hay una demostración.

Esto es lo que necesitarás:

  • Raspberry Pi (He usado un RPi2, hay una pequeña diferencia en las versiones de Nodo para instalar dada la arquitectura ARM actualizada - ver notas más adelante).
  • Un corredor MQTT instalado en la Raspberry Pi. Ver la sección “Instale Mosquitto en su Pi” en mi OpenHAB Guide, parte 2 OpenHAB Beginner's Guide, parte 2: ZWave, MQTT, reglas y gráficos OpenHAB Beginner's Guide, parte 2: ZWave, MQTT, reglas y gráficos OpenHAB, el software de automatización del hogar de código abierto, supera con creces las capacidades de otros sistemas de domótica en el mercado, pero no es fácil de configurar. De hecho, puede ser francamente frustrante. . No necesita instalarse específicamente en el Pi; incluso puede usar un servidor MQTT basado en la nube, pero como necesitamos un Pi para este tutorial de todos modos, es conveniente.
  • NodeMCU v2 (compatible con Arduino)
  • LED de Neopixel (recomendaría 4 píxeles para pruebas, luego puede agregar una fuente de alimentación externa y agregar tantas como desee)

Instalar el puente HomeKit

Vamos a instalar una aplicación NodeJS llamada HAP-NodeJS en la Raspberry Pi: esto formará un puente entre las solicitudes de HomeKit y los dispositivos Wi-Fi. Configuraremos este puente con un accesorio por ahora, pero puede agregar tantos como desee.

De hecho, estoy instalando esto en mi servidor doméstico existente que ejecuta OpenHAB. Espero conectarlos en una fecha posterior, pero por ahora, sé que pueden coexistir en la misma Raspberry Pi. Si está haciendo lo mismo, por si acaso, haga una copia de seguridad de clonación de su tarjeta SD Pi actual. Clone fácilmente su tarjeta SD para una computación Raspberry Pi sin problemas Clone fácilmente su tarjeta SD para una computación Raspberry Pi sin problemas Ya sea que tenga una Tarjeta SD o varias, una cosa que necesitará es la capacidad de hacer una copia de seguridad de sus tarjetas para evitar los problemas que ocurren cuando su Raspberry Pi no se inicia. . Si todo sale mal, puedes restaurarlo.

Comience haciendo una actualización completa desde la Terminal o una sesión SSH Configurando su Raspberry Pi para uso sin cabeza con SSH Configurando su Raspberry Pi para uso sin cabeza con SSH La Raspberry Pi puede aceptar comandos SSH cuando está conectado a una red local (ya sea por Ethernet o Wi-Fi), lo que le permite configurarlo fácilmente. Los beneficios de SSH van más allá de alterar el examen diario ... .

sudo apt-get update sudo apt-get upgrade 

Puede que tenga que hacer eso dos veces si ha pasado un tiempo.

Ahora instale algunos paquetes principales que necesitaremos:

sudo apt-get install npm git-core libnss-mdns libavahi-compat-libdnssd-dev 

A continuación, instalaremos la última versión de NodeJS. Puede sentirse tentado a hacer esto con apt-get, pero no, esa versión es realmente antigua ahora y no funcionará. En su lugar, visite nodejs.org, busque el descargar / liberar / latest-v5.x.0 / directorio y compruebe cuál es el enlace para la última versión. Estas buscando linux-armv7l para Raspberry Pi 2, o linuxarmv6l para los modelos originales RPi. Luego, ajustando las URL y los nombres de directorio según sea necesario, descargue e instale usando los siguientes comandos.

wget https://nodejs.org/download/release/latest-v5.x.0/node-v5.5.0-linux-armv7l.tar.gz tar -xvf node-v5.5.0-linux-armv7l.tar.gz cd node-v5.5.0-linux-armv7l sudo cp -R * / usr / local 

Confirmar escribiendo

versión de nodo 

Y debería ver v5.5 (o lo que sea que haya descargado).

A continuación, tenemos algunos módulos de Nodo para instalar.

sudo npm install -g npm sudo npm install -g node-gyp 

En ese primer comando, en realidad estamos usando Node Package Manager (npm) para instalar una versión más nueva de sí mismo. Inteligente!

Ahora, para descargar el emulador de HomeKit llamado HAP-NodeJS:

git clone https://github.com/KhaosT/HAP-NodeJS.git cd HAP-NodeJS npm reconstruir sudo npm install node-persist sudo npm install srp 

En este punto, ejecuté este error: “#error Esta versión del nodo / NAN / v8 requiere un compilador C ++ 11“. Si eso le sucede, instale un compilador de C ++ más reciente con los comandos:

sudo apt-get install gcc-4.8 g ++ - 4.8 sudo update-alternative --install / usr / bin / gccgcc / usr / bin / gcc-4.6 20 sudo update-alternative --install / usr / bin / gcc gcc / usr / bin / gcc-4.8 50 alternativas de actualización de sudo --instalar / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20 alternativas de actualización de sudo --instalar / usr / bin / g ++ g ++ / usr / bin / g ++ - 4.8 50 

Ahora no deberías tener un problema. Continúe ejecutando estos comandos, uno por uno:

sudo npm install srp sudo npm install mdns --unsafe-perm sudo npm install debug sudo npm install ed25519 --unsafe-perm sudo npm install curve25519 --unsafe-perm 

Eso debería ser todo. Intenta ejecutar el emulador con:

nodo Core.js 

Si recibe errores que dicen que no puede encontrar tal o cual módulo, simplemente use el sudo npm install comando nuevamente y coloque el nombre del módulo que faltaba. Suponiendo que todo esté bien, debería ver algunas advertencias y su puente HomeKit se ejecutará. Así es como se ve el éxito:

Puede ver de inmediato que ya ha creado un conjunto de 6 dispositivos falsos. Los usaremos como punto de partida para nuestra propia luz Wi-Fi más tarde, pero solo los utilizaremos por ahora para probar. También puede ver más información de depuración si inicia el servidor con:

DEPURACIÓN = * nodo Core.js

Ahora salta a un dispositivo Apple capaz de ejecutar Siri. Curiosamente, Apple no proporciona una aplicación HomeKit estándar, excepto para desarrolladores registrados, así que descargue la aplicación gratuita Elgato Eve, una aplicación de administración de HomeKit que le permite agregar dispositivos (incluso que no sean Elgato) a su red HomeKit.

La primera vez que inicie la aplicación, deberá nombrar su hogar, seguir adelante y recorrerlo. Luego seleccione “Agregar accesorio”. Ignora el mensaje de estar cerca de él!

Te dirá que busques un único “Código de configuración de HomeKit” próximo. Ignora eso y golpea “Añadir a [nombre de su hogar]”.

También le dirá que el dispositivo no está certificado. De hecho no lo es. Adelante de todos modos. Cuando llegas a la pantalla pidiendo un código de accesorio ...

Elija ingresar el código manualmente y escriba lo siguiente:

031-45-154

Esto se puede encontrar / cambiar en el Light_accessory.js archivo, pero más sobre eso más tarde. Agregue este accesorio a su habitación predeterminada, llámelo Luz falsa, y siga caminando por los cuadros de diálogo para elegir el icono, etc..

Finalmente, regrese a la sesión SSH donde tiene HAP-NodeJS ejecutándose. Es posible que ya hayas visto un mensaje que dice “Estamos en?” - ese es el sondeo de la aplicación Elgato para el estado de la luz. Abre Siri y dile que “Enciende la luz falsa”, luego intente apagarlo nuevamente. Con suerte, verá algunos mensajes de depuración de HAP-NodeJS para mostrar que recibió los comandos.

¿Estamos en? No. ¡Encender la luz! Apagar la luz!

Fantástico, ese es el primer paso terminado. Ahora necesitaremos una luz real, antes de volver a configurar el puente nuevamente.

Construyendo una luz wifi

El lado del hardware de este paso es sorprendentemente simple si comenzamos con solo cuatro Neopixels, ya que podemos alimentarlos directamente desde la placa de desarrollo NodeMCU y su conexión USB. Si tiene una tira más larga, no se preocupe: hemos definido esto en software, por lo que el resto simplemente no se activará.

Conecte el cable de alimentación rojo de un cable Neopixel al pin VIN, tierra azul a GND y el cable de señal verde al pin marcado D2 en el NodeMCU. Tenga mucho cuidado con la polaridad: si mezcla el suelo y el VIN, enviará una oleada de energía a través de su placa y la destruirá en el proceso.

Si tu entorno Arduino aún no está configurado para funcionar con ESP8266, sigue y sigue la guía en mi ESP8266: Arduino Killer Conoce al Arduino Killer: ESP8266 Conoce al Arduino Killer: ESP8266 ¿Qué pasa si te digo que hay un desarrollador compatible con Arduino? placa con Wi-Fi incorporado por menos de $ 10? Pues lo hay. luego regrese después de haber confirmado que está funcionando. Instale estas bibliotecas adicionales:

  • PubSubClient de lmroy
  • NeoPixels de Adafruit

El código que estamos usando es una modificación del usuario de Github, Aditya Tannu: eliminé la innecesaria funcionalidad de actualización inalámbrica, agregué algunas funciones de HSV que faltaban y facilité la creación de más luces cambiando solo un variable única Si no puede ver el código incrustado a continuación, lo encontrará en este Gist.

Actualice las siguientes líneas con su propia información de red y un nombre único para cada dispositivo que cree (host).

const char * ssid = "..."; const char * contraseña = "..."; const char * host = "officelight"; IPAddress MQTTserver (192, 168, 1, 99);

La dirección IP de este dispositivo se obtiene automáticamente a través de DHCP; no importa si cambia, ya que nos estamos conectando al mismo servidor MQTT cada vez.

Por ahora solo estamos usando 4 Neopixels, pero puede aumentar el número más adelante si los alimenta desde una fuente externa. Cargue el código y hagamos una prueba: use su cliente MQTT favorito para enviar comandos (ajuste el nombre del host en las siguientes instrucciones si lo ha cambiado).

  • Puedes enviar en a la raíz luz oficial canal para encenderlo. Enviar cualquier otro valor a ese canal para desactivarlo.
  • Puede enviar un número de 0-360 a la luz / tono oficial para cambiar el color. Estamos utilizando el espacio de color HSV, por lo que 0 y 360 son rojos, 120 es verde y 240 es azul.
  • Envía un valor porcentual para el brillo (0-100, no incluye el símbolo%).
  • Lo mismo para la saturación. Un valor de 100 estará completamente saturado (es decir, un color sólido) y cero será blanco puro, independientemente del tono especificado.

Una vez que haya confirmado que su dispositivo de iluminación impulsado por MQTT está funcionando, continúe.

Configurar un nuevo accesorio HomeKit

Regrese a Raspberry Pi y finalice la aplicación HAP-NodeJS si aún no lo ha hecho. Navega hasta el /accesorios directorio. Para facilitar esto, puede descargar directamente el código que ya se ha vinculado a “luz oficial” aparato escribiendo lo siguiente:

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

Esencialmente, este es un duplicado del accesorio de luz predeterminado, con algunos nombres de variables cambiados (nuevamente, adaptado del trabajo de Adysan, simplificado para facilitar su uso). Esto es lo que debe saber para crear sus propios accesorios personalizados basados ​​en esto.

  • Todos los accesorios deben ser nombrados *_accessory.js
  • Cambie la dirección IP en la variable de opciones en la parte superior a su servidor MQTT
  • Si tiene un nombre de dispositivo diferente, busque / reemplace todas las instancias de “luz oficial” con tu nombre de aparato único. Puede hacer una búsqueda / reemplazo en Nano presionando CTRL y \, escribiendo el término para encontrar, el término para reemplazar, luego presione UNA (es decir, todas las instancias). Revise cada uno de estos para saber con precisión qué variables se están actualizando.
  • Cree un nombre de usuario hexadecimal único para el accesorio (light.username = “1B: 2B: 3C: 5D: 6E: FF”;)
  • No cambie el código PIN. Sigue un formato específico y, a menos que sepa lo que está haciendo, no podrá emparejarse. No hay problema en mantenerlos iguales entre luces.
  • Puedes darle a tu aparato un aspecto diferente “Nombre Siri” al agregarlos a la aplicación Elgato Eve, y editarlos en cualquier momento para que no te quedes con tu elección inicial. No es necesario editar los archivos de configuración o reiniciar el servidor.
  • Una vez que tenga múltiples accesorios, puede usar la aplicación Elgato Eve para agruparlos por habitación o para crear escenas específicas que consisten en múltiples acciones complejas. Las escenas pueden consistir en múltiples acciones, como: encender la luz de la oficina, atenuarla al 25%, ponerla roja y activar la cafetera.

Deberá agregar su nuevo accesorio a través de la aplicación HomeKit que elija nuevamente.

Finalmente, queremos ejecutar nuestra aplicación HAP-NodeJS cada vez que se reinicia el Pi. Agregue lo siguiente a su etc / rc.local archivo, justo antes de la salida 0.

sudo node /home/pi/HAP-NodeJS/Core.js < /dev/null &

Puedes ver que he combinado esto con algunos otros comandos que ya configuré para iniciar en el arranque.

Si es la primera vez que usa rc.local, es posible que deba configurarlo como ejecutable:

sudo chmod 755 /etc/rc.local

Si por alguna razón necesita ejecutarlo nuevamente en modo de depuración, puede eliminar la aplicación Node en ejecución con:

nodo killall

Un último paso: navegue hasta el directorio de accesorios y elimine el GarageDoorOpener_accessory.js. Al momento de escribir, esto es defectuoso y hará que el servidor se rompa después de un tiempo.

¿Qué vas a controlar con Siri??

Ahora que tiene lo básico, realmente no hay límite para lo que puede controlar: si puede codificarlo en Javascript, puede crear su propio archivo accesorio. Hay mucho potencial aquí, creo que te divertirás mucho. Déjame saber en los comentarios qué se te ocurre!




Nadie ha comentado sobre este artículo todavía.

Sobre tecnología moderna, simple y asequible.
Tu guía en el mundo de la tecnología moderna. Aprenda a usar las tecnologías y los dispositivos que nos rodean todos los días y aprenda a descubrir cosas interesantes en Internet.