Cómo enviar notificaciones de voz a Sonos Speakers

Hoy, le mostraré cómo configurar las notificaciones de voz en su sistema Sonos, utilizando recetas IFTTT, integraciones OpenHAB y más.

Hoy, le mostraré cómo configurar las notificaciones de voz en su sistema Sonos, utilizando recetas IFTTT, integraciones OpenHAB y más.
Anuncio

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

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

Sin embargo, puedes hacer esto con un sistema Sonos y un poco de magia DIY Raspberry Pi. Hoy te mostraré cómo configurar las notificaciones de voz en tu sistema Sonos, presentando un par de recetas IFTTT útiles, integraciones 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. Sugiero omitir eso por ahora, y usar el método en este tutorial en su lugar.

Una Raspberry Pi que ejecute Raspian Linux es ideal para este tutorial, pero también debería funcionar en cualquier servidor doméstico basado en Linux que tenga en ejecución. En este caso, estoy usando la misma Raspberry Pi que ejecuta OpenHAB, el sistema de automatización del hogar de código abierto. Comenzando con OpenHAB Home Automation en Raspberry Pi. Comenzando con OpenHAB Home Automation en Raspberry Pi. OpenHAB es una plataforma de automatización del hogar madura y abierta. 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 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 tiene una ventana de terminal local abierta en el escritorio, o está conectado de forma remota usando SSH Configuración de su Raspberry Pi para uso sin cabeza con SSH Configuración de su Raspberry Pi para uso sin cabeza con SSH El 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 revise si hay cambios específicos en las instrucciones)
  • Al menos un altavoz Sonos (otros sistemas de audio no son compatibles, este es un tutorial solo para Sonos)
  • Cuenta gratis en VoiceRSS.org. Regístrese y luego encuentre su clave API, que luego necesitaremos para generar los mensajes de voz.

Instalar el nodo más reciente

Compruebe qué versión de Nodo tiene escribiendo:

node -v 

Tenga en cuenta que la versión 6 no es compatible. Si tiene el Nodo 6, primero lo eliminará, luego siga las instrucciones a continuación para instalar 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 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 

Confirmar nuevamente escribiendo:

 node -v 

Y debería ver la v5.12 (o la última que haya descargado).

A continuación, tenemos algunos módulos de nodo para instalar. También queremos el Administrador de paquetes de nodo.

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

Esos son los requisitos previos, ahora en las cosas divertidas.

Sonos HTTP API

La API HTTP de Sonos crea un servidor web en la red local, que nos permite enviar un ping a una URL con un mensaje para anunciar en un Sonos (y controlarlo de forma remota si así lo desea, aunque este tutorial se centra únicamente en el aspecto de 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 acerca de tal y tal módulo no encontrado, simplemente haga otra instalación npm y el nombre del módulo, luego pruebe npm start again. Si experimenta errores relacionados con "requiere un compilador de C ++ 11", corrija con los siguientes comandos:

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

Eventualmente deberías ver algo como esto:

sonos-http-api trabajando

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

 http: // [IP del servidor]: 5005 / [ROOM NAME] / [ACTION] 

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 usa 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, escriba lo siguiente y pegue su clave API como appropirar:

 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ías escuchar una encantadora voz en inglés (aunque cambias el final de la URL a en-us si prefieres). Para hacer que el servidor Sonos HTTP API se reinicie cuando se reinicie el Pi:

 sudo nano /etc/rc.local 

Agregue una línea antes de la 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 muy abiertas en este punto. Sin embargo, si estás luchando por ideas, sigue leyendo para obtener algunas notificaciones útiles que tengo configuradas.

Notificaciones de OpenHAB en 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 desee una notificación de voz también si se trata de un sensor de movimiento en un área de poco tráfico, o quizás como una advertencia directa de que alguien está subiendo por el sendero del jardín.

 rule "Garden motion detected" when Item Garden_Motion changed then var String message = "You have a visitor" sendHttpGetRequest("http://localhost:5005/kitchen/say/"+message.encode("UTF-8")+"/en-gb") end 

Debería ver cómo puede integrar estas simples notificaciones de voz en cualquiera de sus reglas, pero probemos 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á el enlace My.OpenHAB habilitado, ya que esto crea una conexión segura entre su servidor OpenHAB interno y el servicio externo IFTTT. Configura eso si aún no lo has hecho - puedes consultar la parte 1 de nuestra guía OpenHAB Comenzar con OpenHAB Home Automation en Raspberry Pi Comenzar con OpenHAB Home Automation en Raspberry Pi OpenHAB es una plataforma madura de domótica de código abierto que funciona en una variedad de hardware y es independiente del protocolo, lo que significa que se puede conectar a casi cualquier hardware de automatización del hogar en el mercado hoy en día. Lea más para obtener instrucciones completas; de lo contrario, supongo que ya lo configuró con la persistencia habilitada para todos los artículos.

A continuación, cree un nuevo elemento String 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. Haga ping a la siguiente URL (cambie raspberrypi.local a su servidor OpenHAB, o simplemente use su dirección IP, y Todays_Weather a lo que usted denominó String):

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

Inicie sesión en My.OpenHAB y compruebe la lista de elementos para asegurarse de que la variable se haya exportado.

mi cheque openhab de exportación de artículos

De vuelta en IFTTT, crea una nueva receta y utiliza el canal Meteorológico como el disparador a la hora del día que prefieras. Tendrá que establecer su ubicación primero si nunca la ha usado antes.

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

ifttt informe meteorológico

Por ahora, solo elija la próxima ranura 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), recibí el pronóstico de hoy actualizado con éxito.

 2016-02-27 10:28:01.689 [DEBUG] [ooimiMyOpenHABServiceImpl] - Received command Mostly Cloudy today! With a high of 7C and a low of 1C. Repeat. Conditions will be Mostly Cloudy today, with a high of 7C and a low of 1C. for item Todays_Weather 2016-02-27 10:28:01.697 [DEBUG] [ooimiMyOpenHABServiceImpl] - store(Todays_Weather), state = Mostly Cloudy today! With a high of 7C and a low of 1C. Repeat. Conditions will be Mostly Cloudy today, with a high of 7C and a low of 1C. 

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

 rule "Announce daily weather report" when Item Todays_Weather received update then sendHttpGetRequest("http://localhost:5005/kitchen/say/"+Todays_Weather.state.toString.encode("UTF-8")+"/en-gb") end 

Esto es bastante simple: cada vez que se actualice la variable Todays_Weather (que será, automáticamente, a las 8 a.m. todos los días), haga ping a la URL. Usamos la función de cadena de codificación ("UTF-8") para hacer que la frase de IFTTT sea adecuada para usar 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, with a chance of meatballs. 

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

Finalmente, veamos cómo conectarse desde cualquier receta IFTTT sin el intermediario de OpenHAB. En cambio, 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 estamos mitigando esto 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 (entonces no Inyección SQL o ataques de autenticación serán posibles). Una vez que hayamos terminado, tendrás una URL pública a la que puedes enviar mensajes desde el canal IFTTT Maker.

Comience configurando uno de los muchos servicios DNS dinámicos gratuitos. 5 Mejores proveedores de DNS dinámico que puede buscar de forma gratuita. Hoy 5 mejores proveedores de DNS dinámico que puede buscar de forma gratuita. Hoy DynDNS siempre fue una de las principales menciones cuando surgieron DNS dinámicos gratuitos. Pero ahora que ya no está, ¿hay alguna buena alternativa? Seguro que sí. Lea más 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 con esto y recuerde su URL para los siguientes pasos. Su enrutador también puede tener una función DNS dinámica incorporada, por lo tanto, verifique primero. En mi caso, puedo obtener una URL * .mynetgear.com gratis, así que la 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? [Explicaciones de MakeUseOf] ¿Qué es el reenvío de puertos y cómo puede ayudarme? [MakeUseOf Explains] ¿Lloras un poco cuando alguien te dice que hay un problema de reenvío de puertos y por eso tu nueva y brillante aplicación no funcionará? Tu Xbox no te permitirá jugar juegos, tus descargas de torrents se rechazan ... Leer más página de configuración; aquí es donde le diremos qué hacer con las solicitudes entrantes. Reenviar todas las solicitudes HTTP (puerto 80) al puerto 1337 en su servidor Raspberry Pi. Supongo que ya tienes una dirección IP reservada para tu Raspberry Pi; si no lo has hecho, revisa la página de configuración de tu enrutador para las direcciones IP reservadas mientras estás allí, ya que no lo cambiarás la próxima semana y para que el servidor deje de funcionar repentinamente

enrutador config puerto de reenvío

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.

si esto entonces el nodo predetermina el error de valores

Está bien, eso solo significa que tenemos que actualizar nuestros detalles. Abre config.js en Nano y edita esos detalles en cualquier otro que no sea el predeterminado, luego guarda. Cuando vuelva a ejecutar el servidor, debería ver esto:

si este entonces servidor de nodo en ejecución

Estupendo. Pruebe que su máquina sea accesible desde el mundo exterior ingresando su nombre de host DNS dinámico y anexando / ifttn / al final de la URL. Si todo funciona, el mensaje "IFTTN - if-this-then-node Version 2.0.1 is up and running!" Se mostrará en su navegador. Nuevamente, para hacer que este script se ejecute al inicio, edite el archivo /etc/rc.local y agregue:

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

If-This-Then-Node funciona a través de complementos; hay unos pocos 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 módulo de solicitud .

 npm install request 

Luego reinicia el servidor. El plugin es bastante simple, pero un poco diferente a la URL que usamos hasta ahora. En este caso, he usado la acción especial "sayall", que envía el mensaje a cada dispositivo de Sonos.

 request('http://localhost:5005/sayall/'+params.message+'/en-gb', function (error, response, body) 

Si prefiere apuntar a dispositivos específicos, reemplace esa línea con:

 request('http://localhost:5005/'+params.device+'/say/'+params.message+'/en-gb', function (error, response, body) 

Agregue 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 la aplicación de botón IFTTT "Do". Crea una nueva receta, busca canales y selecciona el canal Maker .

botón de hacer

Crea una nueva receta. Ingrese la URL que configuró anteriormente de un proveedor de DNS dinámico gratuito (incluyendo / ifttn / al final de la URL. No olvide esas barras inclinadas). Seleccione la solicitud POST, el contenido de la aplicación / json 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":"Incoming message for everyone: Dinner is ready! Repeat. Dinner is ready. Get your asses upstairs now." } 

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

Nota: los hackers lo escanearán automáticamente . Esto sucede todo el tiempo, pero si estás viendo registros, puede parecer alarmante. A continuación puede ver que alguien intentó sistemáticamente averiguar si se podía acceder a alguna de las interfaces estándar de PHPMyAdmin. Que ellos no fueron No se alarme si ve algo similar. Es el equivalente a Internet de llamadas frías al azar números de teléfono para ver si hay alguien allí.

intentos de hackeo del servidor web

¿Qué vas a anunciar?

Ahora debería tener las herramientas y el conocimiento para bañar constantemente toda su casa con notificaciones de voz sobre todo lo que pueda pensar. ¿Quién necesita música? Su único límite son 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 tu receta IFTTT en los comentarios!

Créditos de las imágenes: café y mujer por S_Photo a través de Shutterstock

In this article