scieee AI-readable full text Open interactive document viewer

Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE

Mellado Contioso, Sergio

Abstract

Hace tiempo parecía muy lejano poder conectar cualquier objeto cotidiano a Internet, e intercambiar información sobre los hábitos de consumo y gustos de las personas. Hoy en día, gracias al Internet de las Cosas (IoT), todo eso es posible. IoT es la interacción entre múltiples objetos físicos conectados y con tecnologías de obtención de datos, que permiten comunicarse e intercambiar información entre ellos en tiempo real mediante Internet. En este proyecto se ha diseñado e implementado un software para la monitorización de la velocidad, posición (latitud y longitud), aceleración (ejes x, y, z del acelerómetro) y la velocidad de rotación (ejes x, y, z del giroscopio) de los vehículos, obtenidos por los sensores de un dispositivo móvil Android. Consiste en una aplicación desarrollada en Android, la cual envía todos los valores obtenidos por los sensores del dispositivo Android al Context broker. Se ha utilizado Orion Context Broker, el cual pertenece a una plataforma desarrollada para el internet de las cosas (IoT) llamada FIWARE. Se ha optado por utilizar FIWARE ya que es una plataforma de código abierto centrada en el desarrollo de soluciones inteligentes. Además, se desarrolla un servicio web Spring, el cual se encarga de realizar una suscripción al context broker. Mediante esta suscripción, cada vez que se envían nuevos valores al context broker, el servicio web Spring recibe notificaciones. El servicio web Spring se encarga de realizar las transacciones con la base de datos MySQL, donde quedarán almacenados todos los valores obtenidos por la aplicación Android. A través de la aplicación Android se permite visualizar todos los datos obtenidos en un vehículo, mediante el acceso al servicio web. Se ha realizado una aplicación móvil en Android, observando que el uso de teléfonos inteligentes se ha disparado en la última década, siendo el sistema operativo Android la razón de la mayor parte del crecimiento. Actualmente, Android, el sistema operativo de Google, tiene más de 10 años y da vida casi al 90% de los smartphones que utilizamos a diario en nuestro día a día.

Full text

Equation Chapter 1 Section 1 Trabajo de Fin de Grado Grado en Ingeniería de las Tecnologías de Telecomunicación Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE Autor: Sergio Mellado Contioso Tutor: María Teresa Ariza Gómez Departamento de Ingeniería Telemática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2020 2 3 Trabajo de Fin de Grado Grado en Ingeniería de las Tecnologías de Telecomunicación Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE Autor: Sergio Mellado Contioso Tutor: María Teresa Ariza Gómez Profesor titular Departamento de Ingeniería Telemática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2020 4 5 Trabajo de Fin de Grado: Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE Autor: Sergio Mellado Contioso Tutor: María Teresa Ariza Gómez El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros: Presidente: Vocales: Secretario: Acuerdan otorgarle la calificación de: Sevilla, 2020 El Secretario del Tribunal 6 7 A mi familia A mis maestros 8 9 Agradecimientos Con este Trabajo Fin de Grado llego al final de una de las etapas más importantes y de las que me siento más orgulloso de mi vida. Ha tenido momentos mejores y peores, pero siempre aprendiendo cosas nuevas, también me ha ayudado para crecer a nivel personal y tengo que agradecérselo a cada una de las personas que han estado siempre conmigo de principio a fin en todo este tiempo. En primer lugar, agradecérselo a toda mi familia, y en especial a mis padres y abuelos que han estado apoyándome y dándome ánimos siempre que lo he necesitado. Todo esto no habría sido posible sin ellos. En segundo lugar, me gustaría agradecerle a cada uno de los profesores con los que he cursado clases y prácticas en la Escuela. Por vuestras explicaciones y consejos, que me han llevado a estar donde estoy y me ayudan a seguir mejorando día a día en el futuro. También, agradecerle a mi tutora en este proyecto, María Teresa Ariza Gómez, por su tiempo siempre que lo he necesitado y las facilidades cuando he tenido algún problema. Por último, agradecer a los compañeros de clase que han estado desde el primer día, por esos momentos de diversión y los días intensos de estudio, se han convertido en unos amigos para toda la vida. Gracias. Sergio Mellado Contioso Sevilla, 2020 16 17 ÍNDICE DE TABLAS Tabla 1: API Rest – Consultas de datos mediante GET 53 Tabla 2: API Rest – Gestión de suscripciones mediante GET 54 Tabla 3: Gestión de notificaciones mediante POST 54 18 19 ÍNDICE DE ILUSTRACIONES Ilustración 1: Esquema de la arquitectura del sistema 24 Ilustración 2: Intel(R) Core(TM) i7-3630 26 Ilustración 3: Sony Xperia SP 27 Ilustración 4: Centos 7 28 Ilustración 5: Navegador Google Chrome 28 Ilustración 6: Spring Tool Suite 3 28 Ilustración 7: Android Studio 29 Ilustración 8: Xampp 29 Ilustración 9: Spring 30 Ilustración 10: Hibernate 30 Ilustración 11: Docker 31 Ilustración 12: MySQL 31 Ilustración 13: Android 32 Ilustración 14: phpMyAdmin 32 Ilustración 15: JSON 33 Ilustración 16: Mapbox 33 Ilustración 17: SQLite 34 Ilustración 18: MongoDB 34 Ilustración 19: Orion Context Broker 34 Ilustración 20: Registro – Diagrama de Secuencia 35 Ilustración 21: Inicio de sesión – Diagrama de Secuencia 36 Ilustración 22: Asignar Permisos – Diagrama de Secuencia 36 Ilustración 23: Monitorización de datos – Diagrama de Secuencia 37 Ilustración 24: Visualización de datos – Diagrama de Secuencia 37 Ilustración 25: Clase POJO Attribute 40 Ilustración 26: Clase POJO Metadata 40 Ilustración 27: Clase POJO Notification 41 Ilustración 28: Clase POJO Entity 42 Ilustración 29: Clase Application 43 Ilustración 30: Método notificaciones de la clase SensorController 44 Ilustración 31: Fichero de configuración application.properties 47 Ilustración 32: Fichero de configuración hibernate.cfg.xml 47 Ilustración 33: Fichero Usuario.hbm.xml 48 Ilustración 34: Fichero Dato.hbm.xml 48 20 Ilustración 35: Modelo Entidad-Relación de la Base de Datos 49 Ilustración 36: Ejemplo de datos almacenados en la tabla datos 51 Ilustración 37: Cabecera de petición HTTP 56 Ilustración 38: Ejemplo de entidades 58 Ilustración 39: Ejemplo de atributo 59 Ilustración 40: Ejemplo de entidad accedida por filtro 59 Ilustración 41: Ejemplo de entidad accedida por filtro más restrictivo 60 Ilustración 42: Ejemplo de suscripción 60 Ilustración 43: Interacciones de las suscripciones 62 Ilustración 44: Configuración de la suscripción 63 Ilustración 45: Cancelación de la suscripción 63 Ilustración 46: Diagrama de casos de uso de la aplicación Android 64 Ilustración 47: Diagrama de clases – Aplicación Android 65 Ilustración 48 : Diagrama de clases – Conexiones Aplicación Android 66 Ilustración 49: Clase MyApplication 67 Ilustración 50: Clase ClientREST ¡Erro r! Marcador no definido. Ilustración 51: Clase ConnectionClass 70 Ilustración 52: Fichero AndroidManifest.xml 73 Ilustración 53: Fichero build.gradle (Project) 74 Ilustración 54: Fichero build.gradle (Module) 74 Ilustración 55: Directorio /res 75 Ilustración 56: Directorio /res/layout 76 Ilustración 57: Pantalla Principal – Aplicación Android 78 Ilustración 58: Pantalla de Registro – Aplicación Android 78 Ilustración 59: Pantalla Ajustes Principales – Aplicación Android 79 Ilustración 60: Pantalla Selección de rol – Aplicación Android 79 Ilustración 61: Pantalla Ajustes CB – Aplicación Android 80 Ilustración 62: Pantalla Permisos – Aplicación Android 80 Ilustración 63: Pantalla Monitorización -Aplicación Android 81 Ilustración 64: Pantalla Visualización SQLite – Aplicación Android 81 Ilustración 65: Gráfica Velocidad/Hora – Aplicación Android 82 Ilustración 66: Pantalla Visualización – Aplicación Android 82 Ilustración 67: Mapa con la ruta – Aplicación Android 82 Ilustración 68: Listas Acelerómetro y Giroscopio – Aplicación Android 82 Ilustración 69: Ejecución Context Broker 86 Ilustración 70: Detención del Context Broker 87 Ilustración 71: Instalación Android Studio – Paso 1 88 Ilustración 72: Instalación Android Studio – Paso 2 89 21 Ilustración 73: Instalación Android Studio – Paso 3 89 Ilustración 74: Instalación Android Studio – Paso 4 89 Ilustración 75: Configuración Android Studio – Paso 1 90 Ilustración 76: Configuración Android Studio – Paso 2 90 Ilustración 77: Configuración Android Studio – Paso 3 91 Ilustración 78: Configuración Android Studio – Paso 4 91 Ilustración 79: Fichero de instalación STS 92 Ilustración 80: Descarga de MySQL Community 94 Ilustración 81: Instalación MySQL Community finalizada 95 Ilustración 82: Descarga de Xampp 96 Ilustración 83: Panel de Control de Xampp 96 Ilustración 84: Opciones de MySQL en el panel de control 97 Ilustración 85: Inicio de sesión en phpMyAdmin 97 Ilustración 86: Visualización de las tablas de la base de datos 98 Ilustración 87: Lanzamiento máquina virtual CentOS 99 Ilustración 88: Importar proyecto en STS 100 Ilustración 89: Selección dispositivos Android 101 22 1 INTRODUCCIÓN 1.1 Motivación l presente trabajo de fin de grado, del grado de Ingeniería de las Tecnologías de Telecomunicación con el propósito de dar soluciones a problemas del día a día, se ha enfocado a trabajar con el llamado Internet de las Cosas (IoT). Para ello se utilizan numerosos conceptos aprendidos durante el grado. En este proyecto se ha hecho uso de una aplicación Android, ya que el uso de teléfonos inteligentes se ha disparado en la última década y la mayor parte de ese crecimiento se debe al sistema operativo Android. Se ha optado por el desarrollo de una aplicación móvil Android, ya que el mundo actual se encuentra en constante evolución y desarrollo en el ámbito de los dispositivos móviles, su continuo desarrollo y el incremento del uso en el día a día de cada ser humano han logrado que se conviertan en objetos casi necesarios para vivir. Cada vez el rango de edades que utiliza un dispositivo móvil es más amplio, desde niños hasta ancianos. En la actualidad, ha tomado mucha importancia el llevar nuestro dispositivo a cualquier lugar, ya sea, por ejemplo, para consultar un mapa, el tiempo atmosférico o comunicarnos entre nosotros. Se ha utilizado una tecnología como es el Fiware Orion Context Broker, desarrollado por Telefónica, y que permite administrar todo el ciclo de vida de la información de contexto, incluyendo las actualizaciones, consultas, registros y suscripciones. Otro motivo para la realización de este proyecto ha sido poder trabajar y tener la posibilidad de adentrarme más en el aprendizaje del Internet de las cosas (IoT), el cual está teniendo un gran crecimiento en los últimos años y pienso que en pocos años estará más implantado en la sociedad. 1.2 Objetivos El objetivo es la realización de un proyecto capaz de obtener los valores de los sensores de un dispositivo móvil Android, como son la velocidad, posición (latitud y longitud), aceleración (ejes x, y, z del acelerómetro) y velocidad rotacional (ejes x, y, z del giroscopio) mientras nos movemos en un vehículo. Enviar al Orion Context Broker, en el momento que los obtiene la aplicación Android, cada uno de esos valores. Por último, el servicio web Spring se suscribe al Orion Context Broker para recibir los valores y almacenarlos en una base de datos MySQL. Además, desde la aplicación Android, se pueden visualizar cada uno de estos valores almacenados en la base de datos. E En la vida no existe nada que temer, solo cosas que comprender - Marie Curie - 23 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE 1.3 Antecedentes Existen aplicaciones móviles para recoger valores de sensores en los dispositivos móviles, estas aplicaciones están disponibles para los usuarios de Android a través de la Google Play Store. Pero no existe ninguna con las funcionalidades desarrolladas en este proyecto, que permita monitorizar y almacenar los datos mientras los visualizamos en tiempo real y además utilizar para ello la tecnología de Orion Context Broker. Para la parte de este proyecto referente al servicio web se ha tomado como base lo realizado por Pablo Bermejo Pérez en su Trabajo Fin de Grado [1]. 1.4 Descripción de la solución En este apartado se describirá la solución que se ha implementado para poder alcanzar los objetivos indicados. 1.4.1 Objetivos específicos o Obtención de datos de los sensores del dispositivo móvil Desde la aplicación móvil desarrollada en Android se obtienen los diversos valores como son la velocidad, posición (latitud y longitud), aceleración (ejes x, y, z del acelerómetro) y velocidad rotacional (ejes x, y, z del giroscopio). o Envío de datos al Orion Context Broker El usuario introduce desde los ajustes de la aplicación un intervalo de tiempo para el refresco de los datos tomados en cada instante. Los datos se obtienen cada intervalo de tiempo desde los sensores del dispositivo móvil Android. Este dispositivo en el mismo instante que los obtiene, los envía al context broker. o Almacenamiento de datos El context broker establece una comunicación con un servicio web, el cual se suscribe al context broker, recibe los datos y los guarda en una base de datos MySQL. o Visualización de datos Desde la aplicación móvil Android también es posible visualizar los valores de los datos almacenados en la base de datos MySQL. Para ello se establecerá una comunicación con el servicio web y así, poder acceder a la base de datos para realizar la consulta que se desea. Luego solo tiene que devolver el resultado a la aplicación Android, y esta se encargará de mostrarlos por pantalla de diversas maneras. o Registro e inicio de sesión de usuarios Para acceder a la aplicación Android y poder usar todas sus funcionalidades es necesario estar registrado previamente en la aplicación y luego iniciar sesión desde la pantalla Principal de la aplicación. Toda la información de los usuarios se almacena también en la base de datos MySQL, estableciendo el acceso a ella mediante el servicio web. 1.4.2 Funcionalidades A continuación, se muestran todas las funcionalidades que ofrece el sistema a cada usuario que haga uso de él. ▪ Obtención de la velocidad del vehículo, posición (latitud y longitud), aceleración (ejes x, y, z del acelerómetro) y velocidad rotacional (ejes x, y, z del giroscopio). ▪ Aviso leve por pantalla en caso de estar cerca de la velocidad límite establecida. ▪ Aviso por pantalla en caso de superar la velocidad límite establecida. ▪ Suscripción a los datos de un vehículo obtenidos a través del dispositivo móvil. ▪ Consulta de los datos almacenados después de establecer la suscripción. 24 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE ▪ Consulta de vehículos totales suscritos. ▪ Cancelación de la suscripción de un vehículo indicando su matrícula. ▪ Consulta de datos en la base de datos SQLite de Android. ▪ Representación y visualización mediante gráficas, mapas o listas en la aplicación móvil de datos almacenados. ▪ Registro de nuevo usuario en la aplicación Android. ▪ Inicio de sesión con un usuario ya registrado en la aplicación Android. 1.4.3 Esquema de la arquitectura En la Ilustración 1 se muestra el esquema de la arquitectura del sistema. En él aparecen cada una de las conexiones e interacciones entre las tecnologías utilizadas. Ilustración 1: Esquema de la arquitectura del sistema 25 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE 1.5 Estructura de la memoria 1. Introducción: Se presenta el problema y se describen los objetivos y funcionalidades que se han adoptado. 2. Recursos utilizados: En este apartado se muestran los recursos software y hardware utilizados para el proyecto. 3. Tecnologías utilizadas: Se describen todas las tecnologías que se utilizan en todo el proyecto 4. Smartphone y Context Broker: Se muestra y analiza la aplicación Android que se ha llevado a cabo y el Orion Context Broker. 5. Servidor Web y Base de Datos: Se describe como se ha montado el servidor web utilizando Spring y la base de datos MySQL. 6. Interfaz de usuario y funcionalidad: Se describen todas las características que muestra cada pantalla de la aplicación Android para su uso por el usuario. 7. Conclusiones y líneas futuras: Ideas finales obtenidas tras realizar el proyecto y posibles mejoras para el futuro. o Anexo A: Instalación de Orion Context Broker en CentOS a través de Docker. o Anexo B: Instalación y configuración de Android Studio. o Anexo C: Instalación y configuración de Spring Tool Suite. o Anexo D: Configuración de la base de datos MySQL. o Anexo E: Puesta en funcionamiento y ejecución del sistema. 32 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE 3.5 phpMyAdmin Herramienta escrita en PHP para manejar la administración de MySQL mediante páginas web, utilizando un navegador web [8]. Las funciones que puede realizar actualmente son: o Crear y eliminar bases de datos. o Crear, eliminar y alterar tablas. o Borrar, editar y añadir campos. o Ejecutar sentencia SQL. o Administrar claves en campos. o Administrar privilegios. o Exportar datos en varios formatos. 3.6 REST Interfaz para conectar varios sistemas basados en el protocolo HTTP y nos sirve para obtener y generar datos y realizar operaciones, retornando los datos en formatos como XML o JSON, siendo este último el más utilizado por ser más legible y ligero. Es la tecnología utilizada para el desarrollo del servidor del proyecto. REST se apoya en HTTP, utilizando los mismos verbos: o GET o POST o PUT o DELETE Ilustración 13: Android Ilustración 14: phpMyAdmin 33 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE 3.7 JSON Es un formato basado en texto estándar para representar datos estructurados en la sintaxis de objetos de JavaScript. Se utiliza para transmitir datos en aplicaciones web. Considerado un lenguaje independiente de formato de datos, su especificación se describe en RFC4627. El servidor REST del proyecto utiliza JSON en vez de XML, ya que posee mayor sencillez frente a XML. 3.8 Mapbox Plataforma de datos de ubicación para aplicaciones móviles y web. Sus datos son tomados de bases de datos abiertas (OpenStreetMap y la NASA) y de bases de datos de propietarios (DigitalGlobe). Es de código abierto, sus API, SDK y datos de mapas de actualización en vivo dan a los desarrolladores la posibilidad de construir mejores experiencias de navegación [9]. 3.9 SQLite Es una biblioteca escrita en lenguaje C que se encarga de implementar un motor de base de datos SQL pequeño, rápido, autónomo, muy confiable y numerosas funciones. Estable y multiplataforma. Tiene su código fuente en dominio público y gratuito para que se pueda utilizar en cualquier proyecto. Se encuentra integrado en todos los teléfonos móviles e incluido en numerosas aplicaciones de gran uso diario [10]. Ilustración 15: JSON Ilustración 16: Mapbox 34 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE 3.10 MongoDB Base de datos NoSQL, distribuida, basada en documentos de uso general, ha sido diseñada para desarrolladores de aplicaciones modernas y para la nube. No guarda los datos en tablas como se hace en las bases de datos relacionales, las guarda en estructuras de datos BSON, muy similar a JSON, para que la integración con las aplicaciones sea más sencilla y rápida. Es multiplataforma [11]. 3.11 Fiware Orion Context Broker El Orion Context Broker es un componente obligatorio de cualquier plataforma desarrollada con FIWARE. Aporta una función fundamental en cualquier sistema inteligente, administrar información de contexto, consultarla y actualizarla. Publica la información de contexto por entidades, como pueden ser los sensores, así la información de contexto que se ha publicado se encuentra disponible para más entidades que la necesiten. Orion Context Broker es un servidor que implementa una API basada en el modelo de información NGSI, permite varias operaciones: o Registrar aplicaciones de proveedores de contexto. o Actualizar información de contexto. o Ser notificado cuando haya cambios en la información de contexto. o Consultar información de contexto. Siempre se encuentra escuchando en un puerto, de forma general suele ser el 1026 y utiliza la base de datos MongoDB. En esta base de datos se almacena el estado actual de las entidades, no almacena información histórica de los cambios producidos en las entidades [12]. Ilustración 17: SQLite Ilustración 18: MongoDB Ilustración 19: Orion Context Broker 35 4 SERVICIO WEB DESARROLLADO CON SPRING Y SU CONEXIÓN CON LA BASE DE DATOS n este capítulo y en el siguiente se describen todas las partes de la que consta el sistema que se ha diseñado. En total consta de 4 partes, las cuales son, la aplicación móvil construida en Android, la base de datos MySQL administrada mediante phpMyAdmin y Xampp, el context broker en una máquina virtual con el sistema operativo CentOS 7 y el servicio web mediante Spring e Hibernate. Para comprender mejor el funcionamiento general de la aplicación se muestran a continuación varios diagramas de secuencia, donde se puede ver de forma clara las interacciones entre las distintas partes que forman el sistema. En el primer diagrama de secuencia se muestra el registro de un nuevo usuario (Ilustración 20). E El trabajo te da significado y propósito, y la vida está vacía sin ambos. - Stephen Hawking - Ilustración 20: Registro – Diagrama de Secuencia 36 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE En la Ilustración 21 se observa el inicio de sesión de un usuario que ya se encuentra registrado en el sistema. En la Ilustración 22 se muestra como un usuario asigna permisos de visualización a otro usuario que se encuentre registrado en el sistema. Así este usuario podrá visualizar los datos almacenados correspondientes al usuario que le ha dado permiso Ilustración 21: Inicio de sesión – Diagrama de Secuencia Ilustración 22: Asignar Permisos – Diagrama de Secuencia 37 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE En este diagrama de secuencia se observa la monitorización de los datos recogidos desde la aplicación Android (Ilustración 23). En la Ilustración 24 se puede observar la visualización de los datos monitorizados y guardados en la base de datos MySQL. Ilustración 23: Monitorización de datos – Diagrama de Secuencia Ilustración 24: Visualización de datos – Diagrama de Secuencia 38 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE A continuación, se tratarán las partes referentes al servicio web Spring y la base de datos MySQL. Las demás partes del sistema diseñado se tratan en el siguiente capítulo. 4.1 Clases En este apartado se muestran cada una de las clases utilizadas en el servicio web. Todas estas clases se encuentran en el directorio /valores/src/main/java/monitorización/valores Clases POJO utilizadas en el servicio web Una clase POJO es un objeto Java común, el cual no está vinculado por ninguna restricción especial que no sea forzada por la especificación de lenguaje Java y que no requiera de ninguna ruta de clase. A través de las clases POJO se proporciona mayor legibilidad y reutilización de los programas. Básicamente una clase POJO define una entidad, en este proyecto se pueden dividir las clases POJO en dos grupos, las que se utilizan para la comunicación con el context broker o con la base de datos MySQL. Para la comunicación con la base de datos: Se ha realizado una clase POJO por cada tabla de la base de datos, los atributos de estas clases deben coincidir con todos los atributos de cada una de las tablas, y además ser del mismo tipo. ▪ Usuario Esta clase implementa la tabla “usuarios” de la base de datos, esta clase posee 4 atributos: o Private String usuario: Hace referencia al nombre introducido por el usuario. o Private String pass: Referencia a la contraseña introducida por el usuario. o Private String tipo: Indica el tipo de vehículo introducido por usuario. o Private String matricula: Indica el valor de la matrícula del vehículo introducido por el usuario. ▪ Permiso Implementa la tabla “permisos” de la base de datos, posee 3 atributos: o Private long id: Informa el id de cada registro, es un número que indica el orden de inserción de cada registro en esta tabla de la base de datos. o Private String usuario: Referencia al usuario. o Private String matricula: Hace referencia a una matrícula de un vehículo registrado. ▪ Tipo Mediante esta clase se hace referencia a la tabla “tipos” de la base de datos, se compone de 2 atributos: o Private String tipo: Indica el tipo de vehículo. o Private String vmax: Indica la velocidad máxima por cada tipo de vehículo. 39 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE ▪ Dato Esta clase implementa la tabla “datos” de la base de datos, esta clase es la que posee mayor número de atributos, con un total de 13: o Private long id: Informa el id de cada registro, el cual es un número que sigue el orden de inserción de cada registro en la tabla de la base de datos. o Private String matricula: Indica la matrícula del vehículo que se está monitorizando. o Private double latitud: Referencia el valor de la latitud en un momento concreto. o Private double longitud: Referencia el valor de la longitud en un momento concreto. o Private double velocidad: Muestra la velocidad del vehículo registrada en ese momento. o Private String fecha: La fecha en la que se ha realizado el registro. o Private String hora: La hora en la que se ha realizado el registro. o Private double acelerometro_x: Valor del eje x del acelerómetro en el momento del registro. o Private double acelerometro_y: Valor del eje y del acelerómetro en el momento del registro. o Private double acelerometro_z: Valor del eje z del acelerómetro en el momento del registro. o Private double giroscopio_x: Valor del eje x del giroscopio en el momento del registro. o Private double giroscopio_y: Valor del eje x del giroscopio en el momento del registro. o Private double giroscopio_z: Valor del eje x del giroscopio en el momento del registro. Para la comunicación con el context broker: Para recibir las notificaciones del context broker se utilizan estas clases, estas notificaciones recibidas se guardan como objetos. Las entidades y atributos del context broker llegan al servicio web en formato JSON y mediante la anotación @JsonProperty, que relaciona el nombre de las propiedades del flujo de datos JSON a cada atributo en Java, consigue convertirlos a objetos que se permitan leer y tratar su información de forma sencilla. Se implementan una serie de métodos para ello que siguen los estándares de las clases POJO. ▪ Attribute Las entidades del context broker poseen atributos, esta clase se implementa para que esos atributos pertenezcan a uno de los campos establecidos: o Private Metadata metadata: De tipo Metadata y hace referencia al campo metadata que aparece en el JSON procedente del context broker. o Private String type: Campo de tipo String que posee el tipo del dato que se guarda en el campo value. o Private T value: Este campo de tipo T, es el tipo genérico de Java ya que en ese momento no se conoce con exactitud el tipo de dato que se obtendrá del context broker, posee el valor del atributo. En la Ilustración 25 se muestra la clase Attribute del servicio web, donde se pueden observar cada uno de los campos descritos anteriormente. 40 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE ▪ Metadata Esta clase, la cual aparece en la Ilustración 26, posee un objeto de tipo “Attribute”, este tipo de objeto se ha implementado en el proyecto mediante la clase Attribute, mostrada anteriormente. Esta clase al seguir el estándar de una clase POJO, posee un getter (“getUnidades”) y un setter (“setUnidades”). Además de un constructor por defecto y otro que va asignando el valor del parámetro pasado al atributo que le corresponde. Ilustración 26: Clase POJO Metadata Ilustración 25: Clase POJO Attribute 41 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE o Private Attribute unidades: En este campo se muestra la unidad usada para medir cada una de las medidas que va tomando la aplicación. ▪ Notification Como ya se nombró con anterioridad, desde el servicio web se reciben las notificaciones procedentes del context broker, para poderlas tratar correctamente y recibirlas como objetos se ha realizado esta clase que se muestra en la Ilustración 27, llamada “Notification”. En esta clase se definen dos atributos, siguiendo el formato JSON que poseen las notificaciones que se reciben desde el context broker: o Private List<Entity> data: Es una lista de las entidades que han sido informadas en la notificación recibida. o Private String subscriptionId: Contiene el valor del identificador de la suscripción, es de tipo “String”. ▪ Entity En esta clase, mostrada en la Ilustracion 28, se tratan los atributos que poseen las entidades del context broker, es decir, tiene tantos atributos como atributos tengan las entidades. Las entidades llegan desde el context broker en formato JSON, mediante esta clase se proporciona abstracción y se definen los objetos que poseen esta información de cada entidad. A continuación, se muestran todos los atributos que se han definido en la clase “Entity”: o Private String id: Indica el identificador de la entidad recibida desde el context broker, es de tipo “String”. o Private String type: Hace referencia al tipo que aparece en la entidad recibida. o Private Attribute latitud: Posee el valor de la latitud en el instante medido. o Private Attribute longitud: Posee el valor de la longitud en el instante medido. o Private Attribute velocidad: Informa del valor de la velocidad en un instante concreto. o Private Attribute fecha: Fecha en la se ha realizado el registro de los datos en la aplicación Android. Ilustración 27: Clase POJO Notification 48 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE ▪ Permiso.hbm.xml: En este fichero se mapea la tabla “permisos” de la base de datos con la clase “Permiso” y todos sus atributos con las columnas de la tabla. ▪ Tipo.hbm.xml: Este fichero realiza el mapeo de la tabla “tipos” de la base de datos con la clase “Tipo” y todos sus atributos con cada una de las columnas de la tabla indicada. ▪ Dato.hbm.xml: En este fichero, mostrado en la Ilustración 34, se mapea la tabla “datos” de la base de datos con la clase “Dato”, además de asociar sus atributos con las columnas de esa tabla. Se establece un “id” como primer campo, este campo se mapea como un generador de secuencia, de ese modo va aumentado su valor con cada nuevo registro. Ilustración 33: Fichero Usuario.hbm.xml Ilustración 34: Fichero Dato.hbm.xml 49 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE 4.3 Servidor de Base de Datos La base de datos diseñada para este proyecto se compone de cuatro tablas, cada una con sus campos correspondientes y las relaciones necesarias entre ellas. Se ha creado un fichero creaTablas.sql que en primer lugar hace un borrado de la base de datos y las cuatro tablas, en el caso de que existieran con anterioridad, y posteriormente crea la base de datos “monitorizacion” y cada una de las tablas y sus campos asignando las claves primarias y externas que correspondan entre los campos indicados. En la Ilustración 35 se muestra un modelo Entidad-Relación con cada una de las tablas para que se pueda entender el diseño de la base de datos con más claridad. Se procede a describir cada una de las tablas mostradas en el modelo Entidad-Relación. ▪ Tabla “usuarios”: Almacena todos los usuarios que se han registrado mediante la aplicación Android. Formada por cuatro columnas de tipo VARCHAR. o usuario: Nombre del usuario que se registra en el sistema y mediante el cual se puede logear en la aplicación Android. Es la clave primaria de la tabla y es de tipo VARCHAR. o pass: Contraseña asociada al usuario registrado. La utiliza junto al nombre de usuario para poder logearse en la pantalla principal de la aplicación Android. Es de tipo VARCHAR. o tipo: Informa del tipo de vehículo asociado al usuario. Se trata de una clave externa que referencia a la columna “tipo” de la tabla “tipos”. Esta columna es de tipo VARCHAR. o matricula: Contiene la matrícula del vehículo del usuario. Esta columna es de tipo VARCHAR. Ilustración 35: Modelo Entidad-Relación de la Base de Datos 50 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE ▪ Tabla “permisos”: Contiene todos los valores de la asociación entre usuario y matrícula. Aparecen todos los usuarios y matrículas que se encuentran relacionados entre sí, para que dicho usuario tenga permisos de visualización sobre los datos registrados de la matrícula a la que se encuentre asociada en esta tabla. Esta tabla consta de tres columnas. o Id: Identificador de cada registro añadido a esta tabla. Se trata de una secuencia numérica que se va autoincrementando por cada nueva fila que sea añadida en la tabla. Es clave primaria y de tipo INTEGER. o usuario: Almacena todos los usuarios y los que poseen permisos de visualización sobre otras matrculas que no son la suya. Es clave primaria y clave externa que referencia a la columna “usuario” de la tabla “usuarios”. Se trata de un campo de tipo VARCHAR. o matricula: Informa de las matrículas que se encuentran asociadas a determinados usuarios para la visualización de sus datos recogidos. Es clave primaria y de tipo VARCHAR. ▪ Tabla “tipos”: Almacena los distintos tipos de vehículos disponibles para registrar en la aplicación y la velocidad máxima asociada a cada tipo. Tabla formada por 2 columnas. o tipo: Contiene todos los tipos existentes de vehículos para su selección desde la aplicación. Este campo es la clave primaria de la tabla y es de tipo VARCHAR. o vmax: Este campo proporciona los valores de la velocidad máxima asociada a cada tipo de vehículo. Es de tipo VARCHAR. Los valores de velocidad máxima asociados a cada tipo de vehículo, se establecen en el fichero tipos.txt y se copian a esta tabla. Estos valores se han obtenido de la página de la ITV que tiene como fuente a la DGT [13]. ▪ Tabla “datos”: Esta tabla se encarga de almacenar los valores de todos los datos monitorizados a través de la aplicación mediante los sensores del dispositivo móvil, en la Ilustración 36 se muestran algunos valores introducidos de ejemplo. Se encuentra formada por 13 columnas. o id: Identificador de cada registro añadido en esta tabla. Es una secuencia numérica que se va autoincrementando por cada fila añadida. Es la clave primaria de la tabla. Este campo es de tipo INTEGER. o matricula: Posee el número de matrícula del vehículo que se está monitorizando o visualizando. Se trata de una clave externa que referencia a la columna “matricula” de la tabla “usuarios”. Es de tipo VARCHAR. o latitud: Contiene el valor de la latitud. Es de tipo DOUBLE. o longitud: Contiene el valor de longitud. Este campo es de tipo DOUBLE. o velocidad: Informa de la velocidad a la que circula el vehículo en cada registro. Es de tipo DOUBLE. o fecha: Almacena la fecha en la que se ha realizado la recogida de datos desde los sensores del dispositivo móvil. Es de tipo VARCHAR. o hora: Informa de la hora en la que se ha realizado la obtención de los datos desde los sensores del dispotivo móvil. Este campo es de tipo VARCHAR. o acelerometro_x: Contiene el valor del eje x del acelerómetro. Es de tipo DOUBLE. o acelerometro_y: Contiene el valor del eje y del acelerómetro. Es de tipo DOUBLE. o acelerometro_z: Contiene el valor del eje z del acelerómetro. Es de tipo DOUBLE. o giroscopio_x: Informa del valor del eje x del acelerómetro: Es de tipo DOUBLE. 51 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE o giroscopio_y: Informa del valor del eje y del acelerómetro: Es de tipo DOUBLE. o giroscopio_z: Informa del valor del eje z del acelerómetro: Es de tipo DOUBLE. Ilustración 36: Ejemplo de datos almacenados en la tabla datos 4.4 API Rest En este apartado se analiza la API Rest utilizada. Los URI y métodos utilizados para hacer uso de las funcionalidades que se han implementado en el servicio web. Para formar los URI en este documento se han utilizado los corchetes “[]” para indicar que el elemento que aparezca en su interior será sustituido por el nombre o el valor del parámetro indicado. A continuación, se dividirán en dos grupos principales uno para los métodos GET (Tabla 1 y 2) y otro para los POST (Tabla 3). A su vez el primer grupo se dividirán en otros dos subgrupos para diferenciar más claramente la funcionalidad de cada una de las consultas. 4.4.1 Consultas utilizando el método GET Dentro de este grupo se hará la diferencia entre las consultas de los datos y la gestión de las suscripciones y notificaciones: ▪ Consulta de los datos URI Parámetros Descripción /sensor/registro?[parámetro1] =[valor1] &[parámetro2]=[valor2] &[parámetro3]=[valor3] &[parámetro4]=[valor4] “usuario”: Nombre del usuario. “pass”: Contraseña asociada al usuario. “tipo”: Tipo de vehículo “matricula”: Matrícula del vehículo. Insertar en la tabla “usuarios” de la base de datos un nuevo usuario registrado. /sensor/permisos?[parámetro1] =[valor1] &[parámetro2]=[valor2] “usuario”: Nombre del usuario. “matricula”: Matrícula del vehículo. Insertar en la tabla “permisos” de la base de datos un nuevo registro que indica la asociación entre usuario y matrícula. Para permitir a ese usuario visualizar los datos de la matrícula. 52 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE /sensor/buscarmatricula?[parámetro] =[valor] “usuario”: Nombre del usuario. Consultar la matrícula de un usuario en la tabla “usuarios” de la base de datos. /sensor/login?[parámetro1]=[valor1]& [parámetro2]=[valor2] “usuario”: Nombre del usuario. “pass”: Contraseña asociada al usuario. Consultar en la tabla “usuarios” de la base de datos si existe una entrada de ese usuario con esa matrícula. /sensor/rol?[parámetro1] =[valor1] ]&[parámetro2]=[valor2] “usuario”: Nombre del usuario. “matricula”: Matrícula del vehículo. Consultar en la tabla “permisos” de la base de datos si existe una entrada de ese usuario asociado a esa matrícula. /sensor/buscarhora?[parámetro1] =[valor1] &[parámetro2]=[valor2] &[parámetro3]=[valor3] &[parámetro4]=[valor4] “fecha”: Fecha en la que se ha realizado el registro. “matricula”: Matrícula del vehículo. “horaInicio”: Campo “hora” y marca el inicio del intervalo de tiempo. “horaFin”: Campo “hora” y marca el fin del intervalo de tiempo. Consultar en la tabla “datos” de la base de datos las horas en las que existen registros dentro del intervalo indicado. /sensor/buscarvelocidad?[parámetro1] =[valor1] &[parámetro2]=[valor2] &[parámetro3]=[valor3] &[parámetro4]=[valor4] “fecha”: Fecha en la que se ha realizado el registro. “matricula”: Matrícula del vehículo. “horaInicio”: Campo “hora” y marca el inicio del intervalo de tiempo. “horaFin”: Campo “hora” y marca el fin del intervalo de tiempo. Consultar en la tabla “datos” de la base de datos las velocidades en el intervalo de horas indicado. /sensor/buscarlatitud?[parámetro1] =[valor1] &[parámetro2]=[valor2] &[parámetro3]=[valor3] &[parámetro4]=[valor4] “fecha”: Fecha en la que se ha realizado el registro. “matricula”: Matrícula del vehículo. “horaInicio”: Campo “hora” y marca el inicio del intervalo de tiempo. “horaFin”: Campo “hora” y marca el fin del intervalo de tiempo. Consultar en la tabla “datos” de la base de datos los valores de la latitud en el intervalo de horas indicado. /sensor/buscarlongitud?[parámetro1] =[valor1] &[parámetro2]=[valor2] &[parámetro3]=[valor3] &[parámetro4]=[valor4] “fecha”: Fecha del registro. “matricula”: Matrícula del vehículo. “horaInicio”: Campo “hora” y marca el inicio del intervalo de tiempo. “horaFin”: Campo “hora” y marca el fin del intervalo de tiempo. Consultar en la tabla “datos” de la base de datos los valores de la longitud en el intervalo de horas indicado. 53 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE /sensor/buscaracelerometro?[parámetro1] =[valor1] &[parámetro2]=[valor2] &[parámetro3]=[valor3] &[parámetro4]=[valor4] “fecha”: Fecha en la que se ha realizado el registro. “matricula”: Matrícula del vehículo. “horaInicio”: Campo “hora” y marca el inicio del intervalo de tiempo. “horaFin”: Campo “hora” y marca el fin del intervalo de tiempo. Consultar en la tabla “datos” de la base de datos los valores de los ejes x, y, z del acelerómetro en el intervalo de horas indicado. /sensor/buscargiroscopio?[parámetro1] =[valor1] &[parámetro2]=[valor2] &[parámetro3]=[valor3] &[parámetro4]=[valor4] “fecha”: Fecha en la que se ha realizado el registro. “matricula”: Matrícula del vehículo. “horaInicio”: Campo “hora” y marca el inicio del intervalo de tiempo. “horaFin”: Campo “hora” y marca el fin del intervalo de tiempo. Consultar en la tabla “datos” de la base de datos los valores de los ejes x, y, z del giroscopio en el intervalo de horas indicado. /sensor/buscartipo?[parámetro] =[valor] “usuario”: Nombre del usuario. Consultar en la tabla “usuarios” de la base de datos el tipo del vehículo asociado al usuario indicado. /sensor/buscarvmax?[parámetro] =[valor] “tipo”: Tipo de vehículo Consultar en la tabla “tipos” de la base de datos la velocidad máxima asociada al tipo de vehículo indicado. /sensor/eliminarpermisos?[parámetro1] =[valor1] &[parámetro2]=[valor2] “usuario”: Nombre del usuario. “matricula”: Matrícula del vehículo. Elimina de la tabla “permisos” de la base de datos el registro que contiene el usuario y contraseña indicados. Para no permitir a ese usuario visualizar los datos de la matrícula. /sensor/buscarmatriculasasociadas?[parámetro] =[valor] “usuario”: Nombre del usuario. Consultar en la tabla “permisos” de la base de datos todas las matrículas que tiene asociadas el usuario indicado. Tabla 1: API Rest – Consultas de datos mediante GET ▪ Gestión de las suscripciones 54 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE URI Parámetros Descripción /sensor/cancelar_suscripcion?[parámetro] =[valor] “subscriptionId”: Se le asigna el valor del “id” de la suscripción existente. Cancela una suscripción que exista en el context broker, a través del id. /sensor/suscribir?[parámetro] =[valor] “matricula”: Matrícula del vehículo. Realiza una suscripción utilizando la matrícula como identificador de la entidad a suscribirse. /sensor/suscripciones?[parámetro] =[valor] No Aplica Consulta las suscripciones existentes en el contex broker. Tabla 2: API Rest – Gestión de suscripciones mediante GET 4.4.2 Consultas utilizando el método POST Dentro de este grupo solo se tratarán las consultas referentes a la gestión de las notificaciones. URI Parámetros Descripción /sensor/notificaciones No Aplica Recibe las notificaciones del context broker Tabla 3: Gestión de notificaciones mediante POST 55 5 APLICACIÓN ANDROID MYSPEED GO Y CONEXIÓN CON EL CONTEXT BROKER n este capítulo se describen las otras dos partes del proyecto, el Context Broker y la Aplicación Android. Se ha utilizado Orion Context Broker, el cual pertenece a una plataforma desarrollada para IoT llamada FIWARE. Aporta una función fundamental en cualquier sistema inteligente, administra, consulta y actualiza información de contexto. 5.1 Context Broker Se utiliza Orion Context Broker en una máquina virtual VMWare con el sistema operativo CentOS 7. Este context broker guarda sus datos en formato JSON, por lo tanto, todos los datos que recibe de la aplicación móvil desarrollada en Android están en ese formato, para que puedan ser tratados correctamente. Se ha configurado para que se acceda a través de la siguiente dirección http://localhost:1026/v2/. Una vez lanzado el context broker se pueden consultar las entidades creadas y las suscripciones existentes. Para visualizar las entidades se utiliza la sección /v2/entities y para las suscripciones /v2/subscriptions. 5.1.1 Entidades Orion Context Broker comienza en un estado vacío, es decir no posee entidades. Todos los datos recogidos por los sensores del Smartphone Sony Xperia SP referentes al vehículo, se envían al Orion Context Broker, este los almacena y clasifica en distintas entidades. Las entidades están constituidas por atributos, que representan los datos que se pueden medir en un vehículo. Orion Context Broker utiliza MongoDB como base de datos para almacenar el estado actual de las entidades, pero no la información histórica de sus cambios. Cada una de las entidades poseen un EntityId y un EntityType único para poder identificar la entidad de la que se trata. Además, también posee los campos de fecha, hora, velocidad, latitud, longitud, y los valores de los E Poco conocimiento hace que las personas se sientan orgullosas. Mucho conocimiento, que se sientan humildes. - Leonardo da Vinci - 56 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE ejes del acelerómero y giroscopio. En todos estos últimos campos se especifican el tipo, valor y metadata. Cada entidad posee un identificador único “id” del objeto, su valor es una cadena que contiene el identificador de la identidad. También existe la propiedad “Type” donde se especifica el tipo de identidad del objeto, su valor es una cadena que contiene el nombre del tipo de la entidad. Los atributos de las entidades se indican mediante propiedades adicionales, como la propiedad “name”, cuyo valor es una cadena que posee el nombre del atributo. Su valor se identifica mediante la propiedad “value” donde cualquier tipo JSON puede ser su valor. Existe una restricción que indica la imposibilidad de utilizar “id” y “type” como nombres de atributos. Se utiliza la API Restful NGSI v2 [14], mediante la cual se usa un cliente REST para enviar peticiones HTTP. Dicha API necesita especificar: - El método HTTP (GET, POST, PUT, DELETE, OPTIONS, HEAD, TRACE, CONNECT). - La URL, la cual incluye la IP del contex broker y la operación que se desea realizar, por ejemplo http://localhost:1026/v2/entities - Cabecera, indicada en la Ilustración 37. - Cuerpo de la petición. En el sistema diseñado las entidades poseen 13 atributos, los cuales son: ▪ id: Identificador único para cada vehículo, posee el valor de la matrícula. Junto al valor del atributo “type” identifican a la entidad. ▪ type: Tipo de cada entidad, posee el valor del tipo del vehículo que se está monitorizando (coche, camión, …). Junto al valor del atributo “id” identifican a la entidad. ▪ acelerometro_x: Valor del eje x del acelerómetro, mide la tasa de cambio de la velocidad de un objeto en ese eje. ▪ acelerometro_y: Valor del eje y del acelerómetro, mide la tasa de cambio de la velocidad de un objeto en ese eje. ▪ acelerometro_z: Valor del eje z del acelerómetro, mide la tasa de cambio de la velocidad de un objeto en ese eje. ▪ fecha: Fecha en la que se han monitorizado los datos, en formato dd/mm/aaaa. ▪ giroscopio_x: Valor del eje x del giroscopio, mide la tasa de cambio de la velocidad de un objeto en ese eje. ▪ giroscopio_y: Valor del eje y del giroscopio, mide la tasa de cambio de la velocidad de un objeto en ese eje. ▪ giroscopio_z: Valor del eje z del giroscopio, mide la tasa de cambio de la velocidad de un objeto en ese eje. Ilustración 37: Cabecera de petición HTTP 57 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE ▪ hora: Hora en la que se han monitorizado los datos, en formato hh:mm. ▪ latitud: Latitud, valor en grados decimales. ▪ longitud: Longitud, valor en grados decimales. ▪ velocidad: Velocidad en kilómetros por hora del vehículo a monitorizar. Estos atributos, menos en el caso de “id” y “type”, tienen una serie de valores en tres campos diferentes: ▪ value: Valor del atributo. ▪ type: Especifica el tipo de dato del campo value, en el caso de los atributos “fecha” y “hora” se tratan de strings y para los 9 casos restantes son de tipo double. ▪ metadata: Los metadatos son datos que describen o hablan sobre otros datos, es decir describen el contenido de la información del atributo que se esté tratando. En este caso el campo metadato contiene el atributo “unidades” que contiene información sobre el dato que se está proporcionando en ese atributo, asi como sus unidades de medida. En todos los casos al ser una descripción el campo “type” estará informado como “text”. Para poder visualizar todas las entidades existentes en el Orion Context Broker se realiza una petición GET a la siguiente url: http://localhost:1026/v2/entities. Se recibirá una respuesta en formato JSON procedente del context broker con cada una de las entidades que existan en ese momento. A continuación, en la Ilustración 38 se muestra un ejemplo de una entidad del proyecto, donde se pueden ver cada uno de los atributos descritos y los valores de cada uno de ellos. 64 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE 5.2 Aplicación Android MySpeed Go Se ha utiliza el dispositivo Sony Xperia SP, smartphone con sistema operativo Android. Posee una memoria RAM de 1GB, y 8GB de almacenamiento, Además de tener acelerómetro, giroscopio y los sensores necesarios para obtener los valores de la velocidad y ubicación. Se ha diseñado una aplicación Android encargada de registrar nuevos usuarios, logear usuarios ya registrados y monitorizar y visualizar todos los datos recogidos a través de los sensores del dispositivo móvil. Esta aplicación Android tendrá comunicación con el Orion Context Broker, el servicio web y la base de datos SQLite de Android. A continuación, en la Ilustración 46 se muestra un diagrama con los casos de uso de la Aplicación Android. Ilustración 46: Diagrama de casos de uso de la aplicación Android 5.2.1 Clases En este apartado se tratan todas las clases que se utilizan para la aplicación Android diseñada, y así lograr un correcto funcionamiento de la misma. A continación se mostrarán en dos diagramas de clases, cada una de las clases empleadas para la aplicación Android y las relaciones entre ellas. En el primer diagrama de clases, el cual se muestra en la Ilustración 47, aparecen cada una de las clases utilizadas para el funcionamiento general de la aplicación. 65 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE En el segundo diagrama de clases, mostrado en la Ilustración 48, se observa cada una de las clases encargadas de establecer una conexión con el context broker o el servicio web. Además de las relaciones con las demás clases de la aplicación Android Ilustración 47: Diagrama de clases – Aplicación Android 66 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE En primer lugar, se analizarán las clases utilizadas en el Modelo de la aplicación web. Estas clases son las siguientes: ▪ Usuario: Contiene el usuario y la contraseña que el usuario ha introducido al registrarse, además de la matrícula y el tipo de vehículo. También posee el constructor de la clase, los getters y los setters de los campos. ▪ Permiso: Esta clase contiene los campos Usuario y Matricula, para la asociación entre las matrículas y los usuarios que tienen permisos para visualizar sus datos recogidos. Además, incluye el constructor de la clase, y los getters y setters de los campos. ▪ Tipo: Contiene los campos del tipo de vehículo y la velocidad máxima asociada a ese tipo. También posee el contrstructor de la clase y los getters y setters de cada uno de los campos. ▪ Dato: En esta última se encuentran todos los valores de los campos que se enviarán al context broker, como son el Id, posición (Latitud y Longitud), Velocidad, Fecha, Hora, aceleración (ejes x, y, z del acelerómetro) y la velocidad rotacional (ejes x, y, z del giroscopio). Al igual que las anteriores, contiene el constructor de la clase, los getters y los setters de todos los campos. Todas las demás clases utilizadas en la aplicación Android se dividen en 4 grupos dependiendo de la funcionalidad que tenga, menos una, la clase MainActivity, encargada de la monitorización de los datos y de mostrarlos en tiempo real. La clase nombrada anteriormente se analizará en primer lugar. Se ha decidido que no forme parte de ninguno de los grupos que aparecen en este apartado porque tiene comunicación con todos los sistemas (servicio web, context broker y base de datos SQLite de Android). Ilustración 48 : Diagrama de clases – Conexiones Aplicación Android 67 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE MainActivity Esta clase se encarga de monitorizar los datos que recoge cada uno de los sensores del dispositivo móvil, además de la fecha y hora en la que se produce cada nuevo registro. También va mostrando en tiempo real todos esos valores para que el usuario pueda verlos. Se utiliza el método “onLocationChanged” de la clase “Localizacion” que implenta “LocationListener” (android.location.LocationListener) para obtener los valores de la latitud y longitud y guardarlos en un objeto JSON. Además, se utiliza el geocodificador (Android.Location.Geocoder) para obtener la dirección en la que se encuentra el vehículo, utilizando para ello los valores de la latitud y longitud obtenidos. En el método “onSensorChanged” con un SensorEvent como argumento de entrada, se obtienen los valores de los ejes x, y, z del acelerómetro y giroscopio y se guardan en un objeto JSON. Se ha creado el método “SaveData” desde donde se crea una nueva instancia de la clase “BasedeDatos” para insertar en la base de datos SQLite de Android todos los valores del vehículo que se van obteniendo. En el método “SendDataToCB” mediante la línea “ClientREST.sendPostRequest(url, petition)” se realiza la petición al context broker indicando su url y el cuerpo de la petición con los valores de la entidad. Al salir de esta pantalla, se cancela la suscripción existente al context broker mediante una petición al servicio web. Clases para el funcionamiento principal Estas son las clases más generales de la aplicación, que no establecen una comunicación directa con la base de datos de Android, el context broker o el servicio web. ▪ MyApplication Ilustración 49: Clase MyApplication Es la clase de aplicación personalizada que extiende de la “android.app.Application”. La clase “Application” de la que extiende, es la clase base de una aplicación Android que contiene todos los componentes, como pueden ser las actividades y servicios. Se instancia antes que cualquier otra clase cuando se crea el proceso para su aplicación o paquete. Se muestra en la Ilustración 49. 68 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE ▪ AjustesDatosWS En esta clase se establecen los ajustes principales de la aplicación Android. Contiene la funcionalidad de la pantalla de ajustes donde se introduce el valor de la dirección ip del servicio web. ▪ AjustesDatosCB Esta clase asigna ajustes a la aplicación Android, en ella se establecen los valores de la dirección ip y puerto del context broker y el intervalo de tiempo entre envíos de datos, recogidos por los sensores del dispositivo móvil, al context broker. ▪ DatePickerFragment Mediante Android, que proporciona diversos controles para lograr que el usuario pueda elegir una fecha en un cuadro de diálogo en el que aparece un calendario. Este selector ayuda a que cada usuario pueda elegir la fecha que desea, y esta sea válida y esté formateada correctamente [18]. Permite elegir el dia, el mes y el año. Utiliza una estrategia de persistencia, como es SharedPreferences [19] para poder acceder al valor de la fecha seleccionada desde otra clase. ▪ TimePickerFragmentInicio Android proporciona controles para lograr que el usuario pueda elegir una hora en un cuadro de diálogo. Este selector ayuda a que cada usuario pueda elegir la hora de inicio del intervalo que desea, y esta sea válida y siga un formato correcto. Permite elegir la hora y los minutos. Utiliza una estrategia de persistencia, como es SharedPreferences [19] para poder acceder al valor de la hora de inicio seleccionada desde otra clase [18]. ▪ TimePickerFragmentFin El sistema Android proporciona controles para lograr que el usuario pueda elegir una hora en un cuadro de diálogo. Este selector ayuda a que cada usuario pueda elegir la hora de fin del intervalo que desea, y esta sea válida y siga un formato correcto. Permite elegir la hora y los minutos. Utiliza una estrategia de persistencia, como es SharedPreferences [19] para poder acceder al valor de la hora de fin seleccionada desde otra clase [18]. ▪ VisualizacionGrafica En esta clase se establece la funcionalidad para mostrar la gráfica de la velocidad respecto a la hora. Para ello el eje x está limitado por la hora de inicio y hora de fin elegidas y aparecen todas las horas que tienen valores registrados dentro de ese intervalo. Mientras en el eje y se muestran los valores de la velocidad que existen en ese intervalo de horas. Se obtienen las horas y velocidades a mostrar a partir de SharedPreferences [19]. Para mostrar la gráfica se hace uso de la biblioteca de gráficos para Android “lecho.lib.hellocharts” [20]. ▪ VisualizacionMapa Esta clase muestra un mapa con la ruta que ha seguido el vehículo durante el día e intervalo de tiempo seleccionado previamente. Para obtener el mapa se utiliza Mapbox, un conjunto de herramientas de código abierto para mostrar mapas en las aplicaciones Android. Se ha utlizada la versión 8.4.0 del SDK de Mapbox [21]. Los valores de las latitudes y longitudes se obtienen mediante SharedPreferences [19] y se monta una 69 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE cadena con formato GeoJSON para que se puedan leer esos valores e interpretarlos correctamente en el mapa formando la ruta. ▪ VisualizacionAceYGiro Esta clase muestra dos listas con los valores del acelerómetro en una y los del giroscopio en otra. Los valores del acelerómetro (eje x, y, z) y giroscopio (eje x, y, z) se obtienen en la clase “SeleccionTipoVisualizacion” mediante la petición al servicio web que se realiza cuando se elige la opción de visualizar el acelerómetro y giróscopio. Desde esta clase se accede a esos valores utilizando SharedPreferences [19] y se listan siguiendo el orden de inserción que tuvieron en la tabla “datos” de la base de datos “monitorizacion”. Se listan mediante un TextView dentro del ScrollView utilizado en su layout. A ese TextView se le asigna los valores listados. Clases para la comunicación con el Orion Context Broker En este caso se describen las clases que establecen una relación entre la aplicación Android y el context broker ▪ ClientRest Esta clase, la cual se muestra en la Ilustración 50, se encarga mediante la API de Android, de implementar la comunicación cliente servidor. Para ello utiliza la clase HttpURLConnection. Se realiza una petición POST. Se sigue el siguiente patrón para implementar dicha comunicación: o Se obtiene un nuevo HttpURLConnection y enviando el resultado a HttpURLConnection. o Se prepara la solicitud indicando el URI y los encabezados de la solicitud. o Cargar un cuerpo de solicitud. Debido a que se incluye el cuerpo de solicitud, las instancias se configuran con “setDoOutput(true)”. o Leer la respuesta. El cuerpo de la respuesta se lee mediante la secuencia que devuelve “URLConnection.getInputStream()”. o Una vez leído todo el cuerpo de la respuesta, se desconecta a través de “disconnect()”. Contiene el método “sendPostRequest” que recibe como argumentos de entrada la URL de la petición y el contenido de la petición. Devuelve una cadena para indicar la respuesta de la petición. Ilustración 50: Clase ClientREST 70 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE Clases para la comunicación con el servicio web Ahora se procede a describir las clases que establecen una relación entre la aplicación Android y el servicio web. ▪ Principal Esta clase se encarga de la funcionalidad asociada a la pantalla Principal de la aplicación Android. Establece la comunicación con el servicio web para el envío de una petición con los valores del usuario y contraseña intoducidos por el usuario, para que el servicio web acceda a la base datos y comprueba si existen esos datos en la tabla “usuarios”. La aplicación Android recibe un mensaje de respuesta del servicio web con los valores encontrados en la base de datos. En esta clase, también se encarga de obtener la matrícula asociada al usuario en la tabla “usuarios” y las matrículas que el usuario tiene asociadas en la tabla “permisos”. Todas estas matrículas se guardan utilizando SharedPreferences, para poder obtener sus valores en otra clase. ▪ ConnectionClass Esta clase, mostrada en la Ilustración 51, se encarga mediante la API de Android, de implementar la comunicación cliente servidor. Para ello utiliza la clase HttpURLConnection [22]. Se sigue el siguiente patrón para implementar dicha comunicación: o Se obtiene un nuevo HttpURLConnection y enviando el resultado a HttpURLConnection. o Se prepara la solicitud indicando el URI con los parámetros y los encabezados de la solicitud. o Cargar un cuerpo de solicitud. Debido a que se incluye el cuerpo de solicitud, las instancias se configuran con “setDoOutput(true)”. o Leer la respuesta. El cuerpo de la respuesta se lee mediante la secuencia que devuelve “connection.getInputStream()”. o Una vez leído todo el cuerpo de la respuesta, se desconecta a través de “disconnect()”. Ilustración 51: Clase ConnectionClass 71 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE Se utiliza en el método “openConnection” que recibe como argumentos de entrada la URL de la petición con los parámetros necesarios. Devuelve un “StringBuilder” con los datos devueltos por el servicio web. ▪ PermisoUsuario Mediante esta clase se le otorga o se le retira a un usuario el permiso de visualización sobre una matrícula, para que así, un usuario pueda ver los datos registrados por una matrícula, que no es la suya, en la base de datos. Este permiso de visualización lo asigna el usuario con la matrícula a visualizar. Para ello realiza peticiones al servicio web, utilizando el método “openConnection” de la clase “ConnectionClass” descrito anteriormente. Primero comprueba si ese usuario existe en el sistema, luego comprueba si el usuario indicado ya posee esos permisos de visualización sobre la matrícula y, por último, se inserta el usuario indicado y la matrícula en la tabla “permisos” de la base de datos. En el caso de que se desee retirar el permiso de visualización a un usuario, simplemente se elimina dicha entrada de la tabla “permisos” de la base de datos. ▪ SeleccionRol A través de esta clase se define la funcionalidad de poder elegir a que sección de la aplicación acceder, si a la pantalla de monitorización de datos en tiempo real o a la pantalla de visualización de datos ya registrados. Para lograr esto, las peticiones al servicio web se realizan utilizando el método “openConnection” de la clase “ConnectionClass” descrito anteriormente. En el caso de acceder al modo de monitorización de datos, se realiza una petición al servicio web para consultar si existen suscripciones realizadas en el context broker con anterioridad que no han sido canceladas, si existe alguna la cancela y crea una nueva. Si no existen suscripciones anteriores, crea la nueva directamente. ▪ Registro Esta clase se define para el registro de nuevos usuarios en la aplicación Android. Realiza una petición al servicio web para insertar los datos del nuevo registro en la tabla “usuarios” y otra petición para insertar el usuario y matrícula en la tabla “permisos”. Esa inserción en la tabla “permisos” de la base de datos permite que el nuevo usuario tenga permisos de visualización sobre su propia matrícula. Se utiliza el método “openConnection” de la clase “ConnectionClass” descrito anteriormente. ▪ SeleccionTipoVisualizacion Desde esta clase se realiza la funcionalidad de establecer una fecha y un intervalo de tiempo a consultar, y lanzar las pantallas de visualización de la velocidad, ubicación y acelerómetro y giroscópio. En esta clase se crea una nueva instancia de la clase “DatePickerFragment” para permitir al usuario seleccionar la fecha en la que buscar los registros. También crea una instancia de la clase “TimePickerFragmentInicio” para elegir la hora de inicio del intervalo a buscar y otra nueva instancia de la clase “TimePickerFragmentFin” para la hora de fin. Para acceder a cualquiera de las tres pantallas de visualización se realizan peticiones al servicio web de donde se obtienen los datos a mostrar. Estos datos se guardan siguiendo una estrategia de persistencia, como es SharedPreferences [19], para su utilización en la siguiente clase. Utiliza el método “openConnection” de la clase “ConnectionClass” descrito con anterioridad. 72 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE Clases para la comunicación con la base de datos SQLite de Android Existen muchos sistemas de bases de datos disponibles, pero hay uno de ellos que se ajusta perfectamente a las aplicaciones móviles, SQLite. Esto es debido a que SQLite solo requiere un simple fichero para almacenar los datos, porque la lógica de funcionamiento tiene que ser implementada por la plataforma que quiera insertar o consultar esos datos. En el caso de Android, el SDK Android posee soporte completo para SQLite. En este apartado se describen las clases que establecen una relación entre la aplicación Android y la base de datos SQLite del propio Android. ▪ BasedeDatos En ella se crea la tabla “Tarea” en la base de datos SQLite, donde se guardan todos los datos recogidos por los sensores del dispositivo móvil y posee un identificador que va autoincrementandose con cada nuevo registro en la tabla. ▪ VisualizacionListaSQLite Esta clase tiene dos funciones, cargar todos los registros de la tabla “Tarea” de la base de datos SQLite y mostrarlos por pantalla en una lista ordenada por orden de inserción. Y también eliminar todos los registros de la tabla “Tarea”. 5.2.2 Ficheros de configuración En este apartado se describen todos los ficheros de configuración que se utilizan en la aplicación Android. AndroidManifest.xml Es un fichero que debe tener todos los proyectos de aplicaciones, y situado en la raíz de la fuente del proyecto. Posee información esencial de la aplicación. Entre otras cosas debe informar de: o El nombre del paquete de la aplicación. o Los componentes de la aplicación, en los cuales se incluyen las actividades, servicios, receptores de emisiones y proveedores de contenido o Los permisos que necesita la aplicación. o Las funcionalidades de hardware y software que la aplicación requiere y afectan a los dispositivos que pueden instalar la aplicación desde Google Play. En este caso, al utilizar Android Studio, genera este fichero, el cual se puede observar en la Ilustración 52 con la mayoría de estos elementos esenciales de forma automática. Muestra el nombre del paquete e ID de la aplicación en el elemento raíz <manifest> con el nombre de paquete “com.example.sergio.appvelocidad” en el atributo “package”. Mientras se compila la aplicación, el atributo “package” se utiliza para aplicar ese nombre como espacio de nombres para la clase “R.java” generada en la aplicación (utilizada para acceder a los recursos). También se utiliza para resolver cualquier nombre de clase relativo que se encuentre declarado en el fichero AndroidManifest. Se utiliza el componente de aplicación <activity> para cada subclase de Activity. Si una subclase no se declara en este fichero de configuración, el sistema no puede inciarlo. El nombre de la subclase se debe indicar con el atributo “name”. En la actividad principal se utiliza <intent-filter> para indicar los tipos de intents a los que puede responder una actividad. Dentro del elemento <intent-filter> se indican dos más: o <action>: Con el valor del atributo “name” a “android.intent.action.MAIN”, esto significa que esta actividad es el punto de entrada a la aplicación, al iniciarse la aplicación se crea esta actividad. 73 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE o <category>: En el atributo “name” tiene el valor “android.intent.category.LAUNCHER”, indica que la actividad indicada como el punto de entrada, debe aparecer en el lanzador de la aplicación. Ilustración 52: Fichero AndroidManifest.xml Ficheros de configuración de compilación Android utiliza “Gradle” para compilar recursos y código fuente de la aplicación y los empaqueta en APK. Al comenzar un nuevo proyecto, Android crea de forma automática algunos de estos ficheros con valores predeterminados. Se utilizan dos archivos de compilación de nivel superior “build.gradle”, ambos ubicados en el directorio raíz del proyecto. Además de los repositorios y dependencias que se añaden por defecto al crear el proyecto, en ambos ficheros de compilación se añaden otros repositorios y dependencias necesarias para el correcto funcionamiento de este proyecto. o build.gradle(Project: appvelocidad): Este fichero de compilación de nivel superior, mostrado en la Ilustración 53, permite añadir opciones de configuración que serán comunes a todos los módulos del proyecto. 80 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE ▪ Pantalla de Monitorización Al pulsar en el botón “MONITORIZACÓN DE DATOS” en la pantalla de Selección de Rol, nos traslada a esta pantalla, mostrada en la Ilustración 63, donde se van actualizando los datos en el intervalo de tiempo que hayamos indicado anteriormente en la ventana de ajustes del context broker. Los datos que se muestran son tratados por el context broker y guardados en MySQL a través del servicio web, además de añadirse a la base de datos SQLite de Android. En la parte superior podemos visualizar dos velocidades, la que se encuentra a la izquierda es la velocidad que lleva nuestro vehículo en ese momento actualizándose en el intervalo de tiempo establecido en la pantalla de ajustes, y situada a la derecha, aparece la velocidad limite establecida para el tipo de vehículo con el que se encuentre circulando en ese momento. Si la velocidad a la que circulamos es la velocidad límite menos 20 km/h o mayor pero no superior a la velocidad límite, el recuadro cambia a naranja, como señal de aviso que se encuentra próxima a la establecida como límite, y si supera a la velocidad límite cambia a rojo. En la parte inferior aparecen 3 botones, el que se encuentra situado a la izquierda nos muestra los valores guardados en la base de datos SQLite de Android, el situado en el centro de la pantalla permite salir de la sesión del usuario y volver a la pantalla principal de la aplicación, y el que se encuentra a la derecha nos muestra la pantalla de ajustes del context broker. Ilustración 62: Pantalla Permisos – Aplicación Android Ilustración 61: Pantalla Ajustes CB – Aplicación Android 81 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE ▪ Pantalla para mostrar los valores de la base de datos SQLite Esta pantalla, la cual se puede observar en la Ilustración 64, permite visualizar todos los valores recogidos por los sensores del vehículo que se esta monitorizando y guardados en la base de datos SQLite de Android. Además, en la esquina inferior derecha aparece un botón con el icono de una papelera, que al pulsar elimina todo el contenido de la base de datos SQLite y se refresca la lista, apareciendo vacía. ▪ Pantalla de Visualización Al pulsar en “VISUALIZACIÓN DE DATOS” en la pantalla de Selección de Rol, nos lleva a esta pantalla, mostrada en la Ilustración 66, en ella podemos ver los datos tratados por el context broker y el servicio web y almacenados en la base de datos MySQL. Se establece la fecha y un rango de horas, luego podemos ver 3 tipos de datos guardados: Al pulsar en “VELOCIDAD” nos lleva a una pantalla con una gráfica donde se muestra la velocidad que el vehículo con la matrícula asociada indicada a cada hora dentro del rango de horas seleccionado. Al pulsar en “MAPA DEL RECORRIDO” nos lleva a una pantalla donde se muestra un mapa con el recorrido del vehículo en ese rango de horas de ese día. Al pulsar en “ACELEROMETRO Y GIROSCOPIO” nos lleva a una pantalla donde se muestran dos listas con los valores del acelerómetro y giroscopio en ese rango de horas de ese día. ▪ Por último, se observan las pantallas de visualización que muestran la velocidad frente a la hora (Ilustración 65), la ruta recorrida por el vehículo representada en un mapa (Ilustración 67) y los valores de todos los ejes del acelerómetro y giroscopio en forma de lista (Ilustración 68). Ilustración 63: Pantalla Monitorización - Aplicación Android Ilustración 64: Pantalla Visualización SQLite – Aplicación Android 82 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE Ilustración 65: Gráfica Velocidad/Hora – Aplicación Android Ilustración 67: Mapa con la ruta – Aplicación Android Ilustración 68: Listas Acelerómetro y Giroscopio – Aplicación Android Ilustración 66: Pantalla Visualización – Aplicación Android 83 7 CONCLUSIONES Y LÍNEAS FUTURAS La experiencia te iluminará, el maestro sólo te puede mostrar el camino. – Proverbio egipcio - omo resultado del proyecto realizado, es posible indicar que ha sido muy positivo para aprender y obtener conocimientos más específicos sobre todas las tecnologías utilizadas. Estas tecnologías son muy importantes hoy en día para hacernos la vida más sencilla y por tanto se encuentran en pleno crecimiento, en este caso haciendo más énfasis en el entorno de las ciudades inteligentes con el uso de Fiware. Entre todos los conocimientos adquiridos a lo largo del desarrollo de este proyecto, hay que destacar el gran peso que han tenido la utilización de Android Studio, el cual, es el entorno de desarrollo integrado (IDE) empleado de forma oficial para el desarrollo de las aplicaciones Android, y el uso de Spring en el desarrollo de las distintas clases java del servicio web. Se tenían conocimientos previos de estas materias por diversas asignaturas cursadas en el grado, pero se trataban de conocimientos básicos, ha sido necesario dedicarle una parte del tiempo a profundizar en todo lo que nos ofrecen estas tecnologías para su uso en el proyecto de la mejor forma posible. El sistema que se ha desarrollado en este proyecto posee, además de todas las funcionalidades mostradas, un gran número de mejoras. Este proyecto se trata de una gran base, sobre la cual se seguirán realizando mejoras en un futuro para que la experiencia del usuario con la aplicación Android sea cada vez mejor. Una de esas posibles mejoras sería en la situación de que no se posea conexión a internet, poder seguir almacenando datos en la base de datos SQLite de Android. Para ello se tendrían que mantener esos datos en una cola, esperando a establecer una conexión a internet. En el momento que se posea conexión en el sistema, antes de seguir enviando nuevos datos a la base de datos, enviar todos los que se encuentren a la espera de ser enviados. Es decir, cuando se establece la conexión antes de enviar nuevos datos se comprobaría siempre si existen datos a la espera, una vez se compruebe esto y el resultado sea que la cola esta vacía, se pueden seguir almacenando los nuevos datos recogidos por los sensores. Otra mejora, y en mi opinión la más importante de todas, es la implementación de seguridad en el sistema. De esta forma se evitarían muchos problemas, desde accesos no permitidos a la aplicación hasta adulterar los datos para conseguir fines maliciosos. También sería útil para proteger la información de cada usuario, ya que se guardan los nombres de usuarios con su contraseña y la matrícula del coche que posee, por ello lo más conveniente sería la implementación de mecanismos para la correcta autenticación. Todas las medidas de seguridad serían necesarias en el sistema completo, formado por aplicación Android, context broker y servicio web, para ello sería C 84 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE imprescindible la implementación del cifrado en la comunicación entre ellos. Además de las anteriores mejoras, también sería interesante el poder suscribirse más de un usuario al mismo vehículo a la vez. Mientras viajan en el mismo vehículo, y estar monitorizando los datos de los sensores al mismo tiempo. 85 $ systemctl start docker $ systemctl enable docker $ systemctl status docker $ yum check-update $ yum install -y yum-utils device-mapper-persistent-data lvm2 $ yum -config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo $ yum install docker ANEXO A: INSTALACIÓN DE ORION CONTEXT BROKER EN CENTOS A TRAVÉS DE DOCKER En este primer anexo se muestra como instalar y ejecutar Orion Context Broker a través de Docker en una maquina virtual con CentOS 7. Docker es una tecnología de creación de contenedores que permite crear y usar contenedores de Linux. La tecnología Docker usa el kernel de Linux y las funciones de este, como Cgroups y namespaces, para segregar procesos y así poder ejecutarse de manera independiente. El propósito de los contenedores es esta independencia: la capacidad de ejecutar varios procesos y aplicaciones por separado haciendo un mejor uso de su infraestructura y, a la vez, mantener la seguridad que tendría con sistemas separados. Las herramientas desarolladas a partir de los contenedores de Linux, hace a Docker fácil de usar y único, otorgan a los usuarios acceso a las aplicaciones, control sobre las versiones y su distribución y capacidad de implementar de forma rápida. Docker tiene numerosas ventajas como la modularidad, control de versiones de imágenes y capas, restauración e implementación rápida. La tecnología Docker es un enfoque más granular y controlable, basado en microservicios, que da prioridad la eficiencia. Para poder instalar Docker en CentOS 7 se necesitan los siguientes prerequisitos: • Versión mantenida/compatible de CentOS, Docker no acepta versiones obsoletas. • Cuenta de usuario con privilegios de superusuario. • Acceso a la terminal • Instalador de paquetes de software yum A.1 Instalación de Docker Ejecutar los siguientes comandos: Administrar el servicio Docker y comprobar que se ha instalado correctamente: 86 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE $ sudo docker pull mongo:3.6 $ sudo docker pull fiware/orion $ sudo docker network create fiware_default $ sudo docker run -d --name=mongo-db --network=fiware_default \ --expose=27017 mongo:3.6 --bind_ip_all --smallfiles $ sudo docker run -d --name fiware-orion -h orion --network=fiware_default \ -p 1026:1026 fiware/orion -dbhost mongo-db $ sudo docker stop fiware-orion $ sudo docker rm fiware-orion $ sudo docker stop mongo-db $ sudo docker rm mongo-db $ sudo docker network rm fiware_default A.2 Ejecución del Context Broker Para ejecutar el Context Broker en la terminal de la máquina virtual CentOS, se realizan estos comandos: Una vez ejecutados todos estos comandos, comprobamos si el Context Broker se ha iniciado correctamente mediante: Debe aparecer un resultado similar al de Ilustración 69. Ilustración 69: Ejecución Context Broker A.3 Detención del Context Broker Para parar la ejecución del context broker realizamos los siguientes comandos: $ curl -X GET \ 'http://localhost:1026/version' 87 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE Tras ejecutar los comandos anteriores se comprueba que la conexión se rechaza, como se observa en la Ilustración 70. Ilustración 70: Detención del Context Broker 88 ANEXO B: INSTALACIÓN Y CONFIGURACIÓN DE ANDROID STUDIO En este anexo se tratará la instalación y configuración de Android Studio en su versión 3.3.1 en el sistema operativo Windows 10. B.1 Instalación de Android Studio 1. Acceder a la url https://developer.android.com/studio y descargar el fichero ejecutable de la versión. 2. Una vez descargado el fichero ejecutable, se lanza y aparece el instalador de Android Studio: 3. En los pasos de la instalación, seleccionar: a. Android Virtual Device como componente a instalar (Ilustración 71). Ilustración 71: Instalación Android Studio – Paso 1 89 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE b. El directorio donde se instalará Android Studio (Ilustración 72). c. La carpeta del menú Inicio (Ilustración 73). 4. Tras esperar el tiempo de la instalación, aparece una pantalla, como se muestra en la Ilustracion 74, donde se marca la opción Do not import settings. Ilustración 72: Instalación Android Studio – Paso 2 Ilustración 73: Instalación Android Studio – Paso 3 Ilustración 74: Instalación Android Studio – Paso 4 96 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE Ilustración 82: Descarga de Xampp 2. Ejecutar el ejecutable descargado, en la primera ventana que aparece seleccionamos todos los componentes disponibles, ya deberían estar marcados por defecto. 3. Seleccionar la carpeta contenedora, pulsamos varias veces en Siguiente y comienza la instalación. 4. Si aparece un mensaje emergente de Firewall de Windows Defender seleccionamos Permitir acceso. 5. Una vez haya finalizado la instalación pulsamos en Finish y se lanza Xampp automáticamente. Seleccionamos el idioma y aparece el panel de control, mostrado en la Ilustración 83, desde donde podemos iniciar, parar y administrar todos los servicios. Ilustración 83: Panel de Control de Xampp 97 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE D.3 Configuración de phpMyAdmin Para manejar la administración de MySQL se utiliza la herramienta phpMyAdmin, para ello se siguen estos pasos: 1. En el fichero config.inc.php situado en c:/xampp/phpmyadmin, modificar el parámetro $cfg['Servers'][$i]['auth_type'] de config a cookie. 2. Desde el panel de control de Xampp se inicia Apache y MySQL. 3. Pulsar Admin en MySQL (Ilustración 84) y lanza una nueva ventana en el navegador con la pagina de inicio de sesión de phpMyAdmin. 4. Intoducir el usuario y contraseña (Ilustración 85) y ya se puede acceder para crear, borrar y administrar bases de datos, tablas y campos, como se observa en la Ilustración 86. Ilustración 84: Opciones de MySQL en el panel de control Ilustración 85: Inicio de sesión en phpMyAdmin 98 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE Ilustración 86: Visualización de las tablas de la base de datos 99 ANEXO E: PUESTA EN MARCHA Y EJECUCIÓN DEL PROYECTO Para poner en marcha el context broker, se necesita una máquina virtual y el uso de docker. Se siguen los siguientes pasos: o Descargar e instalar VMware Workstation 15 Player. o Descargar la máquina virtual CentOS del departamento de ingeniería telemática de la Universidad de Sevilla. o Arrancar la máquina virtual CentOS descargada desde VMware Workstation 15 Player, como aparece en la Ilustración 87. o Instalar Docker en la máquina virtual CentOS como se indica en el apartado “A.1 Instalación de Docker” del Anexo A. o Ejecutar Orion Context Broker en la máquina virtual CentOS, para ello es necesario hacer uso de docker, tal y como se indica en el apartado “A.2 Ejecución del Context Broker” del anexo A. Una vez seguidos todos estos pasos ya tendríamos el context broker ejecutándose en la máquina virtual. Lo siguiente sería la configuración de la base de datos MySQL. Para ello es necesario hacer uso de XAMPP y phpMyAdmin como se indica en el “Anexo D: Configuración de la base de datos MySQL”. Por último, en phpMyAdmin, se ejecuta el fichero creaTablas.sql para crear la base de datos “monitorización” y cada una de las tablas necesarias para almacenar todos los valores de la aplicación. Ilustración 87: Lanzamiento máquina virtual CentOS 100 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE A continuación, hay que ejecutar el servicio web Spring, para ello se siguen los siguientes pasos: o Se instala y configura Spring Tool Suite como se indica en el “Anexo C: Instalación y configuración de Spring Tool Suite”. o Para importar el proyecto del servicio web, se arranca Spring Tool Suite y pulsando en File→Open Projects from File System… aparece una ventana como la de la Ilustración 88. o Seleccionamos la ruta donde se encuentre el proyecto y finalizamos. o Asignamos las ip de nuestro equipo y de la maquina virtual del context broker en el fichero src/main/resources/application.properties y src/main/resources/hibernate.cfg.xml. o Por último, pulsamos botón derecho sobre el proyecto en la pestaña de “Project Explorer” y seleccionamos Run As→Spring Boot App. Para la aplicación Android es necesario lanzarla al dispositivo móvil mediante Android Studio, para ello se siguen los siguientes pasos: o Descargar, instalar y configurar Android Studio como se indica en el “Anexo B: Instalación y configuración de Android Studio”. o Una vez se tiene arrancado Android Studio, hay que importar el proyecto para ello se pulsa en la opción Open an existing an Android Studio Project, se indica el directorio y elegimos el proyecto a importar. o Para lanzar la aplicación hay dos opciones, en un simulador que proporciona Android Studio o en un dispositivo móvil Android conectado mediante una conexión usb al pc. En el caso del dispositivo móvil, previamente hay que activar la opción de desarrollador en el dispositivo. Como se puede observar en la Ilustración 89, una vez se haya pulsado pulsado en Run→Run ‘app’, aparecen los dispositivos conectados y los simuladores disponibles. Se elige una de las opciones y pulsamos en OK. Ilustración 88: Importar proyecto en STS 101 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE Ilustración 89: Selección dispositivos Android 102 REFERENCIAS [1] P. Bermejo Pérez, Aplicación y Servicio Web para la gestión de información de sensores usando Fiware y Spring, Sevilla: Universidad de Sevilla, 2019. [2] Android Studio, <<Android Studio>> [En línea]. Disponible: https://developer.android.com/studio/intro. [3] Xampp, <<¿Qué es XAMPP?>> [En línea]. Disponible: https://www.apachefriends.org/es/index.html. [4] Spring, <<Why Spring>> [En línea]. Disponible: https://spring.io/why-spring. [5] Hibernate, <<Hibernate – Everything data>> [En línea]. Disponible: https://hibernate.org/. [6] Docker, <<What is a Container?>> [En línea]. Disponible: https://www.docker.com/resources/whatcontainer. [7] MySQL, <<General Information>> [En línea]. Disponible: https://dev.mysql.com/doc/refman/8.0/en/introduction.html. [8] phpMyAdmin, <<phpMyAdmin - About>> [En línea]. Disponible: https://www.phpmyadmin.net/. [9] Mapbox, <<How Mapbox works>> [En línea]. Disponible: https://docs.mapbox.com/help/how-mapbox- works/. [10] SQLite, <<What Is SQLite?>> [En línea]. Disponible: https://www.sqlite.org/index.html. [11] MongoDB, <<What is MongoDB?>> [En línea]. Disponible: https://www.mongodb.com/what-is- mongodb. [12] Fiware Orion Context Broker, <<Orion Context Broker Quick Start Guide>> [En línea]. Disponible: https://fiware-orion.readthedocs.io/en/master/quick_start_guide/index.html. [13] Dirección General de Tráfico, <<Límites de velocidad por carretera en España>> [En línea]. Disponible: https://itv.com.es/limites-de-velocidad-por-carretera. [14] Fiware Orion Context Broker, <<Fiware NGSI APIv2 Walkthrough>> [En línea]. Disponible: https://fiware-orion.readthedocs.io/en/master/user/walkthrough_apiv2/index.html. [15] Fiware Orion Context Broker, <<Oneshoot Subscription>> [En línea]. Disponible: https://fiwareorion.readthedocs.io/en/master/user/oneshot_subscription/index.html. [16] Fiware Orion Context Broker, <<Using Regular Expressions in Payloads>> [En línea]. Disponible: https://fiware-orion.readthedocs.io/en/1.4.0/user/regex_in_payload/index.html. [17] Fiware Orion Context Broker, <<Initial Notification>> [En línea]. Disponible: https://fiwareorion.readthedocs.io/en/master/user/initial_notification/index.html. [18] Android, <<Pickers>> [En línea]. Disponible: https://developer.android.com/guide/topics/ui/controls/pickers. [19] Android, <<SharedPreferences>> [En línea]. Disponible: https://developer.android.com/reference/android/content/SharedPreferences. 103 Aplicación Android y Servicio Web Spring para la monitorización de datos obtenidos en un vehículo haciendo uso de la plataforma FIWARE [20] Android, <<HelloCharts for Android>> [En línea]. Disponible: https://github.com/lecho/hellochartsandroid. [21] Mapbox, <<Draw a GeoJSON line>> [En línea]. Disponible: https://docs.mapbox.com/android/maps/examples/draw-a-geojson-line/. [22] Android, <<HttpURLConnection>> [En línea]. Disponible: https://developer.android.com/reference/java/net/HttpURLConnection.