Como lo mejor de todo suele ser comenzar por el principio, vamos a hablar brevemente de estos dos dispositivos que vamos a conectar.
Rovio
Se trata de un robot Wi-Fi de vídeo vigilancia. Lleva con nosotros ya 4 años y se trata de un robot de 3 ruedas omnidireccionales (puede girar 360º sobre sí mismo) que se puede mover de forma independiente por toda la casa u oficina. Posee una cámara que se activa y levanta al encenderse. Con ella se pueden grabar vídeos y complementa así las funciones de las cámaras fijas tradicionales pudiendo hacer barridos completos de las estancias.
Como tiene tecnología Wi-Fi, lo podemos conectar a la red de forma que con distintas aplicaciones lo podemos controlar desde varios dispositivos como un smartphone, una tablet o el propio ordenador.
La batería dura bastante y en caso de que detecte «punto de no retorno», si se queda sin carga, volverá a su base y se desconectará. Además es completamente programable por lo que puede realizar diversas acciones en función de las necesidades de cada usuario.
Vera Lite
Es un dispositivo que actúa como puerta de entrada (Gateway) con capacidad de red para controlar toda la domótica Z-Wave en el hogar. En este caso es importante remarcar que no tiene Wi-Fi. La principal ventaja es que también nos podemos conectar desde cualquier dispositivo a través de Internet y controlar todo nuestro hogar de forma muy sencilla. Además de ofrecer este control, es una excelente herramienta de ahorro de energía en el que podemos programar diversas escenas que ayuden a ser más eficientes. Más información sobre Vera Lite.
Pasarela Vera-Rovio Beta
Para la instalación y descripción de este dispositivo utilizaremos la pasarela VERA-Rovio Beta.
Para ello se detallará el proceso de creación de un dispositivo en el Gateway comercial Vera 2, orientado a controlar e integrar el robot de servicio Rovio en un entorno domótico basado en dispositivos Z-Wave y describir las funcionalidades de control de Rovio que han sido implementadas en esta pasarela.
Creación de un dispositivo en Vera
Es importante saber que a la hora de crear un dispositivo en Vera, su procedimiento es genérico, por lo tanto es válido para la creación e integración de cualquier dispositivo en esta, no siendo por tanto exclusivo para el plugin de Rovio.
Para ello se deberá proporcionar a Vera, al menos, tres ficheros XML. Los dos primeros corresponden a la descripción del dispositivo uPnP y a la descripción de los servicios de dicho dispositivo (recordemos que Vera utiliza un modelo interno uPnP para todos sus dispositivos, sean estos realmente dispositivos uPnP o de cualquier otra naturaleza). El tercer fichero que Vera necesita sería la implementación misma de los servicios, en lenguaje LUUP (Lua uPnP), la cual debe estar igualmente encapsulada en un fichero XML, usando un etiquetado específico para el código con el que el motor Lua uPnP es capaz de trabajar. La implementación corresponde al código que, en última instancia, será ejecutado por el motor LUUP para realizar a cabo las acciones definidas y trabajar con las variables de estado.Existe un cuarto fichero, de inclusión opcional, en formato JSON, que desarrolla la interfaz gráfica del dispositivo en Vera, es decir, la forma en que el usuario podrá trabajar de forma gráfica con el dispositivo, así como disponer de campos modificables por el usuario, que alteren el valor de las variables del dispositivo. Este fichero llevará etiquetas específicas para crear diferentes elementos y relacionarlos con variables y acciones de los dispositivos, o incluso se permite referenciar código Javascript para crear una interfaz de control con más capacidades.
Una vez preparados los ficheros XML se accede a la interfaz web de Vera (UI5), seleccionando el menú APPS. Una vez allí, se entra en el submenú “Develop Apps”. En primer lugar se suben los tres ficheros comentados, para lo cual, desde “Develop Apps”, se selecciona “Luup Files”. Desde este submenú se tendra una vista de los diferentes ficheros XML de los dispositivos previamente instalados en el sistema (descripciones de dispositivo, de servicio e implementaciones LUUP, así como los ficheros JSON de las interfaces gráficas de los dispositivos).
Los ficheros se encuentran en dos carpetas concretas del sistema de ficheros de Vera:
- /etc/cmh-lu: Contiene los XML y JSON de dispositivos que nativamente vienen instalados con la distribución de Vera.
- /etc/cmh-ludl: Contiene los XML y JSON que el usuario ha instalado en el sistema.
Desde este menú se permite la visualización y la descarga de los ficheros instalados. También se puede observar la subsección “Upload Files” en el marco derecho de la interfaz, que nos permite cargar hasta un máximo de 10 ficheros de forma simultánea en el sistema.En este punto se indica a Vera qué ficheros se quieren cargar en el sistema. Posteriormente, se marca el checkbox en “Restart Luup after upload” (que reiniciará el motor de LUUP tras la carga de los ficheros, paso necesario para que estos sean tenidos en cuenta por el sistema), y finalmente hacer clic en GO. Los ficheros se suben al sistema de ficheros de Vera, tras lo cual el motor Luup se reinicia, mostrando en el marco superior de la interfaz web un mensaje que indica que el servidor está ocupado debido al reinicio. Con el paso de unos minutos, los ficheros están subidos en la plataforma, y el sistema se encuentra operativo de nuevo.
El siguiente paso es la creación misma del nuevo dispositivo. Con este fin cliquea sobre “Create Device” (también dentro de la sección Develop Apps, al igual que “Luup Files”).Vera presentar un formulario donde es necesario rellenar una serie de campos, personalizándolos en función del dispositivo, siendo algunos campos opcionales. Los parámetros solicitados son los siguientes:
- Device Type: En este parámetro se necesita introducir el tipo de dispositivo UPnP que se está creando, tal cual aparece en el fichero XML de la descripción del dispositivo. En el caso de nuestro dispositivo Rovio se introduciría lo siguiente: urn:schemas-upnp-org:device:Rovio:1
- Internal ID: Se ignora este campo, no siendo relevante para nuestra integración.
- Description: Se trata de un nombre descriptivo para identificar el dispositivo en la interfaz gráfica. Por ejemplo: Rovio.
- UPnP device filename: Se refiere al fichero XML que contiene la descripción del dispositivo, que debe estar subido previamente a la plataforma, mediante el paso de carga descrito en la sección previa (Upload files). Por convención, los ficheros XML de descripción de dispositivo se nombran de la siguiente forma: D_<nombre>.xml.Por tanto, para el caso de nuestro dispositivo Rovio, lo hemos llamado D_Rovio.xml.
Se introduce el nombre del fichero XML sin ningún tipo de ruta o path del sistema de ficheros, ya que Vera conoce la ubicación de los ficheros que el usuario ha cargado, como se comentó previamente.
- UPnP implementation filename: Se refiere al fichero XML que contiene la implementación de los servicios descritos en el fichero de descripción de servicios. De la misma forma, por convención, llamaríamos al fichero I_Rovio.xml (este fichero también fue subido a Vera en la sección previa).
- IP Address: Dirección IP del dispositivo que se está creando, en caso de tener una. En nuestro caso particular, introduciríamos la dirección IP que esté usando Rovio.
- MAC Address: No es estrictamente necesario, pero introducimos la MAC address de la tarjeta de red de Rovio.
- Room: La habitación donde queramos que Vera ubique el dispositivo Rovio a nivel lógico con fines organizativos.
- Parent Device: Ignoramos este campo, pues Rovio no sería un dispositivo hijo de un segundo dispositivo del cual dependa.
Los únicos ficheros solicitados son la descripción del dispositivo y el fichero de implementación. Esto se debe a que los demás ficheros son referenciados directamente en el XML de descripción del dispositivo, en nuestro caso D_Rovio.xml, no siendo necesario, por tanto, incluirlos manualmente a la hora de creación del dispositivo. No obstante, estos ficheros deben haber sido subidos previamente como se indica en el paso anterior.Al igual que con los demás ficheros XML, el fichero de descripción del servicio tiene una nomenclatura por convención: S_<nombre>.xml. Para la integración de nuestro dispositivo Rovio usamos el nombre S_Rovio.xml. De la misma forma, el fichero JSON se llama por convención D_<nombre>.json, siendo en el caso que estudiamos, por tanto, D_Rovio.json. Estas convenciones en la nomenclatura de los 4 ficheros son únicamente por motivos de legibilidad y sencillez, siendo absolutamente opcional, aunque altamente recomendable.
Una vez completados los campos, se procede finalmente a clicar en Create Device, creándose el dispositivo a partir de los datos proporcionados. Se reinicia el motor LUUP, tras lo cual se tendrá el dispositivo disponible en la interfaz gráfica de Vera, junto al resto de los dispositivos.
Descripción del Plugin Rovio para Vera
La pasarela desarrollada permitirá controlar Rovio desde la interfaz web de Vera. A través del fichero JSON se ha creado una interfaz gráfica de control que se presenta sobre la interfaz web de Vera (en este caso en su versión UI5). La hemos llamado Rovio UI y presenta el siguiente aspecto:
En la zona superior izquierda de la interfaz disponemos de una botonera para el desplazamiento de Rovio en las diferentes direcciones del espacio, Adelante, Atrás, Izquierda, Derecha (con sus respectivas diagonales) así como la rotación del robot en sentidos horario y antihorario. Se ha añadido un campo de velocidad, en el cual se puede modificar la velocidad a la que Rovio se desplaza cuando éste se está controlando de forma manual. Estos valores se pueden modificar del 1 a 10, dando el valor deseado y clicando en SET.
Por otra parte, en la zona superior derecha tenemos acceso a la cámara de Rovio, que toma instantáneas periódicas de la imagen que éste obtiene a través de su cámara.Para el uso en entornos de escasa iluminación Rovio incorpora adicionalmente un botón destinado al encendido y apagado alternativo de la luz blanca.También incorporamos un botón para ordenar a Rovio el regreso a su base de recarga.Otra funcionalidad que hemos implementado es la selección de la altura de la cámara con sus 3 selecciones posibles (posiciones alta, media y baja), cada una de las cuales tiene su correspondiente botón en la interfaz.
Por último, se ha implementado una función de movimiento compuesto, a través de un campo en el que introduciremos una serie de elementos, separándolos por el carácter “Espacio”. Cada elemento constará de una letra que indicará la dirección de movimiento, seguido de un número que expresa el tiempo en milisegundos de duración del movimiento. Un ejemplo de movimiento compuesto válido sería el siguiente:
Cadena: F5000 R2000 B1600 L2000 (y pulsamos en GO!)
En este caso estaríamos ordenando a Rovio avanzar durante 5 segundos, tras lo cual se desplazará hacia la derecha durante 2 segundos, posteriormente hacia atrás durante 1.6 segundos, y finalmente hacia la izquierda durante 2 segundos.
Las posibles direcciones implementadas hasta el momento son las siguientes:
F – Forward. Movimiento hacia delante.
B – Backwards. Movimiento de retroceso.
R – Right. Desplazamiento hacia la derecha.
L – Left. Desplazamiento hacia la izquierda.
Z – Rotación en sentido antihorario.
X – Rotación en sentido horario.
Integración del plugin de Rovio con los dispositivos Z-Wave de Vera
Hasta ahora hemos visto únicamente la posibilidad de controlar manualmente el robot de servicio Rovio mediante una interfaz de control manual que hemos creado en Vera para dicho dispositivo. Pero lo más interesante de esta implementación es la integración completa del robot de servicio en el Gateway Vera y así poder invocar las capacidades del robot desde Vera mediante escenas, eventos y otras programaciones que dependan de información de ambiente proporcionada por otros dispositivos controlados por Vera, como pueden ser, por ejemplo, sensores de diferente naturaleza que funcionen sobre protocolo Z-Wave. De esta forma estamos integrando el robot de servicio en nuestro entorno domótico.
A modo de ejemplo, podemos programar una escena que ejecute una orden de movimiento compuesto en Rovio como consecuencia de la apertura de una puerta, o de la activación de un sensor de movimiento.Esto nos permitiría, por ejemplo, enviar a Rovio a investigar un acontecimiento que se ha producido en la ubicación de un sensor determinado, tomar una instantánea y enviarla por correo a un destino determinado.
En la imagen se puede observar que una vez que tenemos Rovio como dispositivo en Vera, podemos disponer de sus acciones en la sección Advanced de la programación de la escena pudiendo programar, por tanto, tal como se dijo antes, una cadena compleja de movimientos (usando en este caso la función Perform Complex Move implementada en el plugin). Este mismo razonamiento se aplica para cualquier acción de cualquier servicio del dispositivo. Posteriormente podríamos invocar estas acciones configurando un Trigger (por ejemplo, la apertura de una puerta o un calendario).
Generación de la interfaz uPnP para el dispositivo
Otro aspecto muy interesante de la creación del dispositivo en Vera radica en el hecho de que Vera actúa como Gateway universal uPnP, creando una interfaz uPnP para el dispositivo Rovio desde el mismo instante de la creación de dicho dispositivo en Vera.
De esta forma, desde cualquier dispositivo externo que hable uPnP, podemos descubrir e invocar todas las capacidades de Rovio que están implementadas en el plugin, atacando directamente a Vera por esta interfaz uPnP.
En la imagen se puede apreciar como desde la aplicación DeviceSpy hemos descubierto la interfaz uPnP de nuestro dispositivo MIOS. Dentro de la misma podemos encontrar las acciones uPnP tanto de los dispostivo Z-Wave, como de las escenas definidas en Vera y, como comentábamos anteriormente, de nuestro plugin para Rovio. En concreto hemos desplegado la rama de los movimientos de Rovio y seleccionamos invocar la función implementada destinada a ejecutar movimientos complejos encadenados (Perform Complex Move), a la que le pasaríamos como parámetro la cadena de movimientos que necesitemos ejecutar.
Vera permite que estas mismas acciones sean invocadas mediante simples peticiones HTTP, sin necesidad de usar el stack uPnP.
Si estás interesado en los ficheros para probarlos, puedes enviar un e-mail a info@domoticadavinci.com y te los facilitaremos.
Autoría del Plugin
El autor de este interesante plugin es Sergio Reyes de Cózar de la Universidad de Sevilla.
Hola, felicidades por su sitio muy buen contenido, en estos momentos estoy disfrutando de las comodidades de la domotica con Mi casa verde con Vera. y suena fabuloso poder usar el rovio con este plug ing me gustaria probar esos archivos !! donde puedo conseguirlos!. Saludos