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

Hoy te mostraré cómo controlar tus luces Hue desde un Arduino y luego agregar un sensor de movimiento simple.

Hoy te mostraré cómo controlar tus luces Hue desde un Arduino y luego agregar un sensor de movimiento simple.
Anuncio

La gama de luces Philips Hue ciertamente no es barata (hay algunas alternativas Alternativas Philips Hue que vale la pena Philips Alternativas Hue que realmente lo valen El sistema Philips Hue está a la cabeza cuando se trata de iluminación inteligente, pero hay algunas alternativas valiosas. Hemos escogido tres que ofrecen el mismo conjunto de características básicas y piratería. Lea más), pero una cosa que realmente aprecio es la API bien documentada ¿Qué son las API? ¿Cómo están las API abiertas? ¿Cómo se modifican las Internet? ¿Qué son las API? ¿Y cómo están las API abiertas cambiando Internet? ¿Te has preguntado cómo los programas en tu computadora y los sitios web que visitas "se hablan" entre ellos? Lea más para hacer sus propias aplicaciones Hue. Hoy te mostraré cómo controlar tus luces Hue desde un Arduino y luego agregar un sensor de movimiento simple.

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

El sistema Hue

Vamos a ponernos técnicos un poco para que sepas los sistemas subyacentes con los que estás trabajando. Las luces de matiz crean una red de malla Redes de malla: el futuro de la comunicación Redes de malla: el futuro de la comunicación Las redes de malla son casi invulnerables. En una red de malla, no hay puntos de estrangulamiento a través de los cuales pasa todo el tráfico. En cambio, la información se pasa de un dispositivo al siguiente hasta que llega a su destino. Lea más, utilizando un protocolo inalámbrico de corto alcance llamado ZigBee, específicamente, están certificados con ZigBee Light Link, lo que significa que otros productos ZLL también deberían funcionar junto con el Hue (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, retransmitiendo 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 los dos.

Zigbee es un protocolo excelente, pero es bastante diferente al Wi-Fi o a una red informática cableada, por lo que necesitamos el Philips Hue Bridge para unir los dos. El puente Hue ejecuta un firmware de Linux de fuente abierta modificado, que transmite un servidor web básico.

Esto es lo que verá si escribe la dirección IP de su puente Hue en su navegador. No puedes hacer mucho de aquí sin embargo.
Esto es lo que verá si escribe la dirección IP de su puente Hue en su navegador. No puedes hacer mucho de aquí sin embargo.

Es al interactuar con este servidor web local que puede conocer el estado actual de las luces y controlarlas.

Es un sistema maravillosamente simple y listo para proyectos de bricolaje. Felicitaciones a Philips por hacer esto tan pirateable.

Empezando

Para poder acceder a la documentación de la API, deberá registrarse como desarrollador. Es gratis, pero debes aceptar los términos y condiciones. Hacer esto 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? Una visión general de Layman ¿Qué es JSON? Información general de Layman Independientemente de si planea ser un desarrollador web o no, es una buena idea, al menos, saber qué es JSON, por qué es importante y por qué se usa en toda la Web. Lee mas .

Para ver esto en acción, necesitarás saber la dirección IP de tu puente 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
  • Ejecute un programa de asignación de red como IP Scanner Home
  • Pruebe la herramienta de broker UPnP de Philips
  • Ping "philips-hue.home"

mapeo de red para encontrar puente

Cuando termines, ingresa en la barra de direcciones de tu 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 Puente Hue mismo, que está deshabilitado de manera predeterminada por razones de seguridad. Pegue lo siguiente en el campo BODY, deje la URL como / api / y envíe una solicitud POST haciendo clic en el botón Publicar :

 {"devicetype":"test user", "username":"newdeveloper"} 

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é físicamente autorizada. Ve y encuentra tu puente, presiona el botón y envía la misma solicitud nuevamente dentro de los 30 segundos . Esta vez obtendrá una respuesta diferente y el usuario estará autorizado. Si desea utilizar un nombre de usuario diferente, lea los documentos de API sobre cómo crear 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, alarmas, escenas conectadas 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", "reachable": false }, "type": "Extended color light", "name": "Bedroom 1", "modelid": "LCT001",  

Tenga en cuenta que el estado "encendido": verdadero en realidad no le muestra si la bombilla está encendida o no; solo que de acuerdo con la configuración de Bridge, debería estar activada. "Alcanzable": falso puede indicar tanto una bombilla que está muy lejos, o simplemente se apaga en el interruptor de encendido.

Un último ejemplo antes de integrar esto en el Arduino: asegúrese de que una de sus luces esté visible y encendida, y de que sepa qué número es. Cambie 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 que tu luz reacciona así:

demostración de tono

Lo que has hecho es empujar un nuevo estado al foco. También puede agregar "transitiontime", 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 forma simple de enviar un valor RGB. En el ejemplo anterior, enviamos hue, saturación y bri ghtness. Intente cambiar el valor del tono y enviar de nuevo la solicitud PUT.

Trabajando desde Arduino

Hay una biblioteca Hue / Arduino existente llamada ArduinoHue a la que Philips se vincula en la documentación 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 necesita ejecutar una aplicación Python constantemente. Eugh . También puedes dejar que tu computadora ejecute todo en ese punto, y cortar el Arduino por completo.

En cambio, te mostraré cómo controlar el tono del Arduino con un escudo de Ethernet . Su Arduino no necesita estar conectado a una computadora, por lo que puede operar de forma independiente 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.

ehternet-sheild-box

Si desea saltar adelante, el código de muestra completo está incrustado debajo o disponible aquí. Lo he adaptado de un ejemplo publicado por Gilson Oguime. Si nunca jugaste con tu escudo Ethernet antes, te recomendamos echar un rápido vistazo al tutorial del cliente web. Asumiré un cierto grado de familiaridad con esto y no cubriré el código utilizado para establecer una red. IP, etc. También le mostramos cómo crear un mini servidor web con blindaje Ethernet. Otorgue a su proyecto Arduino su propio mini servidor web, con un escudo Ethernet. Dé a su proyecto Arduino su propio mini servidor web, con un escudo Ethernet A. Hace un tiempo, te mostré cómo configurar un sistema de control de internet para tu 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.

Crear cambios de estado

Crear un nuevo estado para enviar a las bombillas es un simple caso de crear una nueva variable de cadena y escapar de todas las comillas dobles. También agregué una función aleatoria () para crear una animación algo dinámica. Intente hacer que la variable de matiz 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 la luz y la cadena del comando como un argumento, así:

 setHue(1, command); 

Todo lo que hace entonces es conectarse al puente, escupe el comando como una solicitud PUT, junto con todas las otras tonterías que implica la creación de 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(); // blank line before body client.println(command); // Hue command 

Agregar un sensor de movimiento

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

Limitaciones

Aunque es cierto que el código no 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 era capaz de multiplicar por 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 animaciones de luz de alta velocidad, pero es bueno estar al tanto de la limitación.

También es difícil analizar completamente cualquier respuesta JSON que recibas desde el puente; simplemente no hay suficiente RAM en el Arduino para almacenar todos los datos sin procesar. Por esta razón, es posible que desee limitarse a enviar.

Hackear el tono

Ahora que está armado con el conocimiento de cómo controlar el Hue por completo de forma independiente, abre un mundo de hacks de automatización hogareña. La verdadera pregunta es: ¿qué harás?

In this article