Cómo enviar notificaciones de voz a los altavoces Sonos

  • Michael Cain
  • 0
  • 3299
  • 301
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 simplemente hacer que anuncie un mensaje importante.

usted poder 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 doméstico basado en Linux que tenga en funcionamiento. En este caso, estoy usando el mismo 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 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 actual. . 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 está conectado remotamente 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 ... .

Necesitarás

  • Raspberry Pi 2 (los modelos más antiguos deberían funcionar, pero verifique los 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 gratuita en VoiceRSS.org [Ya no está disponible]. Regístrese y luego encuentre su 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 lo eliminará, luego siga las instrucciones a continuación para instalar v5.5.

Si no tiene v5 o si obtiene 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 node -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 

Eso es un requisito previo fuera del camino, ahora en las cosas divertidas.

API HTTP de Sonos

La 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 controlarlo de forma remota si lo desea, aunque este tutorial se centra solo 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 sobre tal y tal módulo no encontrado, simplemente haga otro npm install y el nombre del módulo, luego intente npm start otra vez. Si experimenta errores relacionados con “requiere un compilador de C ++ 11”, arreglar 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 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:

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 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 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 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 API Sonos HTTP 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ás luchando por ideas, sigue leyendo para 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 las luces, pero es posible que también desee una notificación de voz si se trata de un sensor de movimiento en un área de poco tráfico, o tal vez como una advertencia directa de que alguien viene por el camino del jardín.

regla "Se detectó movimiento en el jardín" cuando Item Garden_Motion cambió y luego var String message = "Tiene un visitante" sendHttpGetRequest ("http: // localhost: 5005 / kitchen / say /" + message.encode ("UTF-8") + " / es-gb ") final 

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á el enlace My.OpenHAB habilitado, ya que esto crea una conexión segura entre su servidor OpenHAB interno y el servicio IFTTT externo. Configúrelo si aún no lo ha hecho: puede consultar la parte 1 de nuestra guía de 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 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 actual. para obtener instrucciones completas, de lo contrario supongo que ya lo tienes configurado con 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 que esto sea visible en el canal My.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 le haya llamado String):

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

Inicie sesión en My.OpenHAB y verifique Artículos lista para garantizar que la variable ahora se haya exportado.

De vuelta en IFTTT, cree una nueva receta y use el canal Weather como desencadenante a su hora preferida del día. Tendrá que configurar 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.

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] - ¡Recibí 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] - tienda (Todays_Weather), estado = ¡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. 

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

regla "Anunciar informe meteorológico diario" cuando el artículo Todays_Weather recibió la actualización y 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 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? Todays_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 estamos mitigando esto al no ejecutar una pila completa de servidores, solo un pequeño servicio específico que solo acepta ciertos comandos en un formato de paquete de datos JSON seguro (así que no La inyección SQL o los ataques de autenticación serán posibles). 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 DNS dinámicos gratuitos. Los 5 mejores proveedores de DNS dinámicos que puede usar de forma gratuita hoy. Los 5 mejores proveedores de DNS dinámicos que puede usar de forma gratuita hoy. Sin DynDNS, estos son los mejores proveedores, servicios y Alternativas DDNS para reemplazarlo. - 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ámica incorporada, así que verifique allí primero. En mi caso, puedo obtener un * .mynetgear.com URL gratis, así que he usado eso.

Luego, encuentre 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 me puede ayudar? [Explica MakeUseOf] ¿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á? Su Xbox no le permitirá jugar, sus descargas de torrents se rechazan ... 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, revise la página de configuración de su enrutador para ver las IP reservadas mientras esté allí, ya que no cambiará la próxima semana y para que el servidor deje de funcionar repentinamente.

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 node server.js 

Deberías ver lo siguiente.

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

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: la versión 2.0.1 de if-this-then-node 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 &

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 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 el especial “sayall” acción, que envía el mensaje a cada dispositivo Sonos.

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

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

request ('http: // localhost: 5005 /' + params.device + '/ say /' + params.message + '/ en-gb', function (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 el IFTTT “Hacer” botón de aplicación. Cree una nueva receta, busque canales y seleccione el Fabricante canal.

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). Seleccionar 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! Repita. La cena está lista. Lleve sus traseros 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 tomó el esfuerzo adicional de 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 en frío a números de teléfono aleatorios para ver si hay alguien allí.

¿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 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? Comparta sus ideas o la receta IFTTT en los comentarios.!

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




Nadie ha comentado sobre este artículo todavía.

Sobre tecnología moderna, simple y asequible.
Tu guía en el mundo de la tecnología moderna. Aprenda a usar las tecnologías y los dispositivos que nos rodean todos los días y aprenda a descubrir cosas interesantes en Internet.