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.
Conteúdo
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:
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!
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 ...
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("") - |
} |
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)
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!