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 consumidores.

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

Hoje, vamos criar uma luz controlável por Wi-Fi e controlá-la com a 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 dos nós a serem instaladas, dada a arquitetura ARM atualizada - veja as notas posteriormente).
  • Um intermediário MQTT instalado no Raspberry Pi. Veja a seção “Instale 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
    instagram viewer
    O OpenHAB, o software de automação residencial de código aberto, excede em muito os recursos de outros sistemas de automação residencial no mercado - mas não é fácil de configurar. De fato, pode ser completamente 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)
  • LEDs de neopixel (recomendo 4 pixels para teste, você pode adicionar uma fonte de alimentação externa e quantas quiser)

Instalando o HomeKit Bridge

Vamos instalar um aplicativo NodeJS chamado HAP-NodeJS para o Raspberry Pi: isso formará uma ponte entre as solicitações do HomeKit e os dispositivos Wi-Fi. Por enquanto, vamos configurar essa ponte com um acessório, mas você pode adicionar quantos quiser.

Na verdade, estou instalando isso no meu servidor doméstico existente executando o OpenHAB. Espero conectar os dois juntos data posterior, mas por enquanto, saiba que eles podem coexistir no mesmo Raspberry Pi. Se você está fazendo o mesmo, apenas em caso, faça um backup clone do seu cartão SD Pi atual Clone seu cartão SD com facilidade para uma computação Raspberry Pi sem problemasSe você possui um cartão SD ou vários, é necessário fazer backup dos cartões para evitar os problemas que ocorrem quando o Raspberry Pi falha na inicialização. consulte Mais informação . Se tudo der errado, você pode restaurar isso.

Comece fazendo uma atualização completa do Terminal ou de um Sessão SSH Configurando seu Raspberry Pi para uso sem cabeça com SSHO Raspberry Pi pode aceitar comandos SSH quando conectado a uma rede local (por Ethernet ou Wi-Fi), permitindo que você o configure com facilidade. Os benefícios do SSH vão além de perturbar a triagem diária ... consulte Mais informação .

sudo apt-get update. sudo apt-get upgrade. 

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

Agora instale alguns pacotes principais que precisaremos:

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

Em seguida, instalaremos a versão mais recente do NodeJS. Você pode ficar tentado a fazer isso com apt-get, mas não - essa versão é realmente antiga agora e não funcionará. Em vez disso, visite nodejs.org, navegue até o download / liberação / latest-v5.x.0 / diretório e verifique qual é o link para a versão mais recente. Você está procurando linux-armv7l para Raspberry Pi 2 ou linuxarmv6l para os modelos RPi originais. Em seguida, ajustando os URLs e os nomes de diretório 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 a versão mais recente que você baixou).

Em seguida, temos alguns módulos de nó para instalar.

sudo npm install -g npm. sudo npm install -g node-gyp. 

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

Agora, faça o download do emulador HomeKit chamado HAP-NodeJS:

clone git https://github.com/KhaosT/HAP-NodeJS.git. cd HAP-NodeJS. NPM reconstruir. O sudo npm install node-persist. sudo npm install srp. 

Neste ponto, executei 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:

O 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. 

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

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. 

Isso deve ser tudo. Tente executar o emulador com:

nó Core.js. 

Se você receber erros dizendo que ele não pode encontrar esse e aquele módulo, basta usar o instalação do sudo npm comando novamente e afixe ​​o nome do módulo que estiver faltando. Supondo que tudo esteja bem, você verá alguns avisos e 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 seis dispositivos falsos. Nós os usaremos como ponto de partida para nossa própria luz Wi-Fi mais tarde, mas apenas os usaremos por enquanto para testar. Você também pode ver mais informações de depuração se iniciar o servidor com:

DEBUG = * nó Core.js

Agora pule para um dispositivo Apple capaz de executar o Siri. Curiosamente, a Apple não fornece um aplicativo HomeKit padrão, exceto para desenvolvedores registrados, então faça o download gratuito Elgato Eve app, um aplicativo de gerenciamento HomeKit que permite adicionar dispositivos (mesmo que não sejam da Elgato) à sua rede HomeKit.

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

véspera elgato 1

Ele solicitará que você procure um "Código de instalação HomeKit" exclusivo a seguir. Ignore isso e clique em "Adicionar ao [nome da sua casa]".

Também informa que o dispositivo não está certificado. Na verdade não é. Vá em frente de qualquer maneira. Quando você chega 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 Light_accessory.js arquivo, mas mais sobre isso mais tarde. Adicione este acessório ao seu quarto padrão, chame-o Luz Falsa, e continue andando pelas caixas de diálogo para escolher o ícone etc.

Por fim, retorne à sessão SSH em que o HAP-NodeJS está em execução. Você já deve ter visto uma mensagem dizendo "Estamos no ar?" - esse é o aplicativo Elgato que pesquisa o status da luz. Abra a Siri e diga a ela para "Ligar a luz falsa" e tente desligá-la novamente. Felizmente, você verá algumas mensagens de depuração do HAP-NodeJS para mostrar que recebeu os comandos.

Nós estamos? Não. Acendendo a luz! Apagando a luz!

Fantástico, esse é o primeiro passo. Agora precisamos 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 NodeMCU e de sua conexão USB. Se você tem uma faixa mais longa, não se preocupe - nós definimos isso no software, para que o resto não seja ativado.

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

Se o seu ambiente Arduino ainda não estiver configurado para funcionar com o ESP8266, siga em frente e siga o guia no meu ESP8266: Assassino de Arduino Conheça o assassino do Arduino: ESP8266E se eu disser a você que existe uma placa de desenvolvimento compatível com Arduino com Wi-Fi embutido por menos de US $ 10? Bem, existe. consulte Mais informação guia, volte depois que você confirmar que está funcionando. Instale estas bibliotecas adicionais:

  • PubSubClient de lmroy
  • NeoPixels de Adafruit

O código que estamos usando é uma modificação de Aditya Tannu, usuário do Github - Removi a funcionalidade desnecessária de atualização sem fio, adicionei algumas funções HSV que estavam faltando e facilitei a criação de mais luzes alterando apenas uma única variável. Se você não conseguir ver o código incorporado abaixo, você o encontrará em essa essência.

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

const char * ssid = "..."; const char * senha = "..."; const char * host = "luz officelight"; Servidor MQTT IPAddress (192, 168, 1, 99);

O endereço IP deste dispositivo é obtido automaticamente por meio do DHCP - não importa se ele muda, pois estamos sempre conectados ao mesmo servidor MQTT.

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

  • Você pode enviar em para a raiz officelight canal para ligá-lo. Envie qualquer outro valor para esse canal para desativá-lo.
  • Você pode enviar um número de 0 a 360 para a luz officelight / matiz para alterar a cor. Estamos usando o Espaço de cores HSV, então 0 e 360 ​​são vermelhos, 120 é verde e 240 é azul.
  • Você envia um valor percentual para 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 do Matiz especificado.

Depois de confirmar que o seu equipamento de iluminação acionado por MQTT está funcionando, 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 /accessories diretório. Para facilitar, você pode fazer o download direto do código que já foi emparelhado com o dispositivo "officelight" digitando o seguinte:

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

Essencialmente, essa é uma duplicata do acessório de luz padrão, com alguns nomes de variáveis ​​alterados (novamente, adaptados do trabalho de Adysan, simplificados para facilitar o uso). Aqui está o que você deve saber para criar seus próprios acessórios personalizados com base nisso.

  • Todos os acessórios devem ter o nome *_accessory.js
  • Altere o endereço IP na variável de opções na parte superior para o servidor MQTT
  • Se você tiver um nome de aparelho diferente, pesquise / substitua todas as instâncias de "officelight”Com o seu nome exclusivo de aparelho. Você pode fazer uma pesquisa / substituição no Nano pressionando CTRL e \, digitando o termo para localizar, o termo para substituir e pressione UMA (significando todas as instâncias). Percorra cada uma delas para saber exatamente quais variáveis ​​estão sendo atualizadas.
  • Crie um nome de usuário hexadecimal exclusivo para o acessório (nome da luz = "1B: 2B: 3C: 5D: 6E: FF";)
  • Não altere o código PIN. Ele segue um formato específico e, a menos que você saiba o que está fazendo, não poderá emparelhar. Não há problema em mantê-los iguais entre as luzes.
  • Você pode atribuir ao seu equipamento um "nome Siri" diferente ao adicioná-los ao aplicativo Elgato Eve e editá-los a qualquer momento para não ficar preso à sua escolha inicial. Não há necessidade de editar os arquivos de configuração ou reiniciar o servidor.
  • Depois de ter 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, reduzir para 25%, escurecer e ativar a máquina de café.

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

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

nó sudo /home/pi/HAP-NodeJS/Core.js  dev / null &

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

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

Se esta é a primeira vez que você usa o 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á matar o aplicativo Node em execução com:

nó killall

Uma etapa final: navegue até o diretório de acessórios e exclua o GarageDoorOpener_accessory.js. No momento da redação, isso é um bug e causa uma interrupção no servidor depois de um tempo.

O que você controlará com a Siri?

Agora que você já entendeu o básico, não há realmente nenhum limite para o que você pode controlar. Se você pode codificá-lo em Javascript, 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ê criar!

James é bacharel em Inteligência Artificial e possui certificação CompTIA A + e Network +. Ele é o principal desenvolvedor do MakeUseOf e passa seu tempo livre jogando paintball e jogos de tabuleiro em VR. Ele está construindo PCs desde que era criança.