Como fazer um controlado por siri luz wi-fi diy

HomeKit está definitivamente fora na natureza, permitindo o controle de voz através de Siri para um punhado de dispositivos de casa inteligente de consumo.

Infelizmente, eu quero dizer um punhado literal - qualquer coisa que você já comprou provavelmente não é compatível. No entanto, o protocolo já foi a engenharia reversa e um emulador de código aberto para a API HomeKit é availble: ou na planície Inglês, agora você pode criar dispositivos HomeKit “falsas”, e Siri vai controlá-los como qualquer outro acessório oficial HomeKit.

Hoje, nós estamos indo para criar uma luz controlável Wi-Fi, e controlá-lo com Siri. Aqui está uma demonstração.

Video: Montando um "RING LIGHT" caseiro | DIY | Luz pra videos e fotos | Facil e barato

Aqui está o que você vai precisar:

  • Raspberry Pi (eu usei um RPi2, há uma pequena diferença nas versões Nó Para instalar dada a arquitetura ARM atualizado - veja notas mais tarde).
  • Um corretor MQTT instalado no Raspberry Pi. Consulte a secção “Instalar mosquitto em seu Pi” no meu Guia OpenHAB parte 2. Ele não precisa ser instalado especificamente sobre o Pi - você ainda pode usar um servidor MQTT baseado em nuvem, mas uma vez que precisa de um Pi para este tutorial de qualquer maneira, é conveniente.
  • Nodemcu v2 (Arduino compatível)
  • LEDs Neopixel (eu recomendo 4 pixels para testes, então você pode adicionar uma fonte de alimentação externa e adicionar quantos você quiser)

Instalando a Ponte HomeKit

Nós vamos instalar um aplicativo NodeJS chamada HAP-NodeJS ao Raspberry Pi: isso vai formar uma ponte entre os pedidos HomeKit e os dispositivos Wi-Fi. Vamos configurar esta ponte com um acessório para agora, mas você pode adicionar quantos quiser.

Eu estou realmente instalar este no meu existente OpenHAB correndo servidor doméstico - Espero para conectar os dois juntos em uma data posterior, mas por agora, sabem que podem coexistir no mesmo Raspberry Pi. Se você estiver fazendo o mesmo, apenas no caso, fazer um backup clone de seu cartão atual SD Pi. Se tudo der errado, você pode restaurar a isso.Clone facilmente seu cartão SD para a computação Raspberry Pi sem problemasClone facilmente seu cartão SD para a computação Raspberry Pi sem problemasSe 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 Raspberry Pi falhar o arranque.consulte Mais informação

Comece fazendo uma atualização completa do Terminal ou um sessão SSH.

sudo apt-get updatesudo apt-get upgrade de

Você pode precisar de fazer as duas vezes se ele tem sido um tempo.

Agora instale alguns pacotes básicos que você vai precisar:

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

Em seguida, vamos instalar a última versão do NodeJS. Você pode ser tentado a fazer isso com apt-get, mas não - que a versão é muito velho agora e não vai funcionar. Em vez disso, visitar nodejs.org, procure a download / liberação / latest-v5.x.0 / diretório, e verificar o que o link para a versão mais recente é. Você está procurando linux-armv7l para framboesa Pi 2, ou linuxarmv6l para os modelos RPI originais. Em seguida, ajustar as URLs e nomes de diretório, conforme necessário, baixe e instale usando os seguintes comandos.

wget https://nodejs.org/download/release/latest-v5.x.0/node-v5.5.0-linux-armv7l.tar.gztar -xvf nó node-v5.5.0-linux-armv7l.tar.gzcd -v5.5.0-linux-armv7lsudo cp -R * / usr / local

Confirme digitando

versão de nó

E você deve ver v5.5 (ou qualquer que seja o mais recente foi que você fez o download).

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

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

Nesse primeiro comando, nós estamos realmente usando o Node Package Manager (NPM) para instalar uma nova versão de si mesmo. Esperto!

Agora para baixar o emulador HomeKit chamada HAP-NodeJS:

git clone https://github.com/KhaosT/HAP-NodeJS.gitcd HAP-NodeJSnpm rebuildsudo npm instalar nó-persistsudo npm instalar SRP

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

sudo apt-get install gcc-4.8 g ++ - 4.8sudo update-alternatives --install / usr / bin / gccgcc / usr / bin / gcc-4.6 20sudo update-alternatives --install / usr / bin / gcc gcc / usr / bin /gcc-4.8 50sudo update-alternatives --install / usr / bin / g ++ ++ g /usr/bin/g++-4.6 20sudo update-alternatives --install / usr / bin / g ++ ++ g /usr/bin/g++-4.8 50

Agora, você não deve ter um problema. Continuar a executar estes comandos, um por um:

sudo npm instalar srpsudo npm instalar mdns --unsafe-permsudo npm instalar debugsudo NPM instalar ed25519 --unsafe-permsudo npm instalar curve25519 --unsafe-perm

Isso deve ser tudo. Tente executar o emulador com:

nó Core.js

Se você receber erros dizendo que não pode encontrar o módulo tal e tal, basta usar o sudo npm instalar comando novamente, e apor o nome de qualquer módulo estava faltando. Assumindo que tudo está bem, você deve ver alguns avisos, e sua ponte HomeKit estará funcionando. Isto é o que se parece com sucesso:

hap-nodejs instalado

Você pode ver imediatamente que ele já está criado um conjunto de 6 dispositivos falsificados. Vamos utilizá-las como um ponto de partida para nossa própria luz Wi-Fi mais tarde, mas vamos apenas usar aqueles para agora para teste. Você também pode ver mais informações de depuração se você iniciar o servidor com:

DEPURAR = * Core.js. nó

Agora pular para um dispositivo Apple capaz de executar Siri. A Apple curiosamente não fornece um aplicativo de estoque HomeKit exceto para desenvolvedores registrados, de modo a baixar a livre Elgato Eve aplicativo, um aplicativo de gerenciamento de HomeKit que lhe permite adicionar dispositivos (mesmo não-Elgato) à sua rede HomeKit.

A primeira vez que você iniciar o aplicativo que você precisa para citar sua casa, vá em frente e entrar por aquela. Em seguida, selecione “Adicionar Acessório”. Ignore a mensagem sobre estar perto dele!



elgato véspera 1

Ele vai dizer-lhe para olhar para um “código de configuração HomeKit” único lado. Ignorar isso, e clique em “Adicionar à [nome de sua casa]”.

Ele também vai dizer que o dispositivo não é certificada. Na verdade, não é. Vá em frente de qualquer maneira. Quando você chegar à tela pedindo um código acessório ...

elgato véspera dois

Escolha para introduzir o código manualmente, e digite o seguinte:

031-45-154

Isto pode ser encontrado / alterado no Light_accessory.js arquivo, mas mais sobre isso mais tarde. Adicionar este acessório para o seu quarto padrão, chamá-lo Luz falso, e continuar caminhando através dos diálogos de escolher ícone etc.

Finalmente, saltar de volta para a sessão SSH onde você tem HAP-NodeJS execução. Você já deve ter visto uma mensagem dizendo “estamos?” - que é o polling aplicativo Elgato para o status de luz. Abrir Siri e dizer a ela para “ligar a luz falsa”, em seguida, tentar desligá-lo novamente. Com sorte, você verá algumas mensagens de depuração de HAP-NodeJS para mostrar que recebeu os comandos.

Estamos? No.Turning a luz acesa! Voltando a luz!

Fantástico, que é o primeiro passo concluído. Agora vamos precisar de uma luz real, antes de voltar a configurar a ponte novamente.

Construir uma luz Wi-Fi

O lado desta etapa hardware é surpreendentemente simples se começarmos com apenas quatro Neopixels, como podemos alimentar aqueles diretamente da placa dev nodemcu e sua conexão USB. Se você tem uma faixa mais longa, não se preocupe - nós definimos isso em software, para que o resto só não vai ligar.

Conectar o cabo de alimentação vermelho de uma cadeia Neopixel ao pino VIN, terra azul para GND, e o cabo de sinal verde para o pino marcado D2 na nodemcu. Tenha muito cuidado com a polaridade: se você misturar-se no chão e VIN, você vai enviar uma onda de energia através de sua placa, e destruí-lo no processo.

Se o ambiente Arduino ainda não está configurado para trabalhar com ESP8266, vá em frente e seguir o guia em meu ESP8266: Arduino assassino guia, em seguida voltar depois de ter confirmado que está trabalhando. Instalar essas bibliotecas adicionais:Conheça o assassino Arduino: ESP8266Conheça o assassino Arduino: ESP8266E se eu lhe disse que um há um conselho dev Arduino compatível com built-in Wi-Fi para menos de US $ 10? Bem, não é.consulte Mais informação

  • PubSubClient de lmroy
  • NeoPixels de Adafruit

O código que estamos usando é uma modificação do Github usuário Aditya Tannu de - Eu removi a funcionalidade de atualização desnecessária over-the-air, acrescentou em algumas funções HSV que estavam faltando, e tornou mais fácil para criar mais luzes somente mudando a variável única. Se você não pode ver o código incorporado abaixo, você vai encontrá-lo neste Gist.

#incluir lt;ESP8266WiFi.hgt;
#incluir lt;WiFiClient.hgt;
#incluir lt;ESP8266mDNS.hgt;
#incluir lt;WiFiUdp.hgt;
#incluir lt;PubSubClient.hgt;
#incluir lt;Adafruit_NeoPixel.hgt;
#definir PIN 4
Adafruit_NeoPixel tira = Adafruit_NeoPixel (4, PIN, NEO_GRB + NEO_KHZ800) -
const Caracteres* = SSID "...."-
const Caracteres* Password = "..."-
const Caracteres* = Hospedeiro "officelight"- // o nome do seu dispositivo elétrico, e o canal base para ouvir
Endereço de IP MQTTserver(192, 168, 1, 99) -
/ * Há necessidade de mudar ABAIXO DESTA LINHA * /
int matiz = 0-
flutuador brilho = 0.0-
flutuador saturação = 0.0-
#definir TAMANHO DO BUFFER 100
WiFiClient wclient-
PubSubClient cliente(Wclient, MQTTserver) -
vazio ligue de volta(const MQTT :: Publish& bar) {
uint16_t eu j-
currentValues() -
Corda myMessage = Corda(bar.payload_string()) -
// mensagem alça chegou
Serial.impressão(bar.tema()) -
Serial.impressão(" = Gt; ") -
Corda MyTopic = Corda(bar.tema()) -
E se(MyTopic == hospedeiro)
{
Serial.println(bar.payload_string()) -
E se(bar.payload_string() == "em")
{
// usar isso para redefinir os parâmetros se você quer que eles venham sempre em branco brilhante.
//matiz = 0-
brilho = 1.0-
//saturação = 0,0-
para(I =0- EunumPixels() - i ++) {
faixa.setPixelColor(Eu, HSVColor(Tonalidade, saturao, luminosidade)) -
}
faixa.exposição() -
}
outro
{
//matiz = 0-
brilho = 0.0-
//saturação = 0,0-
para(I =0- EunumPixels() - i ++) {
faixa.setPixelColor(Eu, HSVColor(Tonalidade, saturao, luminosidade)) -
}
faixa.exposição() -
}
}
outro E se(MyTopic == hospedeiro + (String)"/brilho")
{ // Brilho até 100
Serial.println(bar.payload_string()) -
brilho = (myMessage.flutuar()) /100-
para(I =0- EunumPixels() - i ++) {
faixa.setPixelColor(Eu, HSVColor(Tonalidade, saturao, luminosidade)) -
}
faixa.exposição() -
}
outro E se(MyTopic == hospedeiro + (String)"/matiz")
{ // valor Hue 0-360
Serial.println(bar.payload_string()) -
matiz = myMessage.toInt() -
para(I =0- EunumPixels() - i ++) {
faixa.setPixelColor(Eu, HSVColor(Tonalidade, saturao, luminosidade)) -
}
faixa.exposição() -
}
outro E se(MyTopic == hospedeiro + (String)"/saturação")
{ // valor de saturação em 0-100
Serial.println(bar.payload_string()) -
saturação = (myMessage.flutuar()) /100-
para(I =0- EunumPixels() - i ++) {
faixa.setPixelColor(Eu, HSVColor(Tonalidade, saturao, luminosidade)) -
}
faixa.exposição() -
}
currentValues() -
}
vazio configuração() {
Serial.início(115200) -
Serial.println("inicialização") -
Wi-fi.modo(WIFI_STA) -
Wi-fi.início(SSID, senha) -
enquanto (Wi-fi.waitForConnectResult()! = WL_CONNECTED) {
Serial.println("Falha de conexão! Reiniciando ...") -
demora(5000) -
ESP.reiniciar() -
}
Serial.println("pronto") -
Serial.impressão("Endereço de IP: ") -
Serial.println(Wi-fi.LocalIP()) -
// MQTT callback
cliente.set_callback(ligue de volta)-
faixa.início() -
faixa.exposição() - // Inicializar todos os pixels para `off`
}
vazio laço() {
E se (Wi-fi.estado() == WL_CONNECTED) {
E se (!cliente.conectado()) {
E se (cliente.conectar("ESP8266: Fonte")) {
cliente.publicar("outTopic",(Corda)"Olá mundo, Eu sou "+hospedeiro)-
cliente.se inscrever(Host + (String)"/ #") -
}
}
E se (cliente.conectado())
cliente.laço() -
}
}
// Converter valores / Saturação / Brilho Tom para uma cor embalado RBG de 32 bits.
// matiz deve ser um valor fraccionário entre 0 e 360
// saturação deve ser um valor flutuante entre 0 e 1
// brilho deve ser um valor flutuante entre 0 e 1
uint32_t HSVColor(flutuador h, flutuador s, flutuador v) {
h = constranger(H, 0, 360) -
s = constranger(S, 0, 1) -
v = constranger(V, 0, 1) -
int i, b, p, q, t-
flutuador f-
h / = 60,0- // setor 0-5
i = chão(H) -
f = h - i- // parte factorial de h
b = v * 255-
P = V * ( 1 - s) * 255-
q = v * ( 1 - s f *) * 255-
t = v * ( 1 - s * ( 1 - f)) * 255-
interruptor( Eu ) {
caso 0:
Retorna faixa.Cor(B, t, p) -
caso 1:
Retorna faixa.Cor(Q, b, p) -
caso 2:
Retorna faixa.Cor(P, b, t) -
caso 3:
Retorna faixa.Cor(P, q, b) -
caso 4:
Retorna faixa.Cor(T, P, b) -
padrão:
Retorna faixa.Cor(B, p, q) -
}
}
vazio currentValues() {
Serial.println("") -
Serial.println("Estado atual") -
Serial.impressão("Matiz (0-360):") -
Serial.println(matiz)-
Serial.impressão("Saturação (0-100 em, 0-1):") -
Serial.println(saturação*100) -
Serial.impressão("Brilho (0-100):") -
Serial.println(brilho*100) -
Serial.println("") -
}
ver rawNodeMCU-MQTT-Siri-Wifi-Light.inohosted com ❤ por GitHub

Atualizar as seguintes linhas com sua própria informação da rede, e um nome único para cada dispositivo elétrico que você criar (host).

const char * = SSID "...."-const de char * palavra-passe = "..."-const carvão animal hospedeiro * = "officelight"-IPAddress MQTTserver (192, 168, 1, 99) -

O endereço IP deste acessório é automaticamente obtido através de DHCP - não importa se ele for alterado, uma vez que estamos a conexão com o mesmo servidor MQTT cada vez.

Por enquanto estamos apenas usando 4 Neopixels, mas você pode aumentar o número mais tarde, se você liga-los a partir de uma fonte externa. Carregar o código, e vamos teste - usar seu cliente favorito MQTT para enviar comandos (Ajustar o nome do host nas instruções a seguir se você tiver alterado).

  • Você pode enviar em à raiz officelight canal para ligá-lo. Enviar qualquer outro valor a esse canal para desligá-lo.
  • Você pode enviar um número 0-360 para o officelight / matiz para mudar a cor. Estamos usando o espaço de cor HSV, por isso 0 e 360 ​​são vermelhas, 120 é verde, e 240 é azul.
  • Você envia um valor percentual para o brilho (0-100, não incluem o símbolo%).
  • Mesmo para a saturação. Um valor de 100 será totalmente saturado (isto é, uma cor sólida), e de zero será branco puro, independentemente do Hue especificado.

Depois de confirmar a sua luminária-driven MQTT está trabalhando, seguir em frente.

Configurando um novo acessório HomeKit

Volte para o Raspberry Pi e encerrar o aplicativo HAP-NodeJS se você não tiver já. Navegue até a /acessórios diretório. Para tornar isso fácil, você pode baixar diretamente o código que já foi emparelhado com o dispositivo elétrico “officelight”, digitando o seguinte:

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

Essencialmente, este é um duplicado do acessório luz padrão, com alguns nomes de variáveis ​​mudou (de novo, adaptado da obra de Adysan, simplificado para facilidade de uso). Aqui está o que você deve saber para criar seus próprios acessórios personalizados com base nesta.

  • Todos os acessórios deve ser nomeado *_accessory.js
  • Alterar o endereço IP na variável de opções na parte superior para seu servidor MQTT
  • Se você tem um nome de dispositivo elétrico diferente, pesquisa / substituir todas as ocorrências “officelight”Com seu nome acessório exclusivo. Você pode fazer uma pesquisa / substituir no Nano, premindo CTRL e , digitando o termo de encontrar, o termo para substituir, em seguida, bateu UMA (O que significa que todos os casos). Passar por cada um deles para saber exatamente quais variáveis ​​estão sendo atualizados.
  • Criar um nome de usuário hexadecimal exclusivo para o acessório (light.username = “1B: 2B: 3C: 5D: 6E: FF” -)
  • Não altere o código PIN. Segue-se um formato específico, e se você não sabe o que está fazendo, não será capaz de emparelhar. Não há nenhum problema com mantendo-os no mesmo entre luzes.
  • Você pode dar o seu dispositivo elétrico um “nome Siri” diferente quando adicioná-los à Elgato Eve aplicativo e edite as a qualquer momento para que você não está preso com sua escolha inicial. Não há necessidade de editar os arquivos de configuração ou reiniciar o servidor.
  • Uma vez que você tem vários dispositivos elétricos, você pode usar o aplicativo Elgato Eva para agrupá-los por quarto, ou para criar cenas específicas que consistem em várias ações complexas. As cenas podem consistir de várias ações, tais como: Ligue a luz do escritório, dim-lo para 25%, torná-lo vermelho, e ativar a máquina de café.

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

Finalmente, queremos executar nosso aplicativo HAP-NodeJS sempre que o Pi é reiniciado. Adicione o seguinte à sua etc / rc.local arquivo, logo antes da exit 0.

/home/pi/HAP-NodeJS/Core.js nó sudo lt; / Dev / null &

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

Video: Como fazer um cropped com a legging ? DIY ( FAÇA VOCÊ MESMO)

nó prazo rclocal no arranque

Se esta é a primeira vez que você estiver usando rc.local, pode ser necessário para defini-la como executável:

sudo chmod 755 /etc/rc.local

Se por algum motivo você precisa executá-lo no modo de depuração, novamente, você pode matar o aplicativo Nó correr com:

nó killall

Um passo final: navegue até o diretório acessórios, e excluir o GarageDoorOpener_accessory.js. Na hora de escrever este é buggy, e fará com que o servidor para quebrar depois de um tempo.

O que você controle com Siri?

Agora que você já tem o básico, não há realmente nenhum limite ao que você pode controlar - se você pode codificá-lo em javascript, você pode fazer o seu próprio arquivo de acessório. Há muito potencial aqui, eu acho que você vai ter um monte de diversão. Deixe-me saber nos comentários o que você venha com!


Artigos relacionados