¿Qué es upBox?

UpBox es una implementación modular de domótica. Esta es una solución a los siguientes problemas detectados en esta área:

Costos de implementación

Las soluciones de domótica hoy en día tienen un precio muy elevado para implementarlos en casas no preparadas para esta teconlogía. También existen casas que se venden completamente equipadas, con elementos que probablemente el usuario no desee ocupar.

Dificultad de manipulación

Existen en la actualidad ciertos componentes económicos en el mercado para interactuar con la vivienda, pero estos son complicados de manipular para aquellas personas no relacionadas con la tecnología.

Diversidad de interfaces

Cada dispositivo disponible en el mercado son manipulados a través de diferentes tipos de canales de comunicación (Bluetooth, Ethernet, WiFi, etc). Esto dificulta la centralización de datos para el usuario, ya que debe contar con el conocimiento necesario para saber cómo conectar cada dispositivo.

Solución propuesta

Entendiendo las dificultades de la tecnología actual, la solución se centra en estos tres objetivos:

Comunicación distribuida

Se crea un sistema de comunicación distribuida para los componentes.

Unificación de interfases

Todos los módulos son manipulados a través de una o varias páginas web, todas con el mismo formato de interfaz, de modo que no habrá diferencias en la interfaz de usuario entre manipular un módulo o una central con muchos módulos.

Simplificación de funcionamiento

El usuario tendrá que realizar configuraciones mínimas al integrar un nuevo módulo en su hogar.

Modelo de Implementación

upBox se basa en el pardigma de Orientación a Objetos. Cada módulo es una clase que se conectan a través de interfaces. Además, los periféricos se virtualizan en el módulo para dar acceso a su manipulación independiente del tipo de periférico (sensor o actuador).

Las conexiones entre periféricos y módulos se realizan utilizando serial, mientras que los módulos se interconectan a través de puertos Socket y mandando mensajes a través de notación JSON.

Ejemplo de implementación

En este ejemplo de implementación, se utilizan 3 tipos de periféricos: 2 son sensores y 1 es actuador. Un módulo se encarga de traspasar los datos de estos periféricos a una aplicación web, además de enviar los comandos ingresados en ésta a los periféricos correspondientes.

Lenguajes involucrados

Los módulos y periféricos pueden estar escritos en todo tipo de lenguaje. En el eemostración de implementación, se utilizan los siguientes.

Periféricos:

Cada periférico es programado en su propio lenguaje. Ejemplos de periféricos pueden ser Arduino, placas personalizadas, Raspberry PI, entre otros.

Módulos:

En los módulos se utilizó C++, incluyendo librerías necesarias para el trabajo con JSON y Socket.

Webapp:

La implementación del servidor se basa en Python, además de los lenguajes HTML, CSS y JavaScript utilizados en las páginas.

Sistema orientado a objetos

Por la naturaleza del sistema, upBox utiliza el paradigma orientado a objetos. Se puede mostrar una utilización del paradigma en la virtualización de los periféricos en el módulo.

En este diagrama, el módulo cada cierto intervalo toma la forma del objeto "Sensor de temperatura", luego el de "Control de Luz" y después el de un "Actuador".

Demonio

ModDev es una clase virtual que trabaja dentro del demonio que pide datos y asigna valores a sus periféricos.

Este demonio se encarga de mantener en servicio los datos obtenidos desde ModDev y a la espera de comandos desde algún otro Módulo o Aplicación que solicite datos. Para ello, mantiene habilitado un Socket permanente, a la espera de instrucción.

Caso de Uso

El siguiente es el caso de uso en que el dueño desea disminuir la iluminación de su casa en un 50%.

Actor Sistema
1.- El Dueño entra a la página principal 2.- Webapp recibe solicitud, conectándose con los módulos
3.- Módulos entregan a webapp estado de sus periféricos,
enviando datos a la interfaz cliente
4.- El Dueño selecciona el periférico que
regula la iluminación
5.- Webapp despliega en pantalla el estado actual del periférico
6.- El Dueño regula la intensidad, dismunuyéndola a 50% 7.- Webapp envía señal de control al módulo con los datos para
que el periférico disminuya su intensidad en 50%

Demostración de uso

Hemos dejado en repositorio GitHub un ejemplo de implementación de upBox:
https://github.com/px2ec/upbox_demo1_POO141

El modelo implementado es el siguiente:

Explicación: "Componente" es un periférico cualquiera; "Demonio" hace referencia al módulo que sirve de interfaz entre la WebApp y los componentes; "WebApp" es un servidor web que recibe los datos del módulo vía socket y los muestra en un navegador de forma intuitiva y fácil de manejar; "Terminal" puede ser un computador o dispositivo móvil que se conecte al servidor mediante un navegador o una aplicación.