Como controlar as luzes Philips Hue de um Arduino (e adicionar um sensor de movimento)

Hoje mostrarei como controlar as luzes do Hue de um Arduino - depois adicionando um sensor de movimento simples.

Hoje mostrarei como controlar as luzes do Hue de um Arduino - depois adicionando um sensor de movimento simples.
Propaganda

A gama de luzes Philips Hue certamente não é barata (existem algumas alternativas que podem valer a pena. Alternativas da Philips que realmente valem a pena O sistema Philips Hue está liderando a carga quando se trata de iluminação inteligente, mas há alguns Nós escolhemos três que oferecem o mesmo conjunto de recursos básicos e hackability.Leia mais), mas uma coisa que eu realmente aprecio é a API bem documentada O que são APIs, e como são APIs abertas Mudando a Internet O que são APIs E como as APIs abertas estão mudando a Internet Você já se perguntou como os programas em seu computador e os sites que você visita "conversam" uns com os outros? Leia mais para criar seus próprios aplicativos Hue. Hoje mostrarei como controlar as luzes do Hue de um Arduino - depois adicionando um sensor de movimento simples.

Por que estamos fazendo isso? Porque os sistemas de automação residencial podem ser bastante rígidos e caros. Ao aprender como controlar o Hue a partir do Arduino, você abre as portas para uma variedade de projetos de automação residencial feitos sob medida que simplesmente não podem ser superados por componentes prontos para uso. Se hackear as coisas não é coisa sua, experimente estes 8 fabulosos aplicativos Hue 8 Aplicativos Fabulosos para Philips Hue Lights 8 Aplicativos Fabulosos para Philips Hue Lights O sistema Philips Hue tem seu próprio aplicativo, mas por que se contentar com o padrão quando há tantos opções mais legais lá fora? Esses 8 aplicativos oferecem opções fabulosas para alguns efeitos muito legais. Leia mais em vez disso.

O sistema de matiz

Vamos obter um pouco de técnica para que você conheça os sistemas subjacentes com os quais está trabalhando. As luzes de matiz criam uma rede de malha Redes de malha: o futuro da comunicação Redes de malha: o futuro da comunicação As redes de malha são quase invulneráveis. Em uma rede mesh, não há pontos de estrangulamento pelos quais todo o tráfego passa. Em vez disso, as informações são passadas de um dispositivo para o outro até chegar ao seu destino. Leia mais, usando um protocolo sem fio de curto alcance chamado ZigBee - especificamente, eles são certificados ZigBee Light Link, o que significa que outros produtos ZLL também devem trabalhar ao lado do Hue (em teoria).

Embora tecnicamente curto alcance, o recurso de rede de malha de ZigBee significa que cada nova lâmpada estende a rede, transmitindo mensagens para outras lâmpadas. Isto significa que se você está tendo problemas para controlar uma luz do outro lado da casa, tente colocar outra luz entre os dois.

O Zigbee é um ótimo protocolo, mas é bem diferente do Wi-Fi ou de uma rede de computadores com fio, por isso precisamos que o Philips Hue Bridge junte os dois. A ponte Hue executa um firmware linux de software livre modificado, que transmite um servidor web básico.

Isso é o que você verá se digitar apenas o endereço IP da ponte Hue no navegador. Você não pode fazer muito a partir daqui.
Isso é o que você verá se digitar apenas o endereço IP da ponte Hue no navegador. Você não pode fazer muito a partir daqui.

É interagindo com este servidor web local que você pode descobrir o status atual das luzes e controlá-las.

É um sistema lindamente simples e maduro para projetos de bricolagem. Parabéns à Philips por tornar essa coisa tão hackeável.

Começando

Antes de acessar a documentação da API, você precisa se registrar como desenvolvedor. É grátis, mas você precisa aceitar os termos e condições. Faça isso agora.

Qualquer pessoa familiarizada com serviços web padrão ou Javascript deve poder trabalhar com o Hue: todos os dados são passados ​​e recebidos como pacotes JSON. O que é o JSON? Visão geral de um leigo O que é o JSON? Visão geral de um leigo Se você planeja ser um desenvolvedor da Web ou não, é uma boa ideia pelo menos saber o que é JSON, por que é importante e por que ele é usado em toda a web. Consulte Mais informação .

Para dar uma olhada nisso em ação, você precisará saber o endereço IP da sua ponte Hue. Há algumas maneiras de fazer isto:

  • Olhe para a tabela de atribuição de endereços DHCP na interface de administração do seu roteador
  • Executar um programa de mapeamento de rede, como o IP Scanner Home
  • Experimente a ferramenta corretora Philips UPnP
  • Ping “philips-hue.home”

mapeamento de rede para encontrar ponte

Quando terminar, digite-o na barra de endereço do navegador com o arquivo debug / clip.html anexado ao URL. No meu caso, isso foi:

http://192.168.1.216/debug/clip.html 

Esta é uma ferramenta de depuração que permite enviar e receber os pacotes JSON através de uma interface web simples. A primeira etapa é habilitar o perfil do desenvolvedor na própria Hue Bridge - que é desativada por padrão por motivos de segurança. Cole o seguinte no campo BODY, deixe o URL como / api / e envie uma solicitação POST clicando no botão de postagem :

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

Na primeira vez que fizer isso, você verá um “botão de link não pressionado” em algum lugar na resposta. Esse é um recurso de segurança que requer que todos os novos aplicativos que você usa sejam fisicamente autorizados. Vá e encontre seu Bridge, pressione o botão e envie a mesma solicitação novamente dentro de 30 segundos . Desta vez, você receberá uma resposta diferente e o usuário será autorizado. Se você quiser usar um nome de usuário diferente, leia os documentos da API sobre como criar usuários. Por enquanto, isso será suficiente.

Depois que seu usuário for configurado, o URL base com o qual você deve interagir se tornará / api / newdeveloper / . Você pode enviar uma solicitação GET para descobrir tudo o que seu Bridge conhece atualmente sobre luzes, alarmes, cenas e um breve log de aplicativos que foram usados. Aqui está uma amostra de algumas das informações de status contidas para uma única lâmpada.

 "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",  

Note que o estado “on”: true não mostra se a lâmpada está ligada ou não; apenas isso de acordo com as configurações do Bridge, ele deve estar ativado. "Acessível": false pode indicar uma lâmpada muito distante ou simplesmente desligada no botão liga / desliga.

Um último exemplo antes de integrar isso ao Arduino: certifique-se de que uma de suas luzes esteja visível e acesa e que você saiba qual é o número. Altere o URL para / api / newdevelopers / lights / 1 / state (alterando o número para sua luz) e envie uma solicitação PUT com os seguintes dados:

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

Você deve ver sua luz reagir assim:

demonstração de matiz

O que você fez foi empurrar um novo estado para a lâmpada. Você também pode adicionar “transitiontime”, que é um método primitivo de animação que indica quantos segundos você gostaria que a mudança de estado tomasse.

A cor pode ser definida de várias maneiras diferentes, mas infelizmente não há uma maneira simples de enviar um valor RGB. No exemplo acima, enviamos matiz, saturação e briga. Tente alterar o valor de matiz e enviar a solicitação PUT novamente.

Trabalhando a partir do Arduino

Existe uma biblioteca Hue / Arduino chamada ArduinoHue, à qual a própria Philips se refere na documentação da API, mas o problema dessa biblioteca é que ela se comunica pela conexão USB ao seu PC, que também precisa estar executando uma aplicação Python constantemente. Eugh Você também pode deixar seu computador executar a coisa toda nesse ponto e cortar o Arduino completamente.

Em vez disso, mostrarei como controlar o Hue do Arduino usando um escudo Ethernet . Seu Arduino não precisa estar conectado a um computador, para que ele possa operar independentemente em qualquer lugar onde você possa colocar um cabo Ethernet. Na verdade, ele também deve funcionar com um escudo Wi-Fi, mas eu não tenho um para brincar.

ehternet-sheild-box

Se você quiser pular para frente, o código de amostra completo será incorporado abaixo ou estará disponível aqui. Eu o adaptei de um exemplo postado por Gilson Oguime. Se você nunca jogou com sua blindagem Ethernet antes, você pode querer executar rapidamente o tutorial do cliente web - assumirei algum nível de familiaridade com isso e não cobrirei o código usado para estabelecer uma rede. IP etc. Também mostramos como criar um mini-servidor web com o escudo Ethernet. Dê ao seu Arduino seu próprio mini-servidor Web, com um escudo Ethernet. Dê ao seu Arduino seu próprio mini-servidor Web, com um protetor Ethernet. enquanto atrás, eu mostrei a você como configurar um sistema de controle de internet para o seu Arduino - mas ele tinha que ficar conectado a um computador através de USB, a fim de manter a conexão com a internet .... Leia Mais.

Criando Mudanças de Estado

Criar um novo estado para empurrar para as lâmpadas é um caso simples de criar uma nova variável String e escapar de todas as aspas duplas. Eu adicionei uma função random () lá também para criar uma animação um pouco dinâmica. Tente tornar a variável de matiz aleatória também para cores diferentes.

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

Enviando o Comando

Para realmente enviar o comando, você tem uma função auxiliar chamada setHue () que pega o número light e a string de comando como um argumento, da seguinte forma:

 setHue(1, command); 

Tudo o que ele faz é se conectar à bridge, enviar o comando como um pedido PUT, juntamente com todos os outros disparates que a criação de uma solicitação HTTP envolve.

 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 

Adicionando um Sensor de Movimento

Finalmente, conectei um simples sensor de movimento HC-SR501 ao pino de E / S digital 2. Quando o movimento é detectado, uma série de estados são empurrados para a ponte por duas lâmpadas para criar uma animação lenta e dinâmica. Quando o sensor de movimento é desativado, um único comando off é enviado para ambos. Idealmente, eles seriam revertidos para o estado em que se encontravam antes que o movimento fosse detectado, mas a lógica não é tão inteligente - vamos apenas ligá-los e desligá-los.

Limitações

Embora admitidamente código não otimizado, leva quase um segundo para a interface de rede do Arduino enviar uma única solicitação de comando. Eu testei o mesmo comando de um Mac, usando a mesma conexão Ethernet, e ele era capaz de dez a vinte vezes a velocidade (aqui está o AppleScript, caso você queira testar). Consequentemente, qualquer tipo de animação rápida (eu estava tentando criar um efeito cintilante de velas) simplesmente não é possível a partir de um Arduino. Isso não deve ser um problema para a maioria dos projetos, apenas para animações leves em alta velocidade, mas é bom estar ciente da limitação.

Também é difícil analisar completamente qualquer resposta JSON que você recebe da ponte; simplesmente não há RAM suficiente no Arduino para armazenar todos os dados brutos. Por esse motivo, você pode querer limitar-se principalmente ao envio.

Hack the Hue

Agora que você está armado com o conhecimento de como controlar o Hue de forma totalmente independente, ele abre um mundo de hacks de automação residencial Hue. A verdadeira questão é: o que você vai fazer?

In this article