Anuncio

El sueño de cualquier entusiasta de los hogares inteligentes es un hogar con el que pueda hablar, pero la realidad está muy lejos de eso.

Amazon Echo, por ejemplo, le permite usar cualquier número de funciones controladas por voz, pero usted debe iniciar el diálogo con una pregunta: no puede hacer que anuncie un mensaje importante.

usted lata Sin embargo, haga esto con un sistema Sonos y un poco de magia DIY Raspberry Pi. Hoy te mostraré cómo configurar notificaciones de voz en tu sistema Sonos, presentando un par de recetas IFTTT útiles, integraciones de OpenHAB y más, para hacer uso de la función de notificación.

Tenga en cuenta que hay un enlace Sonos nativo para OpenHAB disponible, pero se sabe que causa problemas de memoria debido a una biblioteca uPnP defectuosa. Sugeriría omitir eso por ahora, y usar el método en este tutorial en su lugar.

Un Raspberry Pi con Raspian Linux es ideal para este tutorial, pero también debería funcionar en cualquier servidor hogareño basado en Linux que esté ejecutando. En este caso, estoy usando la misma Raspberry Pi que funciona

instagram viewer
OpenHAB, el sistema domótico de código abierto Comenzando con OpenHAB Home Automation en Raspberry PiOpenHAB es una plataforma de automatización del hogar madura y de código abierto que se ejecuta en una variedad de hardware y es independiente del protocolo, lo que significa que se puede conectar a casi cualquier hardware de domótica en el mercado hoy. Lee mas . El resto de este tutorial asume que también está ejecutando esto en una Raspberry Pi, y que tiene una ventana de terminal local abierta en el escritorio, o conectado remotamente usando SSH Configuración de su Raspberry Pi para uso sin cabeza con SSHEl Raspberry Pi puede aceptar comandos SSH cuando está conectado a una red local (ya sea por Ethernet o Wi-Fi), lo que le permite configurarlo fácilmente. Los beneficios de SSH van más allá de alterar el examen diario ... Lee mas .

Necesitarás

  • Raspberry Pi 2 (los modelos más antiguos deberían funcionar, pero verifique los cambios específicos en las instrucciones)
  • Al menos uno Altavoz de Sonos (otros sistemas de audio no son compatibles, este es un tutorial solo para Sonos)
  • Cuenta gratuita en VoiceRSS.org [Ya no está disponible]. Regístrate entonces encuentra tu clave API, que luego necesitaremos para generar los mensajes de voz.

Instalar nodo más reciente

Comprueba qué versión de Node tienes escribiendo:

nodo -v. 

Tenga en cuenta que la versión 6 no es compatible. Si tiene el Nodo 6, primero debe eliminarlo, luego siga las instrucciones a continuación para instalar la v5.5.

Si no tiene v5 o si recibe un error no encontrado, siga estas instrucciones para instalar Node. El siguiente comando asume una Raspberry Pi 2; para modelos más antiguos, use armv6l en vez de armv7l.

wget https://nodejs.org/download/release/latest-v5.x/node-v5.12.0-linux-armv7l.tar.gz. tar -xvf node-v5.12.0-linux-armv7l.tar.gz. cd nodo-v5.12.0-linux-armv7l. sudo cp -R * / usr / local. 

Confirme nuevamente escribiendo:

nodo -v

Y debería ver v5.12 (o lo que sea que haya descargado).

A continuación, tenemos algunos módulos de Nodo para instalar. También queremos el Node Package Manager.

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

Ese es el requisito previo fuera del camino, ahora en las cosas divertidas.

API HTTP de Sonos

los API HTTP de Sonos crea un servidor web en la red local, lo que nos permite hacer ping a una URL con un mensaje para anunciar en un Sonos (y para controlarlo de forma remota si lo desea, aunque este tutorial se centra solo en la notificación de voz aspecto).

git clone https://github.com/jishi/node-sonos-http-api.git sonos cd sonos. npm install --producción. npm start. 

Si ve un mensaje sobre tal y tal módulo no encontrado, simplemente haga otro npm install y el nombre del módulo, luego intente npm start de nuevo. Si experimenta errores relacionados con "Requiere un compilador C ++ 11", arregla con los siguientes comandos:

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

Eventualmente deberías ver algo como esto:

sonos-http-api trabajando

El servidor ahora se está ejecutando, interactuando con Sonos. El formato de esta API es fácil:

http://[SERVER IP]: 5005 / [NOMBRE DE LA HABITACIÓN] / [ACCIÓN]

O como un ejemplo específico:

http://192.168.1.99:5005/kitchen/playlist/chillout

La acción que nos interesa es el comando "decir", que se utiliza de la siguiente manera:

http://192.168.1.99:5005/kitchen/say/make%20use%20of%20is%20awesome/en-gb

Escuchará un mensaje de error acerca de tener que registrarse en una clave API en VoiceRSS.org. Ya debería haber hecho esto, así que escriba lo siguiente y pegue su clave API como corresponde:

nano settings.json

{

"voicerss": "YOURAPIKEY" }

(Presione CTRL-X, Y, para guardar el archivo)

Reinicie el servidor y haga ping a la URL nuevamente. Después de unos segundos, debería escuchar una encantadora voz en inglés (aunque cambie el final de la URL a en-us si prefieres) Para hacer que el servidor Sonos HTTP API se inicie nuevamente cuando se reinicia Pi:

sudo nano /etc/rc.local

Agregue una línea antes del salida 0:

sudo node /home/pi/sonos/server.js  dev / null &

Ahora tiene la capacidad de crear un mensaje de voz desde cualquier lugar de la red local simplemente haciendo ping a una URL, por lo que las posibilidades están abiertas en este momento. Sin embargo, si está luchando por obtener ideas, siga leyendo para obtener algunas notificaciones útiles que he configurado.

Notificaciones de OpenHAB sobre eventos

Tomemos un ejemplo simple primero: detección de movimiento. Este es un caso de uso común para activar luces, pero es posible que también desee una notificación de voz si es un sensor de movimiento en un área de poco tráfico, o tal vez como una advertencia adelantada de que alguien viene al jardín camino.

regla "Movimiento de jardín detectado" cuando Item Garden_Motion cambió, entonces var String message = "Tienes un visitante" sendHttpGetRequest (" http://localhost: 5005 / cocina / say / "+ message.encode (" UTF-8 ") +" / en-gb ") fin.

Debería ver cómo puede integrar estas notificaciones de voz simples en cualquiera de sus reglas, pero intentemos algo un poco más complejo.

Informe meteorológico diario de IFTTT a OpenHAB a Sonos

En esta receta, haremos que Sonos anuncie un informe meteorológico diario a la hora que prefiera.

Necesitarás el My. El enlace OpenHAB está habilitado, ya que esto crea una conexión segura entre su servidor OpenHAB interno y el servicio IFTTT externo. Configure eso si aún no lo ha hecho, puede consultar parte 1 de nuestra guía OpenHAB Comenzando con OpenHAB Home Automation en Raspberry PiOpenHAB es una plataforma de automatización del hogar madura y de código abierto que se ejecuta en una variedad de hardware y es independiente del protocolo, lo que significa que se puede conectar a casi cualquier hardware de domótica en el mercado hoy. Lee mas para obtener instrucciones completas, de lo contrario, supondré que ya lo configuró con la persistencia habilitada para todos los elementos.

A continuación, cree un nuevo elemento String en su instalación de OpenHAB, que almacenará el informe meteorológico diario. Antes de esto es visible en el Mi. Canal OpenHAB, necesitaremos inicializarlo con alguna variable predeterminada. Haga ping a la siguiente URL (cambiar raspberrypi.local a su servidor OpenHAB, o simplemente use su dirección IP, y El tiempo de hoy a lo que sea que llames la cadena):

http://raspberrypi.local: 8080 / CMD? Hoy_Weather = Soleado 

Inicie sesión en mi. OpenHAB [URL rota eliminada] y verifique el Artículos lista para garantizar que la variable se haya exportado ahora.

mi cheque de exportación de artículos openhab

De vuelta en IFTTT, cree una nueva receta y use el Canal del clima como el disparador a su hora preferida del día. Tendrá que configurar su ubicación primero si nunca la ha usado antes.

Selecciona Mi OpenHAB como la acción, y elija Todays_Weather como la variable para actualizar.

informe meteorológico ifttt

Por ahora, solo elija el siguiente espacio de media hora para la prueba: puede actualizar la receta más tarde una vez que sepa que está funcionando.

Efectivamente, en el momento de la prueba (de hecho, un poco antes), obtuve el pronóstico de hoy actualizado con éxito.

2016-02-27 10: 28: 01.689 [DEPURACIÓN] [o.o.i.m.i. MyOpenHABServiceImpl] - Comando recibido ¡Muy nublado hoy! Con un máximo de 7C y un mínimo de 1C. Repetir. Las condiciones serán mayormente nubladas hoy, con un máximo de 7C y un mínimo de 1C. para el artículo Todays_Weather. 2016-02-27 10: 28: 01.697 [DEPURACIÓN] [o.o.i.m.i. MyOpenHABServiceImpl] - store (Todays_Weather), state = ¡Mayormente nublado hoy! Con un máximo de 7C y un mínimo de 1C. Repetir. Las condiciones serán mayormente nubladas hoy, con un máximo de 7C y un mínimo de 1C. 

A continuación, necesitamos una regla de OpenHAB para enviar esta variable a la URL "say" de Sonos. Lo siguiente debería hacerlo:

regla "Anunciar informe meteorológico diario" cuando el artículo Todays_Weather recibió la actualización. luego envíeHttpGetRequest (" http://localhost: 5005 / cocina / say / "+ Todays_Weather.state.toString.encode (" UTF-8 ") +" / en-gb ") fin.

Esto es bastante simple: cada vez que se actualiza la variable Todays_Weather (que será, automáticamente, a las 8 am todos los días), haga ping a la URL. Usamos codificar ("UTF-8") Función de cadena para que la oración de IFTTT sea adecuada para su uso en una URL. Para probar manualmente esta parte del sistema, simplemente use la API HTTP de OpenHAB nuevamente:

http://raspberrypi.local: 8080 / CMD? Hoy_Weather = Nublado, con posibilidad de albóndigas. 

Conéctese a IFTTT sin OpenHAB, usando If-This-Then-Node

Finalmente, veamos cómo conectarse desde cualquier receta IFTTT sin el intermediario OpenHAB. En su lugar, instalaremos otro servidor web y lo expondremos a Internet abierto. Esto no está exento de riesgos: cualquier tipo de servidor abierto es un riesgo de seguridad, pero lo estamos mitigando al no ejecutar una pila completa de servidores, solo un pequeño servicio específico que solo acepta ciertos comandos en un formato seguro de paquete de datos JSON (por lo que no se realizarán ataques de autenticación o inyección SQL) posible). Una vez que hayamos terminado, tendrá una URL pública a la que puede enviar mensajes desde el canal IFTTT Maker.

Comience configurando uno de los muchos servicios de DNS dinámicos gratuitos Los 5 mejores proveedores de DNS dinámicos gratuitosUn servicio DDNS puede ayudarlo a conectarse a la PC de su hogar mientras está en movimiento. Estos son los mejores proveedores de DNS dinámicos gratuitos a tener en cuenta. Lee mas por ahí: recomiendo DuckDNS, específicamente porque proporciona un conjunto simple de instrucciones para Raspberry Pi, lo que le permite actualizar su dirección IP automáticamente. Siga estos pasos y recuerde su URL para los próximos pasos. Su enrutador también puede tener una función de DNS dinámico incorporada, así que verifique allí primero. En mi caso, puedo obtener un * .mynetgear.com URL gratis, así que lo he usado.

Luego, encuentre el enrutador reenvío de puertos ¿Qué es el reenvío de puertos y cómo puede ayudarme? [MakeUseOf explica]¿Lloras un poco por dentro cuando alguien te dice que hay un problema de reenvío de puertos y es por eso que tu nueva aplicación brillante no funcionará? Tu Xbox no te permitirá jugar, tus descargas de torrents se rechazan ... Lee mas página de configuración; Aquí es donde le diremos qué hacer con las solicitudes entrantes. Reenvíe todas las solicitudes HTTP (puerto 80) al puerto 1337 en su servidor Raspberry Pi. Supongo que ya tiene una dirección IP reservada para su Raspberry Pi; si no la tiene, verifique la configuración de su enrutador página para direcciones IP reservadas mientras está allí, ya que no cambiará la próxima semana y el servidor se detendrá repentinamente trabajando.

reenvío del puerto de configuración del enrutador

Ahora para instalar el último bit de software del servidor.

https://github.com/sebauer/if-this-then-node.git. cd if-this-then-node / npm install. nodo server.js.

Deberías ver lo siguiente.

si esto, entonces el error de valores predeterminados del nodo

Está bien, eso solo significa que necesitamos actualizar nuestros detalles. Abrir config.js en Nano y edite esos detalles en otra cosa que no sea la predeterminada, luego guarde. Cuando vuelva a ejecutar el servidor, debería ver esto:

si esto, entonces el servidor de nodo se ejecuta

Excelente. Pruebe que su máquina sea accesible desde el mundo exterior escribiendo su nombre de host DNS dinámico y agregue /ifttn / hasta el final de la URL. Si todo funciona, el mensaje "IFTTN - if-this-then-node ¡La versión 2.0.1 está en funcionamiento!" se mostrará en su navegador. Nuevamente, para hacer que este script se ejecute al inicio, edite el /etc/rc.local archivar y agregar:

sudo node /home/pi/if-this-then-node/server.js  dev / null &

Si-este-entonces-nodo funciona a través de complementos: hay algunos predeterminados suministrados, pero no nos interesan. En su lugar, descargue este complemento personalizado que he escrito para usted con los siguientes comandos.

complementos de cd. wget https://gist.githubusercontent.com/jamesabruce/4af8db24ba3452b94877/raw/d11c1cff3aa44dbb6a738eeb15202f3db461de75/sonos.js 

También deberá instalar el solicitud módulo.

Solicitud de instalación de npm. 

Luego reinicie el servidor. El complemento es bastante simple, pero un poco diferente a la URL que hemos usado hasta ahora. En este caso, he usado la acción especial "sayall", que envía el mensaje a todos los dispositivos Sonos.

solicitud(' http://localhost: 5005 / sayall / '+ params.message +' / en-gb ', función (error, respuesta, cuerpo)

Si prefiere poder orientar dispositivos específicos, reemplace esa línea con:

solicitud(' http://localhost: 5005 / '+ params.device +' / say / '+ params.message +' / en-gb ', función (error, respuesta, cuerpo)

Agregue otro parámetro de línea llamado dispositivo a la solicitud JSON a continuación para especificar el nombre del dispositivo Sonos.

Para probar esto, estoy usando la aplicación de botón "Do" de IFTTT. Cree una nueva receta, busque canales y seleccione el Fabricante canal.

botón do

Crea una nueva receta. Ingrese la URL que configuró anteriormente desde un proveedor de DNS dinámico gratuito (incluido /ifttn/ al final de la URL. No olvides esas barras). Seleccione ENVIAR solicitud, aplicación / json contenido y el cuerpo del mensaje de la siguiente manera, reemplazando todas las variables según sea necesario con las que configuró previamente:

{"action": "sonos", "user": "YOURUSER", "pw": "YOURPASSWORD", "message": "Mensaje entrante para todos: ¡La cena está lista! Repetir. La cena está lista. Pon tus culos arriba ahora. "}

Ahora tengo un botón fácilmente accesible que anunciará el mensaje en cada dispositivo Sonos de la casa. Por supuesto, puede vincular esto con cualquier canal IFTTT que desee para hacer un mensaje personalizado utilizando variables de ese canal. Incluso debería poder replicar el informe meteorológico desde arriba sin usar OpenHAB ahora, aunque le costó un esfuerzo adicional instalar otro servidor.

Nota: los hackers lo escanearán automáticamente. Esto sucede todo el tiempo, pero si está viendo registros, puede parecer alarmante. A continuación, puede ver que alguien intentó determinar sistemáticamente si alguna de las interfaces PHPMyAdmin estándar era accesible. Lo cual no eran. No se alarme si ve algo similar. Es el equivalente en Internet de llamar a números de teléfono aleatorios para ver si hay alguien allí.

intentos de pirateo del servidor web

¿Qué anunciarás?

Ahora debe tener las herramientas y el conocimiento para bañar constantemente a toda su casa en notificaciones de voz sobre todo lo que pueda pensar. ¿Quién necesita música? Su único límite es de 350 solicitudes diarias de VoiceRSS.org, pero eso es aproximadamente una cada 4 minutos, por lo que debe estar bien.

Entonces, ¿qué vas a hacer con esto? ¡Comparte tus ideas o la receta IFTTT en los comentarios!

Créditos de imagen:café y mujer por S_Photo a través de Shutterstock

James tiene una licenciatura en Inteligencia Artificial y está certificado por CompTIA A + y Network +. Es el desarrollador principal de MakeUseOf, y pasa su tiempo libre jugando VR paintball y juegos de mesa. Ha estado construyendo computadoras desde que era un niño.