Cómo hacer una luz Wifi controlada por Siri DIY

HomeKit al final está disponible, admitiendo el control de voz por medio de Siri para un puñado de dispositivos inteligentes domésticas de consumo.

Lamentablemente, me refiero a un puñado literal: cualquier cosa que ya haya comprado quizá no sea compatible. Sin embargo, el protocolo ya se ha ideado de forma inversa y hay disponible un emulador de código abierto para la API de HomeKit: o en idioma sencillo, en la actualidad puede crear dispositivos HomeKit «falsos» y Siri los monitorizará como cualquier otro accesorio oficial de HomeKit.

Hoy, vamos a crear una luz controlable por Wifi y controlarla con Siri. Aquí hay una demostración.

Esto es lo que necesitará:

  • Raspberry Pi (he utilizado un RPi2, hay una pequeña diferencia en las versiones de Node para instalar dada la arquitectura ARM actualizada; pregunte las notas más adelante).
  • Un corredor MQTT instalado en Raspberry Pi. pregunte la sección «Instalar Mosquitto en su Pi» en mi Guía OpenHAB, parte 2. es innecesario instalarlo específicamente en la Pi; además puede utilizar un servidor MQTT fundamentado en la nube, sin embargo como necesitamos una Pi para este tutorial de todos modos, es conveniente.
  • NodeMCU v2 (compatible con Arduino)
  • LED de neopíxel (recomiendo 4 píxeles para la prueba, después puede añadir una fuente de alimentación externa y añadir tantos como desee)

Instalación del 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 Wifi. Configuraremos este puente con un accesorio por ahora, sin embargo puede añadir tantos como desee.

De hecho, estoy instalando esto en mi servidor doméstico existente que desarrolla OpenHAB. Espero conectar ambos juntos en una fecha posterior, sin embargo por ahora, sepa que pueden coexistir en la misma Raspberry Pi. Si está haciendo lo mismo, por si acaso, haga una copia de seguridad clonada de su tarjeta Pi SD actual. Si todo sale mal, puede restaurarlo.

Comience haciendo una actualización completa desde la Terminal o una sesión SSH.

sudo apt-get update

sudo apt-get upgrade

Es factible que deba desarrollarlo dos veces si ha pasado un tiempo.

Ahora instala determinados paquetes básicos que vamos a necesitar:

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

A continuación, instalaremos la versión última de NodeJS. Es viable que posea la tentación de desarrollar esto con apt-get, sin embargo no lo haga: esa versión es muy vieja actualmente y no funcionará. En su lugar, visite nodejs.org, rastreé el directorio download/release/latest-v5.x.0/ y monitorice cuál es el enlace para la última versión. Está buscando linux-armv7l para Raspberry Pi 2 o linuxarmv6l para los modelos RPi originales. Luego, ajustando las URL y los nombres de los directorios según sea necesario, descargue e instale utilizando 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

Confirme escribiendo

node version

Y deberías ver la versión 5.5 (o la última que hayas descargado).

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

sudo npm install -g npm

sudo npm install -g node-gyp

En ese primer comando, en efecto estamos utilizando Node Package Manager (npm) para instalar una versión más actual 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 rebuild

sudo npm install node-persist

sudo npm install srp

En este punto, encontré este error: » #error Esta versión de node/NAN/v8 requiere un compilador C++11 «. Si eso le sucede, instale un compilador de C++ más moderno con los comandos:

sudo apt-get install gcc-4.8 g++-4.8

sudo update-alternatives --install/usr/bin/gccgcc/usr/bin/gcc-4.6 20

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50

Ahora no deberías tener problema. sigua 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 tendría que ser todo. Intenta elaborar el emulador con:

node Core.js

Si obtiene errores que indican que no puede encontrar tal o cual módulo, exclusivamenteuse el orden sudo npm install una vez más y adjunte el nombre del módulo que falte. Suponiendo que todo esté bien, tendría que ver algunas advertencias y su puente HomeKit se estará ejecutando. Así es como se ve el éxito:

Puede ver prontamente que ya ha creado un totalidad de 6 dispositivos falsos. Los usaremos como punto de referencia para nuestra exclusiva luz Wi-Fi más adelante, sin embargo solo los usaremos por en la actualidad para probar. incluso puede ver más información de depuración si inicia el servidor con:

DEBUG=* node Core.js

Ahora salta a un dispositivo Apple capaz de ejecuta Siri. Curiosamente, Apple no ofrece una aplicación HomeKit estándar, salvo a los programadores registrados, por lo que descargue la aplicación gratuita Elgato Eve, una aplicación de administración de HomeKit que le admite añadir dispositivos (incluso que no sean Elgato) a su red HomeKit.

La primera vez que empiece la aplicación, tendrá que denominar su hogar, siga adelante y revíselo. más adelante escoja «Agregar accesorio». ¡Ignora el mensaje sobre estar cerca de él!

A continuación, le indicará que averigue un «Código de configuración de HomeKit» único. Ignóralo y oprime «Agregar a [nombre de tu casa]».

También le dirá que el dispositivo no está certificado. en realidad no lo es. Adelante de todos modos. Cuando llegas a la pantalla que te solicita un código de accesorio…

Elija acceder el código manualmente y redacte 031-45-154

Esto se puede encontrar/cambiar en el fichero Light_accessory.js, sin embargo hablaremos de eso más adelante. agrega este accesorio a su habitación predeterminada, llámelo Luz falsa y siga caminando por los cuadros de diálogo para escoger el icono, etc.

Finalmente, regrese a la sesión SSH donde posee HAP-NodeJS ejecutándose. Es probable que ya hayas visto un mensaje que manifiesta «¿Estamos listos?» – ese es el sondeo de la aplicación Elgato para el estado de la luz. Abre a Siri y dile que «Encienda la luz falsa», seguidamente intenta apagarla nuevamente. Con suerte, verá ciertos mensajes de depuración de HAP-NodeJS para visualizar que obtuvo los comandos.

Are we on? No.
Turning the light on!
Turning the light off!

Fantástico, ese es el progreso uno terminado. hasta el día de hoy necesitaremos una luz real, antes de volver a configurar el puente nuevamente.

Construyendo una luz Wifi

El lado del hardware de este progreso es asombrosamente fácil si comenzamos con solo cuatro Neopixels, puesto que podemos alimentarlos de primera mano desde la placa de desarrollo NodeMCU y su conectividad USB. Si posee una tira más larga, no se preocupe, lo hemos definido en el software, por tanto el resto exclusivamenteno se encenderá.

Conecte el cable de alimentación rojo de un hilo de Neopixel al pin VIN, la tierra azul a GND y el cable de pista verde al pin marcado D2 en el NodeMCU. posea mucho cuidado con la polaridad: si mezcla la tierra y el VIN, enviará una oleada de energía por intermedio de su placa y la destruirá en el proceso.

Si su ecosistema Arduino todavía no está configurado para ejercer con ESP8266, sigua y siga la guía en mi guía ESP8266: Arduino Killer y más tarde regrese con posterioridad de haber comprobado que funciona. Instale estas bibliotecas adicionales:

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

Actualice las siguientes líneas con su exclusiva información de red y un nombre mismo para cada dispositivo que cree (anfitrión).

const char* ssid = "....";

const char* password = "...";

const char* host = "officelight";

IPAddress MQTTserver(192, 168, 1, 99);

La dirección IP de este dispositivo se obtiene de forma automática por intermedio de DHCP; no te preocupes si cambia, dado que nos conectamos al propio servidor MQTT cada vez.

Por ahora, solo usamos 4 Neopixels, sin embargo puede aumentar el número más tarde si los alimenta desde una fuente externa. Cargue el código y hagamos la prueba: utilice su cliente MQTT favorito para mandar órdenes (ajuste el nombre de host en las siguientes instrucciones si lo ha cambiado).

  • Puede enviarlo al canal raíz de officelight para encenderlo. Envíe cualquier otro valor a ese canal para apagarlo.
  • Puede mandar un número de 0 a 360 a la luz/tono de la oficina para editar el color. Estamos utilizando el espacio de color HSV, por tanto 0 y 360 son rojos, 120 es verde y 240 es azul.
  • Envía un valor porcentual para la luminosidad (0-100, no incluya el símbolo %).
  • Lo propio para la saturación. Un valor de 100 estará por completo saturado (es decir, un color sólido) y cero será blanco puro, sin tener en cuenta del Tono especificado.

Una vez que haya comprobado que su accesorio de iluminación controlado por MQTT está funcionando, continúe.

Configuración de un moderno accesorio de HomeKit

Vuelva a la Raspberry Pi y acabe la aplicación HAP-NodeJS si todavía no lo ha hecho. Navegue hasta el directorio /accesorios. Para facilitar esta tarea, puede descargar de primera mano el código que ya se ha sincronizado con el accesorio «officelight» redactando 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 ciertos nombres de variables cambiados (nuevamente, adaptado del misión de Adysan, sencillo para facilitar su uso). Esto es lo que debe comprender para crear sus únicos accesorios personalizados fundados en esto.

  • Todos los accesorios deben tener el nombre * _accessory.js
  • Cambie la dirección IP en la variable de opciones en el lado superior a su servidor MQTT
  • Si posee un nombre de dispositivo diferente, busque/reemplace todas las instancias de «officelight» con su nombre de dispositivo único. Puede ejecuta una búsqueda/reemplazo en Nano presionando CTRL y \, redactando el término para buscar, el término para reemplazar, más tarde oprima A (es decir, todas las instancias). Recorra cada uno de estos para comprender con precisión qué variables se están actualizando.
  • Cree un nombre de usuario hexadecimal exclusivo para el accesorio ( light.username = «1B:2B:3C:5D:6E:FF»; )
  • No edite el código PIN. continúa un formato concreto y, excepto que sepa lo que está haciendo, no podrá emparejarse. No hay problema con mantenerlos iguales entre luces.
  • Puede darle a su accesorio un «nombre de Siri» diferente cuando lo agrega a la aplicación Elgato Eve y cambiarlo en cualquier momento con el fin de que no se quede atascado con su decisión inicial. es innecesario cambiar los ficheros de configuración ni reiniciar el servidor.
  • Una vez que posea muchos accesorios, puede utilizar la aplicación Elgato Eve para agruparlos por habitación o para crear escenas determinadas que consisten en múltiples acciones complejas. Las escenas pueden constar de múltiples acciones, como: enchufar la luz de la oficina, atenuarla al 25 %, ponerla en rojo y habilitar la máquina de café.

Deberá añadir su moderno accesorio por medio de la aplicación HomeKit de su decisión nuevamente.

Finalmente, queremos efectuar nuestra aplicación HAP-NodeJS toda vez que se reinicie el Pi. agrega lo siguiente a su archivo etc/rc.local, justo antes de la salida 0.

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

Puede ver que combiné esto con determinados otros órdenes que ya configuré para iniciar en el arranque.

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

sudo chmod 755 /etc/rc.local

Si por alguna razón necesita ejecutarlo una vez más en modo de depuración, puede eliminar la aplicación Node en ejecución con:

Un progreso final: navegue hasta el directorio de accesorios y elimine GarageDoorOpener_accessory.js. Al momento de escribir, esto posee errores y desarrollará que el servidor se rompa más tarde de un tiempo.

Cómo hacer una luz Wifi controlada por Siri DIY

¿Qué controlarás con Siri?

Ahora que conoce los conceptos básicos, ciertamente no hay límite para lo que puede controlar: si puede codificarlo en Javascript, puede crear su exclusivo fichero accesorio. Hay mucho potencial aquí, creo que te vas a divertir mucho.