Como Fazer uma Luz Wi-Fi Controlada por Siri DIY

Neste guia, você aprenderá como criar uma luz controlável de Wi-Fi e controlá-la com o Siri.

Neste guia, você aprenderá como criar uma luz controlável de Wi-Fi e controlá-la com o Siri.
Propaganda

O HomeKit está finalmente disponível, permitindo o controle de voz através da Siri para um punhado de dispositivos domésticos inteligentes para o consumidor.

Infelizmente, quero dizer um punhado literal - qualquer coisa que você já comprou provavelmente não é compatível. No entanto, o protocolo já foi submetido a engenharia reversa e um emulador de código aberto para a HomeKit API está disponível: ou em linguagem simples, agora é possível criar dispositivos HomeKit “falsos” e a Siri os controlará como qualquer outro acessório HomeKit oficial.

Hoje, vamos criar uma luz controlável para Wi-Fi e controlá-la com Siri. Aqui está uma demonstração.

Aqui está o que você precisa:

  • Raspberry Pi (Eu usei um RPi2, há uma pequena diferença nas versões do Node para instalar, dada a arquitetura ARM atualizada - veja as notas mais tarde).
  • Um broker do MQTT instalado no Raspberry Pi. Veja a seção “Instalar o Mosquitto no seu Pi” no meu Guia do OpenHAB parte 2 Guia do Iniciante do OpenHAB Parte 2: ZWave, MQTT, Regras e Gráficos OpenHAB Guia do Iniciante Parte 2: ZWave, MQTT, Regras e Gráficos OpenHAB, o software de automação residencial de código aberto excede em muito as capacidades de outros sistemas de automação residencial no mercado - mas não é fácil de configurar. Na verdade, pode ser francamente frustrante. Consulte Mais informação . Ele não precisa ser instalado especificamente no Pi - você pode até usar um servidor MQTT baseado em nuvem, mas como precisamos de um Pi para este tutorial, é conveniente.
  • NodeMCU v2 (compatível com Arduino)
  • Neopixel LEDs (eu recomendo 4 pixels para teste, então você pode adicionar uma fonte de alimentação externa e adicionar quantos você quiser)

Instalando o HomeKit Bridge

Vamos instalar um aplicativo NodeJS chamado HAP-NodeJS no Raspberry Pi: isso formará uma ponte entre as solicitações HomeKit e os dispositivos Wi-Fi. Vamos configurar esta ponte com um acessório por enquanto, mas você pode adicionar quantas quiser.

Na verdade, estou instalando isso no meu servidor doméstico existente executando o OpenHAB - espero conectar os dois em uma data posterior, mas por enquanto, saiba que eles podem coexistir no mesmo Raspberry Pi. Se você está fazendo o mesmo, apenas no caso, fazer um backup clone do seu cartão Pi SD atual Clone facilmente o seu cartão SD para a computação Raspberry Pi sem problemas Clone facilmente o seu cartão SD para Raspberry Pi sem problemas de computação Se você tem um Cartão SD ou vários, uma coisa que você precisa é a capacidade de fazer backup de seus cartões para evitar os problemas que ocorrem quando o seu Raspberry Pi não arranca. Consulte Mais informação . Se tudo der errado, você pode restaurar isso.

Comece fazendo uma atualização completa do terminal ou uma sessão SSH Configurando seu Raspberry Pi para uso sem cabeça com SSH Configurando seu Raspberry Pi para uso sem cabeça com SSH O Raspberry Pi pode aceitar comandos SSH quando conectado a uma rede local (seja por Ethernet ou Wi-Fi), permitindo-lhe configurá-lo facilmente. Os benefícios da SSH vão além de perturbar a triagem diária ... Leia Mais.

 sudo apt-get atualização sudo apt-get upgrade 

Você pode precisar fazer isso duas vezes se já faz um tempo.

Agora instale alguns pacotes básicos que vamos precisar:

 sudo apt-get instalar npm git-core libnss-mdns libavahi-compat-libdnssd-dev 

Em seguida, vamos instalar a versão mais recente do NodeJS. Você pode ficar tentado a fazer isso com o apt-get, mas não - essa versão é realmente antiga agora e não funcionará. Em vez disso, visite nodejs.org, navegue até o diretório download / release / latest-v5.x.0 / e verifique qual é o link para a versão mais recente. Você está procurando por linux-armv7l para Raspberry Pi 2, ou linuxarmv6l para os modelos RPi originais. Em seguida, ajuste as URLs e os nomes dos diretórios conforme necessário, faça o download e instale usando os seguintes 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 

Confirme digitando

 versão do nó 

E você deve ver a v5.5 (ou qualquer que seja o último que você baixou).

Em seguida, temos alguns módulos do Node para instalar.

 sudo npm instalar -g npm sudo npm instalar -g nó-gyp 

Naquele primeiro comando, estamos realmente usando o Node Package Manager (npm) para instalar uma versão mais nova de si mesmo. Esperto!

Agora, para baixar o emulador HomeKit chamado HAP-NodeJS:

 git clone https://github.com/KhaosT/HAP-NodeJS.git cd HAP-NodeJS npm reconstruir sudo npm instalar nó-persist sudo npm instalar srp 

Neste momento, eu corri este erro: " #error Esta versão do nó / NAN / v8 requer um compilador C ++ 11 ". Se isso acontecer com você, instale um compilador C ++ mais recente com os comandos:

 sudo apt-get instalar gcc-4.8 g ++ - 4.8 sudo update-alternativas - instalar / usr / bin / gccgcc /usr/bin/gcc- 4.6 20 sudo update-alternatives - instalar / usr / bin / gcc gcc / usr / bin / gcc-4.8 50 sudo update-alternativas --install / usr / bin / g + + g / usr / bin / g + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 4, 8 50 

Agora você não deveria ter um problema. Continue executando esses comandos, um por um:

 sudo npm instalar srp sudo npm instalar mdns --unsafe-perm sudo npm instalar depurar sudo npm instalar ed25519 --unsafe-perm sudo npm instalar curve25519 --unsafe-perm 

Isso deveria ser tudo. Tente executar o emulador com:

 node Core.js 

Se você receber erros dizendo que não pode encontrar tal e tal módulo, apenas use o comando sudo npm install novamente, e afixe o nome de qualquer módulo que esteja faltando. Supondo que tudo esteja bem, você deverá ver alguns avisos e a sua ponte HomeKit estará em execução. É assim que o sucesso se parece:

hap-nodejs instalado

Você pode ver imediatamente que ele já criou um conjunto de 6 dispositivos falsos. Vamos usá-los como ponto de partida para a nossa própria luz Wi-Fi mais tarde, mas vamos usá-los apenas para testar. Você também pode ver mais informações de depuração se iniciar o servidor com:

 DEBUG = * node Core.js 

Agora salte para um dispositivo da Apple capaz de executar o Siri. A Apple, curiosamente, não fornece um aplicativo HomeKit de estoque, exceto para desenvolvedores registrados, então baixe o aplicativo gratuito Elgato Eve, um aplicativo de gerenciamento HomeKit que permite que você adicione dispositivos (até mesmo não-Elgato) à sua rede HomeKit.

A primeira vez que você iniciar o aplicativo, você precisará nomear sua casa, vá em frente e passe por isso. Em seguida, selecione "Adicionar acessório". Ignore a mensagem sobre estar perto disso!

elgato eve 1

Ele dirá para você procurar um “Código de Configuração HomeKit” exclusivo em seguida. Ignore isso e clique em "Adicionar a [nome da sua casa]".

Também lhe dirá que o dispositivo não é certificado. De fato não é. Vá em frente assim mesmo. Quando você chegar na tela pedindo um código de acessório ...

elgato eve 2

Escolha inserir o código manualmente e digite o seguinte:

 031-45-154 

Isso pode ser encontrado / alterado no arquivo Light_accessory.js, mas mais sobre isso depois. Adicione este acessório ao seu quarto padrão, chame-o de Luz Falsa e continue caminhando pelas caixas de diálogo para escolher o ícone etc.

Finalmente, volte para a sessão SSH onde você tem o HAP-NodeJS em execução. Você já deve ter visto uma mensagem dizendo "Estamos ligados?" - esse é o aplicativo da Elgato que pesquisa o status da luz. Abra o Siri e diga-lhe para "Ligar a luz falsa", depois tente desligá-lo novamente. Espero que você veja algumas mensagens de depuração do HAP-NodeJS para mostrar que recebeu os comandos.

 Estamos em? Não. Acendendo a luz! Apagando a luz! 

Fantástico, esse é o primeiro passo terminado. Agora vamos precisar de uma luz real, antes de voltar a configurar a ponte novamente.

Construindo uma luz Wi-Fi

O lado do hardware desta etapa é surpreendentemente simples se começarmos com apenas quatro Neopixels, pois podemos alimentá-los diretamente da placa de desenvolvimento do NodeMCU e de sua conexão USB. Se você tem uma faixa mais longa, não se preocupe - definimos isso no software, para que o restante não seja ativado.

Conecte o cabo de alimentação vermelho de um cabo Neopixel ao pino VIN, o fio terra azul ao GND e o cabo de sinal verde ao pino marcado com D2 no NodeMCU. Tenha muito cuidado com a polaridade: se você misturar o solo e o VIN, enviará uma onda de energia através da sua placa e a destruirá no processo.

Se o seu ambiente Arduino ainda não está configurado para funcionar com o ESP8266, vá em frente e siga o guia no meu ESP8266: Arduino Killer Conheça o Arduino Killer: ESP8266 Conheça o Arduino Killer: ESP8266 E se eu dissesse a você que há um desenvolvedor compatível com Arduino? placa com built-in Wi-Fi por menos de US $ 10? Bem, existe. Leia o guia Mais e volte depois de confirmar que está funcionando. Instale estas bibliotecas adicionais:

  • PubSubClient de lmroy
  • NeoPixels de Adafruit

O código que estamos usando é uma modificação do usuário do Github Aditya Tannu - eu removi a desnecessária funcionalidade de atualização pelo ar, adicionei algumas funções do HSV que estavam faltando, e facilitei a criação de mais luzes apenas mudando uma única variável. Se você não consegue ver o código embebido abaixo, você vai encontrá-lo nesta essência.

Atualize as seguintes linhas com suas próprias informações de rede e um nome exclusivo para cada equipamento que você criar (host).

 const char * ssid = "...."; const char * password = "..."; const char * host = "officelight"; IPAddress MQTTserver (192, 168, 1, 99); 

O endereço IP deste equipamento é obtido automaticamente através do DHCP - não importa se ele muda, já que estamos nos conectando ao mesmo servidor MQTT a cada vez.

Por enquanto, estamos usando apenas 4 Neopixels, mas você pode aumentar o número mais tarde se alimentá-los a partir de uma fonte externa. Faça o upload do código e teste - use seu cliente MQTT favorito para enviar comandos (ajuste o nome do host nas instruções a seguir, caso você tenha alterado) .

  • Você pode enviar para o canal officelight raiz para ativá-lo. Envie qualquer outro valor para esse canal para desativá-lo.
  • Você pode enviar um número de 0 a 360 para o officelight / matiz para alterar a cor. Estamos usando o espaço de cores HSV, então 0 e 360 ​​são vermelhos, 120 são verdes e 240 são azuis.
  • Você envia um valor percentual para o brilho (0 a 100, não inclua o símbolo%).
  • O mesmo para saturação. Um valor de 100 será totalmente saturado (ou seja, uma cor sólida) e zero será branco puro, independentemente da matiz especificada.

Depois de confirmar que o seu equipamento de iluminação controlado por MQTT está a funcionar, siga em frente.

Configurando um novo acessório HomeKit

Volte para o Raspberry Pi e encerre o aplicativo HAP-NodeJS se você ainda não o fez. Navegue até o diretório / accessories . Para facilitar, você pode fazer o download de um código que já tenha sido emparelhado com o acessório "officelight" digitando o seguinte:

 wget https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js 

Essencialmente, isso é uma duplicata do acessório de luz padrão, com alguns nomes de variáveis ​​alterados (novamente, adaptado do trabalho de Adysan, simplificado para facilidade de uso). Veja o que você deve saber para criar seus próprios acessórios personalizados com base nisso.

  • Todos os acessórios devem ser nomeados * _accessory.js
  • Altere o endereço IP na variável de opções na parte superior para o seu servidor MQTT
  • Se você tiver um nome de equipamento diferente, pesquise / substitua todas as instâncias de “ officelight ” pelo nome exclusivo do seu fixture. Você pode fazer uma pesquisa / substituição no Nano pressionando CTRL e \, digitando o termo para encontrar, o termo a ser substituído e, em seguida, pressione A (significando todas as instâncias). Percorra cada um deles para saber exatamente quais variáveis ​​estão sendo atualizadas.
  • Crie um nome de usuário hexadecimal exclusivo para o acessório ( light.username = “1B: 2B: 3C: 5D: 6E: FF”; )
  • Não mude o código PIN. Ele segue um formato específico e, a menos que você saiba o que está fazendo, não será possível parear. Não há problema em mantê-los iguais entre as luzes.
  • Você pode dar ao seu aparelho um “nome Siri” diferente ao adicioná-lo ao aplicativo Elgato Eve e editá-lo a qualquer momento para não ficar com sua escolha inicial. Não há necessidade de editar os arquivos de configuração ou reiniciar o servidor.
  • Uma vez que você tenha vários equipamentos, você pode usar o aplicativo Elgato Eve para agrupá-los por sala ou criar cenas específicas que consistem em várias ações complexas. As cenas podem consistir em várias ações, como: acender a luz do escritório, reduzi-la para 25%, torná-la vermelha e ativar a máquina de café.

Você precisará adicionar seu novo acessório através do seu aplicativo HomeKit de escolha novamente.

Finalmente, queremos executar nosso aplicativo HAP-NodeJS sempre que o Pi for reiniciado. Adicione o seguinte ao seu arquivo etc / rc.local, logo antes da saída 0 .

 sudo node /home/pi/HAP-NodeJS/Core.js </ dev / null & 

Você pode ver que combinei isso com alguns outros comandos que eu já defini para iniciar na inicialização.

nó de execução rclocal na inicialização

Se esta é a primeira vez que você está usando rc.local, pode ser necessário configurá-lo como executável:

 sudo chmod 755 /etc/rc.local 

Se, por algum motivo, você precisar executá-lo novamente no modo de depuração, poderá eliminar o aplicativo Node em execução com:

 nó killall 

Um passo final: navegue até o diretório de acessórios e exclua o GarageDoorOpener_accessory.js . No momento da escrita, isso é um buggy e fará com que o servidor quebre após algum tempo.

O que você vai controlar com Siri?

Agora que você tem o básico, não há realmente nenhum limite para o que você pode controlar - se você pode codificá-lo em Javascript, você pode criar seu próprio arquivo de acessório. Há muito potencial aqui, acho que você vai se divertir muito. Deixe-me saber nos comentários o que você vem com!

In this article