Cómo controlar las luces de tono de Philips desde un Arduino (y agregar un sensor de movimiento)

Cómo controlar las luces de tono de Philips desde un Arduino (y agregar un sensor de movimiento) / Bricolaje

La gama de luces de Philips Hue no es barata (hay algunas alternativas. Alternativas de Philips Hue que realmente valen la pena. Alternativas de Philips Hue que realmente valen la pena. El sistema Philips Hue está liderando la carga cuando se trata de iluminación inteligente, pero hay algunas alternativas dignas. Hemos seleccionado tres que ofrecen el mismo conjunto de características básicas y capacidad de pirateo. Más información), pero una cosa que realmente aprecio es la API bien documentada, ¿qué son las API y cómo son las API abiertas? ¿Y cómo están las API abiertas cambiando de Internet? ¿Alguna vez se ha preguntado cómo los programas en su computadora y los sitios web que visita se "comunican" entre sí? Lee más para hacer tus propias aplicaciones de Hue. Hoy les mostraré cómo controlar sus luces de tono desde un Arduino, luego agregaré un sensor de movimiento simple.

¿Por qué estamos haciendo esto? Porque los sistemas domóticos pueden ser bastante rígidos y caros. Al aprender a controlar el Matiz de Arduino, abre las puertas a una variedad de proyectos de automatización para el hogar hechos a medida que simplemente no pueden ser superados por componentes listos para usar. Si piratear cosas no es lo tuyo, prueba estas 8 fabulosas aplicaciones Hue 8 Fabulous Apps para Philips Hue Lights 8 Fabulous Apps para Philips Hue Lights El sistema Philips Hue tiene su propia aplicación, pero ¿por qué conformarse con la predeterminada cuando hay tantas? opciones más frías por ahí? Estas 8 aplicaciones te dan opciones fabulosas para algunos efectos realmente geniales. Leer más en su lugar.

El sistema de matiz

Pongámonos un poco técnicos para que conozca los sistemas subyacentes con los que está trabajando. Las luces de tono crean una red de malla Redes de malla: el futuro de las redes de malla de comunicación: el futuro de las redes de malla de comunicación son casi invulnerables. En una red de malla, no hay puntos de choque a través de los cuales pasa todo el tráfico. En cambio, la información se pasa de un dispositivo a otro hasta que llega a su destino. Lea más, utilizando un protocolo inalámbrico de corto alcance llamado ZigBee; específicamente, están certificados por ZigBee Light Link, lo que significa que otros productos ZLL también deberían funcionar junto con el tono (en teoría).

Aunque técnicamente de corto alcance, la función de red de malla de ZigBee significa que cada nueva bombilla extiende la red, transmitiendo mensajes a otras bombillas. Esto significa que si tiene problemas para controlar una luz en el otro lado de la casa, intente colocar otra luz entre las dos.

Zigbee es un gran protocolo, pero es bastante diferente al Wi-Fi o a una red de computadoras por cable, por lo que necesitamos que Philips Hue Bridge se una a los dos. El puente Hue ejecuta un firmware linux de código abierto modificado, que transmite un servidor web básico.

Esto es lo que verá si solo escribe la dirección IP de su puente de Hue en su navegador. Aunque no se puede hacer mucho desde aquí..

Al interactuar con este servidor web local, puede conocer el estado actual de las luces y controlarlas..

Es un sistema hermosamente simple y maduro para proyectos de bricolaje. Felicitaciones a Philips por hacer esto tan hackeable.

Empezando

Antes de poder acceder a la documentación de la API, deberá registrarse como desarrollador. Es gratis, pero debes aceptar los términos y condiciones. Hacerlo ahora.

Cualquiera que esté familiarizado con los servicios web estándar o Javascript debería poder trabajar con Hue: todos los datos se pasan y se reciben como paquetes JSON ¿Qué es JSON? Descripción de un laico ¿Qué es JSON? La visión general de un Layman Tanto si planea ser un desarrollador web como si no, es una buena idea al menos saber qué es JSON, por qué es importante y por qué se utiliza en toda la web. Lee mas .

Para ver esto en acción, deberá conocer la dirección IP de su puente de Hue. Hay algunas maneras de hacer esto:

  • Mire la tabla de asignación de direcciones DHCP en la interfaz de administración de su enrutador
  • Ejecutar un programa de mapeo de red como IP Scanner Home
  • Prueba la herramienta broker Philips UPnP
  • Silbido “philips-hue.home”

Cuando haya terminado, continúe y escríbalo en la barra de direcciones de su navegador con debug / clip.html adjunto a la URL. En mi caso, esto fue:

http://192.168.1.216/debug/clip.html

Esta es una herramienta de depuración que le permite enviar y recibir los paquetes JSON a través de una interfaz web simple. El primer paso es habilitar el perfil de desarrollador en el propio Hue Bridge, que está deshabilitado por defecto por razones de seguridad. Pegue lo siguiente en el campo CUERPO, deje la URL como / api /, y enviar una solicitud POST haciendo clic en el botón de publicar:

"devicetype": "usuario de prueba", "nombre de usuario": "desarrollador nuevo"

La primera vez que hagas esto, verás un “botón de enlace no presionado” En algún lugar de la respuesta. Esta es una característica de seguridad que requiere que cada nueva aplicación que utilice esté autorizada físicamente. Ve y encuentra tu puente, presiona el botón y envía la misma solicitud nuevamente dentro de 30 segundos. Esta vez obtendrás una respuesta diferente, y el usuario será autorizado. Si desea utilizar un nombre de usuario diferente, lea los documentos de la API sobre la creación de usuarios. Por ahora, esto será suficiente..

Una vez que el usuario está configurado, la URL base con la que debe interactuar se convierte en / api / newdeveloper / . Puede enviar una solicitud GET para averiguar todo lo que su Bridge sabe actualmente sobre luces conectadas, alarmas, escenas y un breve registro de las aplicaciones que se han utilizado. Aquí hay una muestra de la información de estado contenida para una sola bombilla..

 "state": "on": true, "bri": 254, "hue": 14910, "sat": 144, "effect": "none", "xy": [0.4596, 0.4105], "ct" : 369, "alert": "none", "colormode": "ct", "accesible": false, "type": "Luz de color extendida", "name": "Bedroom 1", "modelid": " LCT001 ", 

Tenga en cuenta que el “en”:cierto el estado no muestra realmente si la bombilla está encendida o no; sólo que de acuerdo con la configuración del puente, debería estar en. “accesible”:falso puede indicar una bombilla que está demasiado lejos o simplemente apagada con el interruptor de encendido.

Un último ejemplo antes de que integremos esto en el Arduino: asegúrese de que una de sus luces esté visible y encendida, y que sepa qué número es. Cambiar la URL a / api / newdevelopers / lights / 1 / state (cambiando el número a su luz), y envíe una solicitud PUT con los siguientes datos:

"hue": 50100, "sat": 255, "bri": 255

Deberías ver tu luz reaccionar así:

Lo que has hecho es empujar un nuevo estado a la bombilla. También puedes añadir “tiempo de transición”, que es un método de animación primitivo que indica cuántos segundos desea que tome el cambio de estado.

El color se puede configurar de diferentes maneras, pero desafortunadamente no hay una manera simple de enviar un valor RGB. En el ejemplo anterior, enviamos matiz, Saburación, y brienfermedad Intenta cambiar el valor del tono y enviar de nuevo la solicitud PUT.

Trabajando desde Arduino

Existe una biblioteca Hue / Arduino existente llamada ArduinoHue a la que Philips se vincula en la documentación de la API, pero el problema con esta biblioteca es que se comunica a través de la conexión USB a su PC, que también debe estar ejecutando una aplicación Python constantemente.. Eugh. También puede dejar que su computadora ejecute todo el proceso en ese momento y cortar el Arduino por completo..

En cambio, te mostraré cómo controlar el Tono del Arduino. utilizando un escudo Ethernet. Su Arduino no necesita estar conectado a una computadora, por lo que puede operar independientemente en cualquier lugar donde pueda colocar un cable Ethernet. De hecho, también debería funcionar con un escudo de Wi-Fi, pero no tengo uno para jugar.

Si desea omitir, el código de ejemplo completo se incluye a continuación o está disponible aquí. Lo he adaptado de un ejemplo publicado por Gilson Oguime. Si nunca ha jugado con su escudo Ethernet antes, es posible que desee realizar una ejecución rápida a través del tutorial del cliente web. Asumiré cierto nivel de familiaridad con esto y no cubriremos el código utilizado para establecer una red. IP, etc. También le mostramos cómo crear un mini servidor web con el escudo Ethernet Déle a su proyecto Arduino su propio mini servidor web, con un escudo Ethernet Déle a su proyecto Arduino su propio mini servidor web, con un escudo Ethernet A Hace tiempo, le enseñé cómo configurar un sistema de control de Internet para su Arduino, pero tenía que estar conectado a una computadora a través de USB para mantener la conexión a Internet ... Leer más .

Creando cambios de estado

Crear un nuevo estado para empujar a las bombillas es un caso simple de crear una nueva Cuerda variable, y escapando de todas las comillas dobles. He añadido un aleatorio() Funciona allí también para crear una animación algo dinámica. Intenta hacer que la variable de tono sea aleatoria también para diferentes colores.

String command = "\" on ": true, \" hue \ ": 50100, \" sat \ ": 255, \" bri \ ": 255, \" transitiontime \ ":" + String (random (15, 25)) + "";

Enviando el comando

Para enviar realmente el comando, tienes una función auxiliar llamada setHue () que toma el número de luz y la cadena del comando como un argumento, de esta manera:

setHue (1, comando);

Todo lo que hace entonces es que se conecta al puente, escupe el comando como una solicitud PUT, junto con todas las otras tonterías que implica crear una solicitud HTTP.

 client.print ("PUT / api /"); client.print (hueUsername); client.print ("/ lights /"); client.print (lightNum); client.println ("/ state HTTP / 1.1"); client.println ("keep-alive"); client.print ("Host:"); client.println (hueHubIP); client.print ("Content-Length:"); client.println (command.length ()); client.println ("Content-Type: text / plain; charset = UTF-8"); client.println (); // línea en blanco antes del cuerpo client.println (comando); // Comando Hue 

Añadiendo un sensor de movimiento

Finalmente, conecté un sensor de movimiento HC-SR501 simple al pin de E / S digital 2. Cuando se detecta movimiento, una serie de estados son empujados al puente para 2 bombillas para crear una animación lenta y dinámica. Cuando el sensor de movimiento se desactiva, se envía un solo comando de apagado a ambos. Idealmente, se revertirían al estado en que se encontraban antes de que se detectara el movimiento, pero la lógica no es tan inteligente, simplemente los vamos a encender y apagar.

Limitaciones

Aunque se admite que el código no está optimizado, la interfaz de red del Arduino tarda casi un segundo en enviar una única solicitud de comando. Probé el mismo comando desde una Mac, usando la misma conexión Ethernet, y fue capaz de diez a veinte veces esa velocidad (aquí está el AppleScript en caso de que quiera probar). En consecuencia, cualquier tipo de animación rápida (estaba intentando crear un efecto de vela parpadeante) simplemente no es posible desde un Arduino. Esto no debería ser un problema para la mayoría de los proyectos, solo para las animaciones ligeras de alta velocidad, pero es bueno tener en cuenta la limitación.

También es difícil analizar completamente cualquier respuesta JSON que recibas del puente; simplemente no hay suficiente RAM en el Arduino para almacenar todos los datos en bruto. Por este motivo, es posible que desee limitarse principalmente a enviar.

Hackear el tono

Ahora que está armado con el conocimiento de cómo controlar Hue de forma completamente independiente, se abre un mundo de hacks de automatización del hogar de Hue. La verdadera pregunta es: que vas a hacer?

Explorar más sobre: ​​Arduino, Philips Hue, Smart Lighting.