Cómo enviar notificaciones de voz a los altavoces de Sonos

Cómo enviar notificaciones de voz a los altavoces de Sonos / Casa inteligente

El sueño de cualquier entusiasta de un hogar inteligente 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 simplemente hacer que ella anuncie un mensaje importante..

puede haz esto con un sistema de Sonos y un poco de magia Raspberry Pi. Hoy le mostraré cómo configurar notificaciones de voz en su sistema de Sonos, presentando un par de recetas útiles de IFTTT, integraciones de OpenHAB y más, para hacer uso de la función de notificación..

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

Una Raspberry Pi con Raspian linux es ideal para este tutorial, pero también debería funcionar en cualquier servidor doméstico basado en Linux que esté ejecutando. En este caso, estoy usando la misma Raspberry Pi que ejecuta OpenHAB, el sistema de automatización doméstica de código abierto Introducción a OpenHAB Home Automation en Raspberry Pi Introducción a OpenHAB Domótica en Raspberry Pi OpenHAB es una plataforma de automatización doméstica de código abierto y madura se ejecuta en una variedad de hardware y es independiente del protocolo, lo que significa que puede conectarse a casi cualquier hardware de automatización del hogar en el mercado hoy en día. 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 que ha iniciado sesión de forma remota mediante SSH Configuración de su Raspberry Pi para un uso sin cabeza con SSH Configuración de su Raspberry Pi para uso sin cabeza con SSH La 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 ... Leer más .

Necesitarás

  • Raspberry Pi 2 (los modelos más antiguos deberían funcionar, pero compruebe si hay cambios específicos en las instrucciones)
  • Al menos un altavoz de Sonos (otros sistemas de audio no son compatibles, este es un tutorial solo para Sonos)
  • Cuenta gratuita en VoiceRSS.org. Regístrese y luego busque su clave de API, que necesitaremos más adelante para generar los mensajes de voz.

Instalar el 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 v5.5.

Si no tiene v5 o si no se encuentra un error, siga estas instrucciones para instalar Node. El siguiente comando asume una Raspberry Pi 2; para modelos más antiguos, usar armv6l en lugar 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 node -v5.12.0-linux-armv7l sudo cp -R * / usr / local 

Confirme de nuevo escribiendo:

nodo -v

Y debería ver v5.12 (o lo último que descargó).

A continuación, tenemos algunos módulos de Nodo para instalar. También queremos el Gestor de Paquetes de Nodos..

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

Esos son los requisitos previos, ahora en lo divertido.

API HTTP de Sonos

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

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

Si ve un mensaje sobre tal y cual módulo no encontrado, simplemente haga otro npm instalar y el nombre del módulo, a continuación, intente npm start otra vez. Si experimenta errores relacionados con “requiere un compilador de C ++ 11”, corregir con los siguientes comandos:

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 

Eventualmente deberías ver algo como esto:

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

http: // [IP DEL SERVIDOR]: 5005 / [NOMBRE DE LA SALA] / [ACCIÓN]

O como ejemplo específico:

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

La acción que nos interesa es la “decir” comando, utilizado 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 de API en VoiceRSS.org. Ya debería haber hecho esto, así que escriba lo siguiente y pegue su clave de API como corresponda:

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 para en-us si prefieres). Para hacer que el servidor de la API HTTP de Sonos vuelva a arrancar cuando se reinicie Pi:

sudo nano /etc/rc.local

Agrega una línea antes de salida 0:

nodo sudo /home/pi/sonos/server.js < /dev/null &

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

OpenHAB Notificaciones sobre Eventos

Tomemos primero un ejemplo simple: 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 se trata de un sensor de movimiento en una zona de poco tráfico, o tal vez como una advertencia de que alguien está subiendo por el sendero del jardín..

Regla "Se detectó movimiento en el jardín" cuando se cambió el elemento Garden_Motion y luego var String message = "Tienes un visitante" sendHttpGetRequest ("http: // localhost: 5005 / kitchen / say /" + message.encode ("UTF-8") + " / en-gb ") fin 

Debería ver cómo puede integrar estas simples notificaciones de voz 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 su hora preferida.

Necesitará el enlace My.OpenHAB habilitado, ya que esto crea una conexión segura entre su servidor interno de OpenHAB y el servicio externo de IFTTT. Configúrelo si aún no lo ha hecho; puede consultar la parte 1 de nuestra guía OpenHAB Introducción a OpenHAB Home Automation en Raspberry Pi Introducción a OpenHAB Home Automation en Raspberry Pi OpenHAB es una plataforma de automatización doméstica de código abierto y madura que funciona en una variedad de hardware y es independiente del protocolo, lo que significa que puede conectarse a casi cualquier hardware de automatización del hogar en el mercado actual. Lea más para obtener instrucciones completas, de lo contrario, asumiré que ya lo tiene configurado con la persistencia habilitada para todos los elementos.

A continuación, cree un nuevo elemento de cadena en su instalación de OpenHAB, que almacenará el informe meteorológico diario. Antes de que esto sea visible en el canal My.OpenHAB, necesitaremos inicializarlo con alguna variable predeterminada. 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 llamaste la Cadena):

http: //raspberrypi.local: 8080 / CMD? Todays_Weather = Sunny 

Inicie sesión en My.OpenHAB y compruebe el Artículos Lista para asegurar que la variable ahora ha sido exportada.

Regrese a IFTTT, cree una nueva receta y use el canal del tiempo como el activador en su hora preferida del día. Tendrá que establecer su ubicación primero si nunca la ha usado.

Seleccione My.OpenHAB como la acción, y elija Todays_Weather como la variable para actualizar.

Por ahora, simplemente 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), el pronóstico de hoy se actualizó con éxito.

2016-02-27 10: 28: 01.689 [DEBUG] [o.o.i.m.i.MyOpenHABServiceImpl] - ¡Se recibió el comando 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. para el artículo Todays_Weather 2016-02-27 10: 28: 01.697 [DEBUG] [o.o.i.m.i.MyOpenHABServiceImpl] - store (Todays_Weather), estado = ¡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 OpenHAB para enviar esta variable a Sonos “decir” URL Lo siguiente debe hacerlo:

la regla "Anuncie el informe meteorológico diario" cuando Item Todays_Weather recibió la actualización, luego envíeHttpGetRequest ("http: // localhost: 5005 / kitchen / say /" + Todays_Weather.state.toString.encode ("UTF-8") + "/ en-gb ") final 

Esto es bastante simple: cada vez que se actualice 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 hacer 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? Todays_Weather = Cloudy, con posibilidad de albóndigas. 

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

Finalmente, veamos cómo conectarse desde cualquier receta de IFTTT sin el intermediario de 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 para la seguridad, pero lo estamos mitigando al no ejecutar una pila de servidores completa, solo un pequeño servicio específico que solo acepta ciertos comandos en un formato de paquete de datos JSON seguro (por lo que no Será posible la inyección de SQL o ataques de autenticación). Una vez que hayamos terminado, tendrá una URL pública a la que podrá enviar mensajes desde el canal IFTTT Maker..

Comience por configurar uno de los muchos servicios DNS dinámicos gratuitos. 5 Los mejores proveedores de DNS dinámico que puede buscar gratis hoy. 5 Los mejores proveedores de DNS dinámico que puede buscar gratis hoy. DynDNS siempre fue una mención importante cuando se activaron los DNS dinámicos gratuitos. Pero ahora que se ha ido, ¿hay buenas alternativas? Seguro que hay. Lea más al respecto: recomiendo DuckDNS, específicamente porque proporciona un conjunto simple de instrucciones para Raspberry Pi, que le permite actualizar su dirección IP automáticamente. Siga estos y recuerde su URL para los siguientes pasos. Su enrutador también puede tener una función DNS dinámica incorporada, así que verifique primero allí. En mi caso, puedo conseguir un * .mynetgear.com URL gratis, así que lo he usado.

A continuación, busque el reenvío de puertos de su enrutador ¿Qué es el reenvío de puertos y cómo puede ayudarme? [MakeUseOf Explica] ¿Qué es el reenvío de puertos y cómo puede ayudarme? [MakeUseOf Explica] ¿Llora un poco por dentro cuando alguien le dice que hay un problema de reenvío de puertos y es por eso que su nueva aplicación no funcionará? Tu Xbox no te permitirá jugar juegos, tus descargas de torrent se rechazan ... Leer más 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 lo ha hecho, revise la página de configuración de su enrutador para las IP reservadas mientras esté allí, ya que no debe cambiar la próxima semana. para que el servidor deje de funcionar repentinamente.

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

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

Deberías ver lo siguiente.

Eso está bien, eso solo significa que necesitamos actualizar nuestros detalles. Abrir config.js en Nano y edite esos detalles a un valor que no sea el predeterminado, luego guarde. Cuando vuelva a ejecutar el servidor, debería ver esto:

Genial. Puede acceder a su máquina desde el mundo exterior escribiendo su nombre de host de DNS dinámico y agregue /ifttn / hasta el final de la URL. Si todo funciona, el mensaje. “IFTTN - si la versión 2.0.1 de if-this-then-node está en funcionamiento!” se mostrará en su navegador. De nuevo, para hacer que este script se ejecute en el inicio, edite el /etc/rc.local archivo y añadir:

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

If-This-Then-Node funciona a través de complementos: se suministran algunos predeterminados, pero no nos interesan. En su lugar, descargue este complemento personalizado que he escrito para usted con los siguientes comandos.

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

También necesitarás instalar el solicitud módulo.

solicitud de instalación npm 

Luego reinicie el servidor. El complemento es bastante simple, pero un poco diferente a la URL que usamos hasta ahora. En este caso, he usado el especial. “Sayall” Acción, que envía el mensaje a cada dispositivo Sonos..

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

Si prefieres poder apuntar a dispositivos específicos, reemplaza esa línea por:

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

Añadir otro parámetro de línea llamado dispositivo a la solicitud JSON a continuación en la que se especifica el nombre del dispositivo Sonos.

Para probar esto, estoy usando el IFTTT “Hacer” aplicación de botón Cree una nueva receta, navegue por los canales y seleccione la Fabricante canal.

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

"action": "sonos", "user": "YOURUSER", "pw": "YOURPASSWORD", "message": "Mensaje entrante para todos: ¡La cena está lista! Repita. La cena está lista. Levanta el culo ahora . "  

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

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

¿Qué vas a anunciar??

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

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

Créditos de imagen: coffee and woman por S_Photo a través de Shutterstock

Explorar más sobre: ​​Domótica, Sonos..