Cómo hacer una luz Wi-Fi controlada por Siri DIY
HomeKit finalmente está disponible, 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 se diseñó a la inversa y está disponible un emulador de código abierto para la API HomeKit: o en un lenguaje sencillo, ahora puede crear “falso” Los dispositivos HomeKit, y Siri los controlará como cualquier otro accesorio oficial de HomeKit..
Hoy, vamos a crear una luz controlable por Wi-Fi y controlarla 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 seccion “Instala Mosquitto en tu Pi” en mi OpenHAB Guide parte 2 OpenHAB Beginner's Guide Parte 2: ZWave, MQTT, Reglas y gráficos OpenHAB Beginner's Guide 2 Parte: ZWave, MQTT, Rules and Charting OpenHAB, el software de código abierto para el hogar, 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 utilizar un servidor MQTT basado en la nube, pero como de todos modos necesitamos un Pi para este tutorial, es conveniente.
- NodeMCU v2 (compatible con Arduino)
- Neopixel LEDs (recomendaría 4 píxeles para la prueba, luego puede agregar una fuente de alimentación externa y agregar tantas como desee)
Instalación del HomeKit Bridge
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 conectar los dos en una fecha posterior, pero por ahora, sepa que pueden coexistir en la misma Raspberry Pi. Si está haciendo lo mismo, por si acaso, haga una copia de respaldo de su tarjeta Pi SD actual. Clone fácilmente su tarjeta SD para la computación en la Raspberry Pi sin problemas. Clone fácilmente su tarjeta SD para la computación en la Raspberry Pi sin problemas. 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 se producen cuando su Raspberry Pi no se inicia. Lee mas . Si todo sale mal, puedes restaurarlo..
Comience realizando una actualización completa desde el terminal o una sesión de SSH Configuración de su Raspberry Pi para un uso sin cabeza con SSH Configuración de su Raspberry Pi para un uso sin cabeza con SSH La Raspberry Pi puede aceptar comandos de 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 ... Leer más .
sudo apt-get update sudo apt-get upgrade
Es posible que tengas que hacer eso dos veces si ha pasado un tiempo..
Ahora instale algunos paquetes principales que vamos a necesitar:
sudo apt-get install npm git-core libnss-mdns libavahi-compat-libdnssd-dev
A continuación, vamos a instalar la última versión de NodeJS. Usted podría estar tentado a hacer esto con apt-get, pero no, esa versión es muy antigua ahora y no funcionará. En su lugar, visite nodejs.org, navegue hasta descargar / release / latest-v5.x.0 / directorio, y verifique cuál es el enlace para la última versión. Estas buscando linux-armv7l para Raspberry Pi 2, o linuxarmv6l Para los modelos originales de 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 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 último que descargó).
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 el Administrador de paquetes de nodos (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, me encontré con este error: “#error Esta versión de node / NAN / v8 requiere un compilador C ++ 11“. Si eso te sucede, instala 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 sudo update-alternative --install / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20 sudo update-alternative --install / 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 lo indican, no puede encontrar uno de estos módulos, solo use el sudo npm install comando de nuevo, y coloque el nombre del módulo que faltaba. Suponiendo que todo está bien, debería ver algunas advertencias y su puente HomeKit se estará ejecutando. Así es como se ve el éxito:
Puede ver inmediatamente que ya ha creado un conjunto de 6 dispositivos falsos. Los usaremos como punto de partida para nuestra propia luz de Wi-Fi más adelante, pero solo los usaremos por ahora para probar. También 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 ejecutar Siri. Apple curiosamente no ofrece una aplicación HomeKit de inventario, excepto para los desarrolladores registrados, así que descargue la aplicación gratuita Elgato Eve, una aplicación de administración HomeKit que le permite agregar dispositivos (incluso que no son de Elgato) a su red HomeKit.
La primera vez que inicies la aplicación, deberás ponerle nombre a tu casa, seguir adelante y recorrerla. Entonces seleccione “Añadir accesorio”. Ignora el mensaje de estar cerca de él.!
Te dirá que busques un único. “Código de configuración de HomeKit” siguiente. Ignora eso, y pulsa. “Añadir a [nombre de tu casa]”.
También te 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 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 adelante. Agrega este accesorio a tu habitación predeterminada, llámalo Luz falsa, y sigue recorriendo los diálogos para elegir el icono, etc..
Finalmente, salte de nuevo a la sesión SSH donde tiene HAP-NodeJS en ejecución. Es posible que ya hayas visto un mensaje diciendo “Estamos en?” - Esa es la aplicación de Elgato para el estado de luz. Abre a Siri y dile a ella que “Enciende luz falsa”, a continuación, intente apagarlo de nuevo. Con suerte, verá algunos mensajes de depuración de HAP-NodeJS para mostrar que recibió los comandos.
¿Estamos en? No. Encendiendo 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 de nuevo..
Construyendo una luz Wi-Fi
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 no se encenderá..
Conecte el cable de alimentación rojo de un cable Neopixel al pin VIN, la conexión a tierra azul a GND y el cable de señal verde al pin marcado D2 en la NodeMCU. Tenga mucho cuidado con la polaridad: si mezcla el suelo y el VIN, enviará una descarga de energía a través de su tablero y la destruirá en el proceso..
Si su entorno Arduino aún no está configurado para funcionar con ESP8266, siga adelante y siga la guía en mi ESP8266: Arduino Killer Conozca a Arduino Killer: ESP8266 Conozca a Arduino Killer: ESP8266 ¿Qué pasa si le digo que hay un dev compatible con Arduino? ¿Tarjeta con Wi-Fi integrado por menos de $ 10? Bueno, la hay. Lee la guía Más luego regresa después de que hayas confirmado que está funcionando. Instale estas bibliotecas adicionales:
- PubClub de lmroy
- NeoPixels de Adafruit
El código que estamos usando es una modificación del usuario de Github Aditya Tannu's: eliminé la innecesaria funcionalidad de actualización por aire, agregé algunas funciones de HSV que faltaban y facilité la creación de más luces con solo cambiar una única variable 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 accesorio que cree (host).
const char * ssid = "..."; const char * contraseña = "..."; const char * host = "officelight"; Dirección IP 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 tarde si los alimenta desde una fuente externa. Cargue el código y probemos: use su cliente MQTT favorito para enviar comandos (ajusta el nombre del host en las siguientes instrucciones si lo has cambiado).
- Puedes enviar en a la raíz luz de la oficina Canal para encenderlo. Envía cualquier otro valor a ese canal para desactivarlo..
- Puede cambiar un número del 0-360 a la luz / matiz oficial para cambiar el color. Estamos usando el espacio de color HSV, por lo que 0 y 360 son rojos, 120 son verdes y 240 son azules.
- Envía un valor de porcentaje 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 el cero será blanco puro, independientemente del tono especificado..
Una vez que haya confirmado que su dispositivo de iluminación con MQTT está funcionando, continúe.
Configurando un nuevo accesorio HomeKit
Vuelve a la Raspberry Pi y termina la aplicación HAP-NodeJS si aún no lo has hecho. Navegar a la /accesorios directorio. Para facilitar esta tarea, puede descargar directamente el código que ya se ha emparejado con el “luz de la oficina” 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 de su servidor MQTT
- Si tiene un nombre de dispositivo diferente, busque / reemplace todas las instancias de “luz de la oficina” con su nombre único accesorio. Puedes hacer una búsqueda / reemplazo en Nano presionando CTRL y \, escribiendo el término para encontrar, el término para reemplazar, luego pulsa UNA (es decir, todas las instancias). Recorra cada uno de estos para aprender 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 con mantenerlos igual entre luces.
- Puedes darle un toque diferente a tu accesorio. “Nombre de siri” cuando los agregue a la aplicación Elgato Eve, y edítelos en cualquier momento para no quedar atrapado en su 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 sala o para crear escenas específicas que consistan en múltiples acciones complejas. Las escenas pueden consistir en múltiples acciones, tales como: encender la luz de la oficina, atenuarla al 25%, hacerla roja y activar la máquina de café.
Deberá volver a agregar su nuevo accesorio a través de la aplicación HomeKit que elija..
Finalmente, queremos ejecutar nuestra aplicación HAP-NodeJS cada vez que se reinicie el Pi. Agregue lo siguiente a su etc / rc.local archivo, justo antes de la salida 0.
nodo sudo /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 algún motivo, necesita ejecutarlo nuevamente en modo de depuración, puede detener la aplicación Node en ejecución con:
nodo killall
Un último paso: vaya al directorio de accesorios, y borre el GarageDoorOpener_accessory.js. Al momento de escribir esto está defectuoso, y causará que el servidor se rompa después de un tiempo.
¿Qué controlarás con Siri??
Ahora que ya tienes lo básico, realmente no hay límite para lo que puedes controlar: si puedes codificarlo en Javascript, puedes crear tu propio archivo de accesorios. Hay mucho potencial aquí, creo que te vas a divertir mucho. Déjame saber en los comentarios lo que se te ocurra.!
Explorar más sobre: Siri, iluminación inteligente.