Evaluación de Middlewares Sensibles al Contexto

76
Universidad ORT Uruguay Facultad de Ingeniería Evaluación de Middlewares Sensibles al Contexto Entregado como requisito para la obtención del título de Licenciatura en Ingeniería de Software. Mateus Würth - 147799 Tutor: Santiago Matalonga 2015

Transcript of Evaluación de Middlewares Sensibles al Contexto

Page 1: Evaluación de Middlewares Sensibles al Contexto

Universidad ORT Uruguay

Facultad de Ingeniería

Evaluación de Middlewares Sensibles al

Contexto

Entregado como requisito para la obtención del título

de Licenciatura en Ingeniería de Software.

Mateus Würth - 147799

Tutor: Santiago Matalonga

2015

Page 2: Evaluación de Middlewares Sensibles al Contexto

2

Declaración de autoría

Yo, Mateus Würth, declaro que el trabajo que se presenta en esta obra es de mi propia mano. Puedo

asegurar que:

La obra fue producida en su totalidad mientras realizaba el proyecto de Licenciatura de

Ingeniería de Software;

Cuando he consultado el trabajo publicado por otros, lo he atribuido con claridad;

Cuando he citado obras de otros, he indicado las fuentes. Con excepción de estas citas, la

obra es enteramente mía;

En la obra, he acusado recibo de las ayudas recibidas;

Cuando la obra se basa en trabajo realizado conjuntamente con otros, he explicado

claramente qué fue contribuido por otros, y qué fue contribuido por mí;

Ninguna parte de este trabajo ha sido publicada previamente a su entrega, excepto donde

se han realizado las aclaraciones correspondientes.

XMateus Wurth

Autor

Fecha: 03/02/2015

Page 3: Evaluación de Middlewares Sensibles al Contexto

3

Agradecimientos

Me gustaría comenzar por las personas que hicieron posible la presentación de este trabajo. Desde

principios del año 2014 retome la actividad estudiantil, concurriendo a la facultad con el objetivo de

finalizar lo que en el año 2008 comencé. Las razones son variadas por las cuales en su momento

tuve que abandonar la carrera. Frente a la oportunidad de retomar en el año 2014 concurrí a la

universidad para informarme del estado en el que me encontraba académicamente y además volver

a dictar clases como docente. En ese momento tuve un apoyo muy grande de Patricia Corbo la cual

me impulso y ayudo a concretar todo lo que necesite. Además de motivarme a seguir en la búsqueda

e investigación de tecnologías como Arduino y Raspberry Pi (las cuales eran de gran interés para mí

y fueron utilizadas en este proyecto). Por todo esto con especial énfasis quería agradecerle todo el

tiempo que me dedico.

En segundo lugar quería agradecerles a Martin Solari y Nora Szasz, las personas que lograron

coordinar este proyecto para que fuera de interés de la facultad y mío.

Además quiero agradecerles también a aquellas personas que durante el proceso de la elaboración

del trabajo colaboraron con el desarrollo del mismo.

En primer lugar, agradezco a Santiago Matalonga como tutor, quien me apoyo en el transcurso del

proyecto y me brindo su experiencia y conocimiento para finalizar este trabajo.

En segundo lugar al grupo del Freedomotic, los cuales me ayudaron a solucionar problemas del

framework, luego de informarlos de funcionalidades que no realizaban lo esperado.

Finalmente a toda mi familia, con especial énfasis a mi esposa e hija las cuales me acompañaron en

todo el proceso.

Muchas gracias a todos.

Page 4: Evaluación de Middlewares Sensibles al Contexto

4

Abstract

Los objetivos principales de este trabajo son identificar y clasificar los principales middlewares

sensibles al contexto, con la intención de profundizar en su análisis. Para cumplir dichos objetivos,

se han utilizado como marco teórico, tesis de carreras y publicaciones internacionales que, no solo

contemplan el desarrollo tecnológico, sino también el impacto en los vínculos sociales y culturales.

Una de las principales motivaciones que promueve la realización de esta investigación, es la

creciente demanda de usuarios con la necesidad de recolectar información de su entorno.

La sensibilidad al contexto busca comprender la situación de un usuario con su entorno y permite

tomar decisiones autónomas o no, para proporcionarle una experiencia de alta calidad al mismo.

Incorporando dicha sensibilidad a aplicaciones y servicios computacionales, se logra identificar y

reaccionar al estado de las variables del contexto del mismo.

Las principales tecnologías de software que se utilizaron fueron Android, Arduino y Java,

construyendo además un prototipo de hardware que permite realizar las pruebas sobre todos los

middlewares evaluados.

Con el prototipo de hardware desarrollado se logra definir un marco común de estudio para todos

los middlewares, obteniendo como consecuencia reportes con los resultados obtenidos de la prueba

de dichos componentes. En particular el caso de estudio que se analiza brinda la funcionalidad de

encender o apagar cualquier dispositivo electrónico (en el caso del proyecto una fuente de luz),

tomando como contexto la proximidad del usuario.

Profundizando aún más en el concepto de middleware sensibles al contexto, se presentan formas de

recolección de datos desde el ambiente y desde otros orígenes.

Luego de realizar el análisis y evaluación de estos middlewares se lograron observar avances en el

campo de los middlewares sensibles al contexto, aunque considero que aún no se encuentra lo

suficientemente maduro para poder integrarlos en aplicaciones comerciales. Esto es debido a que

para intentar lograr dicha integración se realizaron cambios sobre el software que originalmente se

obtuvo, obteniendo en algunos casos resultados positivos y en otros negativos.

Page 5: Evaluación de Middlewares Sensibles al Contexto

5

Palabras clave:

Context Aware

Middleware

Arduino

Middlewares sensibles al contexto

Page 6: Evaluación de Middlewares Sensibles al Contexto

6

Índice:

1. Análisis de Middlewares Sensibles al Contexto ......................................................... 9

1.1 Introducción a los Middlewares Sensibles al Contexto:.......................................... 9

1.2 Objetivos principales ............................................................................................. 10

1.3 Metodología de trabajo:......................................................................................... 10

1.4 Organización de este documento:.......................................................................... 11

2. Resumen de Investigación en Aplicaciones Sensibles al Contexto ........................... 13

2.1 Aplicaciones sensibles al contexto ........................................................................ 13

2.2 Arquitectura de aplicaciones y middlewares sensibles al contexto ....................... 14

2.3 Servidor de Contexto (Context Server): ................................................................ 14

3. Arduino........................................................................................................................ 16

3.1 Evaluación RSCM ................................................................................................. 33

3.1 Introducción:.......................................................................................................... 16

3.2 Obtención Información de su entorno: .................................................................. 16

3.3 Comando Importantes del Leguaje:....................................................................... 16

3.4 Secciones De Programación en Arduino .............................................................. 17

4. Descripción de los Middlewares Encontrados ............................................................ 18

4.1 Proceso de Identificación de Búsqueda. ................................................................ 18

4.1 RSCM .................................................................................................................... 18

4.1.1 Principales componentes de RSCM .................................................................. 18

4.1.2 Arquitectura ........................................................................................................ 19

4.2 FreeDomotic .......................................................................................................... 20

4.2.1 Principales componentes .................................................................................... 20

4.2.2 Características adicionales.................................................................................. 20

4.2.3 Arquitectura ........................................................................................................ 21

4.2.4 Proceso de funcionamiento................................................................................. 22

4.3 Msense....................................................................................................................... 23

4.3.1 Nodos de sensores de bajo nivel actuales:.......................................................... 23

4.3.2 Nodos de sensores de alto nivel.......................................................................... 24

4.3.3 Arquitectura ........................................................................................................ 24

4.4 LOCCAM .................................................................................................................. 25

4.4.1 Principales Componentes: .................................................................................. 25

5. Evaluación: .................................................................................................................. 27

5.1 Criterios de selección para la evaluación ............................................................. 27

5.1.1 Criterios que clasificaron en la categoría 1 ........................................................ 28

5.1.2 Criterios que clasificaron en la categoría 2 y 3 .................................................. 28

5.1.3 Criterios que clasificaron en la categoría 4 ........................................................ 28

5.2 Descripción de los criterios: .................................................................................. 28

Page 7: Evaluación de Middlewares Sensibles al Contexto

7

5.3 Puntajes asignados a los criterios: ......................................................................... 29

5.4 Evaluación de los Middlewares sensibles al contexto seleccionado ..................... 31

5.4.1 Evaluación RSCM .............................................................................................. 31

5.4.2 Evaluación FreeDomotic .................................................................................... 32

5.4.3 Evaluación mSense............................................................................................. 32

5.4.4 Evaluación Loccam ............................................................................................ 33

5.5 Comparación de puntajes ...................................................................................... 34

6. Fase Experimental: ...................................................................................................... 35

6.1. Plan de Trabajo ..................................................................................................... 35

6.1.1 Definición del caso de estudio............................................................................ 35

6.1.2 Objetivos: .......................................................................................................... 35

6.2 Circuito Integrado de 2 Reles + Transistores + Leds ........................................... 36

6.3 Descripción del diagrama del circuito electrónico: ............................................... 37

6.4 Principales componentes del circuito: ................................................................... 37

6.4.1 Forma de Interconectar los anteriores componentes: ......................................... 37

6.5 Descripción de los componentes utilizados........................................................... 38

7. Implementación de los casos de estudio: .................................................................... 40

7.1 Java + Arduino ...................................................................................................... 40

7.1.1 Descripción:........................................................................................................ 40

7.1.2 Programando el micro controlador: .................................................................... 41

7.1.3 Resultados : ........................................................................................................ 43

7.1.4 Prueba del caso de estudio con la aplicación Java ............................................. 44

7.2 RSCM +Arduino ................................................................................................... 45

7.2.1 Descripción ......................................................................................................... 45

7.2.1 Medidas de mitigación de errores: ..................................................................... 48

7.2.1.2 Creación del contexto ...................................................................................... 45

7.2.2 Configuración + Programación .......................................................................... 45

7.2.2.1 Proceso de instalación ..................................................................................... 45

7.2.2.3 Programando el contexto ................................................................................. 46

7.2.2.4 Programando el sensor .................................................................................... 46

7.2.3 Resultados........................................................................................................... 48

7.3 FreeDomotic + Arduino ........................................................................................ 50

7.3.1 Descripción:........................................................................................................ 50

7.3.2 Configuración + Programación: ......................................................................... 51

7.3.2. Resultados: ........................................................................................................ 53

7.3.2.1 Configuración de Freedomotic ........................................................................ 51

7.3.2.3 Programando Arduino ..................................................................................... 52

7.4 mSense +Arduino .................................................................................................. 54

7.5 LOCCAM +Arduino ............................................................................................. 54

7.5.1 Descripción ......................................................................................................... 54

7.5.2 Configuración ..................................................................................................... 54

Page 8: Evaluación de Middlewares Sensibles al Contexto

8

8. Conclusiones ............................................................................................................... 56

9. Bibliografía: ................................................................................................................ 58

10. Anexos....................................................................................................................... 60

10.1 Instalación de Maven :......................................................................................... 60

10.10 Controlar flujo de corriente eléctrica:................................................................ 75

10.2 Guía de Instalación de FreeDomotic: .................................................................. 63

10.3 Configuración de FreeDomotic Con Arduino .................................................... 65

10.4 Circuito detallado del hardware para el caso de estudio ..................................... 69

10.5 Wheather Undergound......................................................................................... 70

10.6 Localización de Celulares: .................................................................................. 72

10.7 Medir Temperatura con Arduino ......................................................................... 72

10.8 Censar Movimiento con Arduino: ....................................................................... 73

10.9 Medición de Distancia con Arduino:................................................................... 74

Page 9: Evaluación de Middlewares Sensibles al Contexto

9

1. Evaluación de Middlewares Sensibles al Contexto

A continuación se presentan características generales del trabajo.

1.1 Introducción a los Middlewares Sensibles al Contexto

En respuesta a la sensibilidad al contexto se busca entender la situación de un usuario y así poder

proporcionarle una experiencia de alta calidad. Con el fin de obtener mejores resultados se busca

identificar y establecer cuáles son las variables que forman parte de dicho entorno.

Las aplicaciones sensibles al contexto consiguen dichos objetivos mediante el uso de servicios que

remotamente brindan información del entorno de ejecución de otros sistemas, así como también de

sensores que la brindan localmente. Dependiendo de las metas que posea cada usuario con dicha

aplicación, cada acción genera una reacción. Para que el usuario detecte dicha reacción, el sistema

pasa por tres etapas. La primera es la recolección de datos, esta implica la utilización de sensores

(Locales o no). La segunda es el procesamiento de la información, donde se interpretan los datos de

la etapa anterior y se notifica a los actores miembros de la tercera etapa, los cuales hacen visible

todo el proceso (reacción).

Uno de los problemas que surge cuando se incorporan estas aplicaciones a dispositivos móviles, es

el procesamiento limitado que muchos poseen en la actualidad, ya que sin la aparición de otro

componente intermedio todo el procesamiento se realiza en dicho dispositivo. Con el objetivo de

aliviar este problema y brindarle escalabilidad a todo el proceso, surgen los middlewares sensibles

al contexto. Dichos middlewares continúan utilizando como un componente principal los

recolectores, pero incorporan a la solución razonadores (en la etapa de procesamiento) que

determinen la forma de actuar luego de recopilada la información. Estos razonadores le brindan a la

solución una estructura genérica para extender el sistema y su comportamiento. Para que posean un

buen funcionamiento se añade cierto grado de inteligencia artificial, que ayude a tomar la mejor

decisión dependiendo del todo el entorno.

El presente trabajo se centra en la evaluación de middlewares sensibles al contexto entendiendo

como middleware; “Un software de conectividad que ofrece un conjunto de servicios que hacen

posible el funcionamiento de aplicaciones distribuidas sobre plataformas heterogéneas. Funciona

como una capa de abstracción de software distribuida, que se sitúa entre las capas de aplicaciones y

las capas inferiores (sistema operativo y red)”.

Gracias a los avances de tecnologías y dispositivos móviles, se espera poder disminuir la sobrecarga

de procesamiento que estos empiezan a tener, brindando al usuario las mismas funcionalidades que

podría tener desde su dispositivo preferido. Este objetivo se puede alcanzar procesando la

información y gestionando todo su procesamiento desde otro componente con mayor capacidad,

otorgando al usuario una interfaz para interactuar con dicho middleware.

Para poder evaluar estos middlewares se determinó la utilización de hardware libre. En esta ocasión

se utilizará Arduino como un medio de recolección de información, interactuando con sensores de

Page 10: Evaluación de Middlewares Sensibles al Contexto

10

distancia y movimiento, además de contar con actores como relés que permitirán encender las luces

con un comportamiento pre programado.

1.2 Objetivos principales

A continuación se detallaran los dos objetivos primordiales del proyecto:

Identificar y evaluar frameworks o middleware existentes para sistemas sensibles al

contexto.

Determinar alcance y su futura permanencia a través del tiempo.

Brindar formas de extender la recolección de información.

Crear una aplicación Java que administre el mismo caso de estudio que el de los

middlewares.

1.3 Metodología de trabajo

La metodología utilizada para completar los objetivos de este trabajo, consistió en los siguientes

pasos:

Lectura de Literatura:

Se realizó una lectura de la literatura para entender el funcionamiento de las aplicaciones

sensibles al contexto y sus principales componentes. El resumen se encuentra en el

capítulo 2.

Identificación de Middleware sensibles al contexto a evaluar:

Para realizar la búsqueda se recurrió a documentos técnicos, los cuales mencionan, en

algunos casos, trabajos de posgrado que exponen dichos middlewares. También se

indagó en foros y portales de internet.

Elaboración de criterios de evaluación:

Se determinaron los criterios más importantes para la evaluación de los middlewares,

que contemplan las principales necesidades de la sensibilidad al contexto.

Elaboración del caso de estudio:

En esta etapa se determinó que información del contexto sería importante para realizar

pruebas sobre cada middleware. Además se identificó el hardware necesario para llevar a

cabo dicho caso, con su posterior implementación.

Page 11: Evaluación de Middlewares Sensibles al Contexto

11

Realización de la evaluación:

Se intentó establecer la comunicación entre el hardware y cada middleware, con el

objetivo de realizar la prueba sobre el caso de estudio antes definido. Asimismo se

generaron reportes sobre los puntajes obtenidos en cada sección.

1.4 Organización de este documento

El documento presenta los siguientes capítulos:

Capítulo 2:

En este capítulo se introduce a los middlewares sensibles al contexto, donde se detallan

sus componentes principales y el desarrollo de metodologías para generar aplicaciones

sensibles al contexto.

Capítulo 3:

Es este capítulo se introduce a Arduino, se describen sus principales características,

comandos relevantes del entorno de programación y su estructura.

Capítulo 4:

Este capítulo describe los middlewares que se identificaron y se evaluaron, con el

objetivo de conocer sus arquitecturas y principales características.

Capítulo 5:

Este capítulo describe los criterios que se utilizaron para evaluar los middlewares

seleccionados, además se otorga el puntaje respectivo por cada sección.

Capítulo 6:

En este capítulo se describen los middlewares sensibles al contexto que se tomaron como

objeto de estudio.

Capítulo 7:

Este capítulo se describe la implantación e incorporación de circuitos importantes del

objeto de estudio. Así mismo se da una descripción de la aplicación desarrollada.

Capítulo 8:

Este capítulo desarrolla las conclusiones del trabajo.

Capítulo 9:

Bibliografía

Page 12: Evaluación de Middlewares Sensibles al Contexto

12

Capítulo 10:

Este capítulo posee los anexos del trabajo.

Page 13: Evaluación de Middlewares Sensibles al Contexto

13

2. Resumen de investigación en aplicaciones sensibles al contexto

A continuación se presenta un resumen de las aplicaciones sensibles al contexto.

2.1 Aplicaciones sensibles al contexto

Para comprender que son las aplicaciones sensibles al contexto, en primer lugar se debe definir qué

se concibe por contexto en el marco de estas aplicaciones. Se entiende por contexto al entorno que

rodea a una entidad, siendo esta una persona, lugar u objeto relevante para realizar su estudio.

Para profundizar aún más Dey define: “Un sistema es sensible al contexto si se utiliza para

proporcionar información y / o servicios relevantes para el usuario, donde la relevancia depende de

la tarea del usuario” [1].

Si bien el contexto de cada persona puede ser diferente debido a las necesidades que estos posean,

se pueden clasificar en los siguientes grupos:

Identidad: usuarios, necesidades.

Espacial: ubicación, orientación, velocidad.

Temporal: fecha, hora del día, la estación.

Medio Ambiente: medición de la temperatura, luz y el ruido.

Sociales: personas cercanas, actividades, calendario.

Recursos: disponibilidad, energía.

Computación: CPU, sistema operativo, memoria, interfaces.

Psicología: preferencias, emociones.

A un mayor nivel de abstracción estos grupos todos se podrían clasificar en dos grandes áreas, el

contexto interno y el externo. El interno es el que es capturado de la interacción con el usuario. El

externo que es medido por sensores ajenos al individuo.

Page 14: Evaluación de Middlewares Sensibles al Contexto

14

2.2 Arquitectura de aplicaciones y middlewares sensibles al contexto

A continuación se detalla cómo se pueden clasificar los sistemas sensibles al contexto.

2.2.1 Procesamiento directo de datos

La Imagen 2-1 muestra la estructura general de este tipo de framework.

Se recolectan los datos de los sensores y

luego, el tratamiento de los datos lo

realiza la misma aplicación. Esto genera

una sobrecarga sobre el dispositivo

donde se ejecuta la aplicación. Además

quita escalabilidad a la misma ya que no

posee un comportamiento dinámico [2].

Imagen 2-1

2.2.2 Middleware

La Imagen 2-2 muestra la estructura general de este tipo de framework.

La aplicación delega

responsabilidades al middleware

ocultando detalles de bajo nivel, que

le brindan extensibilidad y

escalabilidad a la solución, ya que no

se debe modificar la aplicación [2].

Imagen 2-2

2.2.3 Servidor de contexto (Context Server):

La Imagen 2-3 muestra las estructura

general de este tipo de framework.

Los sensores y la aplicación se comunican

directamente con el servidor para recolectar

o enviar información. Esta arquitectura

permite múltiples accesos remotos [2].

Imagen 2-3

Servidor/BD

Sensores Aplicación

Page 15: Evaluación de Middlewares Sensibles al Contexto

15

Profundizando en la arquitectura de los middlewares en la Imagen 2-4 a continuación se puede

observar el proceso por el cual se recolecta información y es procesada y transferida a todas las

aplicaciones.

Imagen 2-4 Arquitectura General de los Middlewares Sensibles al contexto [2]

Page 16: Evaluación de Middlewares Sensibles al Contexto

16

3. Arduino

3.1 Introducción

Arduino es una plataforma de hardware libre, basada

en una placa con un micro controlador que permite la

creación de diferentes proyectos de electrónica. Esta

placa posee un leguaje propietario de programación

que permite administrar todo su potencial [3].

Este micro controlador puede tomar información del

entorno a través de sus entradas analógicas y digitales,

lo cual le permite controlar luces, motores y otros

actuadores. E importante destacar que los proyectos

desarrollados con Arduino pueden ejecutarse sin necesidad de conectar a un computador. [4]

Conjugando el concepto de middleware sensible al contexto, con Arduino se logra poseer

información tanto global como local, permitiéndole tomar las mejores decisiones.

3.2 Obtención de información de su entorno

A través de conjunto de pines analógico y digitales, Arduino recolecta toda la información

necesaria, conectando periféricos y programando el comportamiento necesario en el micro

controlador

Cada pin de esta plaqueta puede ser configurado en modo OUTPUT o INPUT.

Si se determina que será de tipo OUTPUT ese pin actuará para encender dispositivos electrónicos,

motores, etc. Básicamente la plaqueta emite voltaje a través de su pin para activar algún dispositivo.

Si se determina que será de tipo INPUT ese pin podrá leer contantemente los voltajes que llegan a

él. De este modo interpretando los valores almacenados, se determina el valor del periférico.

Aclaración: Sin importar que tipo de pin sea hay que agregar la electrónica que haga falta para

poder actuar o recolectar información.

3.3 Comandos importantes del lenguaje

PinMode: Se utiliza para establecer si el pin será del tipo OUTPUT o INPUT. Por ejemplo

PinMode (5,INPUT), establece que el pin 5 de Arduino será del tipo INPUT.

DigitalWrite: Activa un pin que se encuentre configurado del modo OUTPUT.

Imagen 3-1

Page 17: Evaluación de Middlewares Sensibles al Contexto

17

DigitalRead: Lee un valor digital del pin que se le indique y retorna el valor leído del

periférico.

AnalogRead: Lee un valor analógico del pin que se le indique y retorna el valor leído del

periférico.

3.4 Secciones de programación

Sección 1: Se definen las variables y constantes que se utilizaran en el programa.

Sección 2: se determina que pines serán utilizados como INPUT y cuales como OUTPUT,

además de inicializar las variables que se consideren relevantes.

Sección 3: Para concluir Arduino funciona en un eterno loop, ejecutando el código

colocado en esta sección infinitamente. Así es que constantemente puede obtener

información constante de los sensores, así como activarlos o desactivarlos.

Esta sección es la cual controla el comportamiento de Arduino. Se caracteriza con la firma:

void loop(){}.

Page 18: Evaluación de Middlewares Sensibles al Contexto

18

4. Descripción de los middlewares encontrados

Los middlewares evaluados aquí parten de una búsqueda ad-hoc de la literatura realizada.

El punto de partida fue la identificación previa de RSCM por parte de un trabajo de investigación

del Grupo. A partir de la identificación de RSCM como un middleware, que cumplía con las

características mencionadas, se procedió a la búsqueda e identificación de otras soluciones.

Dentro de los middlewares identificados se destacan RSCM, Freedomotic, mSense y LOCCAM. A

continuación se describirán, para su posterior evaluación.

4.1 RSCM

RSCM es un middleware sensible al contexto que permite el desarrollo de aplicaciones sensibles al

contexto para Android. Esto lo logra mediante la incorporación de plugins.

Estos plugins se clasifican en sensores y razonadores de contexto. Los primeros se utilizan para

producir datos directamente desde sensores subyacentes. Los segundos típicamente requieren la

entrada de datos, lo cual significa que actúan tanto como consumidores y productores de contexto.

[5]

4.1.1 Principales componentes de RSCM

1. RSCM library

Es una librería que contiene el código necesario para para poder desarrollar aplicaciones con

RSCM. Cuando se desea implementar un nuevo plugin de este middleware es obligatorio

utilizarla ya que posee la estructura abstracta de los sensores y razonadores. Su

incorporación logra que todos los componentes del sistema puedan interactuar libremente.

Parta que forme parte del sistema debe agregarse como una librería externa al proyecto

(rscm-library.jar).

2. RSCM runtime

Consiste en un servicio que se ejecuta en segundo plano con el objetivo de facilitar y mediar

las comunicaciones entre los productores (sensores) y los consumidores de contexto

(razonadores).

Page 19: Evaluación de Middlewares Sensibles al Contexto

19

3. Context viewer

Provee de un entorno grafico en el cual se puede visualizar todos los plugins que están

conectado al runtime.

4. Plugins

RSCM provee de un conjunto limitado de plugins dentro de los cuales se identifican:

medición de batería, indicador de conexión a la corriente, localización del dispositivo móvil.

Toda la información que solicitan los plugins de este middleware se encuentran locales en el

dispositivo móvil, por lo cual aún más grande es el desafío de incorporar otras tecnologías.

[5]

4.1.2 Arquitectura

En la Imagen 4-1 a continuación se puede observar la estructura arquitectónica de RSCM. Los

principales componentes que se incorporan son los sensores, ADCs encargado de proveer

información del contexto al middleware y aplicaciones sensibles al contexto que consumen

información del middleware.

Imagen 4-1 Arquitectura de RSCM

Page 20: Evaluación de Middlewares Sensibles al Contexto

20

4.2 Freedomotic

Freedomotic es un framework libre, flexible basado en Internet of Things (IoT) usado para crear y

controlar espacios inteligentes. Su objetivo es la automatización de diferentes ambientes como

puede ser la casa u otro. Este software soporta las populares tecnologías de automatización de

edificios (por ejemplo KNX, Modbus RTU, X10), así como proyectos personalizados de

automatización. [6]

Freedomotic se encuentra actualmente en versión beta de trabajo, pero el proyecto muestra una

actividad importante, por lo que se prevé que continuará evolucionando.

4.2.1 Principales componentes

Aplicación Freedomotic:

Este es el componente principal. Se comporta como el administrador de la interacción de

todos los plugins, brindando una interfaz gráfica a través de la cual se interactúa con la casa.

A cada componente de la casa se le puede pre programar o configurar el comportamiento

deseado luego de que el usuario genere una interacción con él. El ambiente puede ser

modificado agregándole nuevos objeto que le briden al usuario mayor confort.

Plugins:

Este framework permite la utilización de no tan solo plugins que generen la sensibilidad al

contexto, sino también mayor escalabilidad en el acceso a los datos y gestión del mismo.

Esto se logra a través de plugins que son encargados de la comunicación. [7]

4.2.2 Características adicionales

Le brinda gran escalabilidad a la solución utilizando otro middleware orientado a gestionar

el intercambio de mensajes e información entre los componentes (JSON y XML, mensajes

de texto).

Multiplataforma. Freedomotic está escrito en Java por lo que se puede ejecutar en Windows,

Linux, Mac, Solaris.

Basado en eventos programables

Page 21: Evaluación de Middlewares Sensibles al Contexto

21

Modular y extensible. Freedomotic es modular y puede enriquecer sus funciones mediante

plugins. Proporcionan APIs que se distribuyen junto con el software para crear fácilmente

nuevos add-ons.

Independientes del hardware. Freedomotic permite independizarse de la infraestructura de

hardware (sensores y actuadores) con los eventos, factores desencadenantes y los comandos.

Posee un foro con repuesta rápida de problemas.

Posee errores de programación al ser una versión beta. [6]

4.2.3 Arquitectura

En la imagen 4-2 a continuación se puede observar la interacción entre los actores de Freedomotic.

Imagen 4-2 Arquitectura de Freedomotic [8]

Page 22: Evaluación de Middlewares Sensibles al Contexto

22

4.2.4 Proceso de funcionamiento

A continuación en la Imagen 4-3 se puede observar una línea de proceso de automatización con

Freedomotic.

Capas:

1- En la sección de automatización se puede reconocer eventos de usuarios, horarios y datos

del entorno que pueden hacer variar el contexto del middleware.

2- Los objetos virtuales representan a cada elemento que queremos automatizar pudiendo

cambiar su comportamiento tras reconocer la presencia de un evento. Se le incorpora el

comportamiento programando reglas que responden a estímulos de la casa.

3- Por último en este caso el plugin establece la comunicación con el hardware, con el fin de

tomar acciones de acuerdo al evento antes liberado.

Imagen 4-3 Automatización [8]

Page 23: Evaluación de Middlewares Sensibles al Contexto

23

4.3 mSense

mSense es un middleware sensible al contexto para los teléfonos móviles de gama alta basado en

Qt. Qt es una biblioteca multiplataforma ampliamente usada para desarrollar aplicaciones con o

sin interfaz gráfica de usuario [9]. Dentro del middleware se distinguen “nodos de bajo nivel” que

encapsulan una API para acceder a la perfección los sensores de hardware, servicios de sensores o

web simulados, que se utilizan de forma implícita como orígenes de datos externos en el contexto

del middleware. Otro tipo de nodo son los sensores de alto nivel (los llamados canales o

agregadores) combinan información de otros nodos para adquirir y extraer información de los

sensores. Por ejemplo, un GPS, un acelerómetro y una brújula podrían combinarse para

proporcionar un nodo más preciso como un sensor de posicionamiento inercial. Por el momento, la

salida se suministra a través de una interfaz nativa. [10]

4.3.1 Nodos de sensores de bajo nivel actuales:

Acelerómetro: proporciona la aceleración 3D del dispositivo a una velocidad configurable.

Sensor de alarma: brinda información, así como las notificaciones de alarmas activas

actuales.

Sensor Calendario: establece datos actuales del calendario (reuniones, etc.).

Orientación dispositivo: proporciona orientación del dispositivo actual y la actitud

(rotación) de la información.

Localización GPS: GPS brinda información basada en la ubicación del dispositivo.

Norte Magnético: determina rumbo actual del dispositivo con respecto al norte magnético.

Magnetómetro: proporciona información de densidad de flujo geomagnético 3D.

Perfil de sensor: proporciona información sobre el perfil del dispositivo actual.

Sensor Tiempo: proporciona información del tiempo real a través de un servicio web para

un área configurable. [11]

Page 24: Evaluación de Middlewares Sensibles al Contexto

24

4.3.2 Nodos de sensores de alto nivel

Disponibilidad del Usuario: le brinda al usuario información actual de su estado (si el

usuario está disponible o no). Esto se realiza mediante una combinación de los datos de la

agenda y de perfil del dispositivo.

Estado de Movimiento: le proporciona información al usuario de su movimiento. Esto se

hace por una combinación de la ubicación GPS y del sensor de acelerómetro.

Posición / Dirección: establece la posición actual del usuario en función de la ubicación

actual del GPS. [11]

4.3.3 Arquitectura

En la imagen 4-4 a continuación se puede observar la estructura arquitectónica de mSense separado

en capas, dentro de las cuales se distinguen la capa de datos, la de sensores y otros proveedores de

información.

Imagen 4-4 Arquitectura de mSense

Page 25: Evaluación de Middlewares Sensibles al Contexto

25

4.4 LOCCAM

El LOCCAM es un middleware de apoyo para los sistemas móviles y sensibles al contexto que

utilizan el sistema operativo Android. [12] [13]

Actúa como gestor del contexto para brindarle apoyo a las aplicaciones sensibles al contexto en los

dispositivos móviles. Para ello, utilizan los sensores físicos, lógicos y virtuales presentes en el

móvil real, que son una fuente para la obtención de ésta información contextual.

4.4.1 Principales Componentes

Estructuralmente, se distinguen principalmente dos partes:

1- SYSSU.

Éste permite la interoperabilidad del sistema, actuando como intermediario entre:

aplicaciones que envían y reciben información de interés con el middleware, como la

información contextual capturada por CAM (más específicamente, por los CACs).

Los CACs son Componentes de Adquisición de Contexto los cuales reportan a los gerentes

de adquisición de contexto (CAM).

2- CAM (Contexto Adquisición Administrador).

CAM se puede dividir en su propia arquitectura interna: en primer lugar el componente

“Adaptation Reasoner” es responsable de mantener una lista de la relación de los intereses

de todas las aplicaciones y comprueba si se produjo algún cambio en esta relación de

intereses. Luego los datos son transferidos al Administrador de CAC. [14]

El Administrador de CAC es responsable de la gestión del ciclo de vida de las CAC, iniciar

o finalizar su ejecución. Él es también responsable de la gestión de la lista de las CAC

disponibles.

La Imagen 4-1 a continuación muestra la arquitectura y la relación entre la SYSSU y CAM, aparte

de la arquitectura interna CAM específico

Page 26: Evaluación de Middlewares Sensibles al Contexto

26

.

Imagen 4-5 [14]

Page 27: Evaluación de Middlewares Sensibles al Contexto

27

5. Evaluación

Con el fin de evaluar las capacidades de estos middlewares, se elaboró una lista de los criterios que

se consideran de mayor relevancia para el caso de estudio planteado. Estos criterios son orientados a

la escalabilidad, conectividad con el hardware, facilidad de uso y control del contexto.

A cada middleware se le otorgará un puntaje del 1 al 100 con el objetivo de profundizar en aquellos

que apliquen con mayor naturalidad al proyecto.

A continuación se detallan los criterios y puntaje para evaluar cada middleware.

5.1 Criterios seleccionados para la evaluación

Para poder evaluar con mayor claridad cada middleware sensible al contexto, la tabla 5-1, determina

una serie de criterios a los cuales se le asignaron puntajes dependiendo de cuatro criterios que se

detallan a continuación.

1- El criterio restringe la integración del framework con el caso de estudio y aporta al

concepto de middleware sensible al contexto. (15 puntos)

2- El criterio no restringe la integración del framework con el caso de estudio y aporta al

criterio de middleware sensible al contexto. (10 puntos)

3- El criterio involucra información necesaria para realizar una investigación avanzada.

(10 puntos)

4- El criterio no restringe la integración del framework con el caso de estudio, solo dificulta en

mayor o menor medida su realización. Es ajeno al concepto de middleware sensible al

contexto. (5 puntos)

Además de clasificarlos en estas categorías pueden sufrir pequeñas variaciones de hasta tres puntos

consecuencia de la importancia que cada criterio posee para el evaluador.

Por ejemplo, si consideramos a Freedomotic se determinó que es totalmente abierto a la extensión

por lo cual en la tabla se le asignaran los 16 puntos que le corresponden a la categoría “Es abierto a

la extensión” (Ver tabla 5-1).

Page 28: Evaluación de Middlewares Sensibles al Contexto

28

5.1.1 Criterios que clasificaron en la categoría 1 (Puntaje base 15 puntos):

1- Es abierto a la extensión (Puntaje sumado: 1 punto).

2- Permite la interconexión con hardware (Puntaje sumado: 3 puntos).

.

5.1.2 Criterios que clasificaron en la categoría 2 y 3 (Puntaje base 10 puntos):

1- Es orientado a la domótica.

2- Continúa su utilización y desarrollo.

3- Su código es público.

4- Posee versiones finales consolidadas (Puntaje restado: 2 puntos).

5- Posee manejo del contexto (Puntaje restado: 2 puntos).

.

5.1.3 Criterios que clasificaron en la categoría 4 (Puntaje base 5 puntos):

1- Permite la interconexión con otro software.

2- Es multiplataforma.

3- Dificultad de utilización.

4- Dificultad de Instalación.

Nota: En los criterios que se realizaron subdivisiones, los puntajes fueron adjudicados sin un juicio

previo. Los mismos se adjudicaron de acuerdo a la importancia para el evaluador.

5.2 Descripción de los criterios

A continuación en la tabla 5-1 se detalla la definición de aquellos criterios que pueden resultar

ambiguos. En la descripción se detallará los puntos fundamentales utilizados que conforman cada

criterio.

Page 29: Evaluación de Middlewares Sensibles al Contexto

29

Criterios

Descripción

Es abierto a la extensión.

Permite la incorporación de nuevos módulos sin realizar modificaciones en los ya existentes.

El código fuente es abierto a su modificación. Su arquitectura es escalable.

Permite la interconexión

con hardware (Arduino,

Raspberry pi, etc.)

Posee plugins desarrollados para la utilización de

computadoras minimalistas que recolecten

información del ambiente.

Permite la interconexión

con otro software.

Posee algún mecanismo de intercambio de

información con otro software.

Es orientado a la

domótica.

Posee objetos pre configurados que simulan ser

elementos reales de la casa. Un ejemplo de esto, son

la representación de lámparas, puertas, sensores, etc.

Es multiplataforma.

(Puede ser utilizado desde

múltiples dispositivos y sistemas operativos)

Puede ejecutarse en múltiples plataformas, considerando entre estas Windows, Linux, Android

,etc.

Posee manejo del

contexto.

Tiene mecanismos para almacenar el estado de cada objeto de la casa. Y

reconocer sus posibles cambios.

Tabla 5-1

5.3 Puntajes asignados a los criterios

La tabla 5-2 siguiente detalla los posibles puntajes para cada criterio.

Criterios

Evaluación Pts.

Es abierto a la extensión

1- No

2- Solo permite modificación del código por parte del propietario.

3- Solo permite agregar módulos

nuevos. 4- Permite realizar ambos ítems

anteriores, pero posee inconsistencias propietarias.

5- Es totalmente abierto a la extensión.

0

2

4

7

16

Page 30: Evaluación de Middlewares Sensibles al Contexto

30

Permite la interconexión

con hardware (Arduino,

Raspberry pi, etc.)

1- Posee plugins desarrollados. 2- Tiene posibilidad de comunicarse

con hardware. 3- No

18 9

0

Permite la interconexión

con otro software.

1- Si 2- No

5 0

Es Orientado a la

Domótica.

(Trae componentes ya desarrollados para

interactuar con la casa)

1- Si 2- No

10 0

Continúa su utilización y

desarrollo.

(Se realizó alguna

actualización en los últimos 6 meses)

1- Si

2- No

10

0

Su código es publico

1- Si 2- No

10 0

Es multiplataforma.

1- Si 2- No

5 0

Dificultad de utilización.

1- Baja

2- Media 3- Alta

5

3 0

Dificultad de Instalación. 1- Necesita la instalación de otros programas para su utilización. No

tiene archivos de configuración. 2- Necesita la instalación de otros

programas para su utilización.

3- No necesita de programas para su funcionamiento.

1

4

5

Posee versiones finales

consolidadas.

1- Si

2- No

8

0

Posee manejo del

contexto.

1- Si

2- No

8

0

Tabla 5-2

Page 31: Evaluación de Middlewares Sensibles al Contexto

31

5.4 Evaluación de los Middlewares sensibles al contexto seleccionado

En esta sección se presenta la evaluación de cada uno de los middlewares seleccionados.

5.4.1 Evaluación RSCM

La tabla 5-3 siguiente se detalla los puntajes obtenidos por la evaluación a RSCM.

Criterios

Puntos

Es abierto a la extensión. 7

Permite la interconexión con hardware. 9

Permite la interconexión con otro software. 5

Es orientado a la domótica. 0

Continúa su utilización y desarrollo. 0

Su código es público. 10

Es multiplataforma. 0

Dificultad de utilización. 3

Dificultad de instalación. 5

Posee versiones finales consolidadas. 8

Posee manejo del contexto.

8

Tabla 5-3

Total de Puntos: 55

Page 32: Evaluación de Middlewares Sensibles al Contexto

32

5.4.2 Evaluación Freedomotic

La tabla 5-4 siguiente detallan los puntajes obtenidos por la evaluación.

Criterios

Puntos

Es abierto a la extensión. 16

Permite la interconexión con hardware. 18

Permite la interconexión con otro software. 5

Es orientado a la domótica. 10

Continúa su utilización y desarrollo. 10

Su código es público. 10

Es multiplataforma. 5

Dificultad de utilización. 5

Dificultad de instalación. 1

Posee versiones finales consolidadas. 8

Posee manejo del contexto.

0

Tabla 5-4

Total de Puntos: 88

5.4.3 Evaluación mSense

La tabla 5-5 siguiente detallan los puntajes obtenidos por la evaluación a mSense. Si bien se

reconoce que mSense es uno de los middlewares que posee más plugins desarrollados junto con

Freedomotic, la calificación negativa de mucho de los puntos radica en la falta del código fuente

para realizar las pruebas pertinentes. En el caso de no realizar la prueba de cada sección la

calificación es 0.

Criterios

Puntos

Es abierto a la extensión. 4

Permite la interconexión con hardware. 9

Permite la interconexión con otro software. 0

Page 33: Evaluación de Middlewares Sensibles al Contexto

33

Es orientado a la domótica. 0

Continúa su utilización y desarrollo. 10

Su código es público. 0

Es multiplataforma. 5

Dificultad de utilización. 0

Dificultad de instalación. 0

Posee versiones finales consolidadas. 8

Posee manejo del contexto.

8

Tabla 5-5

Total de Puntos: 49

5.4.4 Evaluación LOCCAM

La tabla 5-6 siguiente detallan los puntajes obtenidos por la evaluación a LOCCAM.

Criterios Puntos

Es abierto a la extensión. 7

Permite la interconexión con hardware. 9

Permite la interconexión con otro software. 5

Es orientado a la domótica. 0

Continúa su utilización y desarrollo. 10

Su código es público. 5

Es multiplataforma. 0

Dificultad de utilización. 5

Dificultad de instalación. 1

Posee versiones finales consolidadas. 8

Posee manejo del contexto.

8

Tabla 5-6

Total de Puntos: 58

Page 34: Evaluación de Middlewares Sensibles al Contexto

34

5.5 Resumen de los puntajes obtenidos

A continuación en la tabla 5-6 se exponen todo los puntajes de los middlewares evaluados.

Criterios

RS

CM

Fre

edom

oti

c

mS

ense

LO

CC

AM

Es abierto a la extensión. 7 16 4 7

Permite la interconexión con hardware. 9 18 9 9

Permite la interconexión con otro

software.

5 5 0 5

Es orientado a la domótica. 0 10 0 0

Continúa su utilización y desarrollo. 0 10 10 10

Su código es público. 10 10 0 5

Es multiplataforma. 0 5 5 0

Dificultad de utilización. 3 5 0 5

Dificultad de instalación. 5 1 0 1

Posee versiones finales consolidadas. 8 8 8 8

Posee manejo del contexto.

8 0 8 8

Tabla 5-7

Observaciones:

De las tablas antes descriptas se puede observar que el framework más avanzado para la integración

con Arduino es Freedomotic, además de ser el que brinda mayor flexibilidad para realizar cambios.

Gracias a la reciente adquisición de mSense por parte del grupo Windows Phone, se produjo un

punto de inflexión en el estudio de dicho middleware, éste liberó una versión demo (ya en una

etapa muy avanzada de esta investigación), que no pudo ser evaluada. Los puntajes asignados

fueron en base a la lectura de características del middleware en su versión anterior.

Del resto de los middlewares se identificó una tendencia muy marcada en la incorporación de

sensores y razonadores. Esto les brinda gran escalabilidad, teniendo la posibilidad de extenderlos

pero con gran dificultad. Esta tarea no podría ser realizada por un usuario estándar.

Page 35: Evaluación de Middlewares Sensibles al Contexto

35

6. Fase Experimental

Esta sección describe la evaluación de los middlewares y tecnologías seleccionadas para un caso de

laboratorio definido como representativo.

6.1. Plan de Trabajo

A continuación se detallará el caso de estudio elegido para implantar en los middlewares.

6.1.1 Definición del caso de estudio

Encender una luz como un caso representativo, utilizando middlewares o frameworks sensibles al

contexto. Relacionándolos con Arduino como un medio de recolección de información, tomando

decisiones en base al contexto creado.

6.1.2 Objetivos

- Establecer la comunicación serial de Arduino con cada middleware estudiado.

- Controlar el estado de corriente eléctrica.

- Recolectar información del contexto y encender una luz si la distancia a la cual se

encuentra de una de las paredes es menor a 50 cm. (el encendido de la luz es simbólico

ya que se podría realizar cualquier otra acción).

- Recolectar información del contexto y encender una luz si se produce un movimiento en

un plano de 180°.

6.1.3 Requerimientos de Hardware

- Micro controlador Arduino.

- Cable de cobre de 1mm - Conectores

- 4 Relés

- 1 Resistencia (330 ohm) - 4 Resistencias (1k ohm)

- 6 Leds

- Lámpara de luz

- Porta lámpara

- Computadora

- N Sensor PIR - N Sensor HC-SR04

- Cable USB Arduino

- 4 Transistores - Diodos

- Protoboard

Page 36: Evaluación de Middlewares Sensibles al Contexto

36

6.2 Circuito Integrado de 2 Relés + Transistores + Leds

En la Imagen 6-1 que se muestra a continuación, se observa el circuito encargado a nivel físico de

encender o apagar cualquier dispositivo. Este circuito es utilizado en cada uno de los casos de

estudio. Su componente principal es el relé, el cual actúa como interruptor. Esto lo logra ya que

dentro del mismo posee una bobina, que en el momento de activar su pin de datos, genera un

campo electromagnético que atrae al interruptor y permite el pasaje de corriente eléctrica.

Imagen 6-1 [15]

Page 37: Evaluación de Middlewares Sensibles al Contexto

37

6.3 Descripción del diagrama del circuito electrónico

Aquí se describe el circuito principal que interactuará con los middlewares sensibles al contexto.

Este está compuesto por tres grandes componentes, actores, Arduino y los recolectores.

Para poder visualizar un diagrama del circuito interconectando todo los componentes del mismo,

recurrir al anexo 10.4.

El circuito comprende en su totalidad todo el hardware necesario para el caso de estudio planteado,

comunicando la plaqueta Arduino con una computadora, se establece así la comunicación mediante

el puerto serial y éste es controlado por software o en este caso por un middleware sensible al

contexto. Este circuito es el encargado de recolectar información de forma autónoma y enviársela

través del mismo puerto al software que lo gestione, para que luego el middleware o el usuario final

tome la mejor decisión.

6.4 Principales componentes del circuito:

1- Arduino: Es el cerebro y administrador de sensores y actores. Para profundizar leer el

capítulo 3.

2- Sensor de distancia: Este sensor utiliza dos pines digitales de Arduino, uno es configurado

como INPUT y otro como OUTPUT . Encargados de emitir y recibir una onda ultrasónica,

con la cual se mide el tiempo de llegada y se convierte a distancia. Además posee un pin

conectado a 5v y otro a tierra.

3- Placa de relés: Esta posee al menos 3 pines, uno conectado a 5 v otro conectado a tierra y

uno más de control. El último mencionado es el que se conecta a Arduino con el fin

activarlo o desactivarlo. Cabe destacar que además posee bornes para conectar el conducto

que se desea interrumpir.

6.4.1 Forma de Interconectar los anteriores componentes:

Todos los componentes posee pines de control, estos al conectarlos a Arduino se pueden gestionar.

Mediante su lenguaje de programación se itera constantemente preguntando sobre el estado de cada

componente, utilizando comandos de lectura analógica y digital para obtener los resultados.

Page 38: Evaluación de Middlewares Sensibles al Contexto

38

6.5 Descripción de los componentes utilizados

Sensor Ultrasonico

Imagen 6-2

Utilizado para medir distancias,

emitiendo y recibiendo una onda con el

fin de determinar el tiempo y distancia a

otro elemento.

Reles

Conjunto de 4 relés los cuales se activan

o desactivan con Arduino. Su fin es

permitir/denegar el pasaje de corriente

eléctrica, logrando a través una bobina

que genera un campo magnético el cual

atrae o repele al interruptor.

Imagen 6-3

Sensor PIR

Sensor de movimiento, éste detecta

mediante cambios mínimos de

temperatura en el ambiente el

movimiento de cualquier objeto en el

entorno.

Imagen 6-4

Page 39: Evaluación de Middlewares Sensibles al Contexto

39

Arduino

La descripción y características generales

de esta plaqueta ya fueron descriptas en la

sección 3 del documento.

Imagen 6-5

Con el objetivo de profundizar en la interconexión de los componentes antes descriptos, acceder al

Anexo 10.4, donde se puede visualizar un circuito completo del caso de estudio.

Page 40: Evaluación de Middlewares Sensibles al Contexto

40

7. Implementación de los casos de estudio

A continuación se detallaran las implementaciones del caso de estudio con cada uno de los

middlewares evaluados.

Cabe destacar que además de realizar las tareas antes mencionadas, se desarrolló una aplicación

Java, la cual realiza el caso de estudio completo. Esto se realizó con dos objetivos:

1- Generar una versión final probada con anterioridad a la de los middlewares.

2- Medir el tiempo de construcción sin un middleware intermedio.

7.1 Java + Arduino

En esta sección se detallara le ejecución de la aplicación que desarrolle con los objetivos antes

mencionados.

7.1.1 Descripción

Creación de la Aplicación Java:

El principal cometido de esta aplicación es probar el mismo caso de estudio que el de los

middleware .Esto brinda la oportunidad de medir la dificultad de realizar la misma tarea con o sin

un middleware. Como se puede visualizar en la imagen 7-1 esta aplicación posee una lista de

eventos (log viewer) dedicada a recolectar información de contexto, con la utilización de sensores.

Una vez que el software detecta que la distancia al sensor es inferior a los 50 cm se enciende la luz.

Además permite encenderla o apagarla en cualquier momento presionando el correspondiente

botón, enviando un mensaje el cual es decodificado e interpretado por el micro controlador.

Imagen 7-1 ( Log Viever + Light Control)

Page 41: Evaluación de Middlewares Sensibles al Contexto

41

7.1.2 Programando el micro controlador

Este es el codigo que programa el comportamiento de la plaqueta Arduino con el objetivo de

cumplir con el plan de estudio.

Sección de Configuración:

void setup(){

Serial.begin(9600);

pinMode(trigPin1, OUTPUT);

pinMode(echoPin1, INPUT);

pinMode(ledPin, OUTPUT);

pinMode(sensor,INPUT);

pinMode(rele,OUTPUT);

Serial.flush();

}

Se determina que pines

serán del tipo OUTPUT y

cuáles serán del tipo

INPUT.

void loop(){

enviarDatos();

recibirDatos();

}

void recibirDatos(){

if(Serial.available()>0)

{

input=Serial.read();

if(input=='3'){

digitalWrite(ledPin,HIGH);

digitalWrite(rele,LOW);

}

if(input=='4'){

digitalWrite(ledPin,LOW);

digitalWrite(rele,HIGH);

}

}

}

}}

El método void loop() ejecuta

constantemente las funciones enviar

Datos y recibir Datos. Enviar Datos

envía información de los sensores al

programa o middleware. Mientras que

recibir Datos, recibe mensaje desde el

programa o middleware.

Enciende la luz

Apaga la luz

Page 42: Evaluación de Middlewares Sensibles al Contexto

42

long distanciaFun(int trigPin,int echoPin){

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duracion = pulseIn(echoPin, HIGH);

dist = duracion/58.2;

return dist;

}

void enviarDatos(){

estado=digitalRead(sensor);

distancia1=distanciaFun(trigPin1,echoPin1);

if (estado==HIGH || (distancia1<10 && distancia1>0))

{

digitalWrite(ledPin,HIGH);

digitalWrite(rele,LOW);

Serial.print("1");

delay(500);

}

else {

digitalWrite(ledPin,LOW);

digitalWrite(rele,HIGH);

Serial.print("2");

delay(500);

}

}

Obtiene el valor que mide el

sensor para determinar si hay

movimiento.

Mide la distancia

con un sensor

ultrasónico.

Enciende la luz y envía un mensaje

a su controlador (Programa Java o

middleware).

Page 43: Evaluación de Middlewares Sensibles al Contexto

43

7.1.3 Resultados

1- Creación de Software Java

2- Generación de Código Arduino

3- Realizar comunicación entre los dos componentes

4- Pruebas

5- Encender La luz desde la aplicación Java

6- Apagar la luz desde la aplicación Java

7- Encender La luz por una proximidad inferior a 50 cm

Leyenda:

- Se realizó con éxito.

- No se obtuvo el resultado esperado.

Page 44: Evaluación de Middlewares Sensibles al Contexto

44

7.1.4 Prueba del caso de estudio con la aplicación Java

Antes de detectar movimiento con el sensor:

En la imagen que se observa a continuación puede visualizarse como la luz está

apagada. Esta foto fue tomada antes de producir un evento. Por evento se entiende

encender la luz desde la pc o generar movimiento a una distancia menor a 50 cm del

sensor. También puede observarse la representación física del circuito antes

detallado.

Imagen 7-2

Después de detectar movimiento con el sensor:

Luego de producir el evento se observa como en la Imagen 7-3 la luz se enciende. Esta misma tecnología puede aplicarse para encender cualquier

dispositivo electrónico.

Imagen 7-3

Page 45: Evaluación de Middlewares Sensibles al Contexto

45

7.2 RSCM +Arduino

A continuación se estudiará la incorporación de Arduino a y Freedomotic con el fin de tomar información del contexto.

7.2.1 Descripción

Como se mencionó antes RSCM se basa en tres componentes principales a los cuales sus autores

hacen alusión. Estos son el contexto, razonadores y recolectores.

7.2.2 Configuración + Programación

Para comenzar con el proceso de implantar el caso de estudio a RSCM, se deben generar al menos

el contexto y un recolector de contexto (Sensor). A continuación se detallará la creación de los

mismos.

7.2.2.1 Proceso de instalación

Copiar y ejecutar “rscm-runtime_0.2.1.apk” en el dispositivo Android.

Copiar y ejecutar “rscm-viewer_0.2.1.apk” en el dispositivo Android.

Con el objetivo de poseer un plugin pre configurado de RSCM, copiar y ejecutar “plugin-sensor-battery_0.2.1.apk” en el dispositivo Android. [16]

7.2.1.2 Creación del contexto

1- Crear una Activity de Java y modificarla para que extienda de

org.aspectsense.rscm.context.client.ContextListenerActivity.java.

2- Implementar los métodos abstractos getRequestedScopes() y onContextValueChanged(). [17]

Page 46: Evaluación de Middlewares Sensibles al Contexto

46

7.2.2.3 Programando el contexto

A continuación se puede observar el código de la creación del contexto. Este está programado de

acuerdo con la normas establecidas por los autores, fue instalado luego de los pasos de la sección 7.2.2.1. [17]

7.2.2.4 Programando el sensor

Este Sensor también fue programado de acuerdo a las normas de los autores. El código se puede

observar en el siguiente cuadro de texto. Este sensor es una aplicación nueva, donde su clase

principal extiende de SensorService (“org.aspectsense.rscm.context.plugin.SensorService”).

Este es el componente que define la estructura general de los sensores. [18]

public class MyContextAwareActivity extends ContextListenerActivity { @Override public String[] getRequestedScopes() { return new String[] { "distance.value" }; } private TextView messageTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); messageTextView =(TextView) findViewById(R.id.log_info); appendMessage("Activity created"); }

private void appendMessage(final String message) { final String currentMessage = messageTextView.getText().toString(); messageTextView.setText(currentMessage + "\n" + message); } @Override public void onContextValueChanged(ContextValue contextValue) { try{

appendMessage(new Date() + ": La distancia es: " + contextValue.getValueAsInteger() + "%"); if(contextValue.getValueAsInteger()<50){

encenderLuz();

}

}catch (JSONException jsone){ Toast.makeText(this, "Error while displaying context event: " + contextValue, Toast.LENGTH_SHORT).show();

}}}

Page 47: Evaluación de Middlewares Sensibles al Contexto

47

public class SensorProy extends SensorService { public static final String TAG = "org.aspectsense.rscm.sensor.distance.DistanceSensor"; public static final String SCOPE_DISTANCE = "distance.value"; public static final String ACTION_DISTANCIA_CHANGED = "distance.changed"; public static final IntentFilter filter = new IntentFilter(ACTION_DISTANCIA_CHANGED); @Override public IBinder onBind(Intent intent){ Log.d(TAG, "DistanceSensor: registerReceiver"); registerReceiver(distanceReceiver, filter); return super.onBind(intent); } @Override public boolean onUnbind(Intent intent){ Log.d(TAG, "DistanceSensor: unregisterReceiver"); unregisterReceiver(distanceReceiver); return super.onUnbind(intent); } final BroadcastReceiver distanceReceiver = new BroadcastReceiver(){ int oldDistance=-1; @Override public void onReceive(Context context, Intent intent){ int distance = returnDistance(); if(distance <= 50){

final ContextValue lastContextValueDistanceValue = ContextValue.createContextValue(SCOPE_DISTANCE, distance);

notifyListener(lastContextValueDistanceValue); oldDistance = distance; } }

Page 48: Evaluación de Middlewares Sensibles al Contexto

48

7.2.3 Resultados

1- Instalación de RSCM

2- Instalación de Sensores de RSCM

3- Pruebas del Contexto

4- Creación del Contexto para el caso de estudio

5- Creación del Sensor de distancia

6- Unificación y prueba de los puntos 4 y 5

7- Encender La luz por una proximidad inferior a 50 cm

Leyenda:

- La operación se realizó con éxito.

- No se obtuvo el resultado esperado.

La prueba no resulto exitosa, pero se tomaron varias

medidas para intentar mitigar los errores.

7.2.1 Medidas de mitigación de errores:

Los resultados obtenidos por los prototipos desarrollados no concluyeron como se esperó, a pesar

de que los mismos fueron implementados de acuerdo a las normas del autor del middleware. Para

intentar solucionar estos errores se tomaron tres acciones, en primer lugar contactarse con el autor

para solucionar los problemas, en segundo lugar probar todos los plugins desarrollados por el autor

para verificar su funcionamiento y en tercer lugar intentar realizar el mismo caso de prueba sin el

middleware (encender desde el celular un dispositivo).

Page 49: Evaluación de Middlewares Sensibles al Contexto

49

Medida Resultado

Contactarse con el autor.

No se lograron solucionar los problemas.

Probar todos los plugins desarrollados por el

autor.

Funcionaron correctamente, se descartan problemas del middleware.

Realizar el mismo caso de prueba sin el

middleware.

Se realizó el caso de prueba y funciono

correctamente, se descartaron problemas de conexión.

Nota: Si bien se realizaron pruebas para intentar eliminar los errores, no se lograron solucionar los

problemas.

Observaciones:

Los proyectos creados para los sensores y el contexto se localizan en el repositorio y en el

cd.

Page 50: Evaluación de Middlewares Sensibles al Contexto

50

7.3 Freedomotic + Arduino

A continuación se estudiará la incorporación de Arduino a y Freedomotic con el fin de tomar información del contexto.

7.3.1 Descripción:

En los anexos 10.1 y 10.2 se observa al detalle la instalación de Maven y Freedomotic. En este

caso la instalación involucra la opción de poder recompilar el software luego de realizar

modificaciones del código. La instalación de Maven es necesaria para poder recompilar el código.

[19]

La estructura de Freedomotic soporta la incorporación de plugins, los cuales personalizan el

comportamiento del framework. Este puede ser programado y configurado para gestionar la casa en

base a dichos componentes.

Para el caso de estudio antes determinado, es conveniente la instalación del plugin llamado

“Arduino USB”. Este plugin, permite la comunicación con el hardware desde la interfaz principal

de Freedomotic. Además de realizar la instalación de dicho plugin, se debe configurar los canales a

través de los cuales se comunicarán (Ver Anexo 10.3).

Uno de los mayores inconvenientes fue que los plugins para utilizar Arduino no se encontraban

estables, para conseguir establecer las conexiones se interactúa con los desarrolladores de

Freedomotic quienes presentaron un nuevo realese en donde finalmente se logró realizar por

completo el caso de estudio aquí descripto. Aunque como se muestra en la sección 7.3.2, el actuador

para encender la lámpara automáticamente, aún contiene defectos que a la fecha de entrega de este

documento no han sido resueltos.

A continuación en la Imagen 7-4 se puede observar la pantalla principal de Freedomotic a través de

la cual se puede gestionar los elementos de la casa.

Imagen 7-4

Page 51: Evaluación de Middlewares Sensibles al Contexto

51

7.3.2 Configuración + Programación

En este apartado se detallaran las configuraciones que se realizaron y las porciones de código

fuentes con el objetivo de llevar a cabo el caso de estudio.

7.3.2.1 Configuración de Freedomotic

A continuación se especificaran los pasos necesarios para poder realizar la comunicación entre

Arduino y Freedomotic. En el anexo 10.3 se puede observar detenidamente como realizar dichas

configuraciones.

7.3.2.2 Pasos

1- Instalar Arduino comunication desde el conjunto de plugins (Market Place).

Este plugin inicia los protocolos de comunicación entre Arduino y Freedomotic. Otorgando

la posibilidad de enviarse mensajes entre ambos con el fin de decodificarlos e interpretarlos.

A través de ellos se toman las decisiones.

2- Configurar el puerto por el cual se realizará la comunicación.

Al conectar Arduino a una terminal, este se conecta a un puerto serial del mismo. Se debe

obtener esta información consultando al administrador de dispositivos del sistema operativo

que se utilice. Una vez obtenido el puerto al cual se ha conectado Arduino, en la sección de

configuración del plugin se le debe indicar dicho dato.

3- Configurar el evento de encendido de una luz desde el frontend de Freedomotic.

Una vez configurado todo lo anterior, haciendo doble clic sobre el plugin se puede observar

cómo se realiza lo conexión. Si dicha conexión se realizó correctamente, el icono del

mismo se verá en colores, de lo contrario en grises.

Esta es la parte más importante del proceso ya que es donde se programa el comportamiento

del framework en relación al plugin. Para obtener información detallada de dicha

configuración se debe acceder al anexo 10.3.

En esta sección se determina el protocolo de comunicación que se utilizará y el pin al cual se

conectara el dispositivo a nivel físico en la plaqueta Arduino. En la imagen 7-5 a

continuación se puede observar la configuración del puerto.

Page 52: Evaluación de Middlewares Sensibles al Contexto

52

Imagen 7-5

7.3.2.3 Programando Arduino

Este código es necesario ejecutarlo antes de ejecutar Freedomotic, con el objetivo de tener

pre-configurada la plaqueta.

void setup(){ Serial.begin(9600); pinMode(13, OUTPUT); } void loop (){ if (Serial.available()) { char ser = Serial.read(); switch (ser) { case 'a': pinON(13); Serial.print("on"); break; case 'b': pinOFF(13); Serial.print("off"); break; } } } void pinON(int pin){ digitalWrite(pin, HIGH); } void pinOFF(int pin){ digitalWrite(pin, LOW); }

Consulta si hay datos

disponibles y

dependiendo del

mensaje que retorne

enciende o apaga la luz.

Page 53: Evaluación de Middlewares Sensibles al Contexto

53

7.3.2. Resultados

A continuación de presentan los resultados de Freedomotic

1- Instalar Freedomotic (Ver guía).

2- Instalar Arduino comunication desde el conjunto de plugins (Market Place).

3- Configurar el puerto en el cual se realizará la comunicación con Arduino.

4- Una vez instalado el plugin, abrirlo con netbeans o cualquier

otro compilador.

5- Realizar las modificaciones necesarias al archivo “sketch.ino” el cual contiene todo el comportamiento programado del

micro controlador.

6- Configurar el evento de encendido de una luz desde el frontend de Freedomotic.

7- Realizar prueba de encendido y apagado.

8- Tomar información de sensores para encender la luz

(El último punto no se pudo concretar debido a que el plugin seguía en desarrollo y planificaban su incorporación con posterioridad)

- La operación se realizó con éxito.

- No se obtuvo el resultado esperado.

Page 54: Evaluación de Middlewares Sensibles al Contexto

54

7.4 mSense +Arduino

Desde el inicio de la búsqueda de middlewares sensibles al contexto, este middleware sufrió

cambios. En un inicio no se identificó código aparente, ni una aplicación para poder realizar las

mismas pruebas que en los otros middleware. Esto género no poder obtener resultados concretos de

este middleware. Luego de varias lecturas se observó que este middleware ofrece muchas

oportunidades las cuales no pudieron ser verificadas. Posteriormente, a mediados de enero se

identificó una notificación del grupo de Nokia (con fecha 24/10/2014) [11], que dicho middleware

propiedad de ellos pasaría a formar parte del grupo de Windows Phone, liberando una versión del

mismo, la cual no pudo ser probada.

7.5 LOCCAM +Arduino A continuación se mostraran los resultados obtenidos de la implantación del caso de estudio.

7.5.1 Descripción

Este middleware posee una bibliografía que detalla paso a paso la instalación del mismo. Siguiendo

exactamente los pasos recomendados, se logró realizar la instalación del middleware, pero sin

acceso a la apertura de la instalación. El cuál era el siguiente paso para su configuración.

Luego de varias pruebas y consecutivas instalaciones en SmartPhones y tablets no se logró realizar

dicha instalación, sin la posibilidad de realizar las pruebas del caso de estudio.

7.5.2 Configuración

A continuación se detallaran los procedimientos realizados, con o sin éxito.

1- Instalación de LOCCAM.apk;

Para realizar la instalación, en primer lugar hay que descargar la aplicación LOCCAM.apk,

transferirla al dispositivo móvil y ejecutarla en el mismo. Este paso se pudo realizar sin

ningún inconveniente.

2- Iniciar Servicio;

Para Iniciar el servicio hay que iniciar la aplicación, paso que nunca se concretó, ya que no

brindo la opción de abrir la aplicación. A continuación se pueden visualizar en la imagen 7-6

Page 55: Evaluación de Middlewares Sensibles al Contexto

55

el proceso que no se pudo completar:

Imagen 7-6 [14]

Page 56: Evaluación de Middlewares Sensibles al Contexto

56

8. Conclusiones

Este trabajo presentó un estudio y evaluación sobre los middleware sensibles al contexto. Estos se

nutren de información del entorno, cada vez con orígenes más variados. Así es que enfrentan la

dificultad o necesidad de poder adaptarse naturalmente a los cambios. A través de la creación de

dichos middlewares se logra unificar, canalizar y procesar la información, además de brindar apoyo

a dispositivos móviles disminuyendo su sobrecarga.

Dicho trabajo fue dividido en cinco partes. Estas son investigación (identificación de los

middlewares), elaboración de criterios, evaluación de los middlewares y prueba del caso de

estudio.

Como resultado de la investigación, se identificaron cuatro middlewares (RSCM, mSense,

Freedomotic, LOCCAM). Destacando a RSCM y a LOCCAM como sistemas resultado de

proyectos de grado y/o posgrado. Mientras que Freedomotic y mSense son aplicaciones comerciales

en crecimiento.

Para evaluar a estos middlewares se desarrollaron criterios basados en el objetivo del trabajo y en la

investigación realizada. Como resultado de la evaluación se pudo observar, que el middleware con

mayor desarrollo es Freedomotic, obteniendo los resultados más altos según los criterios

elaborados. Con el fin de profundizar en su análisis se diseñó un caso de estudio genérico, el cual se

intentó aplicar a cada uno de ellos. El caso de estudio consistió en encender y apagar una bombita

de luz, basado en la identificación de la posición del usuario.

Se codificaron dos pruebas de concepto exitosas (Java+Arduino y Freedomotic+Arduino), sin

conseguir el caso de éxito completo en ninguno de los otros middlewares evaluados.

Si bien se lograron observar avances en el campo de los middlewares sensibles al contexto, desde el

punto de vista de la ingeniería de software el único middleware que se puede integrar con

aplicaciones comerciales es Freedomotic, siendo que los RSCM, mSense, y LOCCAM carecen de

aspectos técnicos para poder lograrlo.

Luego de trabajar con Arduino y los middlewares sensibles al contexto e intentar integrar ambas

tecnologías, se observó que el costo de intentar realizar dicho vínculo, es inclusive mayor que la

creación de un software específico para la administración de este tipo de dispositivos; sin perder de

vista la escalabilidad que brindan los middlewares.

Como resultado de esta investigación y el conocimiento adquirido, considero que a corto plazo

todas las grandes empresas y fabricantes de dispositivos móviles incorporarán este tipo de

soluciones con los sensores que los celulares ya poseen y otros dispositivos. Un ejemplo muy claro

es la tendencia de las pulseras electrónicas las cuales brindan la posibilidad de recolectar cada vez

más información.

Page 57: Evaluación de Middlewares Sensibles al Contexto

57

Como lecciones aprendidas de este trabajo destaco la dificultad que encierra la utilización de

tecnologías emergentes, considerando la diferencia entre trabajar con aquellas que poseen grandes

bases de usuario y accesos bibliográficos, en contraste con las estudiadas en este caso, por ejemplo

en el caso de Freedomotic, la comunidad es menor a 50 personas y para RSCM, se tuvo que

contactar directamente al programador.

Page 58: Evaluación de Middlewares Sensibles al Contexto

58

9. Referencias bibliográficas:

[1] D. Dransch, Activity and Context — “A Conceptual Framework for Mobile Geoservices”,

Springer Berlin Heidelberg, 2005.

[2] J. Ma, «Ubiquitous Computing,» [Online]. Available:

http://cis.k.hosei.ac.jp/~jianhua/course/ubi/Lecture09.pdf.

[3] Wikipedia, «Wikipedia Arduino,» [Online]. Available:

http://es.wikipedia.org/wiki/Arduino.

[4] Arduino, «Sitio Oficial Arduino,» [Online]. Available: http://www.arduino.cc/.

[5] Y. Stephen S., K. Fariaz, W. Yu y W. Bin, “Reconfigurable context-sensitive middleware

for pervasive”, M.S. thesis, Dept. Computer. Eng., Arizona, 2002.

[6] isimo, «Domonetio,» 02 2014. [Online]. Available:

http://www.domonetio.com/content/freedomotic-es-el-software-abierto-de-

automatizaci%C3%B3n-del-hogar.

[7] Freedomotic, «Freedomotic,» [Online]. Available: http://www.freedomotic.com/.

[8] Enrrico, «Repositorio Freedomotic,» [Online]. Available:

https://github.com/freedomotic/freedomotic/wiki/Freedomotic-components- interaction.

[9] Wikipedia, «Wikipedia,» [Online]. Available:

http://es.wikipedia.org/wiki/Qt_%28biblioteca%29.

[10] A. Jakl, D. Gusenbauer, D. Rothbauer y B. Ehringer, “Managing context on a sensor

enabled mobile device – the mSense approach,” presented at the International Conference

on Wireless and Mobile Computing, Networking and Communications, Austria, 2009.

[11] N. -. W. Phone, «Nokia Developers,» 08 2014. [Online]. Available:

http://developer.nokia.com/community/wiki/Qt_Mobility_Usage_Scenario:_The_mSense_

middleware.

[12] A. Fonteles, B. Neto, R. Gadelha, W. Viana, R. Andrade y M. Maia, «LOCCAM - loosely

coupled context acquisition middleware,» ACM New York, São Paulo, Brazil, 2013.

[13] M. E. F. Maia, «ACM Digital Library,» 2013. [Online]. Available:

http://dl.acm.org/citation.cfm?id=2480465.

[14] Loccam, «Loccam,» [Online]. Available: http://loccam.great.ufc.br/informacoes-

gerais/arquitetura.html.

Page 59: Evaluación de Middlewares Sensibles al Contexto

59

[15] Argeduino, «Argeduino,» [Online]. Available:

http://www.argeduino.com.ar/download/releshield2canales.jpeg.

[16] N. Paspallis, «Google Code,» 9 2009. [Online]. Available: https://code.google.com/p/rscm/.

[17] N. Paspallis, «Google Code,» Septiembre 2009. [Online]. Available:

https://code.google.com/p/rscm/wiki/Creating_a_context_aware_app.

[18] N. Paspallis, «Google Code,» Septiembre 2009. [Online]. Available:

https://code.google.com/p/rscm/wiki/Creating_a_context_sensor_plugin.

[19] Freedomotic, «Get Started,» [Online]. Available:

https://github.com/freedomotic/freedomotic/wiki#developers-quick-start.

[20] Maven. [Online]. Available: http://maven.apache.org/download.cgi.

[21] Dallas, «MilesBurton,» [Online]. Available:

http://milesburton.com/Dallas_Temperature_Control_Library.

Page 60: Evaluación de Middlewares Sensibles al Contexto

60

10. Anexos

A continuación se detallaran todos los anexos que ayudaron a la comprensión del documento y a la

elaboración del mismo.

10.1 Instalación de Maven

La instalación de Maven es necesaria para ejecutar y modificar código fuente de los plugins de

Freedomotic.

Paso 1:

Acceder a: http://maven.apache.org/download.cgi

Descargar: apache-maven-3.2.3-bin.zip

Paso 2:

Descomprimir el archivo descargado en C:\Program Files\Apache Software Foundation\apache-

maven-3.2.3

Paso 3:

(Configuración Oficial de Maven [20] )

1. Unzip the distribution archive, i.e. apache-maven-3.2.3-bin.zip to the directory you wish to install Maven 3.2.3. These instructions assume you chose C:\Program Files\Apache

Software Foundation. The subdirectory apache-maven-3.2.3 will be created from the archive.

2. Add the M2_HOME environment variable by opening up the system properties (WinKey + Pause), selecting the "Advanced" tab, and the "Environment Variables" button, then adding

Page 61: Evaluación de Middlewares Sensibles al Contexto

61

the M2_HOME variable in the user variables with the value C:\Program Files\Apache Software Foundation\apache-maven-3.2.3. Be sure to omit any quotation marks around the path even if it contains spaces. Note: For Maven 2.0.9, also be sure that

the M2_HOME doesn't have a '\' as last character. 3. In the same dialog, add the M2 environment variable in the user variables with the

value %M2_HOME%\bin. 4. Optional: In the same dialog, add the MAVEN_OPTS environment variable in the user

variables to specify JVM properties, e.g. the value -Xms256m -Xmx512m. This

environment variable can be used to supply extra options to Maven. 5. In the same dialog, update/create the Path environment variable in the user variables and

prepend the value %M2% to add Maven available in the command line. 6. In the same dialog, make sure that JAVA_HOME exists in your user variables or in the

system variables and it is set to the location of your JDK, e.g. C:\Program

Files\Java\jdk1.7.0_51 and that %JAVA_HOME%\bin is in your Path environment variable. 7. Open a new command prompt (Winkey + R then type cmd) and run mvn --version to verify

that it is correctly installed.

.

Configuración de las siguientes variables de entorno:

Para comenzar debemos configurar las variables de entorno las cuales son requeridas. Para realizar dichas configuraciones se deben seguir los pasos de las siguientes imágenes:

Imagen 10-1 Pantalla de Windows

Imagen 10-2 Variable de Entorno

Page 62: Evaluación de Middlewares Sensibles al Contexto

62

Imagen 10-3 Variable de Entorno

Imagen 10-4 Variable de Usuario

Imagen 10-5 Variables de Usuario

Una vez configuradas todas las variable de entorno de usuario. Ejecutar en modo de consola: mvn --version

Page 63: Evaluación de Middlewares Sensibles al Contexto

63

10.2 Guía de instalación de Freedomotic

1- Acceder al sitio https://github.com y crear una

cuenta para poder acceder al repositorio de

Freedomotic.

2- Una vez creado el usuario acceder a su cuenta y realizar la búsqueda del repositorio

(Freedomotic). En la Imagen 10-7 a continuación se muestra la prueba realizada.

3- Acceder al repositorio público llamado freedomotic/freedomotic como se muestra en la

Imagen 10-8.

4- Accediendo al repositorio se podrán observar entre otros los siguientes archivos, como se

puede observar en la imagen 10-9.

Imagen 10-6 Login GitHub

Imagen 10-7 Usuario Logueado

Imagen 10-8 Repositorio

Page 64: Evaluación de Middlewares Sensibles al Contexto

64

5- Una vez verificado el repositorio, se puede observar en la esquina superior derecha de la

aplicación web la opción FORK, la cual nos permite unirnos al repositorio para poder

consumirlo. En este paso se debe seleccionar dicha opción.

6- Una vez unidos al repositorio debemos clonarlo a un directorio físico en una Pc.

Esto se puede lograr en modo consola con el siguiente comando:

git clone https://github.com/YOUR-GITHUB-USERNAME/freedomotic.git

O también se puede realizar utilizando la aplicación web presionando el botón “Clone in Desktop,”

ubicado a la derecha del centro de la página, representado por la siguiente imagen.

Localmente se ha creado una carpeta llamada Freedomotic con todo el contenido del repositorio.

Imagen 10-9 Archivos del repositorio

Page 65: Evaluación de Middlewares Sensibles al Contexto

65

Acceder a la carpeta física del repositorio:

Ejecutar en modo de consola: mvn clean install

Este proceso tomará algunos minutos.

Ejecutar en modo de consola:

cp -r data-example/ framework/freedomotic-core/data

Una vez finalizado, para ejecutar la aplicación

Ejecutar en modo de consola:

java -jar framework/freedomotic-core/target/freedomotic-core/freedomotic.jar

10.3 Configuración de Freedomotic con Arduino

1- Instalar Arduino comunication desde el conjunto de plugins (Market Place).

Esta guía debe ser utilizada para incorporar la comunicación de Arduino con Freedomotic.

Una vez en el MarketPlace se selecciona la opción

Internet Of Things.

Imagen 10-10

Page 66: Evaluación de Middlewares Sensibles al Contexto

66

Se selecciona Arduino Serial comunication.

Imagen 10-11

Se Activa la comunicación

con Arduino realizando doble click sobre el nuevo

plugin instalado.

Imagen 10-12

2- Configurar el puerto por el cual se realizará la comunicación.

Para configurar el puerto de comunicación de Arduino con Freedomotic, se debe seleccionar

del menú principal la opción Plugins y luego Configure. Después de seleccionar las

opciones antes mencionadas aparecerá una pantalla con información de la comunicación, en

el valor de la sección que dice “Serial.Port” se debe poner el puerto correcto de

comunicación.

Page 67: Evaluación de Middlewares Sensibles al Contexto

67

Imagen 10-13

3- Configurar el evento de encendido de una luz desde el frontend de Freedomotic.

En esta sección se determina el protocolo de comunicación que se utilizará y el pin al cual se conectara el dispositivo a nivel físico en la plaqueta Arduino.

Se desactiva la opcion “Is a virtual object…..” , se seta el protocolo y la dirección.

Imagen 10-14 Configuración

Page 68: Evaluación de Middlewares Sensibles al Contexto

68

Seleccionando la etiqueta DataSource, configurar el item powered. Escogiendo la

opción que comienza por Arduino Usb.

Imagen 10-15

Para el encendido de la luz se selecciona la opcion Yun On Arduino Led y viceversa

para el apagado de la misma.

Imagen 10-16

Page 69: Evaluación de Middlewares Sensibles al Contexto

69

10.4 Circuito detallado del hardware para el caso de estudio

A continuación en la Imagen 10-17 se puede visualizar el circuito utilizado para el caso de estudio

seleccionado.

Imagen 10-17

Page 70: Evaluación de Middlewares Sensibles al Contexto

70

10.5 Wheather Undergound:

Wheather Underground es un Servicio web que permite obtener el estado del tiempo, junto con

otras características de él, que pueden ser de interés para desarrollar una aplicación que sea sensible al contexto. A continuación se presentan los pasos realizados para obtener datos de este servicio.

Procedimiento:

1- Creación de un usuario 2- Generar clave de acceso a los datos

3- Crear una aplicación Java que consuma XML. 4- Prueba.

Clave:

http://api.wunderground.com/api/24350adefbeb2b9d/conditions/q/UY/Montevideo.xml

Resultado:

<response>

<version>0.1</version>

<termsofService>

http://www.wunderground.com/weather/api/d/terms.html

</termsofService>

<features>

<feature>conditions</feature>

</features>

<current_observation>

<image>

<url>http://icons.wxug.com/graphics/wu2/logo_130x80.png</url>

<title>Weather Underground</title>

<link>http://www.wunderground.com</link>

</image>

<display_location>

<full>Montevideo, Uruguay</full>

<city>Montevideo</city>

<state/>

<state_name>Uruguay</state_name>

<country>UY</country>

<country_iso3166>UY</country_iso3166>

<zip>00000</zip>

<magic>1</magic>

<wmo>86580</wmo>

<latitude>-34.83000183</lat itude>

<longitude>-56.00000000</ longitude>

<elevation>32.00000000</elevation>

</display_location>

<observation_location>

<full>Montevideo,</full>

<city>Montevideo</city>

<state/>

<country>UY</country>

<country_iso3166>UY</country_iso3166>

<latitude>-34.83333206</lat itude>

<longitude>-56.01166534</ longitude>

<elevation>105 ft</elevation>

Page 71: Evaluación de Middlewares Sensibles al Contexto

71

</observation_location>

<estimated></estimated>

<station_id>SUMU</station_id>

<observation_time>Last Updated on October 10, 9:00 AM UYST</observation_time>

<observation_time_rfc822>Fri, 10 Oct 2014 09:00:00 -0200</observation_time_rfc822>

<observation_epoch>1412938800</observation_epoch>

<local_time_rfc822>Fri, 10 Oct 2014 09:28:29 -0200</local_time_rfc822>

<local_epoch>1412940509</local_epoch>

<local_tz_short>UYST</local_tz_short>

<local_tz_long>America/Montevideo</local_tz_long>

<local_tz_offset>-0200</local_tz_offset>

<weather>Mostly Cloudy</weather>

<temperature_string>55 F (13 C)</temperature_string>

<temp_f>55</temp_f>

<temp_c>13</temp_c>

<relative_humidity>67%</relative_humidity>

<wind_string>From the SSW at 16 MPH</wind_string>

<wind_dir>SSW</wind_dir>

<wind_degrees>210</wind_degrees>

<wind_mph>16</wind_mph>

<wind_gust_mph>0</wind_gust_mph>

<wind_kph>26</wind_kph>

<wind_gust_kph>0</wind_gust_kph>

<pressure_mb>1014</pressure_mb>

<pressure_in>29.95</pressure_in>

<pressure_trend>+</pressure_trend>

<dewpoint_string>45 F (7 C)</dewpoint_string>

<dewpoint_f>45</dewpoint_f>

<dewpoint_c>7</dewpoint_c>

<heat_index_string>NA</heat_index_string>

<heat_index_f>NA</heat_index_f>

<heat_index_c>NA</heat_index_c>

<windchill_string>NA</windchill_string>

<windchill_f>NA</windchill_ f>

<windchill_c>NA</windchill_c>

<feelslike_string>55 F (13 C)</feelslike_string>

<feelslike_f>55</feelslike_f>

<feelslike_c>13</feelslike_c>

<visibility_mi>6.2</v isibility_mi>

<visibility_km>10.0</visibility_km>

<solarradiation/>

<UV>1</UV>

<precip_1hr_string>-9999.00 in (-9999.00 mm)</precip_1hr_string>

<precip_1hr_in>-9999.00</precip_1hr_in>

<precip_1hr_metric>-9999.00</precip_1hr_metric>

<precip_today_string>0.00 in (0.0 mm)</precip_today_string>

<precip_today_in>0.00</precip_today_in>

<precip_today_metric>0.0</precip_today_metric>

<icon>mostlycloudy</icon>

<icon_url>http://icons.wxug.com/i/c/k/mostlycloudy.gif</icon_url>

<forecast_url>

http://www.wunderground.com/global/stations/86580.html

</forecast_url>

<history_url>

</history_url>

<ob_url>

http://www.wunderground.com/cgi-bin/findweather/getForecast?query=-34.83333206,-56.01166534

</ob_url>

</current_observation>

</response>

Page 72: Evaluación de Middlewares Sensibles al Contexto

72

10.6 Localización de celulares:

Con el avance de las tecnologías, la localización y ubicación de los usuarios es cada vez más

necesaria. Esto se puede lograr a través de una herramienta de google llamada devicemanager, la

cual teniendo una cuenta de google asociada al dispositivo permite identificar la posición del mismo

remotamente. Este sistema permite incluirlo en otros programas que utilicen dicha información.

Por ejemplo podría ser un middleware sensible al contexto.

10.7 Medición de temperatura con Arduino

A continuación se muestra el código necesario para poder medir la temperatura con Arduino. La

conexión del sensor utiliza un pin digital de la placa. [20]

Para recolectar la temperatura se utiliza el sensor Dallas 18B20.

#include <Wire.h>

#include <OneWire.h>

#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices

// (not just Maxim/Dallas temperature ICs)

OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.

DallasTemperature sensors(&oneWire);

void setup(void){

Serial.begin(9600);

sensors.begin();

}

void loop(void){

// call sensors.requestTemperatures() to issue a global temperature

// request to all devices on the bus

sensors.requestTemperatures();

Serial.print("Temperature-------------->: ");

Serial.println(sensors.getTempCByIndex(0)); // Why "byIndex"?

// You can have more than one IC on the same bus.

// 0 refers to the first IC on the wire

delay(2000);

}

Page 73: Evaluación de Middlewares Sensibles al Contexto

73

10.8 Censar movimiento con Arduino:

Para poder censar el movimiento se conecta un sensor a Arduino, el cual al producirse un

movimiento en su entorno envía una señal de 5 v a la plaqueta. La cual mediante la programación

de la plaqueta se traduce en otra acción.

A continuación se detallara el código necesario para controlar este tipo de sensor. En el caso de que

se produzca movimiento enciende una luz.

int input=-1;

int sensor=7;

int estado;

void setup(){

pinMode(rele,OUTPUT);

pinMode(sensor,INPUT);

digitalWrite(rele, LOW);

Serial.begin(9600);

}

void loop(){

estado=digitalRead(sensor);

if(estado==HIGH){

digitalWrite(rele,HIGH);

delay(1000);

}

else

{

digitalWrite(rele,LOW);

}}

Page 74: Evaluación de Middlewares Sensibles al Contexto

74

10.9 Medición de distancia con Arduino:

A continuación se muestra el código necesario para poder medir la distancia con Arduino. La

conexión del sensor utiliza un pin analógico de la placa.

Para medir la distancia se utiliza el periférico HC-SR04

#include <NewPing.h>

#include <Ping.h>

const int echoPin1=24;

const int trigPin1=7;

const int ledPin=8;

long dist;

long duracion;

long distancia1;

void setup(){

Serial.begin(9600);

pinMode(trigPin1, OUTPUT);

pinMode(echoPin1, INPUT);

pinMode(ledPin, OUTPUT);

}

void loop(){

delay(1000);

distancia1=distanciaFun(trigPin1,echoPin1); // Este método se puede

visualizar en la sección 7

Serial.print("La distancia es: ");

Serial.print(distancia1);

}

Page 75: Evaluación de Middlewares Sensibles al Contexto

75

10.10 Controlar flujo de corriente eléctrica:

El código que se presenta a continuación enciende un relé y por consecuencia cualquier dispositivo

electrónico conectado a él, luego lo apaga consecutivamente. El código comenta lo que realiza cada

línea.

Para controlar el flujo de corriente eléctrica se utilizan relés.

int rele=6;

void setup(){

pinMode(rele,OUTPUT);

}

void loop(){

digitalWrite(rele,HIGH);

//se activa el relé y permite el pasaje de corriente eléctrica

delay(1000); //Se genera una espera por 1 segundo

digitalWrite(rele,LOW);

// se desactiva el relé y permite el pasaje de corriente eléctrica

delay(1000); // Se genera una espera por 1 segundo

}

Page 76: Evaluación de Middlewares Sensibles al Contexto

76