Como hacer una luz wi-fi siri controlado bricolaje

HomeKit es finalmente a cabo en la naturaleza, lo que permite el control de voz a través de Siri para un puñado de dispositivos inteligentes para el hogar del consumidor.

Por desgracia, me refiero a un puñado literal - cualquier cosa que ya ha comprado probablemente no es compatible. Sin embargo, el protocolo ya está ingeniería inversa y un emulador de código abierto para la API HomeKit es liviano: o en la llanura Inglés, usted puede ahora crear dispositivos HomeKit “falsos”, y Siri controlará ellos al igual que cualquier otro accesorio oficial HomeKit.

Hoy en día, vamos a crear una luz controlable Wi-Fi, y controlarlo con Siri. He aquí una demostración.

Esto es lo que se necesita:

  • Pi de frambuesa (he usado un RPi2, hay una pequeña diferencia en las versiones de nodo para instalar dada la arquitectura ARM mejorada - véanse las notas más adelante).
  • Un corredor de MQTT instalado en el Raspberry Pi. Vea la sección “Instalar mosquitto en su pi” en mi Guía OpenHAB parte 2. No necesita ser instalado específicamente en el Pi - incluso se puede utilizar un servidor MQTT basado en la nube, pero ya que necesitamos de un pi para este tutorial de todos modos, es conveniente.
  • NodeMCU v2 (compatible con Arduino)
  • LED Neopixel (recomiendo 4 píxeles para las pruebas, a continuación, se puede añadir una fuente de alimentación externa y añadir tantos como quieras)

Instalación del puente HomeKit

Vamos a instalar una aplicación llamada NodeJS HAP-NodeJS a la Frambuesa Pi: esto formará un puente entre las peticiones HomeKit y los dispositivos Wi-Fi. Configuraremos este puente con un accesorio, por ahora, pero se puede añadir tantos como desee.

En realidad estoy instalación de este en mi OpenHAB corriendo el servidor principal existente - espero para conectar los dos juntos en una fecha posterior, pero por ahora, saber que pueden coexistir en el mismo Frambuesa Pi. Si estás haciendo lo mismo, por si acaso, hacer una copia de seguridad clon de su tarjeta SD actual Pi. Si todo va mal, puede restaurar a eso.Fácil clonar su tarjeta SD para la Informática Frambuesa Pi sin problemasFácil clonar su tarjeta SD para la Informática Frambuesa Pi sin problemasSi usted tiene una tarjeta SD o varios, una cosa que se necesita es la capacidad de hacer copias de seguridad de sus tarjetas para evitar los problemas que se producen cuando el Raspberry Pi no puede arrancar.Lee mas

Comenzar por hacer una actualización completa de la terminal o un sesión SSH.

sudo apt-get updatesudo apt-get upgrade

Es posible que tenga que hacer el doble de los que si ha pasado un tiempo.

Vídeo: ¡BOMBILLAS SUPERPODEROSAS! | Led + Sonido + WiFi

Ahora instalar algunos paquetes principales que vamos a necesitar:

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

A continuación, vamos a instalar la última versión de NodeJS. Usted puede verse tentado a hacer esto con apt-get, pero no lo hacen - que la versión es muy viejo y no funcionará. En su lugar, visite nodejs.org, vaya a la descarga / release / última v5.x.0 / directorio, y comprobar cuál es el vínculo para la versión más reciente es. Estas buscando Linux-armv7l para Frambuesa Pi 2, o linuxarmv6l para los modelos originales RPI. Entonces, el ajuste de las direcciones URL y nombres de directorio, según sea necesario, descargar e instalar mediante los siguientes comandos.

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

Confirmar escribiendo

versión nodo

Y hay que ver v5.5 (o cualquiera que sea el último fue descargado).

A continuación, tenemos algunos módulos de nodo para instalar.

sudo NPM instalar -g npmsudo NPM instalar -g nodo-gyp

En ese primer comando, en realidad estamos usando el Gestor de paquetes de nodo (NPM) para instalar una nueva versión de sí mismo. ¡Inteligente!

Ahora, para descargar el emulador HomeKit llamada HAP-NodeJS:

git clone https://github.com/KhaosT/HAP-NodeJS.gitcd HAP-NodeJSnpm rebuildsudo NPM instalar nodo-persistsudo NPM instalar SRP

En este punto, me encontré con este error: “#error Esta versión de nodo / NAN / v8 requiere un compilador C ++ 11“. Si eso sucede a usted, instalar una más reciente compilador de C ++ con los comandos:

sudo apt-get install gcc-4.8 g ++ - 4.8sudo alternativas de actualización --install / usr / bin / GCCGCC / usr / bin / gcc-4.6 20sudo alternativas de actualización --install / usr / bin / gcc gcc / usr / bin /gcc-4.8 50sudo alternativas de actualización --install / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20sudo alternativas de actualización --install / usr / bin / g ++ g ++ /usr/bin/g++-4.8 50

Ahora usted no debe tener un problema. Continuar ejecutando estos comandos, uno por uno:

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

Eso debería ser todo. Intente ejecutar el emulador con:

nodo Core.js

Si obtiene errores diciendo que no puede encontrar el módulo tal y tal, sólo tiene que utilizar el sudo NPM instalar comando de nuevo, y colocarán el nombre del módulo de lo que faltaba. Suponiendo que todo está bien, debería ver algunas advertencias, y su puente HomeKit va a correr. Esto es lo que parece el éxito:

Hap-nodejs instalados

Se puede ver de inmediato que ya ha creado un conjunto de 6 dispositivos falsos. Vamos a utilizar los como punto de partida para nuestra propia luz Wi-Fi más tarde, pero sólo tendremos que usar esos por ahora a prueba. También puede ver más información de depuración si se inicia el servidor con:

DEBUG = * Core.js nodo

Ahora saltar por encima de un dispositivo de Apple capaz de ejecutar Siri. Manzana curiosamente no proporciona una aplicación stock HomeKit excepto para los desarrolladores registrados, por lo instale gratuitamente Elgato víspera de aplicación, una aplicación de gestión HomeKit que le permite agregar dispositivos (aunque no Elgato) a su red HomeKit.

La primera vez que inicie la aplicación que necesita para nombrar a su casa, seguir adelante y caminar a través de eso. A continuación, seleccione “Añadir accesorios”. Ignorar el mensaje por estar cerca de ella!

elgato víspera 1

Se te dirá que buscar un único “código de configuración HomeKit” siguiente. No haga caso de que, y pulsa “Añadir a [nombre de su casa]”.

También le dirá que el dispositivo no está certificado. De hecho no lo es. Vaya por delante de todos modos. Cuando se llega a la pantalla pidiendo un código de accesorios ...

elgato víspera 2

Optar por introducir el código manualmente, y escriba en el siguiente:

031-45-154

Esto se puede encontrar / cambiado en el Light_accessory.js archivo, pero lo veremos más adelante. Añadir este accesorio a su habitación por defecto, lo llaman Luz falsa, y seguir caminando a través de los cuadros de diálogo para elegir el icono etc.

Por último, salta de nuevo a la sesión SSH donde tiene HAP-NodeJS corriendo. Es posible que ya haya visto un mensaje que dice “¿Vamos?” - que es la aplicación de votación Elgato para el Estado de la luz. Abrir Siri y decirle que “Encienda la luz falsa”, a continuación, tratar de apagarlo de nuevo. Con suerte, verá algunos mensajes de depuración de HAP-NodeJS para mostrar que recibió las órdenes.

¿Estamos en? No.Turning la luz encendida! Apagar la luz!

Fantástico, que es el primer paso terminado. Ahora vamos a necesitar una luz real, antes de volver a configurar el puente nuevo.

La construcción de una luz de Wi-Fi

El lado del hardware de este paso es sorprendentemente simple si comenzamos con sólo cuatro Neopixels, como podemos alimentar los directamente del tablero dev NodeMCU y su conexión USB. Si usted tiene una tira larga, no se preocupe - que hemos definido en este software, por lo que el resto simplemente no se enciende.

Conectar el cable de alimentación rojo de una hebra Neopixel al pin VIN, tierra azul a GND y el cable de señal verde a la clavija marcada D2 en el NodeMCU. Tener mucho cuidado con la polaridad: si se mezclan el suelo y VIN, se le envía una oleada de energía a través de su tablero, y lo destruyen en el proceso.

Si el entorno de Arduino aún no está configurado para trabajar con ESP8266, seguir adelante y seguir la guía en mi ESP8266: Arduino Killer guían a continuación, volver después de que haya confirmado que está trabajando. Instalar estas librerías adicionales:Cumplir con el asesino de Arduino: ESP8266Cumplir con el asesino de Arduino: ESP8266Lo que si te dijera que hay una una junta dev compatible con Arduino con una función de Wi-Fi para menos de $ 10? Bueno, la hay.Lee mas

  • PubSubClient de lmroy
  • NeoPixels de Adafruit

El código que estamos usando es una modificación de Github usuario Aditya Tannu de - He quitado la funcionalidad de actualización innecesaria sobre-el-aire, añadí en algunas funciones del VHS que faltaban, y lo hizo más fácil para crear más luces con solo cambiar una sola variable. Si no puede ver el código incrustado abajo, lo encontrará en este Gist.

Vídeo: Philips Hue, análisis de las bombillas LED con Wi-Fi para iPhone o iPad

#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 ALFILER 4
Adafruit_NeoPixel tira = Adafruit_NeoPixel (4, PIN, NEO_GRB + NEO_KHZ800) -
const carbonizarse* SSID = "...."-
const carbonizarse* = Contraseña "..."-
const carbonizarse* Host = "officelight"- // el nombre de su dispositivo, y el canal base para escuchar
Dirección IP MQTTserver(192, 168, 1, 99) -
/ * No es necesario cambiar DEBAJO DE ESTA LÍNEA * /
int hue = 0-
flotador brillo = 0.0-
flotador la saturación = 0.0-
#definir TAMAÑO DEL BÚFER 100
WiFiClient wclient-
PubSubClient cliente(Wclient, MQTTserver) -
vacío llamar de vuelta(const MQTT :: Publicar& pub) {
uint16_t i, j-
valores actuales() -
Cadena myMessage = Cuerda(pub.payload_string()) -
// mensaje de identificador llegó
De serie.impresión(pub.tema()) -
De serie.impresión(" = Gt; ") -
Cadena MyTopic = Cuerda(pub.tema()) -
Si(MyTopic == host)
{
De serie.println(pub.payload_string()) -
Si(pub.payload_string() == "en")
{
// usar esto para restablecer los parámetros si quieres que vengan siempre en color blanco brillante.
//hue = 0-
brillo = 1.0-
//saturación = 0.0-
para(I =0- yonumPixels() - i ++) {
tira.setPixelColor(yo, HSVColor(Tono, saturación, brillo)) -
}
tira.espectáculo() -
}
más
{
//hue = 0-
brillo = 0.0-
//saturación = 0.0-
para(I =0- yonumPixels() - i ++) {
tira.setPixelColor(yo, HSVColor(Tono, saturación, brillo)) -
}
tira.espectáculo() -
}
}
más Si(MyTopic == anfitrión + (String)"/brillo")
{ // Brillo de hasta 100
De serie.println(pub.payload_string()) -
brillo = (myMessage.flotar()) /100-
para(I =0- yonumPixels() - i ++) {
tira.setPixelColor(yo, HSVColor(Tono, saturación, brillo)) -
}
tira.espectáculo() -
}
más Si(MyTopic == anfitrión + (String)"/matiz")
{ // valor de tono 0-360
De serie.println(pub.payload_string()) -
hue = myMessage.Toint() -
para(I =0- yonumPixels() - i ++) {
tira.setPixelColor(yo, HSVColor(Tono, saturación, brillo)) -
}
tira.espectáculo() -
}
más Si(MyTopic == anfitrión + (String)"/saturación")
{ // valor de saturación a 0-100
De serie.println(pub.payload_string()) -
saturación = (myMessage.flotar()) /100-
para(I =0- yonumPixels() - i ++) {
tira.setPixelColor(yo, HSVColor(Tono, saturación, brillo)) -
}
tira.espectáculo() -
}
valores actuales() -
}
vacío preparar() {
De serie.empezar(115200) -
De serie.println("arranque") -
Wifi.modo(WIFI_STA) -
Wifi.empezar(SSID, contraseña) -
mientras (Wifi.waitForConnectResult()! = WL_CONNECTED) {
De serie.println("¡La conexión falló! El reinicio ...") -
retrasar(5000) -
ESP.reiniciar() -
}
De serie.println("Listo") -
De serie.impresión("Dirección IP: ") -
De serie.println(Wifi.LocalIP()) -
// devolución de llamada MQTT
cliente.set_callback(llamar de vuelta)-
tira.empezar() -
tira.espectáculo() - // Inicializar todos los píxeles en `off`
}
vacío lazo() {
Si (Wifi.estado() == WL_CONNECTED) {
Si (!cliente.conectado()) {
Si (cliente.conectar("ESP8266: Fuente")) {
cliente.publicar("outTopic",(Cuerda)"Hola mundo, soy "+anfitrión)-
cliente.suscribir(Host + (String)"/ #") -
}
}
Si (cliente.conectado())
cliente.lazo() -
}
}
// Convertir los valores / Saturación / Brillo Tinte a un color lleno de RBG de 32 bits.
// tonalidad debe ser un valor flotante entre 0 y 360
// saturación debe ser un valor flotante entre 0 y 1
// brillo debe ser un valor flotante entre 0 y 1
uint32_t HSVColor(flotador marido, flotador s, flotador v) {
h = constreñir(marido, 0, 360) -
s = constreñir(S, 0, 1) -
v = constreñir(V, 0, 1) -
int i, b, p, q, t-
flotador F-
h / = 60.0- // sector de 0 a 5
i = piso(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-
cambiar( yo ) {
caso 0:
regreso tira.Color(B, t, p) -
caso 1:
regreso tira.Color(Q, b, p) -
caso 2:
regreso tira.Color(P, b, t) -
caso 3:
regreso tira.Color(P, q, b) -
caso 4:
regreso tira.Color(T, p, b) -
defecto:
regreso tira.Color(B, p, q) -
}
}
vacío valores actuales() {
De serie.println("") -
De serie.println("Estado actual") -
De serie.impresión("Hue (0-360):") -
De serie.println(matiz)-
De serie.impresión("Saturación (0-100 en, 0-1):") -
De serie.println(saturación*100) -
De serie.impresión("Brillo (0-100):") -
De serie.println(brillo*100) -
De serie.println("") -
}
ver rawNodeMCU-MQTT-Siri-Wifi-Light.inohosted con ❤ por GitHub

Actualizar las siguientes líneas con su propia información de la red, y un nombre único para cada accesorio se crea (host).

const char * SSID = "...."Char -const * password = "..."Char -const * host = "officelight"-IPAddress MQTTserver (192, 168, 1, 99) -

La dirección IP de este accesorio se obtiene de forma automática a través de DHCP - no importa si cambia, ya que estamos conectando al mismo servidor MQTT cada vez.

Por ahora sólo estamos utilizando 4 Neopixels, pero se puede aumentar el número más adelante si se les alimenta de una fuente externa. Sube el código, y dejar de prueba - use su cliente favorito MQTT para enviar comandos (Ajustar el nombre de host en las siguientes instrucciones si ha cambiado).

  • Puedes enviar en a la raíz officelight canal para encenderlo. Enviar cualquier otro valor a ese canal para apagarlo.
  • Puede enviar un número de 0-360 a la officelight / tono para cambiar el color. Estamos utilizando el espacio de color HSV, por lo que 0 y 360 son el rojo, el verde es 120, y 240 es de color azul.
  • Se envía un valor de porcentaje para el brillo (0-100, no incluyen el símbolo%).
  • Lo mismo para la saturación. Un valor de 100 se satura completamente (es decir, un color sólido), y cero será de color blanco puro, independientemente de la Hue especificado.

Una vez que confirme su accesorio de iluminación MQTT impulsada está trabajando, seguir adelante.

Configuración de un accesorio Nueva HomeKit

Cambie de nuevo a la Frambuesa Pi y poner fin a la aplicación de HAP-NodeJS si no lo ha hecho. Navegue hasta la /accesorios directorio. Para que esto sea fácil, se puede descargar directamente de código que ya ha sido emparejado con el accesorio “officelight” escribiendo el siguiente:

Vídeo: Como configurar Bombilla Led wifi desde el movil

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

En esencia, se trata de un duplicado del accesorio ligero del defecto, con algunos nombres de las variables cambian (de nuevo, una adaptación de la obra de Adysan, simplificado para facilitar su uso). Esto es lo que debe saber para crear sus propios accesorios personalizados en base a esto.

  • Todos los accesorios deben ser nombrados *_accessory.js
  • Cambiar la dirección IP en la variable de opciones en la parte superior de su servidor MQTT
  • Si usted tiene un nombre de dispositivo diferente, buscar / reemplazar todas las instancias de “officelight”Con su nombre de dispositivo único. Usted puede hacer una búsqueda / reemplazo en nano pulsando CTRL y , escribir el término de encontrar, el término para sustituir, después haga clic UN (Es decir, todos los casos). Paso a través de cada uno de ellos para aprender precisamente qué variables están siendo actualizadas.
  • Crear un nombre de usuario hexadecimal único para el accesorio (light.username = “1B: 2B: 3C: 5D: 6E: FF” -)
  • No cambie el código PIN. De ello se sigue un formato específico, y si no sabes lo que estás haciendo, no será capaz de emparejarse. No hay problema con manteniéndolos al mismo entre las luces.
  • Usted puede dar a su accesorio de un “nombre de Siri” diferente cuando los añade a la aplicación Elgato Eve, y editar los que están en cualquier momento por lo que no está atascado con su elección inicial. No hay necesidad de editar los archivos de configuración o reiniciar el servidor.
  • Una vez que tenga varios aparatos, se puede utilizar la aplicación Elgato Eva para agruparlos por habitación, o para crear escenas específicas que consisten en múltiples acciones complejas. Las escenas pueden constar de varias acciones, tales como: encender la luz de la oficina, baja a un 25%, lo convierten en rojo, y activar la máquina de café.

Tendrá que añadir el nuevo accesorio a través de su aplicación HomeKit de elección de nuevo.

Por último, queremos ejecutar nuestra aplicación HAP-NodeJS cada vez que se reinicia el Pi. Añadir lo siguiente a su etc / rc.local archivo, justo antes de la exit 0.

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

Se puede ver He combinado esto con algunos otros comandos ya he configurado para comenzar en el arranque.

nodo de ejecución en el arranque rclocal

Si esta es la primera vez que estés usando rc.local, puede que tenga que configurarlo como ejecutable:

Vídeo: Cómo Hacer Un Reflector Casero (muy fácil de hacer)

sudo chmod 755 /etc/rc.local

Si por alguna razón usted necesita para funcionar en modo de depuración de nuevo, puede matar a la aplicación de nodo se ejecuta con:

nodo killall

Un paso final: vaya al directorio accesorios y eliminar la GarageDoorOpener_accessory.js. En el momento de escribir esto es con errores, y hará que el servidor de romper después de un tiempo.

¿Qué vas de control con Siri?

Ahora que usted tiene los fundamentos abajo, en realidad no hay límite a lo que puede controlar - si se puede codificar en javascript, puede hacer su propio archivo de accesorio. Hay mucho potencial aquí, creo que vas a tener un montón de diversión. Déjame saber en los comentarios lo que llegar a!

Artículos Relacionados