Menú

Controla tu Wemo con la voz desde Android

12 de julio de 2014

Wemo

Hace un par de meses me regalaron un enchufe Wemo. Para quien no los conozca, Wemo es una gama de dispositivos de Belkin que vienen con una tarjeta de red y la capacidad de conectarlos al router de tu casa, de forma que puedes controlarlos (activarlos o desactivarlos) de forma remota y, por ende, controlar lo que conectes a ellos.

Aunque la idea inicial es bastante alentadora, lo cierto es que la aplicación para Android de Wemo deja mucho que desear, entre otras cosas porque tarda unos 10 segundos en abrirse y carece de cualquier tipo de widget para tener tu interruptor a mano, por lo que tardas menos en levantarte y activarlo a través del botón físico del dispositivo que hacerlo a través del móvil.

Sin embargo, estos gadgets también han generado una comunidad alrededor que llevan un tiempo desarrollando librerías y aplicaciones no oficiales que permiten sacarle todo el partido que tienen. Con la ayuda de algunas aplicaciones me he montado un pequeño sistema para controlar mi dispositivo Wemo con la voz (en realidad mi idea es tener al menos 4 para controlar todas las lámparas de mi salón). Por si a alguien le sirviera en el futuro, detallo a continuación cómo hacerlo.

Móntate un servidor en tu casa con Ouimeaux

Aunque hay otras soluciones mucho más sencillas (como la que proponen aquí usando la app ITTT), es cierto que hacer uso de aplicaciones web externas enlentece un proceso que, si de verdad queremos que sea cómodo de usar, debería ser casi inmediato.
Por eso he decidido instalarme la aplicación Ouimeaux en mi ordenador local para hacer uso del servidor que trae de serie con el que podrás controlar tus dispositivos Wemo. Ouimeaux está escrito en Python y en teoría es tan fácil de instalar como hacer un

$ pip install ouimeaux

o un

$ easy_install ouimeaux

Sin embargo Ouimeaux hace uso de algunos módulos (gevent y greenlet) que en mi caso tuve que compilar porque no encontraba binarios para Mac OS (en estos momentos es cuando más se echa de menos una buena Debian con sus buenos repositorios).
Una vez instalado, Ouimeaux te ofrece, entre muchas otras cosas, un servidor web que puedes ejecutar desde consola con

$ wemo server

Ouimeaux web
Ouimeaux desde un iPhone

Este servidor web puede ser accedido desde cualquier navegador web de cualquier dispositivo conectado a tu router, tan solo escribiendo en la barra de direcciones la dirección interna y puerto de tu servidor. Una vez accedes, una web muestra un interruptor por cada dispositivo wemo conectado a tu red y la posibilidad de activar o desactivar cualquiera de ellos con tan sólo una pulsación.
Sin embargo, la característica más atractiva de Ouimeaux para mi propósito es que su servidor web incluye una API REST que nos permitirá activar o desactivar un dispositivo con una sóla petición POST, de manera que escribiendo en consola

$ curl -X POST http://IP:PUERTO/api/device/LAMPARA?state=on

podrías encender el dispositivo llamado LAMPARA realizando la petición a tu servidor IP a través del puerto PUERTO. Ya sólo tenemos que configurar nuestro móvil Android para hacer esta llamada de una manera cómoda.

Tasker, Xposed y Sl4a para Android, tus mejores amigos

Tasker Logo

Para conseguir activar y desactivar el dispositivo Wemo de forma fácil y rápida con el móvil, he echado mano de un buen puñado de herramientas.

La principal de ellas se llama Tasker, que es una app para Android para automatizar la ejecución de listas de tareas (tasks) cuando se den una serie de condiciones. Por ejemplo, podrías configurar la app para que cuando tu móvil se conecte al bluetooth del coche, se encienda el gps, se apague el wifi, se ejecute Spotify, etc etc.

Tasker
Profiles en Tasker

Las posibilidades de Tasker son infinitas, pues además admite multitud de plugins. No voy a entrar mucho más en detalles, entre otras cosas porque el mundo de Tasker da para otro artículo completo. Si quieres más información, échale un vistazo a la comunidad de Google + de Tasker y te sorprenderás de lo que esta app puede llegar a hacer.

Para lo que yo he utilizado Tasker es para crear un perfil (condición) consistente en un comando de voz, de forma que cuando se capture el comando “light“, se ejecute una tarea a la que he llamado Toggle Light. Como Tasker no tiene reconocimiento de voz de manera nativa, he hecho uso de Autovoice, otra app que sirve de plugin y que te permite personalizar el comando de voz que quieres que dispare el perfil. Además, para la integración con Google Now (y así poder usar el comando desde el propio Google Search) he instalado un módulo de Xposed Framework llamado Google Search API.
El siguiente videotutorial explica (mejor que yo) cómo hacer que se dispare la tarea que quieras con un comando de voz.

Para crear la tarea que Tasker debe ejecutar cuando se dispare la condición he tirado de otro par de herramientas:

  • Por un lado, necesitamos la habilidad de ejecutar shell scripts con Tasker. Sl4a (Script Layer for Android) es una app para Android que permite ejecutar scripts escritos en un puñado de lenguajes. Además, también incluye un plugin para Tasker.
  • Android no trae de serie el comando CURL. Sin embargo, hay una versión en binario para Android de CURL que puedes descargar desde la página oficial. Sólo tienes que colocarlo en /System/bin y darle permisos de ejecución con cualquier consola para Android.

Con estas dos herramientas, ya sólo tenemos que crear un fichero .sh y meterlo en la carpeta /sdcard/sl4a. El contenido de este script será la llamada al servidor web que configuramos anteriormente. Por ejemplo:

#!/bin/bash
curl -X POST http://192.168.1.2:9595/api/device/LAMPARA?state=toggle

El script a ejecutar podría incluso utilizar ssh para ejecutar el comando curl desde una sesión remota, una cosa así:

#!/bin/bash
ssh -i id_rsa_name usuario@192.168.1.2:9595
'curl -X POST http://localhost:9595/api/device/LAMPARA?state=toggle'

De esta forma podríamos hacer uso del cortafuegos de nuestra máquina y sólo permitir el acceso a través de ssh. Habría que crearse las claves privada y pública previamente, claro está.

Por último ya sólo tenemos que crearnos una tarea en Tasker, la llamada Toggle Light que ejecute el script. Aquí tenéis una grabación de pantalla de cómo crear una tarea que ejecute un script en Tasker.

Un pequeño ejemplo en acción

Aunque yo sólo he usado una lámpara como ejemplo, la potencia de Tasker combinada con Wemo y otras herramientas podría servir, por ejemplo, para “apagar las luces, encender el Home Cinema y la TV, poner el móvil en silencio, ejecutar XBMC y reproducir el último episodio de tu serie favorita” con tan sólo decir “Play the last episode of Game Of Thrones”. Como dije antes, las posibilidades son infinitas.

Mas información:

1 Comentario en Controla tu Wemo con la voz desde Android

  1. Avatar de Multiple Sclerosis

    Multiple Sclerosis dice:

    10/11/2014, 15:09

    Hola , muchas gracias por el articulo , muy util.

Leave a comment