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 en inglés simple, ahora puede crear dispositivos HomeKit "falsos", y Siri los controlará como cualquier otro HomeKit oficial accesorio.

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

Esto es lo que necesitará:

  • 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. Consulte la sección "Instalar Mosquitto en su Pi" en mi OpenHAB Guide parte 2 OpenHAB Beginner's Guide Part 2: ZWave, MQTT, Rules and Charting
    instagram viewer
    OpenHAB, el software de automatización del hogar de código abierto, supera con creces las capacidades de otros sistemas de automatización del hogar en el mercado, pero no es fácil de configurar. De hecho, puede ser francamente frustrante. Lee mas
    . No es necesario que se instale 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 realizar 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 a 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 a la vez fecha posterior, pero por ahora, sepa que pueden coexistir en la misma Raspberry Pi. Si estás haciendo lo mismo, solo en caso, haga una copia de seguridad de su tarjeta SD Pi actual Clone fácilmente su tarjeta SD para una informática Raspberry Pi sin problemasYa 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. Lee mas . Si todo sale mal, puede restaurarlo.

Comience haciendo una actualización completa desde la Terminal o un Sesión SSH Configuración de su Raspberry Pi para uso sin cabeza con SSHEl 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 ... Lee mas .

sudo apt-get update. sudo apt-get upgrade. 

Es posible que tengas que hacerlo 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. Es posible que sienta la tentación de hacer esto con apt-get, pero no lo hagas: esa versión es realmente antigua ahora y no funcionará. En cambio, visite nodejs.org, navegue hasta 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 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 nodo-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. alternativas de actualización de sudo --instalar / usr / bin / gccgcc / usr / bin / gcc-4.6 20. alternativas de actualización de sudo --instalar / 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, solo 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:

hap-nodejs instalado

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 adelante, 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 Aplicación Elgato Eve, una aplicación de administración de HomeKit que le permite agregar dispositivos (incluso que no sean de 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!

elgato eve 1

A continuación, le indicará que busque un "Código de configuración de HomeKit" único. Ignore eso y presione “Agregar a [nombre de su hogar]”.

También le indicará 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 ...

elgato eve 2

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 falsay 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 haya visto un mensaje que dice "¿Estamos en"? - ese es el sondeo de la aplicación Elgato para el estado de la luz. Abra Siri y dígale que "encienda 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! ¡Apagando 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: lo hemos definido en el 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 su entorno Arduino aún no está configurado para funcionar con ESP8266, siga y siga la guía en mi ESP8266: Arduino Killer Conoce al asesino de Arduino: ESP8266¿Qué pasa si te digo que hay una placa de desarrollo compatible con Arduino con Wi-Fi incorporado por menos de $ 10? Bueno, lo hay. Lee mas guía luego regrese después de haber confirmado que está funcionando. Instale estas bibliotecas adicionales:

  • PubSubClient de lmroy
  • Los NeoPixels de Adafruit

El código que estamos usando es una modificación de El 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 al cambiar solo una variable. Si no puede ver el código incrustado a continuación, lo encontrará en esta esencia.

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 cada vez nos conectamos al mismo servidor MQTT.

Por ahora solo usamos 4 Neopixels, pero puede aumentar el número más adelante si los alimenta desde una fuente externa. Cargue el código y probémoslo: 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. Envíe cualquier otro valor a ese canal para desactivarlo.
  • Puede enviar un número del 0-360 a la luz / tono oficial para cambiar el color. Estamos usando el Espacio de color HSV, entonces 0 y 360 son rojos, 120 es verde y 240 es azul.
  • Envía un valor porcentual para el brillo (0-100, no incluya 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 accesorio de iluminación impulsado por MQTT funciona, 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 /accessories directorio. Para facilitar esto, puede descargar directamente el código que ya se ha emparejado con el dispositivo "officelight" 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 su nombre de dispositivo único. Puede hacer una búsqueda / reemplazo en Nano presionando CTRL y \, escribiendo el término para buscar, 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 para mantenerlos iguales entre luces.
  • Puede darle a su dispositivo un "nombre Siri" diferente al agregarlos a la aplicación Elgato Eve, y editarlos en cualquier momento para que no se quede con su elección inicial. No es necesario editar los archivos de configuración ni reiniciar el servidor.
  • Una vez que tenga múltiples accesorios, puede usar la aplicación Elgato Eve para agruparlos por sala o para crear escenas específicas que consisten en múltiples acciones complejas. Las escenas pueden consistir en múltiples acciones, tales como: encender la luz de la oficina, atenuarla al 25%, ponerla roja y activar la máquina de café.

Deberá agregar su nuevo accesorio a través de la aplicación HomeKit de su elección 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 &

Puede ver que he combinado esto con algunos otros comandos que ya he configurado para iniciar en el arranque.

nodo de ejecución rclocal al inicio

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 al directorio de accesorios y elimine el GarageDoorOpener_accessory.js. En el momento de escribir esto, esto tiene errores y hará que el servidor se rompa después de un tiempo.

¿Qué vas a controlar con Siri?

Ahora que ya 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 vas a divertir mucho. ¡Déjame saber en los comentarios lo que se te ocurre!

James tiene una licenciatura en Inteligencia Artificial y está certificado por CompTIA A + y Network +. Es el desarrollador principal de MakeUseOf, y pasa su tiempo libre jugando VR paintball y juegos de mesa. Ha estado construyendo computadoras desde que era un niño.