Академический Документы
Профессиональный Документы
Культура Документы
1. INTRODUCCIÓN 1
1.1 Motivación y contribuciones 2
1.2 Trabajos relacionados 2
1.3 Objetivos 3
1.4 Estructura del documento 4
2. MARCO TEÓRICO 5
2.1 Internet de las cosas 5
2.1.1 Internet de las cosas como un sistema nervioso mundial 7
2.1.2 Gestión de la información 8
2.1.3 El impacto de internet de las cosas en la sociedad 9
2.1.4 Ámbitos de aplicación 10
2.1.4.1 Medioambiente 10
2.1.4.2 Industria 11
2.1.4.3 Ciudades 12
2.1.4.4 Hogar 12
2.1.4.5 Personal 13
2.1.5. Principales obstáculos 14
2.1.5.1 El precio 14
2.1.5.2 Elección de estándares 14
2.1.5.3 Innovación o violación de la privacidad 15
2.1.5.4 ¿Soluciones necesarias? 16
2.2 Beacon 17
2.2.1 Beacons en internet de las cosas 18
2.2.2 Comunicación BLE 18
2.2.3 ¿Cómo funcionan? 19
2.3 Bluetooth 21
2.4 Bluetooth Low Energy 21
2.4.1 Introducción a BLE 21
2.4.2 ¿Qué hace a BLE diferente? 23
2.4.3 Principales características 23
2.4.4 Chips single-mode y dual-mode 25
i
ÍNDICE
ii
ÍNDICE
iii
1 | INTRODUCCIÓN
Quince años atrás, cuando se hablaba del futuro hacia el que nos conducía el avance de la
tecnología, se mencionaba la domótica: casas completamente robotizadas donde las
tareas se realizan de forma automática o por control remoto. Sin embargo, la realidad ha
ido aún más allá, e internet ha logrado algo más grande, un mundo de objetos
interconectados y conectados a la red capaces de cumplir cada vez más funciones y más
complejas, aplicable prácticamente a cualquier ámbito. Es el llamado Internet de las cosas
(IoT).
IoT permite que todos, personas y cosas, estén permanentemente conectados y puedan
recibir y procesar información en tiempo real. IoT ya es una realidad presente en tendencias
como wearables, electrodomésticos que ofrecen todo tipo de información al usuario.
Siguiendo la filosofía de los objetos interconectados, todo ello se puede controlar desde el
celular. Esta gran ola de tecnología, produjo una acelerada aceptación de los teléfonos
inteligentes y tablets, donde las aplicaciones móviles se convierten en una herramienta
cada vez más útil para comparaciones contextuales en el entorno de los usuario.
En este contexto es donde surgen los dispositivos beacons, dispositivos que transmiten
información para poder conocer el contexto de los usuarios a través de aplicaciones
móviles. Los beacons son dispositivos que transmiten pequeñas señales (piezas de
información) anunciando su presencia a los dispositivos que se encuentren dentro de su
radio de alcance, utilizando la tecnología BLE (Bluetooth Low Energy) [9].
1
1 INTRODUCCIÓN
Esto brinda a las aplicaciones nuevas posibilidades de reconocimiento de ubicación.
Cuando un teléfono móvil entra en el rango de alcance de la señal de un beacon, la
aplicación instalada recibe la señal transmitida y puede responder en consecuencia.
La aparición de nuevos dispositivos y tecnologías traen consigo nuevos desafíos y
problemas para aquellos desarrolladores que desean incorporar estas nuevas tecnologías y
dispositivos en sus aplicaciones. Es por eso que en este proyecto se especifica un patrón de
diseño para aplicaciones móviles que interactúan con dispositivos beacons para conocer el
contexto de los usuarios, brindando a los desarrolladores una herramienta útil a la hora de
incorporar esta nueva tecnología en sus aplicaciones.
En base a lo mencionado, en este trabajo de tesis se intenta demostrar la hipótesis que es
factible definir un patrón de diseño para aplicaciones móviles que interactúan con
dispositivos beacons para conocer el contexto de los usuarios.
Para lograr demostrarla se desarrollarán diferentes aplicaciones móviles que interactúan
con dispositivos beacons en diversos contextos, en las cuales se implementará el patrón
especificado en este proyecto para establecer la comunicación entre las aplicaciones
móviles y los dispositivos beacon.
2
1 INTRODUCCIÓN
En el año 2015, en CASCON (Centre for Advanced Studies Conference), los autores del
proyecto “Context-aware mobile apps using iBeacons: towards smarter interactions” [79]
describen cuatro aplicaciones móviles para dispositivos iOS que utilizan el protocolo
iBeacon e interactúan con los dispositivos beacons para proporcionar relevancia contextual
y experiencias personalizadas al usuario. Presentan los antecedentes en el área, la
arquitectura que diseñaron y desarrollaron para las aplicaciones, las propias aplicaciones,
e informes sobre los resultados de los casos de prueba en escenarios reales.
El trabajo “Experiences with using iBeacons for Indoor Positioning” [80] publicado en ISEC
'16 habla de las experiencias de los investigadores con iBeacon, sobre su eficacia en
localización en interiores (indoor location).
El proyecto “An iBeacon primer for indoor localization: demo abstract” [81] publicado en
BuildSys '14 presenta un conjunto de herramientas de localización desarrolladas utilizando
iBeacon, proporcionando una mirada en profundidad a la viabilidad de BLE como una
tecnología de posicionamiento en interiores. Su sistema muestra un error promedio de
estimación de la posición de 53 centímetros.
En el articulo "uBeacon: Configuration based Beacon tracking" [82], publicado en IEEE '16,
los autores describen uBeacon, un servicio cloud con una interfaz web que permite a los
usuarios definir las configuraciones que incluyen restricciones entre los receptores de señal
de beacons y los beacons vinculados a objetos o personas. uBeacon almacena estas
configuraciones en una base de datos, monitorea continuamente los datos de los beacons,
y notifica a los usuarios a través de notificaciones push cada vez que se ha violado una
regla de una configuración.
En el artículo “S-Beacon: Next generation BLE beacon solution for enhanced
personalization” [83], publicado en IEEE '16, los autores introducen S-Beacon, la próxima
generación de beacon BLE, una tecnología BLE basada en smartphones y wearables para
indicar la presencia del usuario junto con las preferencias personales y los datos
demográficos que sirve como un factor clave para la mejora de servicios personalizados. En
este trabajo se discute la proximidad mejorada basada BLE, el consumo optimizado de los
recursos, y capacidad de gestión de dispositivos beacons.
1.3 OBJETIVOS
Este trabajo tiene como objetivo principal definir un patrón de diseño que permita prevenir
aquellos problemas típicos y recurrentes que puedan surgir a la hora de desarrollar una
aplicación móvil que interactúa con dispositivos beacon para obtener información del
contexto de los usuarios. Es decir, se intenta demostrar la hipótesis del hecho que es
3
1 INTRODUCCIÓN
factible definir un patrón de diseño para aplicaciones móviles que interactúan con
dispositivos beacons para conocer el contexto de los usuarios.
Para lograr este objetivo será necesario realizar las siguientes metas: 1: Investigar la
Tecnología BLE. 2: Conocer el funcionamiento y características de los dispositivos beacon y
los diferentes ámbitos de aplicación. 3: Analizar los sistemas operativos móviles para
comprender las limitaciones y las herramientas que poseen para interactuar con los
dispositivos beacon. 4: Construir diferentes casos de estudio.
A los fines de validación del modelo, se desarrollarán diferentes aplicaciones móviles que
interactuarán con dispositivos beacons en diversos contextos, en las cuales se
implementará el patrón especificado en este proyecto para establecer la comunicación
entre las aplicaciones móviles y los dispositivos beacon.
4
2 | MARCO TEÓRICO
Años atras, cuando se hablaba del futuro hacia el que nos llevaba el progreso tecnológico,
siempre se mencionaba la domótica, la promesa de casas completamente robotizadas
donde todas las tareas se realizarían de forma automática o por control remoto. Sin
embargo, la realidad ha ido aún más allá, e Internet ha logrado algo más grande, un mundo
de objetos interconectados y conectados a la red capaces de cumplir cada vez más
funciones y más complejas. Es el llamado Internet de las cosas.
El concepto, mundialmente conocido como el Internet de las Cosas, consiste en que tanto
personas como objetos puedan conectarse a Internet en cualquier momento y lugar. Tan
simple como eso. Sin embargo, la sencillez de su definición no debe cegar frente a la
complejidad de sus implicaciones.
El Internet de las Cosas es una realidad muy presente que está evolucionando. Millones de
dispositivos están siendo conectados entre sí a través de distintas redes de comunicación.
Pequeños dispositivos permiten medir desde la temperatura de una habitación hasta el
tráfico de taxis en una ciudad. A diario, cámaras de vigilancia velan por la seguridad en los
edificios y los paneles del metro nos indican el tiempo que falta hasta la llegada del
siguiente tren.
El mundo se está convirtiendo en un campo de información global y la cantidad de datos
que circulan por las redes está creciendo exponencialmente. Términos como gigabyte (mil
5
2 MARCO TEÓRICO
millones de bytes) o terabyte (un billón de bytes) están quedando desactualizados y dan
paso a los petabytes (mil billones de bytes) o exabytes (un trillón de bytes) que reflejan más
la realidad de la información global.
El Internet de las cosas no es una idea nueva. A principios de los años noventa, Mark Weiser,
director científico del Xerox Palo Alto Research Center, introdujo el concepto de
computación ubicua o ubicomp, que apostaba por un futuro en el que la computación
formaría una parte integral de la vida diaria de las personas y resultaría transparente para
ellos [2]. Esta expresión fue utilizada desde 1988 en los ambientes de investigación y saltó a
la luz pública con su artículo The Computer for the Twenty-First Century [2] .
Para Weiser, las computadoras personales deberían ser sustituidas por dispositivos
invisibles encajados en los objetos diarios, pues eran elementos demasiado enredados que
suponían demasiado tiempo y atención por parte de los usuarios. Las computadoras
requerían una atención casi exclusiva de estos y los distraían de otras tareas.
Pues bien; esta ubicuidad tecnológica, pensada para el entorno doméstico y personal,
aspira en la actualidad a expandirse al ámbito de la industria, servicios, consumo o medio
ambiente, de la mano de la rápida evolución de la electrónica y las redes, bajo el nombre
de Internet de las cosas.
Sin embargo el término Internet de las cosas se le atribuye a Kevin Ashton, cofundador y
director del Auto-ID Labs [3] del Massachusetts Institute of Technology (MIT), una red de
laboratorios centrado en el desarrollo de etiquetas RFID y sensores, que en 1999 utilizó la
expresión Internet de las Cosas para llamar la atención de los directivos de la empresa
Project & Gamble (P&G) [30] .
Intentaba hacerles ver que la inclusión de etiquetas RFID en sus cadenas de suministros,
sumado a las posibilidades de la Internet de entonces, podría acarrear importantes
beneficios para su empresa [4].
La rápida evolución de la electrónica durante la última década hizo que la idea de Internet
de las Cosas tome una gran relevancia práctica. Esta evolución ha seguido el patrón
marcado por el visionario Gordon Moore, cofundador del fabricante de microprocesadores
Intel. Moore formuló su famosa predicción, conocida a nivel mundial como Ley de Moore, en
1965, refinándola en 1975 [5]. En ella establece que el número de transistores que contiene
un chip se duplica cada dos años aproximadamente. Bien sea porque Moore fue capaz de
predecir el futuro o porque los fabricantes de procesadores fijaron sus palabras como un
6
2 MARCO TEÓRICO
objetivo a largo plazo, la Ley de Moore se ha venido cumpliendo durante los últimos
cuarenta años.
Estos pequeños dispositivos, junto con la expansión de las redes de comunicación,
permiten incorporar inteligencia y conexión a los objetos del mundo real y están
transformando lo que era una red global de personas en una red global de todas las cosas.
De esta manera, cada vez se está más interconectado y las personas y objetos pueden
interactuar de manera completamente distinta. Hoy día hay +1.000 millones de usuarios de
Internet, +4.000 millones de personas con teléfono móvil y una lista interminable de
objetos (autos, electrodomésticos, cámaras, etc.) conectados a Internet de una forma u otra
[6].
Cualquier objeto es susceptible de ser conectado y manifestarse en la Red. Las etiquetas
RFID (radio frequency identification), en español identificación por radiofrecuencia, son
pequeños dispositivos, que pueden ser adheridos a un producto, persona o animal para
almacenar información relevante y dinámica.
En 2010, cerca de 3.000 millones de etiquetas RFID se encontraban en circulación en el
mundo [6]. Las compañías de logística pudieron optimizar sus cadenas de suministro al
7
2 MARCO TEÓRICO
conocer con precisión la posición de todas sus mercancías y los vehículos pueden circular
sin detenerse en los peajes de las autopistas. Estos no son más que los primeros pasos de
Internet de las Cosas.
Esta cantidad desmesurada de información está empezando a transformar la forma de
hacer negocios, la organización en el sector público y el día a día de millones de personas.
La empresa estadounidense Walmart, por ejemplo, maneja más de un millón de
transacciones por hora.
Por ello, empresas y emprendedores se encuentran en la carrera por innovar en términos
de almacenamiento, velocidad, acceso y métodos de análisis de datos. Google cuenta con
más de treinta centros de datos, equivalentes a más de un millón de servidores. Para
alcanzar este despliegue, su competencia, Microso , está invirtiendo miles de millones de
dólares en añadir hasta 20.000 servidores al mes. Se espera que en el año 2020, el consumo
de estos centros equivalga al consumo actual de electricidad de Alemania, Canadá y Brasil
juntos.
Los expertos también están inmersos en el planteamiento de los algoritmos que den
respuesta a un mundo ubicuo. La programación de los objetos para dotarlos de la habilidad
de comunicarse resulta complicada, sobre todo teniendo en cuenta que deben interactuar
con sistemas cada vez más diversos y autónomos. Gran parte del valor económico se
centrará en los algoritmos que permitan la comunicación m2m (machine to machine) y el
desarrollo de servicios de so ware.
1
1 zettabyte = 1 trillon de gigabytes
8
2 MARCO TEÓRICO
A medida que la información y las personas están cada vez más conectadas, la tecnología
sirve como herramienta de colaboración y toma de decisiones en un mundo donde
converge lo físico con lo digital. La información peer-to-peer y las redes sociales son
ejemplos de cómo el esfuerzo individual tiene el potencial de convertirse en una plataforma
abierta de miles de millones de personas.
Esto ha supuesto la creación de una plataforma de nuevos productos y servicios con un alto
componente de innovación. Las iniciativas ya no tienen por qué llevar aparejado un
incentivo económico para terminar de despegar. La simple voluntad de compartir y
concebir los descubrimientos técnicos como valor de dominio público permite que Internet
de las Cosas cobre dimensiones sociales raramente experimentadas, aunque cada vez más
frecuentes.
Hoy día existe una creciente preocupación por el desarrollo sostenible, motivada por la
escasez de recursos. Esta situación se ha visto agravada por el cambio climático, el
aumento de la población en áreas urbanas y el hecho de que los países emergentes están
adoptando progresivamente los patrones de producción y consumo de los países
desarrollados.
Así, por ejemplo, Pacific Gas and Electric (PG&E) [32] está implementando medidores
inteligentes [33] que proporcionan información en tiempo real del consumo de gas y
electricidad, así como del costo asociado, en hogares de Estados Unidos. De esta manera, el
consumidor puede darse cuenta de que el costo de producir energía no es constante a lo
largo del día y que es posible alterar su consumo para disminuir el importe de su factura.
9
2 MARCO TEÓRICO
El alcance masivo de esta tecnología hace que realizar un análisis exhaustivo de los
ámbitos de aplicación se transforme en una tarea que demande demasiado tiempo, por lo
tanto se tomó una división más simple para dar una idea general sobre las capacidades en
cada ámbito.
Por simplicidad se tomaron 5 grandes ámbitos básicos de aplicación donde se muestran
algunos ejemplos en cada uno:
2.1.4.1 MEDIOAMBIENTE
Dentro de este ámbito se incluyen aquellas aplicaciones centradas principalmente en redes
de dispositivos destinados a la protección y la salud, no solo del ser humano sino también
de nuestro planeta. Algunos ejemplos destacados:
Gracias a una red de dispositivos autónomos es posible comprobar el estado del
agua y medir pH, salinidad, temperatura, iones disueltos oxígeno etc. Un ejemplo es el
sensor de la compañía Libelium [34] sobre plataforma Waspmote [35], una plataforma
modular open source para construir redes de sensores inalámbricas de muy bajo consumo.
Posee diferentes radios de comunicación inalámbrica con el protocolo Zigbee con alcances
de hasta 40Km, una gran variedad de placas de sensores para medir gases, eventos físicos
entre otros y diversos módulos para añadir comunicación Bluetooth LE, GPRS y GPS.
Mediante el uso de collares localizadores es posible conocer la posición de ciertos
animales y ayudar a los pastores a proteger sus rebaños sin que sea necesario el uso de la
10
2 MARCO TEÓRICO
fuerza. Mediante esta aplicación es posible por un lado proteger a los seres humanos y por
el otro respetar especies en peligro de extinción. Un ejemplo es el proyecto “Open Source
Lion Tracking Collars” [36] de la compañía Ground Lab [37] compuesto de un collar con un
microcontrolador de bajo consumo Atmal, una SIM card, GPS para comunicación,
alimentado por baterías.
• Prevención de catástrofes
Una de las aplicaciones con mayor impacto para el ser humano en cuanto a evitar
muertes sería la alerta temprana de catástrofes naturales. Gracias a Internet de las Cosas,
dispositivos tradicionalmente instalados que solo podían ser leídos en sus centros de
control son ahora capaces de comunicarse mediante GSM y ser fácilmente accedidos (entre
ellos y con las centrales). Un claro ejemplo es el proyecto ALARMS [38] de British Geological
Survey [39] que ha conseguido integrar en un dispositivo de bajo costo con capacidad GSM,
sensores miniaturizados para alertar de manera temprana la inestabilidad del suelo.
Estos ejemplos no solo nos dan una idea de las capacidades de Internet de las Cosas en
cuanto a la conservación de la flora , fauna y medio-ambiente sino que permiten también
entrever el potencial de esta tecnología con fines científicos, ya que abre nuevos campos de
investigación gracias a la creación de redes sensoriales autónomas accesibles desde
cualquier terminal del mundo.
2.1.4.2 INDUSTRIA
• Monitorización de estructuras
Un claro ejemplo de Internet de las Cosas es el sistema SmartPile© de Smart
Structures Inc [40]. Este sistema está basado en la instalación de un sensor wireless
integrado en el cemento mientras fragua, de tal manera que queda unido a la estructura,
proporcionando datos a tiempo real de las tensiones que soporta dicha columna.
• Seguridad
11
2 MARCO TEÓRICO
• Analytics
Uno de los campos que más se está desarrollando. Se están instalando diversos
dispositivos en los supermercados y tiendas que analizan en tiempo real el
comportamiento de los consumidores, de manera que son capaces de predecir los
productos que tienen más éxito, los caminos más transitados y las estanterías más vistas,
todo ello funcionando de manera totalmente autónoma. Ejemplos son Macy’s, Walmart y
mas de diez empresas que incorporaron la tecnología beacon, como Japan Airlines en el
Aeropuerto de Tokio, American Airlines en el aeropuerto de Dallas [42].
2.1.4.3 CIUDADES
El término Smart City ha evolucionado gracias a Internet de las Cosas. En este apartado se
consideran algunos usos que estén relacionados con hacer de las ciudades cosas
inteligentes.
• Ayuda al estacionamiento
ParkSigth™ [43] desarrollada por Streetline Inc [44], guía a los usuarios de
vehículos a espacios libres de estacionamiento mediante una red de sensores autónoma
wireless que inyecta los datos en una aplicación web en tiempo real, de esta manera se
optimizan los recursos, disminuye la contaminación y se ahorra combustible.
• Contenedores inteligentes
Una alternativa propuesta por la compañía Bigbelly [45] consiste en dotar a los
contenedores de sensores que comunican a la central su estado en tiempo real, facilitando
así la recogida optimizando los recursos [46].
• Control eléctrico
El proyecto de Awesense [47] que mediante sensores alimentados con baterías
detectan caídas de tensión, fallos de suministro o bypass en tiempo real notificándose a la
central, permitiendo a los gestores disminuir los problemas y ahorrar en costos.
2.1.4.4 HOGAR
En esta categoría se engloba toda aquella domótica que es capaz de actuar y comunicarse
de manera autónoma. Al contrario que sucede con las aplicaciones de carácter industrial,
este campo no está tan orientado al ahorro de gasto sino a la seguridad y comodidad.
Algunos ejemplos:
12
2 MARCO TEÓRICO
• Control térmico
La empresa Nest [48] ofrece un producto que combina sensores en casa,
predicciones a tiempo real del tiempo y la actividad en el hogar para controlar la
temperatura, haciendo que se ahorre hasta un 30% en el consumo de combustible y
mejorando la habitabilidad.
EL proyecto HarvestGeek [49] de Michael Alt es un sistema de monitorización y
automatización para plantas que permite controlar el crecimiento y regar de manera
autónoma, siendo fácilmente adaptable desde una planta hasta 26.
Sistemas como Ninja Block [50] permiten controlar de manera remota la
temperatura, si se pulsa el timbre o si se abre una puerta o ventana. Todo ello se hace de
manera autónoma y se informa directamente a un teléfono móvil inteligente (smartphone).
2.1.4.5 PERSONAL
En esta categoría se consideran por ejemplo todos aquellos objetos denominados
“wearables” y los relacionados con el control/ayuda al ser humano. Este campo es otro de
los que más está evolucionando y donde las compañías prevén mayor crecimiento. Existen
cientos de proyectos, algunos de ellos:
• Píldoras inteligentes
Mimo Smart Baby [52] es un proyecto que brinda a los trajes de bebes de sensores
capaces de transmitir a la nube e informar de los ciclos de sueño, respiración, posición,
temperatura, audio etc.
13
2 MARCO TEÓRICO
Otras preocupaciones que amenazan con poner freno a su despegue son las limitaciones de
la infraestructura actual, la falta de interoperabilidad entre sistemas, la fuerte inversión
necesaria en equipos y las barreras psicológicas.
2.1.5.1 EL PRECIO
Cuando Pacific Gas & Electric desplegó una red inteligente masiva para los hogares de la
ciudad de Bakersfield al norte de Los Ángeles, poco se podían imaginar los residentes de la
zona que los contadores de lectura y manipulación remota iban a suponer un esfuerzo
económico adicional por su parte.
Cuando recibieron la primera factura, entendieron que la “inteligencia” se paga hasta tres
veces más cara. Aunque la compañía alegó que el incremento desorbitado era debido a la
ola de calor, la euforia inicial de apuntarse al smart grid se esfumó rápidamente.
Para evitar situaciones de este tipo, empresas como Opower [53] gestionan las expectativas
de los clientes ofreciendo los datos acerca de su consumo y el de sus vecinos para
animarlos a ahorrar energía [54]. De esta manera, el consumidor es consciente de que la
aplicación de Internet de las Cosas requiere también su esfuerzo. Los fabricantes de
electrodomésticos General Electric [55] y Whirlpool [56] también se han apresurado a
desarrollar versiones inteligentes que realizan este seguimiento del consumo por el cliente.
Los sensores que se colocan en objetos cotidianos para medir variables como la
temperatura o el movimiento y enviar esta información a través de Internet, no resultan
demasiado rentables a nivel particular o residencial. Si bien es cierto que los sensores son
cada vez más baratos, muchas de las herramientas y equipos complementarios para su uso
requieren una inversión muy alta.
14
2 MARCO TEÓRICO
Algo similar ocurre con las etiquetas RFID. Los fabricantes de productos, consumidores de
las etiquetas RFID, esperan a que existan en el mercado suficientes lectores RFID. Y
viceversa: los fabricantes de los lectores no quieren aumentar su producción hasta que no
haya una masa crítica de productos con etiquetas integradas. Este círculo vicioso tiene su
efecto en la elección de estándares.
Todo apunta a que la competencia del siglo XXI se producirá en torno a la supremacía de un
sistema operativo que controle todos los mecanismos, de la misma manera que Microso y
Apple tomaron posiciones en la batalla de sistemas operativos de computadoras.
Hoy por hoy, los dispositivos que dotan de “inteligencia” a las ciudades funcionan sobre
sistemas fragmentados e incompatibles, lo que impide su interacción y el lanzamiento de
procesos automatizados en cadena, algo que está en el corazón de IoT.
Según los expertos del Future Trends Forum, para reducir la fragmentación hay que
empezar por elegir “ganadores” e intentar que una mayoría apoye una solución de facto
estándar.
Aunque se ha visto una solución temporal en el open source, ciertas aplicaciones no
admitirán sistemas de colaboración tan abiertos.
Debido la necesidad de garantizar las máximas medidas de seguridad con la aparición
continua de nuevas tecnologías, es necesario pensar en los retos de privacidad y seguridad
en la transición hacia el Internet de las Cosas.
Cantidades ingentes de información se transferirán y estarán al alcance de mucha gente.
Personas sin autorización podrán acceder a datos y extraer información de perfiles de
usuario con fines comerciales o, incluso, criminales.
15
2 MARCO TEÓRICO
Por su parte, Google desarrolló una tecnología que permite el reconocimiento facial de un
rostro [57], simplemente con sacar una foto a una persona por la calle, se podrá poner en
relación con información disponible en Internet, por ejemplo, una cuenta de Facebook.
El desarrollo tecnológico permite además localizar objetos y, por lo tanto, a sus
propietarios. Por ejemplo, hay padres en Japon que colocan etiquetas RFID en las mochilas
de sus hijos para ser informados por SMS de todo movimiento que hacen.
En el extremo contrario, ya hay un grupo de casi 250.000 usuarios que han solicitado que
Google Street View [58] difumine sus casas a raíz de un proyecto de ley en Alemania que
pretende endurecer la normativa de privacidad en torno a este servicio.
En algunos casos parece que se tratara de redefinir objetos ya existentes y que la tecnología
viene impulsada más por una gran oferta que por una amplia demanda. No obstante, ¿qué
ocurre con los beneficios sociales?
Aun así, parece que existe una gran oportunidad para aquellas empresas que puedan reunir
una gran variedad de servicios de internet bajo un mismo techo. Algunos expertos se
preguntaban si en un futuro nuestros hogares se convertirían en un nuevo campo de batalla
entre las grandes corporaciones intentando hacerse con el control de todo lo necesario
para operar nuestras casas, desde la conexión a Internet hasta la calefacción y el riego del
jardín.
16
2 MARCO TEÓRICO
2.2 BEACON
Los beacons son dispositivos que transmiten pequeñas señales (piezas de información)
anunciando su presencia a los dispositivos que se encuentren dentro de su radio de
alcance, utilizando la tecnología BLE (Bluetooth Low Energy).
La mayor ventaja de Bluetooth LE sobre las versiones anteriores, es la eficiencia en el
consumo de la energía. Gracias a eso los beacons pueden durar varios meses y hasta años
con una sola pila boton (CR2477).
Esto brinda a las aplicaciones nuevas posibilidades de reconocimiento de ubicación.
Cuando un smartphone entra en el rango de alcance de la señal de un beacon, la aplicación
instalada escucha la señal transmitida y puede responder en consecuencia. Por ejemplo, si
se colocan beacons en una tienda, cuando un cliente se acerque a cierto producto la
aplicación de esa tienda (instalada en su smartphone) podría mostrar una oferta especial
para ese producto; en una visita a un museo, la app del museo proporcionará información
sobre una pintura cercana; en un estadio, la app del mismo informará los asientos libres
más próximos; etc. todo en función de la ubicación y la proximidad del smartphone a un
beacon.
17
2 MARCO TEÓRICO
● Travel Radar [59] es una aplicación para hacer seguimiento del equipaje utilizando
beacons. Solo es necesario colocar un beacon dentro del equipaje y la aplicación
podrá informar cuando el equipaje se encuentre cerca y a que distancia se
encuentra. La distancia máxima es de unos 20 metros aproximadamente.
● Launch Here [60], es una aplicación que funciona como un lanzador rápido que
permite programar el teléfono para reconocer su presencia en un lugar específico
(utilizando la proximidad a beacons) y llevar a cabo acciones específicas, por
ejemplo, encender las luces en la casa cuando se ingrese a la misma, reproducir
Spotify cuando se encuentre cerca de la sala de estar, iniciar el temporizador
cuando se encuentre al lado de la máquina de café, entre otros.
● En Amberes, Europa, hay un museo que muestra la forma en que los beacons
conectan el arte y la tecnología. La agencia digital Prophets creó una aplicación
móvil para Rubens House [63], que transforma por completo la experiencia
tradicional de los visitantes al museo. Crearon una forma de experimentar una
mezcla atractiva de obras físicas de uno de los más grandes pintores, con un
recorrido digital de su vida.
● Tulpenland [64] desarrolló una aplicación [65] para combinar el placer de caminar
por los jardines de tulipanes, con un recorrido digital a través de la historia de una
de las flores más conocidas de la tierra. El objetivo era convertir la historia en una
parte integral de toda la experiencia. Esta aplicación, interactúa con beacons
distribuidos a lo largo de todo el jardin.
18
2 MARCO TEÓRICO
cercanos (dentro del radio de alcance) y pueden ser utilizados por distintas aplicaciones
para disparar eventos tales como mensajes, notificaciones push, u otras.
La principal ventaja de Bluetooth LE es que se requiere un mínimo de energía para los
dispositivos que emiten señales BLE. Debido a que el bajo consumo de energía es el foco, el
tipo de datos/información enviada por estos dispositivos también es mínimo.
Dicho esto, un dispositivo BLE no funciona para transferencia de audio, video o para ser
usado por un tipo de aplicación que requiere gran ancho de banda o de grandes cantidades
de datos.
19
2 MARCO TEÓRICO
EL CONTEXTO Y LA NUBE
Los beacons no se conectan a Internet por si solos. La aplicación tampoco necesita
conectividad para ser disparada por un beacon, pero generalmente cuando se dispara un
evento en la app es necesario consultar información alojada en la nube, por eso es que
generalmente las aplicaciones que interactúan con beacons están conectadas a la nube.
20
2 MARCO TEÓRICO
2.3 BLUETOOTH
La tecnología Bluetooth es el estándar global inalámbrico que permite la Internet de las
Cosas (IoT).
Creado en 1994, la tecnología Bluetooth®[7] se concibió como una alternativa inalámbrica
de los cables de datos, realizando el intercambio de datos a través de transmisiones de
radio.
Uno de los usos más populares para Bluetooth históricamente ha sido de audio
inalámbrico, desde auriculares y conectividad manos libres en los autos hasta los altavoces
y auriculares inalámbricos que transmiten música de un teléfono o tablet.
Para lograrlo se utiliza una versión de Bluetooth llamada BR/EDR [8] (velocidad de bit /
velocidad de datos mejorada), que está optimizada para el envío de un flujo constante de
datos de alta calidad (por ejemplo, música) con un consumo eficiente de energía.
21
2 MARCO TEÓRICO
Originalmente diseñado por Nokia en 2006 como Wibree [10] antes de ser aprobada por el
Bluetooth Special Interest Group (SIG), los autores no estaban tratando de proponer otra
solución inalámbrica innovadora, que intente resolver todos los problemas posibles. Desde
el principio, el objetivo era diseñar un estándar de radio con el menor consumo de energía
posible, específicamente optimizado para el bajo costo, bajo ancho de banda, baja
potencia y baja complejidad.
Su eficiencia y optimización de la energía permite su uso en dispositivos que transmiten
bajos volúmenes de datos para comunicarse con los dispositivos más grandes, como
smartphones o tablets, y utilizan pequeñas fuentes de energía como pilas de botón, para
funcionar por largos períodos de tiempo. Esto significa que diferentes tipos de dispositivos
de Internet de las Cosas como los beacons, dispositivos de deportes o de cuidado de salud
por ejemplo, pueden operar durante un año o más en una sola carga de batería.
La principal ventaja de Bluetooth LE es que se requiere un mínimo de energía para los
dispositivos que emiten o detectan señales BLE. Debido a que el bajo consumo de energía
es el foco, el tipo de datos/información enviada por estos dispositivos también es mínimo.
Dicho esto, un dispositivo BLE no funciona para transferencia de audio, video o para ser
usado por un tipo de aplicación que requiere gran ancho de banda o de grandes cantidades
de datos.
22
2 MARCO TEÓRICO
En comparación con otros estándares inalámbricos, el rápido crecimiento de BLE es
relativamente fácil de explicar: BLE ha crecido rápidamente debido a que su destino está
íntimamente ligado al crecimiento de los smartphones, tablets, y la informática móvil. La
temprana y activa adopción de BLE por pesos pesados de la industria móvil como Apple y
Samsung le abrieron las puertas para una mayor implementación de BLE.
Mientras el mercado de los teléfonos móviles y tablets se vuelve cada vez más maduro, la
necesidad de conectarse con el mundo exterior a través de estos dispositivos tiene un
enorme potencial de crecimiento, y ofrece a los vendedores una oportunidad única de
proporcionar soluciones innovadoras.
BLE reduce sustancialmente el consumo de energía del Bluetooth clásico tanto en el
máximo consumo como en el consumo promedio, y en modo inactivo, con eficiencias
energéticas que pueden ser 20 veces mayor que Bluetooth clásico.
• Interoperability (interoperabilidad)
Para tener éxito, cualquier tecnología inalámbrica debe asegurarse de que todos los
dispositivos que lo implementan pueden comunicarse entre sí. Para asegurarse de que los
dispositivos BLE pueden comunicarse con todos los demás dispositivos BLE, Bluetooth SIG
se basa en la definición de fuertes procesos de calificación y procesos de pruebas de
interoperabilidad. Además, dado que BLE opera en la banda de frecuencia de 2.4 GHz,
abierta y de licencia libre (al igual que las versiones anteriores de Bluetooth), los
fabricantes y los usuarios de dispositivos Bluetooth v4.0 pueden contar con estos
dispositivos para interoperar con aplicaciones alrededor de todo el mundo.
• Robustness (Robustez)
23
2 MARCO TEÓRICO
Como el Bluetooth clásico, BLE utiliza saltos de frecuencias para asegurar una
transmisión robusta, incluso en presencia de otras tecnologías inalámbricas. Esta
característica hace que sea muy adecuado para el entorno doméstico, donde varios
dispositivos utilizando diferentes protocolos, como Wi-Fi, utilizan el mismo espectro de 2.4
GHz en un espacio reducido.
• Simplicity (Sencillez)
BLE es la tecnología más eficiente para la transferencia de cantidades muy
pequeñas de datos. Es compatible con paquetes de datos muy cortos (desde 8 octetos
como mínimo hasta 27 octetos máximo) que se transfieren a 1 Mbps. Esta y otras
características hacen a BLE una gran opción para aplicaciones en las que la tasa de bits
máxima es de unos pocos cientos de bits por segundo, o menos.
BLE está optimizado para el envío de pequeñas piezas de información con el
mínimo retraso (latency). El tiempo total de envío de datos es generalmente menor a 6 ms,
y tan bajo como 3 ms (en comparación con los 100 ms de Bluetooth clásico).
• Range (Alcance)
24
2 MARCO TEÓRICO
• single-mode
• dual-mode
Dispositivos BLE single-mode no son interoperables con los dispositivos de Bluetooth
clásico, pero sí con otros dispositivos single-mode o dual-mode. Los dispositivos
dual-model, por otro lado, son compatibles y pueden interactuar con otros dispositivos que
admiten cualquier versión de la tecnología Bluetooth.
Es importante tener en cuenta que la incorporación de BLE a dispositivos con Bluetooth
clásico es una tarea relativamente fácil, y no muy costosa. A diferencia de otras tecnologías
alternativas similares, BLE puede incorporarse en los miles de millones de dispositivos
Bluetooth existentes que ya se encuentran en el mercado.
2.4.5 ESPECIFICACIÓN
En junio de 2010, el Bluetooth SIG introdujo Bluetooth LE con la versión 4.0 de la
Especificación Bluetooth. La especificación había pasado varios años creándose y la
mayoría de las secciones y decisiones controvertidas fueron finalmente resueltas por las
empresas que participaron en el proceso de desarrollo, con algunas preocupaciones que
dejaron a ser tratadas en posteriores actualizaciones de la especificación.
La primer actualización importante, Bluetooth 4.1, fue lanzada en Diciembre de 2013.
Aunque los bloques básicos de construcción, procedimientos y conceptos permanecieron
25
2 MARCO TEÓRICO
intactos, esta versión también introdujo varios cambios para mejorar la experiencia del
usuario.
Al igual que todas las especificaciones Bluetooth, la 4.1 es compatible con la 4.0, lo que
garantiza la correcta interoperabilidad entre dispositivos que implementen diferentes
versiones.
Luego de la versión 4.1, en Diciembre de 2014, se lanzó la versión 4.2 [11]. Esta actualización
introdujo nuevas e interesantes características significativas para los desarrolladores y
fabricantes y una mejor experiencia de usuario para sus clientes. Bluetooth 4.2 hace que
Bluetooth sea aún más inteligente y más rápido, y la tecnología inalámbrica ideal para el
Internet de las Cosas (IoT).
Hoy en dia esta versión es la referencia actual para todos aquellos que buscan desarrollar
productos BLE. La rápida adopción de las nuevas versiones de la especificación y el hecho
de que la versión 4.2 estandariza varias prácticas comunes entre los dispositivos hace que
sea recomendable apuntar a la versión más reciente disponible.
2.4.6 CONFIGURACIONES
La especificación Bluetooth cubre tanto Bluetooth clásico como Bluetooth Low Energy.
Estos dos estándares de comunicación inalámbrica no son directamente compatibles y
dispositivos Bluetooth calificados en cualquier versión de la especificación antes de la 4.0
no puede comunicarse de ninguna manera con un dispositivo BLE.
El protocolo en sí, las capas superiores del protocolo, y las aplicaciones, son diferentes e
incompatibles entre las dos tecnologías.
Al igual que en el Bluetooth clásico, la pila de protocolos BLE se compone de dos partes
principales: Controller y Host y la capa Application. Ver Figura 4.
Cada uno de estos bloques básicos se divide en capas que proporcionan la funcionalidad
necesaria para operar:
26
2 MARCO TEÓRICO
• Host
• Application
Es la capa más alta y responsable de contener la lógica, interfaz de usuario, y la
manipulación de datos. La arquitectura de una aplicación es altamente dependiente de
cada implementación particular.
A continuación se presenta una descripción básica de las partes más relevantes para
comprender el funcionamiento de BLE.
27
2 MARCO TEÓRICO
El Generic Access Protocol (GAP) determina cómo los dispositivos interactúan entre sí,
especifica cómo los dispositivos realizan procedimientos tales como la detección de
dispositivos o la conexión, entre otros, para garantizar la interoperabilidad y permitir el
intercambio de datos que se lleva a cabo entre dispositivos de diferentes fabricantes.
GAP es el que permite a los dispositivos Bluetooth Low Energy interoperar entre sí.
Proporciona un framework que cualquier implementación BLE debe seguir para permitir a
los dispositivos descubrirse unos a otros, difundir datos, establecer conexiones seguras, y
realizar muchas otras operaciones fundamentales de manera estándar y de universal
entendimiento. GAP es uno de los puntos de entrada de más bajo nivel cuando se
proporciona una API para los desarrolladores de aplicaciones.
En el nivel más alto de la pila de protocolos de BLE, GAP especifica roles de dispositivos,
para el descubrimiento de otros dispositivos y servicios, el establecimiento de una
conexión y seguridad.
ROLES
GAP especifica cuatro roles que un dispositivo puede adoptar para unirse a una red BLE:
• Broadcaster (Locutor)
Un sensor de temperatura que transmite las lecturas de temperatura a cualquier dispositivo
interesado es un buen ejemplo de un broadcaster. Los broadcaster envían datos en
paquetes de publicidad (advertising) y los datos son accesibles para cualquier dispositivo
que está escuchando.
• Observador
El rol observador escucha los datos incluidos en los paquetes de publicidad
(advertising) de los dispositivos broadcaster. Por ejemplo, un dispositivo con una pantalla
es una aplicación típica de este rol, tal como un display que muestra datos de la
temperatura de un sensor de temperatura.
28
2 MARCO TEÓRICO
Escanea repetidamente las frecuencias preestablecidas para recibir cualquier paquete de
publicidad que esté emitiendo en ese momento un broadcaster dentro de su rango de
alcance.
• Central
• Periférico
Este rol utiliza paquetes de publicidad (advertising packages) para permitir a
dispositivos centrales encontrarlos y, posteriormente, establecer una conexión con él. El
protocolo BLE está optimizado para requerir pocos recursos para la implementación de
este rol, al menos en términos de poder de procesamiento y memoria.
Cada dispositivo en particular puede operar en uno o varios roles a la vez. Muchos
desarrolladores erróneamente tratan de asociar los roles clientes y servidores de BLE GATT
con roles de GAP. No hay conexión entre ellos, y cualquier dispositivo puede ser un cliente,
un servidor GATT, o ambos, dependiendo de la aplicación y situación.
Los roles cliente / servidor de GATT dependen exclusivamente de la dirección en la que se
realizan las solicitudes de datos y se envían las respuestas, mientras que los roles de GAP se
mantienen constantes como periférico para el fitness tracker y central para el smartphone.
El Attribute protocol (ATT) define la comunicación entre dos dispositivos que juegan los
roles de servidor y cliente, respectivamente.
29
2 MARCO TEÓRICO
Un cliente solicita datos desde un servidor, y un servidor envía los datos a los clientes. El
protocolo es estricto cuando se trata de la secuencialidad: si una solicitud sigue pendiente
(sin respuesta porque no ha sido recibida todavía) no pueden enviarse más solicitudes
hasta que se reciba y se procese la respuesta. Esto se aplica a ambas direcciones de forma
independiente en el caso en que dos pares esten actuando tanto como cliente y servidor.
Cada servidor contiene datos organizados en forma de atributos. Un atributo es una
estructura de datos que almacena la información gestionada por el GATT, el protocolo que
opera en la parte superior del ATT.
Cada servidor contiene datos organizados en forma de atributos, a cada uno de los cuales
se asigna un identificador único universal (UUID) de 16-bit, un conjunto de permisos y, por
último, por supuesto, un valor. El UUID especifica el tipo y la naturaleza de los datos
contenidos en el valor.
El perfil de atributos genéricos (GATT) establece en detalle cómo intercambiar todos los
datos en una conexión BLE. En contraste con GAP, que define las interacciones entre los
dispositivos, GATT se ocupa de los procedimientos y formatos de transferencia de datos.
GATT también proporciona el framework de referencia para todos los perfiles basados en
GATT que cubren los casos de uso precisos y garantizan la interoperabilidad entre
dispositivos de diferentes fabricantes. Por lo tanto, todos los perfiles del estándar BLE se
basan en GATT y deben cumplir con el para funcionar correctamente. Esto hace a GATT una
sección clave de la especificación BLE, dato relevante para las aplicaciones y los usuarios
deben tener el formato, empaquetado y enviado de acuerdo a sus reglas.
GATT utiliza el Protocolo de Atributo (ATT) como su protocolo de transporte para
intercambiar datos entre dispositivos. Estos datos se organizan jerárquicamente en
secciones denominadas servicios, que agrupan conceptualmente piezas de datos de
usuario llamadas características.
ROLES
Los roles que los dispositivos que interactúan pueden adoptar son:
• Cliente
Envía peticiones a un servidor y recibe respuestas del mismo. El cliente GATT no
sabe nada de antemano acerca de los atributos del servidor, por lo que primero debe
30
2 MARCO TEÓRICO
preguntar acerca de la presencia y naturaleza de esos atributos realizando un
descubrimiento de servicios.
Después de completar este descubrimiento, puede entonces comenzar a leer y escribir
atributos que se encuentran en el servidor.
• Servidor
El servidor GATT corresponde al servidor del Protocolo Atributo (ATT). Recibe
peticiones de un cliente y envía respuestas. También es el rol responsable de almacenar y
poner datos de usuario a disposición del cliente, organizados en atributos.
Vale la pena mencionar una vez más que los roles del GATT son ambos completamente
independiente de los roles de GAP y también al mismo tiempo compatibles entre sí. Eso
significa que dispositivos que actuan de central o periférico en GAP pueden actuar como
cliente o servidor en GATT.
UUIDs
Un identificador único universal (UUID) es un número de 128 bits (16 bytes) que está
garantizado (o tiene una alta probabilidad) para ser único en el mundo. UUIDs se utilizan en
muchos protocolos y aplicaciones distintas de Bluetooth, y su formato, uso y generación se
especifica en UIT-T Rec. X.667, conocida alternativamente como ISO / IEC 9834-8:2005.
Por eficiencia, y porque 16 bytes tomarían una gran parte de los 27 bytes de longitud del
payload de datos de la Capa de Enlace (LL), la especificación de BLE añade dos formatos de
UUID adicionales: UUIDs de 16 bits y 32 bits.
ATTRIBUTES (Atributos)
La especificación Bluetooth define los atributos en la sección ATT. ATT opera en términos de
atributos y se basa en todos los conceptos expuestos en los atributos para proporcionar
31
2 MARCO TEÓRICO
una serie de unidades de datos de protocolo (PDUs, conocidos comúnmente como
paquetes) que permiten a un cliente acceder a los atributos en un servidor.
GATT establece una jerarquía estricta para organizar los atributos de una manera
reutilizable y práctica, que permite el acceso y recuperación de la información entre el
cliente y el servidor siguiendo un conjunto de reglas que juntas constituyen el framework
utilizado por todos los perfiles basados en el GATT.
Los atributos en un servidor GATT se agrupan en servicios, cada uno de los cuales puede
contener cero o más características. Estas características, a su vez, pueden incluir cero o
más descriptores. El conjunto de servicios se los denomina Perfil.
Esta jerarquía se hace cumplir estrictamente para cualquier dispositivo que requiera
compatibilidad con GATT (en esencia, todos los dispositivos BLE vendidos), lo que significa
que todos los atributos de un servidor GATT se incluyen en una de estas tres categorías, sin
excepciones. Ver Figura 5.
32
2 MARCO TEÓRICO
• Preamble
Utilizado para la sincronización y la estimación de temporización en el receptor.
Siempre es un valor fijo para los paquetes de publicidad: 0xAA.
Permite la identificación de enlace físico en cada paquete. Esta dirección siempre es
fija para los paquetes de publicidad: 0x8E89BED6. Para los paquetes de datos se utiliza una
dirección random para cada conexión.
Código utilizado para validar el paquete de alteraciones no deseadas. Se garantiza
la integridad de los datos transmitidos de todos los paquetes.
El último análisis oficial de SIG, presentado en el documento Bluetooth SIG Analyst Digest
2H 2014 resalta que la tecnología continuó ganando impulso positivo en el segundo
semestre de 2014 con analistas proyectando una fuerte posición de Bluetooth en smart
homes, wearables y todo lo basado en la localización. ABI Research pronosticó que
Bluetooth llevará conectividad portátil en el 2015 con una participación del 33 por ciento en
el mercado. Los analistas continuaron discutiendo el enorme potencial del mercado de
33
2 MARCO TEÓRICO
smart homes. Strategy Analytics estima que el mercado de casa inteligente llegará a casi $
115 mil millones en 2019 [12]. La firma analista IHS predice que el indoor position es el
siguiente paso lógico en un mundo conectado, y hace hincapié en el papel crucial que juega
la tecnología Bluetooth[13]. Del mismo modo, Bluetooth puede convertirse en una
alternativa viable a la NFC, ya que tiene más opciones de seguridad y una historia más larga
con los smartphones [14].
● GigaOM Research recalca que Bluetooth jugará un papel cada vez más importante
en el mercado de smart home en los próximos años[15] .
● Strategy Analytics predijo que las ventas mundiales de teléfonos inteligentes
crecerá un 30% durante los próximos seis años, y encuentra que Bluetooth es una
de las tecnologías inalámbricas más populares que se encuentran en los teléfonos
inteligentes y los teléfonos con funciones hoy.
34
2 MARCO TEÓRICO
2.5.1 FUNCIONAMIENTO
BLE es un sistema que se centra en la publicidad de un único mensaje para todos. La
tecnología BLE transmite repetidamente un mismo paquete o mensaje. Cuando un
dispositivo móvil se encuentra dentro de su rango de alcance, recibe la señal. Así, la app en
el dispositivo obtiene el ID del beacon y realiza la acción correspondiente.
NFC en cambio es una comunicación uno a uno. El dispositivo móvil se acerca a un equipo
con el chip NFC, que cuenta con un microprocesador interno. Tras activarlo, se ejecuta un
programa que suele transmitir un mensaje a la memoria del dispositivo móvil. Éste ejecuta
la acción que determina dicho mensaje.
En el caso de los beacons, ese alcance se amplía a 50 metros, lo que efectivamente puede
dotar a esta tecnología de unas posibilidades mucho más amplias. Aunque la implantación
de chips NFC en dispositivos móviles es cada vez más amplia, la tecnología estándar que sí
integran los fabricantes es Bluetooth, y esa nueva versión 4.0 con el modo de eficiencia
energética está cada vez más presente en estas soluciones.
35
2 MARCO TEÓRICO
NFC en cambio no precisa de batería dedicada, ya que viene integrada en los dispositivos.
Usa ondas de corto alcance para permitir el intercambio de información entre dispositivos.
2.5.4 SEGURIDAD
Aunque no hay un riesgo inherente en la transmisión de datos via BLE, sí puede existir
alguno en la app que traduce la señal. No obstante, este supuesto es remoto. Si se
conociese el enlace al servidor y los datos del beacon podrían interceptarse los datos e
incluso entrometerse en el mensaje y enviar uno ajeno. Aunque esto es improbable, entre
otras cosas por la dificultad que supone acceder al enlace del servidor. Además, cuenta con
otro filtro de seguridad, el protocolo HTTPS (usada por los bancos) que hace prácticamente
imposible el robo de información.
Esa tecnología de Google llegó como contrapartida a AirDrop, que es únicamente
compatible con equipos de Apple (móviles y ordenadores), y que permite esa transferencia
de ficheros tanto a través de Bluetooth como a través de conexiones WiFi. Apple dejó clara
con esta propuesta su interés nulo en NFC.
El futuro de NFC parece complicado a pesar de los esfuerzos de Google o de fabricantes
como Sony por impulsarlo. Lo mismo ocurre con otros estándares inalámbricos que han
tratado de imponerse en el mercado de la Internet de las Cosas, como ZigBee o Z-wave[16],
con poco apoyo y que también tienen un enemigo claro: el citado Bluetooth Low Energy, el
candidato perfecto a convertirse en compañero inseparable de los dispositivos móviles.
36
2 MARCO TEÓRICO
El primer teléfono móvil en usar el término 'smartphone' fue el Ericsson GS88 el cual era
más avanzado y poseía funciones de correo electrónico, navegación web, reloj mundial, un
teclado QWERTY físico, modo avión, puerto infrarrojo, conexión a PC, etc.
Sin embargo el evento que cambió la percepción de lo que era un smartphone fue el
anuncio del iPhone y de iOS en 2007, revolucionando la industria de la telefonía móvil y de
los smartphones. Este nuevo OS dio paso a Android OS de Google (el mayor competidor de
iOS) lanzado unos meses después del anuncio del iPhone, y generó cambios en la interfaz
de Windows Phone OS, de Blackberry OS, Symbian OS, etc.
El auge de este tipo de dispositivos ha conllevado la aparición de nuevas profesiones.
Desarrolladores, programadores, creador de videojuegos o de aplicaciones móvil son
únicamente algunas de las que tienen más futuro en este ámbito. Además cabe destacar
que son de las mejor remuneradas.
37
2 MARCO TEÓRICO
Desde aplicaciones que ayudan en el día a día más profesional hasta las que tienen más
que ver con el ocio o el tiempo libre. El mercado es grande y no tiene límites.
De hecho, esos límites están tan poco claros que mucha gente ha visto la posibilidad de
negocio en las aplicaciones móviles. Cada vez más empresas y personas usan estos
programas para crear negocios, ganar dinero y publicitarse a través de aplicaciones para
smartphones. Y es que los teléfonos móviles de última generación son un sector en
expansión constante.
38
2 MARCO TEÓRICO
La interfaz de usuario de iOS se basa en el concepto de manipulación directa, usando
gestos multi-touch. La interacción con el sistema operativo incluye gestos como swipe, tap,
pinch, los cuales tienen definiciones específicas en el contexto del sistema operativo iOS y
su interfaz multi-touch. Acelerómetros internos son utilizados por algunas aplicaciones
para responder a los movimientos shake del aparato o la rotación en tres dimensiones.
El sistema operativo se dio a conocer con el iPhone en la Conferencia Macworld, en Enero
2007, y publicado en Junio de ese año. En Octubre de 2007, Apple anunció que un SDK
nativo estaba en fase de desarrollo y que planeaba ponerlo "en manos de los
desarrolladores en febrero". En Marzo de 2008, Apple lanzó la primer versión beta, junto con
un nuevo nombre para el sistema operativo: "iPhone OS".
En junio de 2010, Apple renombró a iPhone OS como iOS. Para ese entonces ya existían el
iPod Touch, y el iPad, que junto con el iPhone, usaban este SO.
2.7.1.1 EVOLUCION
Cuando Apple anunció el iPhone en 2007, los sistemas operativos touch-screen para
teléfonos estaban lejos de ser algo standard.
iPhone presento una nueva interfaz de usuario basada en una pantalla multitáctil y un
nuevo so ware, permitiendo a los usuarios controlar el iPhone con sólo sus dedos. iPhone
también marcó el comienzo de una era de potencia y sofisticación de so ware nunca antes
visto en un dispositivo móvil, que redefinió completamente lo que los usuarios pueden
hacer en sus teléfonos móviles [17]. Steve Jobs, CEO de Apple, consideraba que este
cambio en la interfaz de usuario era la mas revolucionaria desde la aparicion del mouse en
la PC.
39
2 MARCO TEÓRICO
La primera generación del sistema operativo, llamado "iPhone OS," ofrecía Google Maps,
iTunes, el navegador Safari y algunos widgets, como el clima, email, calendario, cámara y
fotos, reloj, notas y calculadora.
Con del lanzamiento del SDK en el 2008, meses después Apple lanzó el Apple Store donde
miles de aplicaciones creadas por desarrolladores externos a la compañía fueron
publicadas. Con el paso del tiempo Apple siguió innovando en su sistema operativo,
desarrollando nuevas aplicaciones como Siri, iBook, FaceTime, Maps y haciéndolo cada vez
más robusto y poderoso.
La última versión de iOS en el mercado es iOS 9 (2015) [66] que propone mejoras en
aplicaciones existentes, introduce el touch 3D, mayor autonomía y seguridad, nuevas
aplicaciones y cambios para lograr una interfaz lo más elegante e intuitiva posible.
En el 2008 Apple publicó un SDK para que desarrolladores puedan crear aplicaciones para
el iPhone, iPad y el iPod Touch. Estas aplicaciones están disponibles a través del App Store
[67] para dispositivos con el sistema operativo iOS.
iOS es el segundo sistema operativo móvil más popular del mundo por ventas, después de
Android.
A finales del 2011, iOS representó el 60% del mercado de los teléfonos inteligentes y tablets.
En Enero 2016, StatCounter informó que iOS se utiliza en el 25% de los teléfonos inteligente
y tablets del mundo[18].
40
2 MARCO TEÓRICO
Nuevas mejoras en el rendimiento y usabilidad llegaron a Core Bluetooth en iOS 7. El
almacenamiento en caché de datos periféricos añadido en iOS 6, que mejora la eficiencia
de la batería, se ha mejorado aún más con los datos de cada característica y servicio.
Otra tecnología muy interesante que surge con iOS 7 es iBeacon[19][20]. Si bien
técnicamente es parte del Framework Core Location, iBeacon proporciona una
funcionalidad similar al existente LE Proximity Profile de Core Bluetooth, pero con mejoras
para los servicios de localización.
Un dispositivo con tecnología iBeacon se puede utilizar para establecer una región
alrededor de un objeto. Esto permite que un dispositivo iOS pueda determinar cuándo se
ha entrado o salido de dicha región, junto con una estimación de la proximidad a un
iBeacon: lejos, cerca o inmediato. La idea es que la aplicación pueda cambiar su estado
cuando el dispositivo del usuario se mueve dentro del alcance del iBeacon mientras se
mueve frente a él.
Debido a que iBeacon apareció con iOS 7, los dispositivos de Apple habilitados a interactuar
con esta tecnología son:
● iPhone 4S (o posterior)
● iPod touch (5ta generacion)
● iPad (3ra generacion or posterior)
● iPad mini
iBeacon es un protocolo de comunicación desarrollado por Apple que brinda a las
aplicaciones nuevas posibilidades de reconocimiento de ubicación. Aprovechando
Bluetooth Low Energy (BLE), un dispositivo con tecnología iBeacon se puede utilizar para
establecer una región alrededor de un objeto.
41
2 MARCO TEÓRICO
Esto permite que un dispositivo iOS pueda determinar cuándo se ha entrado o salido de
dicha región, junto con una estimación de la proximidad a un beacon. Aquellos beacons
que implementan la tecnología iBeacon se los denominan iBeacon.
IDENTIFICADOR iBEACON
Los beacons transmiten pequeños paquetes de datos, que contienen su iBeacon ID e
información sobre la intensidad de la señal, por lo que el teléfono puede comprender que
beacon está oyendo y cuán lejos se encuentra.
El UUID es compartida por todos las sucursales. Esto permite a un dispositivo iOS utilizar un
identificador único para reconocer cualquiera de las sucursales. Cada una de ellas, San
Francisco, París y Londres, se le asigna un valor mayor único, que permita un dispositivo
identificar en qué sucursal específica se encuentra.
42
2 MARCO TEÓRICO
INTEGRANDO iBEACON
• Rangig
Los eventos se disparan basados en la proximidad de la aplicación a un beacon.
Solo funciona cuando la aplicación se encuentra en foreground.
Esos dos tipos de interacción permiten desarrollar aplicaciones que aprovechan el contexto
de ubicación por ejemplo audio guías en un museo, pagos móviles, indoor navigation, etc.
iBeacon permite determinar qué tan cerca está un dispositivo de un beacon, proceso
denominado Ranging. Basándose en escenarios de uso común, iOS aplica filtros para
estimar la precisión y determinar un estimado de proximidad a un beacon. Esta estimación
se indicará mediante uno de los siguientes estados de proximidad:
• Immediate
Esto representa un alto nivel de confianza de que el dispositivo se encuentra
físicamente muy cerca del beacon, a centímetros de distancia.
• Near
Con una clara línea de visión desde el dispositivo al beacon, esto indicaría una
proximidad de aproximadamente de 1 a 5 metros. Sin embargo, si hay obstrucciones entre
el dispositivo y el beacon que causan atenuación de la señal, este estado puede no ser
reportado a pesar de que el dispositivo está en este rango.
• Far
Este estado indica que un beacon pudo ser detectado pero la confianza en la
precisión es demasiado baja para determinar que se encuentra Near o Immediate. Una
consideración importante es que el estado Far no implica necesariamente "no" físicamente
cerca del beacon. Cuando se indica un estado Far, se está basando en la exactitud para
determinar la potencial proximidad al beacon.
43
2 MARCO TEÓRICO
• Unknown
La proximidad de la baliza no se puede determinar. Esto puede indicar que no
existen medidas suficientes para determinar el estado.
2.7.2 ANDROID
Android es un sistema operativo basado en el kernel de Linux. Fue diseñado principalmente
para dispositivos móviles con pantalla táctil, como teléfonos inteligentes y tablets. y
también smart watchs, televisores y automóviles. Inicialmente fue desarrollado por
Android Inc., empresa que Google respaldó económicamente y más tarde, en 2005, la
compró. Android fue presentado en 2007 junto la fundación del Open Handset Alliance, un
consorcio de compañías de hardware, so ware y telecomunicaciones, para avanzar en los
estándares abiertos de los dispositivos móviles. En el año 2008 la primer versión del
sistema operativo, Android 1.0, se lanzó al mercado con la salida del teléfono fue el
T-Mobile G1.
La interfaz de usuario de Android se basa principalmente en la manipulación directa,
usando gestos táctiles sobre los objetos de la pantalla como swiping, pellizcar, tapping y
pinching, junto con un teclado virtual para la introducción de texto.
Al contrario que otros sistemas operativos para dispositivos móviles como iOS o Windows
Phone, Android se desarrolla de forma abierta y se puede acceder tanto al código fuente como a
la lista de incidencias donde se pueden ver problemas aún no resueltos y reportar problemas
nuevos.
2.7.2.1 EVOLUCIÓN
Android ha visto numerosas actualizaciones desde su liberación inicial. Estas
actualizaciones al sistema operativo base típicamente arreglan bugs y agregan nuevas
funciones. La primera versión de Android (1.0), ofrecía un navegador web, Youtube, Google
Maps, Google Talk, sincronización de Gmail, Goolge Calendar y Goolge Contacts; y otros
widgets como alarma, calculadora, cámara y fotos.
Con el lanzamiento de nuevas versiones Android fue mejorando aspectos como el
multitasking y consumo de batería, desarrollando nuevas aplicaciones como Hangouts,
44
2 MARCO TEÓRICO
En el año 2014, con el lanzamiento de la versión 5.0, Lollipop, se introdujo Material
Design[21], un nuevo lenguaje de diseño de la interfaz de usuario basado en la metáfora de
las “Cards” introducidas por primera vez en Google Now, que establece una jerarquía de las
transiciones y animaciones de imitar la vida real. Es un diseño donde la profundidad, las
superficies, los bordes, las sombras y los colores juegan un papel principal. Este diseño es el
que reemplaza al diseño de interfaz Holo[22] que se ha distribuido en la versión 4 y sus
antecesoras.
La última versión de Android en el mercado es Android 6.0 Marshmallow (2015) que
introduce mejoras en la gestión de la memoria RAM, soporte nativo para archivos MIDI,
selección de texto inteligente entre otros.
En el 2008, Junto con el lanzamiento de Android 1.0, Google también lanzó la primer
versión del SDK de Android, lo que permitió a una gran comunidad de desarrolladores crear
aplicaciones para extender la funcionalidad de los dispositivos. A la fecha, se ha llegado ya
al 1.000.000 de aplicaciones disponibles en el store oficial de aplicaciones de Android:
Google Play [70].
Las aplicaciones se desarrollan habitualmente en el lenguaje Java con Android So ware
Development Kit (Android SDK). Inicialmente el entorno de desarrollo integrado (IDE)
utilizado era Eclipse con el plugin de Herramientas de Desarrollo de Android (ADT). Ahora se
considera como entorno oficial Android Studio [71], descargable desde la página oficial de
desarrolladores de Android.
45
2 MARCO TEÓRICO
A principios de octubre de 2010, Google agregó 20 países a su lista de lugares geográficos
donde los desarrolladores pueden enviar aplicaciones. Para mediados de octubre, la
compra de aplicaciones estaba disponible en un total de 32 países.
En noviembre de 2013 Andy Rubin, uno de los cofundadores de Android, dijo que se
activaban 1.500.000 dispositivos móviles con Android en todo el mundo.
En abril de 2013 se hizo público que Android alcanzó el 92% en ventas de nuevos
smartphones para el trimestre comprendido entre diciembre 2012 y febrero 2013 en
España, seguido de iOS con un 4.4%.
Android 4.3 Jelly Beans (API Level 18) introduce soporte para la plataforma integrada de
Bluetooth LE y proporciona una API para desarrolladores que permite a las aplicaciones
detectar dispositivos BLE. En contraste con el clásico Bluetooth, Bluetooth Low Energy
(BLE) está diseñado para proporcionar significativamente menor consumo de energía. Esto
permite que las aplicaciones Android comunicarse con los dispositivos BLE que tienen
bajos requerimientos de energía, tales como sensores de proximidad, monitores de ritmo
cardíaco, aparatos de fitness, y así sucesivamente.
En Julio de 2015, Google introduce Eddystone[23], un formato abierto para beacons BLE.
multiplataforma, capaz de soportar Android, iOS o cualquier plataforma que soporte
beacons BLE. Se encuentra disponible en GitHub bajo la licencia Apache v2.0 de código
abierto, para uso de todos.
Provee diferentes tipos de paquetes: Eddystone-URL utilizado para la denominada web
física, Eddystone-UID utilizado habitualmente por las aplicaciones nativas en el dispositivo
del usuario, como Google Maps y Eddystone-TLM.
Eddystone ofrece dos beneficios clave para los desarrolladores: mejor contexto semántico y
precisión en la ubicación. Para soportarlo, Google lanzó la plataforma Google beacon[24]
con nuevas API. La API Proximity Beacon[25] permite a los desarrolladores asociar a los
beacons información almacenada en la nube. La API Proximity Beacon provee un registro de
los beacons donde información adicional (llamada attachments), usada por las
aplicaciones, se puede asociar con el ID del beacon. Varios attachments pueden estar
asociados a un solo beacon. Los attachments pueden ser actualizados en tiempo real, y
pueden ser recuperados por una aplicación utilizando la API Nearby[26]. Esta API,
disponible tanto en Android como iOS, hace que sea más fácil para las aplicaciones
46
2 MARCO TEÓRICO
encontrar y comunicarse con los dispositivos y beacons BLE cercanos, proporcionando un
mejor contexto.
2.7.2.5 EDDYSTONE
Al igual que iBeacon es un protocolo de comunicación Bluetooth 4.0 diseñado por Apple,
Eddystone es el protocolo abierto Bluetooth 4.0 de Google.
EDDYSTONE vs iBEACON
● Mientras iBeacon es soportado oficialmente por los dispositivos iOS solamente,
Eddystone tiene soporte oficial para iOS y Android.
● Eddystone es un protocolo abierto, es decir, su especificación está disponible para
todo el mundo.
● El paquete de publicidad de Eddystone y el de iBeacon son diferentes. De hecho,
Eddystone está diseñado para soportar múltiples tipos de paquetes de datos, como
son: Eddystone-UID y Eddystone-URL.
● iBeacon ofrece dos métodos de la API a las aplicaciones para detectar dispositivos
iBeacons: Ranging, que sólo funciona cuando la aplicación está activa, y
proporciona estimaciones de proximidad; y Monitoring, que funciona incluso si la
aplicación no se está en ejecución, y proporciona un binario indicando si la app se
encuentra "dentro de rango" o "fuera de rango" del beacon. Eddystone se basa en
un método único para detectar proximidad a un beacon: Eddystone discovery, que
es similar a iBeacon Ranging. Proporciona estimaciones de proximidad y sólo
funciona cuando la aplicación está activa.
TIPO DE PAQUETES
Eddystone-UID
Eddystone-UID contiene un identificador de un beacon. Una aplicación instalada en
el teléfono puede usar el identificador para disparar la acción deseada, al igual que con
47
2 MARCO TEÓRICO
iBeacon. Mientras que el identificador iBeacon se compone de tres partes: UUID, número
mayor y el número menor de edad, y es de 20 bytes de longitud, Eddystone-UID es de 16
bytes de longitud y se divide en dos partes:
● Namespace (10 bytes) : Tiene el mismo propósito que el iBeacons UUID. En iBeacon,
usualmente se asigna un UUID único para todos los beacons para identificarlos
fácilmente de los beacons de otras personas. En Eddystone-UID, se puede hacer lo
mismo con este namespace.
● Instance (6 bytes): Tiene igual propósito que los números major y minor de iBeacon,
es decir, permiten diferenciar a cada beacon particular.
Eddystone-URL
El paquete Eddystone-URL contiene un solo campo: URL. El tamaño del campo
depende de la longitud de la URL y relaciona directamente en el concepto de web física[27].
Mientras que con iBeacon o Eddystone-UID se necesita de una aplicación que tome el
identificador del beacon y la traduce en ciertas acciones, con Eddystone-URL los datos se
codifican directamente en el paquete de publicidad del beacon. Esto significa que el
usuario puede acceder al contenido, por lo general en forma de un sitio web, sin que el
desarrollador tenga que desarrollar una experiencia nativa.
Es necesario contar con un navegador habilitado para Web física para detectar paquetes
Eddystone-URL. En la actualidad, existen Chrome y Opera para iOS, y más aplicaciones
están llegando, incluyendo Chrome en Android. Alternativamente, se puede construir un
propio navegador de Web física, o usar la aplicación de escaneo de Web física de Google
(disponible en iOS y Android). La dirección URL puede ser una página web normal que
proporciona información relevante para los usuarios, por ejemplo, un beacon junto a un
póster de una película podría transmitir un enlace a un video de YouTube.
Eddystone-TLM
El paquete Eddystone-TLM está diseñado para ser transmitido por el beacon junto a
los paquetes de "datos" (es decir, el UID y/o URL) para poder manejar una flota de beacons.
Los dispositivos Bluetooth cercanos pueden leer estos paquetes y transmitirlos a un
servicio de manejo de flotas. Este servicio puede notificar al propietario de los beacons, por
ejemplo, que la batería se está agotando.
● voltaje de la batería, que puede ser utilizado para estimar el nivel de la batería de
un beacon,
48
2 MARCO TEÓRICO
● la temperatura de baliza,
● número de paquetes enviados desde el beacon desde la última vez que fue
encendido o reiniciado,
● tiempo de actividad del beacon, es decir, el tiempo que se encuentra funcionando
desde la última vez que fue encendido o reiniciado.
49
En este contexto aparecen nuevas tecnologías y dispositivos, y junto con ellos los
problemas y desafíos que deben afrontar los desarrolladores de so ware al momento de
incorporarlos. A lo largo del documento se define un patrón de diseño para prevenir
aquellos problemas típicos y recurrentes que puedan surgir a la hora de desarrollar una
aplicación móvil que interactúa con dispositivos beacon para obtener información del
contexto de los usuarios.
3.1 PATRONES
El término patrón fue utilizado por primera vez por el arquitecto Christopher Alexander en
el libro A Pattern Language: Towns, Buildings, Construction (1977), donde definió una serie
de patrones arquitectónicos.
Según Alexander "Cada patrón describe un problema que ocurre una y otra vez en nuestro
entorno y, a continuación, se describe la esencia de la solución a ese problema, de tal manera
que se puede utilizar esta solución un millón de veces, sin tener que hacer dos veces lo
mismo" [72].
A pesar de que Alexander estaba hablando de patrones en edificios y ciudades, lo que decía
era cierto aplicado a patrones de diseño orientados a objetos. En el so ware, las
soluciones se expresan en términos de objetos e interfaces en lugar de paredes y puertas,
pero la esencia de los dos tipos de patrones es una solución a un problema en un contexto
[73].
Los patrones contienen el conocimiento de experiencias anteriores y pueden utilizarse para
crear nuevas soluciones en contextos similares. Los expertos en cualquier campo,
normalmente no crean nuevas soluciones en cada problema que se presenta, sino que se
50
3 ESPECIFICACIÓN DEL PATRÓN
basan en su experiencia para adecuar soluciones de problemas anteriores (patrones) y
aplicarlos en los nuevos problemas.
En 1987, Ward Cunningham y Kent Beck orientaron los patrones de Alexander hacia la la
informática en su libro Using Pattern Language for OO Programs donde desarrollaban cinco
patrones orientados a la interacción hombre máquina.
Pero es a principio de los 90 cuando los patrones alcanzaron su auge, utilizándose para
aportar soluciones a los proyectos informáticos, con la publicación del libro Design
Patterns escrito por el GoF (Gang of Four). En este caso el patrón se presenta como la
solución a un problema que ocurre infinidad de veces en el entorno. Este libro recogía 23
patrones de diseño aplicados a la programación informática.
Los patrones de diseño hacen que sea más fácil reutilizar diseños exitosos y arquitecturas.
Expresando técnicas probadas como patrones de diseño hace que sean más accesibles a
los desarrolladores de nuevos sistemas. Los patrones de diseño ayudan a elegir
alternativas de diseño que hacen a un sistema reutilizable y evadir alternativas que
comprometan la reutilización [73].
NOMBRE
Beacon Action Manager.
Si bien este proyecto está realizado en un contexto de habla hispana, toda la información
investigada sobre dispositivos beacons, lenguajes de programación móvil, Bluetooth LE,
sistemas operativos móviles, se encuentra en inglés, al igual que el mayor ámbito de
aplicación de la tecnología beacon, es por eso que se decidió utilizar un nombre en inglés
para el patrón.
51
3 ESPECIFICACIÓN DEL PATRÓN
INTENCIÓN
Determinar el comportamiento de las clases básicas que conforman aplicaciones que
interactúan con dispositivos beacon para obtener información del contexto de los usuarios,
ejecutando diferentes acciones cuando ingresan o salen de la región de un beacon o
cuando cambia su proximidad al mismo.
MOTIVACIÓN
A la hora de plantear la arquitectura de una aplicación que se relaciona con beacons para
lograr un mejor conocimiento del contexto del usuario, es necesario conocer cómo
funcionan estos dispositivos y qué es necesario hacer del lado de la aplicación para que el
funcionamiento de la misma y la interacción con los dispositivos sea la correcta.
Debido a que es una tecnología bastante nueva todavía, no existe mucha documentación
confiable sobre esta tecnología , por lo que es necesario invertir cierto tiempo investigando
para poder definir la mejor forma de utilizarla.
ESTRUCTURA
La Figura 8 presenta el modelo estático del patrón de diseño describiendo las clases que
intervienen.
Figura 8: Diagrama de Clases.
52
3 ESPECIFICACIÓN DEL PATRÓN
PARTICIPANTES
Aquí se enumeran y describen las entidades (y sus roles) que participan en el patrón.
1) ManagerController
El rol principal de esta clase es iniciar la búsqueda de beacons próximos a la
aplicación. Para poder lograrlo es necesario que realice ciertas tareas. A continuación se
describen las tareas que la clase debe realizar:
● Determinar el ID de aquellos beacons que a la aplicación le interese saber cuando el
dispositivo móvil se encuentre dentro de su región.
● Determinar el objeto, de tipo ActionHandler, que va manejar los eventos que
ocurran al interactuar con los dispositivos beacons, ya sea porque la aplicación
entra o sale de la región de un beacon, porque la proximidad al mismo cambia, etc.
● Iniciar el escaneo de los beacons que se identifiquen con los ID especificados
anteriormente.
2) ActionHandler
El rol de esta clase es manejar todos los eventos que se disparen cuando la
aplicación se encuentra interactuando con los beacons. La clase ManagerController es la
que determina cuál es el objeto que actúa como ActionHandler.
Los métodos de esta clase se determinan según las APIs o librerías que se utilicen. Son
métodos que se disparan automáticamente cuando ocurren eventos al interactuar con
beacons, ya sea cuando el dispositivo entra o sale de la región del beacon o su proximidad
al mismo cambia.
3) Beacon
El rol de esta clase es representar los beacons detectados por los métodos de la
clase ActionHandler. Representa aquellos beacon con los que está interactuando la
aplicación. En la clase beacon se definen los métodos y atributos propios para este tipo de
53
3 ESPECIFICACIÓN DEL PATRÓN
objetos que van a depender del tipo de aplicación en la que se lo utilice, por ejemplo: id,
nombre, proximidad, etc.
COLABORACIONES
Aquí se explican las interrelaciones que se dan entre los participantes.
ActionHandler es la clase que maneja todos los eventos que se disparan al estar la
aplicación en contacto con los beacons, ya sea porque la aplicación entra o sale de la
región de un beacon, porque cambia la proximidad a un beacon, etc.
Beacon es la clase que representa a todos los beacons detectados en los métodos del
ActionHandler, o sea todos los beacons con los que está interactuando la aplicación.
La Figura 9 describe un diagrama de secuencia mostrando la colaboración entre los
componentes:
54
3 ESPECIFICACIÓN DEL PATRÓN
Figura 9: Diagrama de secuencia genérico.
APLICABILIDAD
Utilizar el patrón Beacon Action Manager en las siguientes situaciones:
● La aplicación necesite ejecutar una acción cuando el dispositivo móvil se encuentre
dentro de la región de beacons específicos. Se necesita identificar cuáles son los
beacons con los que la aplicación va a interactuar.
● Se necesite ejecutar una misma acción o acciones diferentes cada vez que la
aplicación interactúa con los beacons especificados.
55
3 ESPECIFICACIÓN DEL PATRÓN
● Se deban ejecutar acciones específicas cuando el dispositivo móvil ingresa en la
región de un beacon.
● Se deban ejecutar acciones específicas cuando el dispositivo móvil sale de la región
de un beacon.
● Estando el dispositivo móvil dentro de la región del beacon, se deban ejecutar
acciones específicas según la proximidad a la que se encuentre el dispositivo móvil
del beacon.
56
Este ejemplo se realizó utilizando el framework CoreLocation [75] proveído por Apple. A
continuación se detalla el funcionamiento de cada clase.
57
4 APLICACIÓN DEL PATRÓN
CLASE: AddBeaconTableViewController
Al iniciar la aplicación el usuario observa una vista de la clase UIViewController que
contiene un botón ‘+’ (Figura 11). Al presionarlo lo lleva a la siguiente vista de la clase
AddBeaconTableViewController, donde se cargan los datos que permiten identificar al
beacon (UUID, Major y Minor) que se colocará dentro de la valija o bolso (Figura 12).
58
4 APLICACIÓN DEL PATRÓN
Figura 11: vista inicial de la Figura 12: Vista para cargar la
aplicación. información del beacon.
CLASE: SearchViewController
La clase SearchViewController actúa como ManagerController en el patron Beacon Action
Manager.
class
SearchViewController:
UIViewController,
C
BCentralManagerDelegate
{
/
/ v
ariable d
eclaration
var
beaconToRange :
C
LBeaconRegion!
let
locationManager: C
LLocationManager!
var
actionHandler :
A
ctionHandler!
var
centralManager :
C
BCentralManager!
override f
unc
viewDidLoad()
{
super.
viewDidLoad()
.
..
/
/ c
heck
s
tatus
o
f
B
LE
h
ardware
( 1)
centralManager
=
CBCentralManager
(delegate:
self,
q
ueue:
dispatch_get_main_queue
())
59
4 APLICACIÓN DEL PATRÓN
//
r
equests p ermission t
o
u se
l
ocation s
ervices
(
2)
l
ocationManager =
C LLocationManager()
l
ocationManager. requestAlwaysAuthorization ()
//
s
et
t
he A
ctionHandler ( 3)
a
ctionHandler =
A ctionHandler()
l
ocationManager. delegate
= a ctionHandler
//
s
et
b
eacons t o m
onitor ( 4)
setBeaconsToMonitor()
//
s
tart m
onitoring ( 5)
startMonitoring()
.
..
}
60
4 APLICACIÓN DEL PATRÓN
En (2) se solicita al usuario los permisos necesarios para usar los servicios de localización
cada vez que la aplicación se está ejecutando.
En (3) se determina que el objeto actionHandler de tipo ActionHandler va a ser el
encargado de manejar todos los eventos que ocurran al interactuar con los beacons.
En (4) el método setBeaconsToMonitor() determina el ID de aquellos beacons que a la
aplicación le interese saber cuándo el dispositivo móvil se encuentre dentro su región. En
este caso, se toman los datos que el usuario ingreso (UUID, major, minor) inicializando el
objeto beaconToRange.
func
setBeaconsToMonitor() {
/
/ g
et t
he b
eacon i
d v
alues
let
defaults =
NSUserDefaults.standardUserDefaults ()
let
UUID =
NSUUID( UUIDString:
d
efaults.stringForKey(defaultsKeys.keyUUID)!)
let
major =
UInt16( defaults.stringForKey(defaultsKeys.keyMajor)!)
let
minor =
UInt16( defaults.stringForKey(defaultsKeys.keyMinor)!)
// s
et t
he i
d t
o r
ange
b
eaconToRange =
CLBeaconRegion ( p
roximityUUID:
U UID!,
m ajor:
m
ajor!,
m inor:
m
inor!,
i dentifier:
)
""
}
En (5) el método startMonitoring() inicia el escaneo del beacon identificado con los
valores almacenados previamente en el objeto beaconToRange.
func
startMonitoring()
{
l
ocationManager. startMonitoringForRegion
(beaconToRange)
locationManager. startRangingBeaconsInRegion
(beaconToRange)
}
Las aplicaciones pueden interactuar de dos formas con los beacons, es por esto que se
invocan los métodos startMonitoringForRegion() y startRangingBeaconsInRegion()
.
• Ranging: Permite recibir notificaciones cuando la aplicación ya se encuentra dentro del
rango de un beacon y la proximidad al mismo cambia.
61
4 APLICACIÓN DEL PATRÓN
CLASE: ActionHandler
La clase ActionHandler actua como ActionHandler en el patrón Beacon Action Manager. Esta
clase implementa el protocolo CLLocationManagerDelegate que define métodos para
recibir información sobre la localización del dispositivo. Éstos son invocados desde el
thread donde se inició el servicio de localización (el inicio del escaneo de beacons). Este
thread tiene su propio loop de ejecución activo.
Respondiendo
a
e
ventos
d
e L
ocalización:
locationManager(_:didUpdateLocations:)
locationManager(_:didFailWithError:)
locationManager(_:didFinishDeferredUpdatesWithError:)
Pausando
a
ctualizaciones d
e L
ocalización:
locationManagerDidPauseLocationUpdates(_:)
locationManagerDidResumeLocationUpdates(_:)
Respondiendo
a
e
ventos
d
e H
eading
locationManager(_:didUpdateHeading:)
locationManagerShouldDisplayHeadingCalibration(_:)
Respondiendo
a
e
ventos
d
e R
egiones
locationManager(_:didEnterRegion:)
locationManager(_:didExitRegion:)
locationManager(_:didDetermineState:forRegion:)
locationManager(_:monitoringDidFailForRegion:withError:)
locationManager(_:didStartMonitoringForRegion:)
Respondiendo
a
e
ventos
d
e A
lcance, D istancia:
locationManager(_:didRangeBeacons:inRegion:)
locationManager(_:rangingBeaconsDidFailForRegion:withError:)
Respondiendo
a
e
ventos
d
e V
isita:
locationManager(_:didVisit:)
Respondiendo
a
e
ventos
d
e c
ambios d
e A
utorización:
locationManager(_:didChangeAuthorizationStatus:)
class
ActionHandler:
NSObject, C
LLocationManagerDelegate
{
var
notifiedOutOfRange =
false
var
notifiedFound
=
false
var n
otifiedinRange =
false
62
4 APLICACIÓN DEL PATRÓN
v
ar beaconFound : B
eacon!
let defaults =
NSUserDefaults.standardUserDefaults ()
// t
he u
ser
e ntered t
he s
pecified r
egion. (
1)
func
locationManager(manager:
CLLocationManager,
d idEnterRegion r
egion:
CLRegion) {
notifyInRange()
}
/
/ t
he u
ser
l
eft t he
s
pecified r egion.
( 2)
func
locationManager(manager:
CLLocationManager,
d idExitRegion r
egion:
CLRegion) {
notifyOutOfRange()
}
Los métodos en (1) y (2) notifican cuando la aplicación ha entrado o salido de la región
del beacon mostrando una notificación push en el dispositivo como se observa en la figura
14 y 15.
63
4 APLICACIÓN DEL PATRÓN
Una vez dentro de la región de un beacon se ejecuta el método en (3) que determina la
distancia o proximidad del dispositivo al beacon. El método se ejecuta repetidamente
mientras la aplicación se encuentran dentro del rango del beacon, y brinda información
actualizada de la proximidad.
//
o ne
o r m
ore b
eacons a
re i n
r ange. ( 3)
func
locationManager( m anager: CLLocationManager,
d idRangeBeacons b eacons: [
CLBeacon]
,
i nRegion r egion: CLBeaconRegion) {
if
b eacons.count >
0 {
let beacon = b
eacons[0]
if b
eaconFound = =
nil {
// g
et t
he b
eacon f
ound ( 4)
beaconFound = B eacon(beaconfound: b
eacon)
}
/ /
u pdate t he u
ser i
nformation ( 5)
N SNotificationCenter.defaultCenter().postNotificationName (
" NotificationBeacon" ,object: b
eaconFound)
/ /
b ackground n
otifications ( 6)
if b
eaconFound.lastSeenBeacon!. proximity ==
.
Immediate
{
n otifyIsHere()
} else i
f
beaconFound.lastSeenBeacon!. proximity
!=
.
Unknown
{
n otifyInRange()
}
else
{
n otifyOutOfRange()
}
}
}
En (4) se crea un objeto de tipo Beacon con la información del beacon encontrado y en
(5) se notifica al usuario los cambios en la proximidad invocando al método
de la clase SearchViewController. El usuario observará el cambio
NotificationBeacon()
de proximidad como se observa en la figura 16.
64
4 APLICACIÓN DEL PATRÓN
65
4 APLICACIÓN DEL PATRÓN
CLASE: Beacon
La clase Beacon actúa como Beacon en el patrón Beacon Action Manager. Contiene una
variable de tipo CLBeacon que almacena información del beacon encontrado como ser: los
valores UUID, major, minor que permiten identificar al beacon, la proximidad del
dispositivo al beacon, la precisión de la proximidad y la intensidad de la señal emitida por
el beacon.
class
Beacon: NSObject
{
var
lastSeenBeacon: CLBeacon?
override i
nit( ) {
lastSeenBeacon =
CLBeacon( )
}
init( beaconfound: CLBeacon) {
lastSeenBeacon =
b eaconfound
}
}
66
4 APLICACIÓN DEL PATRÓN
4.1.2 DIAGRAMAS
67
4 APLICACIÓN DEL PATRÓN
En el diagrama se modela la secuencia donde la aplicación entra a la región del beacon
corriendo en background.
68
4 APLICACIÓN DEL PATRÓN
69
4 APLICACIÓN DEL PATRÓN
70
4 APLICACIÓN DEL PATRÓN
Al aproximarse a los beacons, la aplicación no solo muestra la información sino que
también la reproduce para que personas con capacidades visuales reducidas puedan
utilizarla también.
Este ejemplo se realizó utilizando el SDK brindado por la empresa Estimote [74] para
interactuar con los beacons. A continuación se detalla el funcionamiento de cada clase.
71
4 APLICACIÓN DEL PATRÓN
CLASE: MainActivity
La vista de esta es la clase que se observa al iniciar la aplicación. Aquí el usuario ingresa el
número de gate al cual quiere dirigirse (Figura 23). Luego, al presionar el botón ‘OK’ se
accede a la siguiente vista de la clase FinderActivity donde se escanean los beacons.
72
4 APLICACIÓN DEL PATRÓN
CLASE: FinderActivity
Esta clase actúa como ManagerController en el patrón Beacon Action Manager.
public
c
lass
FinderActivity extends AppCompatActivity
i mplements SensorEventListener {
private BeaconManager
beaconManager ;
private List<Region> regionList =
new ArrayList<Region>();
private ActionHandler
rangingListener ;
.
..
@
Override
p
rotected v
oid
onCreate(Bundle s
avedInstanceState) {
super .onCreate(savedInstanceState);
s
etContentView(R.layout. activity_finder );
beaconManager
=
new
BeaconManager( this
);
/
/ C
heck B
luetooth ( 1)
S
ystemRequirementsChecker. checkWithDefaultDialogs (t
his
);
/
/ s
et A
ctionHandler ( 2)
rangingListener
= new
ActionHandler( this );
beaconManager .setRangingListener( rangingListener );
73
4 APLICACIÓN DEL PATRÓN
//
s
et
b
eacons
t
o
f
ind
(
3)
setBeaconsToFind();
.
..
}
En (1) se verifica si el Bluetooth en el dispositivo móvil se encuentra activado. De lo
contrario se muestra un mensaje de advertencia al usuario (Figura 24).
En (3) el método setBeaconsToFind() determina el ID de aquellos beacons que a la
aplicación le interese saber cuándo el dispositivo móvil se encuentre dentro su región. En
este caso, se crea un objeto de tipo Region con los valores identificador, UUID, major y
minor de cada beacon y se los agrega en el array regionList como se observa a
continuación.
p
rivate
v
oid
setBeaconsToFind(){
R
egion
r
egion =
new
Region(
"cofeeShop"
,
74
4 APLICACIÓN DEL PATRÓN
"B9407F30‐F5F8‐466E‐AFF9‐25556B57FE6D"
),
2
1382
,
6
2091
);
regionList
.add(region);
.
..
}
@
Override
protected v
oid onResume()
{
super .onResume();
beaconManager .connect( new
BeaconManager.ServiceReadyCallback()
{
@Override
// S
tart R anging
( 4)
public v
oid
onServiceReady() {
for
( R egion
i
tem :
regionList
) {
beaconManager .startRanging(item);
}
}
} );
}
CLASE: ActionHandler
La clase ActionHandler actua como ActionHandler en el patrón Beacon Action Manager. Esta
clase implementa la interface RangingListener que
define el método
que se invoca cuando el dispositivo se encuentra dentro del rango
onBeaconsDiscovered
de los beacons. Determina todos los beacons que se encuentran actualmente en rango.
public
c
lass ActionHandler implements
BeaconManager.RangingListener{
private Context
context ;
public s
tatic
Boolean
isShowing ;
.
..
@Override
public v
oid onBeaconsDiscovered(Region r
egion,
L
ist<Beacon>
l
ist)
{
if
(
!list.isEmpty()) {
B eacon n
earestBeacon =
l
ist.get( 0)
;
//
g
et t he
B
eacon f ound
(
5)
75
4 APLICACIÓN DEL PATRÓN
B
eaconEST b
eaconFound =
new
BeaconEST(nearestBeacon);
int section =
g etInfoToShow(beaconFound);
// s
how i
nfo t
o t
he
u
ser
( 6)
if (
ActionHandler. isShowing
== f
alse
) {
F inderActivity. showInfo
(section, context
);
}
}
}
En (5) se crea un objeto de tipo BeaconEST con la información del beacon encontrado y
en (6) el método showInfo le informa al usuario hacia dónde debe dirigirse mostrándole
un cartel y reproduciendo la misma información en un audio, teniendo en cuenta el
número de gate ingresado y la región del beacon en la que se encuentra, como se observa
en la figura 25.
CLASE: BeaconEST
La clase BeaconEST actúa como Beacon en el patrón Beacon Action Manager. Contiene una
variable de tipo Beacon (clase proveída por el SDK) que almacena información del beacon
encontrado como ser: los valores UUID, major, minor que permiten identificar al beacon y
la intensidad y precisión de la señal emitida por el beacon.
76
4 APLICACIÓN DEL PATRÓN
public
c
lass BeaconEST {
public
Beacon
beaconInfo ;
private
String name ;
public
BeaconEST(Beacon b
eacon){
this .b
eaconInfo = b eacon;
this .n
ame
= " " ;
}
public
BeaconEST(String u
uid,
int
major,
int
minor){
U
UID
n ewUUID =
U UID. fromString (uuid);
M
acAddress m
ac =
M acAddress. fromString ("
"
);
this .b
eaconInfo = new
Beacon(newUUID, m
ac, m
ajor,
m
inor,
0,
0) ;
this .n
ame
= " " ;
}
}
4.2.2 DIAGRAMAS
77
4 APLICACIÓN DEL PATRÓN
En el diagrama se modela la secuencia donde la aplicación entra a la región de 2 beacon e
informa al usuario la información del más próximo.
78
4 APLICACIÓN DEL PATRÓN
Figura 2
8: D
iagrama d
e s ecuencia i ngreso a
l a r egion d
e u
n b
eacon.
79
4 APLICACIÓN DEL PATRÓN
Este ejemplo se realizó utilizando el framework CoreLocation [75] proveído por Apple. A
continuación se detalla el funcionamiento de cada clase.
80
4 APLICACIÓN DEL PATRÓN
CLASE: ZooCollectionViewController
Al iniciar la aplicación el usuario observa una lista de opciones para seleccionar los
animales de los que quisiera recibir más información (figura 30) . Al presionar el botón
siguiente (‘>’), por cada animal seleccionado se guarda una key en la variable
de la clase SearchViewController que los identifica, y se accede a dicha
selectedAnimals
clase para escanear los beacons asociados a cada animal.
81
4 APLICACIÓN DEL PATRÓN
CLASE: SearchViewController
La clase SearchViewController actúa como ManagerController en el patron Beacon Action
Manager.
class
SearchViewController:
UIViewController, C
BCentralManagerDelegate
{
/
/ v
ariable d
eclaration
var
beaconsToRange : [
CLBeaconRegion]!
let
locationManager: C LLocationManager!
var
actionHandler :
A ctionHandler!
var
centralManager :
C BCentralManager!
var s
electedAnimals :
[ String]!
override f
unc
viewDidLoad() {
super.
viewDidLoad()
.
..
/
/ c
heck
s
tatus
o
f
B
LE
h
ardware
( 1)
centralManager
=
CBCentralManager
(delegate:
self,
q
ueue:
dispatch_get_main_queue
())
82
4 APLICACIÓN DEL PATRÓN
//
r
equests p ermission t
o
u se
l
ocation s
ervices
(
2)
l
ocationManager =
C LLocationManager()
l
ocationManager. requestAlwaysAuthorization ()
//
s
et
t
he A
ctionHandler ( 3)
a
ctionHandler =
A ctionHandler()
l
ocationManager. delegate
= a ctionHandler
//
s
et
b
eacons t o m
onitor ( 4)
setBeaconsToMonitor()
//
s
tart m
onitoring ( 5)
startMonitoring()
.
..
}
83
4 APLICACIÓN DEL PATRÓN
En (3) se determina que el objeto actionHandler de tipo ActionHandler va a ser el
encargado de manejar todos los eventos que ocurran al interactuar con los beacons.
En (4) el método setBeaconsToMonitor() determina el ID de aquellos beacons que a la
aplicación le interese saber cuándo el dispositivo móvil se encuentre dentro su región. En
este caso, a cada uno de los animales seleccionados se le asocia un Beacon y se los agrega
en el array beaconsToRange.
func
setBeaconsToMonitor() {
var a
nimalBeacon:
B eacon
for a
nimalKey
in
s
electedAnimals {
a nimalBeacon
=
Beacon (animalKey:
a
nimalKey)
b eaconsToRange.append(animalBeacon)
}
}
func
startMonitoring()
{
for i
tem
in
b
eaconsToRange {
l ocationManager.
startMonitoringForRegion (item)
l ocationManager. startRangingBeaconsInRegion
(item)
}
}
CLASE: ActionHandler
La clase ActionHandler actua como ActionHandler en el patrón Beacon Action Manager. Esta
clase implementa el protocolo CLLocationManagerDelegate que define métodos para
recibir información sobre la localización del dispositivo. Éstos son invocados desde el
thread donde se inició el servicio de localización (el inicio del escaneo de beacons). Este
thread tiene su propio loop de ejecución activo.
En el ejemplo, se implementaron solo algunos de los métodos que ofrece el protocolo:
cuando el dispositivo se encuentra dentro de la región de un beacon, se invoca el método
en (1)
. El método se invoca repetidamente mientras la aplicación se encuentran dentro
del rango de alguno de los beacons, y muestra al usuario información del animal
correspondiente al beacon detectado.
class
ActionHandler: NSObject, C
LLocationManagerDelegate
{
var
beaconFound
:
B eacon!
84
4 APLICACIÓN DEL PATRÓN
//
o
ne o r
m
ore b
eacons a re
i n r
ange. ( 1)
func
locationManager( m
anager: CLLocationManager,
d idRangeBeacons b
eacons: [
CLBeacon] ,
i nRegion r
egion: CLBeaconRegion) {
for
b
eacon in b
eacons {
if
b
eacon. proximity = =
.
Immediate {
/ / g
et t he
b
eacon f
ound ( 2)
b eaconFound =
Beacon (proximityUUID: b
eacon.proximityUUID,
m ajor: b
eacon.major.unsignedShortValue,
m inor: b
eacon.minor.unsignedShortValue,
i dentifier: r
egion.identifier)
b eaconFound.lastSeenBeacon =
b
eacon
/ / u
pdate t
he u ser i nformation ( 3)
NSNotificationCenter.defaultCenter().postNotificationName (
"NotificationBeacon" , o
bject: b
eaconFound)
}
}
}
En (2) se crea un objeto de tipo Beacon con la información del beacon encontrado y en
(3) se muestra al usuario la información del animal correspondiente al beacon encontrado
invocando al metodo NotificationBeacon() de la clase SearchViewController. El usuario
observará la información de los diferentes animales como se observa en la figura 32.
85
4 APLICACIÓN DEL PATRÓN
CLASE: Beacon
La clase Beacon actúa como el actor Beacon del patrón Beacon Action Manager. Extiende
de la clase CLBeaconRegion por lo que hereda todas sus propiedades. Además posee el
constructor init(animalKey: String) que permite crear el beacon asociado a cada
Animal.
class
Beacon: CLBeaconRegion
{
override i
nit( proximityUUID:
NSUUID, m
ajor:
UInt16, m
inor:
UInt16,
i dentifier:
String)
{
super.init(
proximityUUID: p
roximityUUID, m
ajor: m
ajor, m
inor:
m
inor,
i dentifier: i
dentifier)
}
init( animalKey:
String) {
if
a
nimalKey =
= a
nimalsKeys.keyFish {
s uper.init (proximityUUID: F ishID, m ajor: F ishMajor,
m inor:
F
ishMinor, i
dentifier: a
nimalKey)
}
else i
f
animalKey =
=
a nimalsKeys.keyBird {
super.init (proximityUUID: B irdID, m
ajor: B
irdMajor,
m inor:
B
irdMinor, i
dentifier: a
nimalKey)
86
4 APLICACIÓN DEL PATRÓN
} else
. ..
}
}
}
4.3.2 DIAGRAMAS
87
4 APLICACIÓN DEL PATRÓN
En el diagrama se modela la secuencia donde la aplicación entra a la región del beacon que
representa al ítem oveja e informa al usuario la información.
88
4 APLICACIÓN DEL PATRÓN
89
4 APLICACIÓN DEL PATRÓN
CLASE: MainActivity
Esta clase actúa como ManagerController en el patrón Beacon Action Manager, es la clase
que se observa al iniciar la aplicación. Aquí es donde se setea la información de los beacons
y se realiza el escáner.
public
c
lass
MainActivity extends
AppCompatActivity {
p
rivate BluetoothAdapter mBLEAdapter ;
p
rivate ActionHandler mScanCallback ;
p
rivate BluetoothLeScanner
mBluetoothLeScanner ;
p
rivate List<Beacon> regionList
= new
ArrayList<Beacon>();
.
..
@
Override
p
rotected v
oid
onCreate(Bundle s
avedInstanceState) {
super .onCreate(savedInstanceState);
s
etContentView(R.layout. activity_main );
/
/ s
et A
ctionHandler ( 1)
m
BLEAdapter = B
luetoothAdapter. getDefaultAdapter ();
mBluetoothLeScanner
= mBLEAdapter .getBluetoothLeScanner();
m
ScanCallback
=
new
ActionHandler( this
);
//
C
heck B
luetooth ( 2)
if
(
! mBLEAdapter .isEnabled() )
{
s howAlert()
}
90
4 APLICACIÓN DEL PATRÓN
//
s
et
b
eacons
t
o
f
ind
(
3)
s
etBeaconsToScan();
.
..
}
En el método onCreate()
, las líneas de código en (1) se inicializa el objeto mScanCallback
que va a ser el encargado de manejar todos los eventos que ocurran al interactuar con los
beacons.
En (2) se verifica si el Bluetooth en el dispositivo móvil se encuentra activado. De lo
contrario se muestra un mensaje de advertencia al usuario (Figura 36).
En (3) el método setBeaconsToScan() determina el ID de aquellos beacons que a la
aplicación le interese saber cuándo el dispositivo móvil se encuentre dentro su región. En
este caso, se crea un objeto de tipo Beacon con los valores UUID, major y minor de cada
beacon y se los agrega en el array regionList
c
omo se observa a continuación.
p
rivate
v oid
setBeaconsToScan(){
B
eacon b
eaconBread =
new
Beacon(Util.
breadUUID
,
21769 ,
32384 ) ;
B
eacon b
eaconCookie =
new
Beacon(Util.
cookieUUID
,
0,
1288
);
.
..
91
4 APLICACIÓN DEL PATRÓN
regionList
.add(beaconBread);
regionList
.add(beaconCookie);
.
..
}
@
Override
protected v oid
onResume() {
super .onResume();
s canHandler .post( scanRunable );
}
// s
tart s
can
final
Runnable scanRunable = (
) {
mBluetoothLeScanner .startScan(setScanFilter(),
s etScanSettings(),
m ScanCallback );
scanHandler .postDelayed( stopscanRunable ,1 000 );
};
/
/ s
top s can
final
Runnable stopscanRunable = ( )
{
mBluetoothLeScanner .stopScan( mScanCallback );
scanHandler .postDelayed( scanRunable ,
1000 );
};
/
/ s
et f
ilters
private L
ist<ScanFilter> s etScanFilter() {
L ist<ScanFilter> f
ilters = new A
rrayList<ScanFilter>();
f or( B eacon i
tem :
r egionList )
{
U UID c
urrentUUID =
U UID.fromString(item.getUuid());
P arcelUuid p
arcelableUUID =
new P
arcelUuid(currentUUID);
S canFilter f
ilter = n
ew S canFilter.Builder()
. setServiceUuid(parcelableUUID)
. build();
f ilters.add(filter);
}
return f ilters;
}
/
/ s
et s
ettings
private S
canSettings s etScanSettings() {
S canSettings.Builder m Builder = new S canSettings.Builder();
m Builder.setReportDelay( 0)
;
92
4 APLICACIÓN DEL PATRÓN
m
Builder.setScanMode(ScanSettings.SCAN_MODE_LOW_POWER);
S
canSettings
m
ScanSettings
=
m
Builder.build();
return
m
ScanSettings;
}
CLASE: ActionHandler
La clase ActionHandler actua como ActionHandler en el patrón Beacon Action Manager. Esta
clase extiende a la clase ScanCallBack que define el método onScanResult que se invoca
cuando el dispositivo se encuentra dentro del rango de los beacons, pero no determina la
proximidad a la que se encuentran, ni tampoco cuando esa proximidad cambia, o cuando
se sale de la región. Es por esto que el escaneo se reinicia cada 1 segundo. De esta forma se
puede conocer los cambios en la proximidad y si todavía se encuentra dentro del rango del
beacon.
public
c
lass
ActionHandler
extends
ScanCallback{
p
ublic v
oid onScanResult( int
callbackType,
S
canResult r
esult)
{
/
/
g et t
he B
eacon f ound ( 4)
B
eacon d
evice =
new
Beacon(result);
/
/
c alculate t
he p roximity ( 5)
if (
Objects. equals (device.getProximity(), "Immediate"
))
{
if
( ActionHandler. isShowing
==
f
alse
) {
// s
how i
nfo t
o t
he u
ser ( 6)
M ainActivity. showPromotion (Util.
getSection (device),
context
);
}
}
}
}
En (5) el método getProximity de la clase Beacon aplica una fórmula para calcular la
proximidad al beacon. Esta fórmula no es muy precisa, es la utilizada por la compañía
Radius Network [77] en su propio SDK, luego de realizar varias pruebas.
p
ublic s
tatic d ouble calucateDistance( int
rssi,
int
TxPower){
d
ouble
ratio =
( ( float
)rssi) /
T
xPower;
if (ratio <
1.0 ){
return
Math. pow (ratio,
10 );
}
return 0.89976
* M ath. pow
(ratio,
7.7095 ) +
0.111 ;
93
4 APLICACIÓN DEL PATRÓN
}
En (6) el método showPromotion le informa al usuario las promociones asociadas a ese
beacon, como se observa en la figura 37.
Figura 37: Aplicación notifica al usuario las diferentes promociones segun su ubicacion.
CLASE: Beacon
La clase Beacon actúa como Beacon en el patrón Beacon Action Manager. Contiene
variables para almacenar toda información del beacon encontrado como ser: los valores
UUID, major, minor que permiten identificar al beacon y la intensidad y precisión de la
señal emitida por el beacon.
p
ublic
c
lass B
eacon {
p
rivate
String
uuid ;
p
rivate
String
name ;
p
rivate
i
nt
major ;
p
rivate
i
nt
minor ;
p
rivate
i
nt
rssi ;
p
rivate
d
ouble distance
;
p
rivate
BluetoothDevice
beaconFound
;
94
4 APLICACIÓN DEL PATRÓN
/
*
B
eacon a
dvertisement p
acket:
|
0 x02 |
0 x15 | ‐
‐ ‐ ‐ ‐ ‐
‐ ‐ ‐
‐ ‐ ‐
‐ ‐ ‐ ‐ | ‐
‐ ‐ |
‐ ‐ ‐ |
‐ ‐
‐ ‐
|
|
I D
| D ata L en
| u uid | m
ajor |
m inor |
Tx p
ower|
0
1 2 1 8 2 0
2 2
2 4
e
xample :
0
2 |
1
5 |
E 2 0
A 3
9 F
4 7
3 F 5 4
B
C 4
A 1
2 F
1 7
D 1 A
D 0
7 A 9
6 1
| 0
0 0
0 | 0
0 0
0 |
C
8
*
/
public Beacon(ScanResult r
esult){
Beacon d evice
= n ull;
b yte [] s
canRecord =
r esult.getScanRecord().getBytes();
i nt s
tartByte =
2 ;
i nt txPower = 0
;
b oolean p atternFound =
false;
w hile (startByte < =
5) {
/ /Identifies a
n i Beacon &
& I
dentifies c orrect d ata l
ength
i f
((( int ) s canRecord[startByte +
2]
& 0xff ) = =
0x02
&&
((
int ) s canRecord[startByte + 3]
& 0xff ) = =
0x15 ) {
patternFound =
true;
b reak;
}
s tartByte++;
}
i f (patternFound) {
//Convert t
o h ex S
tring
byte []
uuidBytes =
new b
yte [1 6 ];
System. arraycopy (scanRecord, s
tartByte +
4,
uuidBytes,
0,
16 );
String h
exString =
U til. bytesToHex (uuidBytes);
//UUID
this. uuid
= hexString.substring( 0,
8 )
+ " ‐" +
h exString.substring( 8,
1 2
) + " ‐" +
h exString.substring( 12 ,1
6 ) + "
‐" +
h exString.substring (1 6 ,2
0 ) + " ‐" +
h exString.substring( 20 ,3
2 );
//Major v alue
this. major = (scanRecord[startByte+ 20 ] &
0xff ) *
0x100 +
( scanRecord[startByte+ 21 ] & 0xff );
//Minor v alue
this. minor = ( scanRecord[startByte+ 22 ]
& 0xff ) *
0x100 +
( scanRecord[startByte+ 23
] & 0xff );
95
4 APLICACIÓN DEL PATRÓN
//
P
ower
txPower
= scanRecord[startByte+
24
];
//
R
SSI
this. rssi
=
result.getRssi();
//
D
istance
this. distance
= Util.calucateDistance(
rssi
,txPower);
//Name
this .n
ame
=
"" ;
}
}
4.4.2 DIAGRAMAS
96
5 | CONCLUSIONES
En los últimos años se ha presenciado una serie de revoluciones que han llevado al punto
de que hablar de Internet de las cosas no sea más simple teoría, sino una realidad y una
tendencia inevitable con todas las consecuencias sociales y económicas que pueden
preverse.
Estas revoluciones e innovaciones incluyen el impresionante alcance que ha logrado la
conectividad a internet, el internet inalámbrico, las tecnologías de transferencia de datos
inalámbricas en general, el gran desarrollo de las telecomunicaciones, específicamente el
desarrollo tecnológico que se ha alcanzado con los teléfonos móviles, y con todos los
dispositivos móviles en general.
Los dispositivos móviles se convirtieron en una herramienta muy útil para comprender el
entorno de los usuarios. Su interacción con los dispositivos beacon generan nuevas
posibilidades de reconocimiento de ubicación de los usuarios y permiten obtener mejores
experiencias.
A la hora de plantear la arquitectura de una aplicación móvil que se relaciona con
dispositivos beacon, aparecen nuevos problemas y desafíos de diseño para los
desarrolladores que necesitan integrar esta nueva tecnología en sus aplicaciones móviles.
En el trabajo desarrollado se ha validado que es posible definir un patrón de diseño para
aplicaciones móviles que interactúan con dispositivos beacons para conocer el contexto de
los usuarios. La utilización de este patrón permite prevenir aquellos problemas típicos y
recurrentes que puedan surgir a la hora de desarrollar este tipo de aplicaciones móviles.
Para llevar a cabo el objetivo se desarrollaron diferentes aplicaciones móviles que
interactúan con dispositivos beacon situadas en diversos contextos.
A los fines de no dificultar la lectura de este documento, sólo se detallaron algunas de ellas.
En cada una de estas aplicaciones se implementó exitosamente el patrón especificado en
esta tesis para establecer la comunicación entre las aplicaciones móviles y los dispositivos
beacon, obteniendo un diseño claro de fácil comprensión.
97
5 CONCLUSIONES
98
6 | FUTURAS EXTENSIONES
Algunas de las posibles extensiones de este trabajo de investigación incluyen:
● Adaptación del patrón de diseño para utilizarlo en aplicaciones de dispositivos
wearables.
● Extensión del patrón para ser utilizado en aplicaciones móviles que interactúan con
dispositivos beacons para establecer localización en interiores (indoor location).
La información que una aplicación móvil recibe al interactuar con un beacon se
puede utilizar para situar al usuario en un mapa dentro del lugar donde se
encuentre. Llegados aquí se aprecian ya tres de las limitaciones actuales de la
localización en interiores:
○ Hay que asociar los beacons a una posición permanente dentro de esa
cartografía, o no se podrá asociar la información digital generada con su
correspondencia física. Si se mueve el beacon sin recodificar su posición
dentro de la “cartografía” se estará generando información incorrecta.
○ La exactitud debe ser mucho mayor que en el caso del GPS. Una
aproximación de 10 metros puede ser la diferencia entre estar, por ejemplo,
en la sección de los lácteos o en la de panadería dentro de un
supermercado.
99
6 FUTURAS EXTENSIONES
Estos aspectos dan idea de las dificultades de despliegue que presentan los
proyectos de este tipo.
● Desarrollo de una herramienta gráfica que represente la interacción en aplicaciones
móviles y dispositivos beacons.
Desarrollar una herramienta que permita al usuario representar gráficamente la
interacción entre una aplicación móvil y los dispositivos beacons y a partir de allí
generar automáticamente el código fuente utilizando el patrón planteado en este
documento. Ejemplo: Se desea generar una aplicacion iOS que interactúe con 3
beacons y que ejecute diferentes acciones teniendo en cuenta:
En este caso, el usuario de la herramienta deberá colocar en el dashboard un objeto
que represente el dispositivo iOS relacionado a tres objetos beacons. Para todos los
objetos se deberán asignar las propiedades y acciones necesarias de tal forma que
el código generado represente correctamente el modelo graficado. Por lo tanto, a
cada objeto beacon, se le asignarán los atributos necesarios para identificarlo y las
acciones a ejecutar cada vez que el dispositivo se encuentre dentro de su región
especificando qué acción realizar según la proximidad.
100
7 | REFERENCIAS
[1] Internet World Stats (2015). World internet usage and population statitics, Noviembre
2015, http://www.internetworldstats.com/stats.htm. Último ingreso Septiembre 2016.
[2] Weiser, M (1991). The Computer for the 21st Century, Scientific American, Septiembre
1991, http://web.media.mit.edu/~anjchang/ti01/weiser-sciam91-ubicomp.pdf. Último
ingreso Septiembre 2016.
[3] Auto-ID Labs. La red de laboratorios Auto-ID es un grupo de investigación centrado en
el desarrollo de etiquetas RFID y sensores, con centros en varios países,
http://www.autoidlabs.org/ . Último ingreso Septiembre 2016.
[4] Kevin Ashton (2009). That 'Internet of Things' Thing, RFID Journal, Junio 2009,
http://www.rfidjournal.com/articles/pdf?4986 . Último ingreso Septiembre 2016.
[5] Intel (2015). 50 Years of Moore's Law, Fueling Innovation We Love and Depend On,
http://www.intel.com/content/www/us/en/silicon-innovations/moores-law-technology.ht
ml . Último ingreso Septiembre 2016.
[6] Fundación Innovación Bankinter (2013). Video de Paul Horn presentando An Internet of
Everything en el XV FTF, Diciembre 2010, https://www.youtube.com/watch?v=pqyV4pi3RaE
. Último ingreso Septiembre 2016.
[7] Bluetooth®. What is Bluetooth Technology?, Bluetooth,
https://www.bluetooth.com/what-is-bluetooth-technology/bluetooth. Último ingreso
Septiembre 2016.
[8] Bluetooth®. What is Bluetooth Technology?, Basic Rate/Enhanced Data Rate (BR/EDR),
https://www.bluetooth.com/what-is-bluetooth-technology/bluetooth-technology-basics/b
r-edr. Último ingreso Septiembre 2016.
[9] Bluetooth®. What is Bluetooth Technology?, Low Energy,
http://www.bluetooth.com/what-is-bluetooth-technology/bluetooth-technology-basics/lo
w-energy. Último ingreso Septiembre 2016.
[10] Ed Gravianowski. Is Wibree going to rival Bluetooth?, How Stu Works,
http://electronics.howstu works.com/wibree.htm. Último ingreso Septiembre 2016.
101
REFERENCIAS
102
REFERENCIAS
[22] Toni Miquel (2013). ¿Qué es Holo? Algo más que una interfaz gráfica, El Android Libre,
Junio 2013,
http://www.elandroidelibre.com/2013/06/que-es-holo-algo-mas-que-una-interfaz-grafica.h
tml. Último ingreso Septiembre 2016.
[23] Google (2015). Especificación de Eddystone, un formato abierto para beacon by
Google. https://github.com/google/eddystone. Último ingreso Septiembre 2016.
[24] Google (2015). Google Developers: Beacons,
https://developers.google.com/beacons/. Último ingreso Septiembre 2016.
[25] Google (2015). Google Developers: Proximity Beacon API,
https://developers.google.com/beacons/proximity/guides. Último ingreso Septiembre
2016.
[26] Google (2015). Google Developers: Nearby, https://developers.google.com/nearby/.
Último ingreso Septiembre 2016.
[27] Google (2015). Physical Web, Walk up and use anything,
http://google.github.io/physical-web/. Último ingreso Septiembre 2016.
[28] Lockitron (2016). https://lockitron.com/. Último ingreso Septiembre 2016.
104
REFERENCIAS
105
REFERENCIAS
106
REFERENCIAS
[81] Paul Martin, Bo-Jhang Ho, Nicholas Grupen, Samuel Muñoz, Mani Srivastava (2014), An
iBeacon primer for indoor localization: demo abstract, publicado en: The 12th ACM
Conference on Embedded Networked Sensor Systems, 2014,
http://dl.acm.org/citation.cfm?id=2675028. Último ingreso Septiembre 2016.
[82] Prateek Jain, Sanket Subhash Khanwalkar, Rohit Malhotra, Ajey Dheenrajappa, Gaurav
Gupta, Alfred Kobsa (2016), uBeacon: Configuration based Beacon tracking, publicado en:
Institute of Electrical and Electronics Engineers, 2016,
http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=7457066&queryText=beacon&s
ortType=desc_p_Publication_Year&rowsPerPage=100. Último ingreso Septiembre 2016.
[83] Dojun Byun, Jaeweon Cho, Sang-Jun Moon, Dohy Hong (2016), S-Beacon: Next
generation BLE beacon solution for enhanced personalization, publicado en: Institute of
Electrical and Electronics Engineers, 2016,
http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=7430566&queryText=beacon&s
ortType=desc_p_Publication_Year&rowsPerPage=100. Último ingreso Septiembre 2016.
107