scieee AI-readable full text Open interactive document viewer

Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético

Lozano Jurado, Belén María

Abstract

En la actualidad, estamos inmersos en una era de avances tecnológicos que han transformado profundamente la forma en que interactuamos con nuestro entorno. El concepto de hogar inteligente ha ganado popularidad rápidamente, ofreciendo soluciones innovadoras para hacer nuestras vidas más cómodas y eficientes. El creciente uso de dispositivos móviles y la expansión de la conectividad a Internet han brindado nuevas oportunidades para controlar y gestionar nuestros electrodomésticos de manera remota. En este contexto, el presente Trabajo de Fin de Grado se centra en el desarrollo de una aplicación para dispositivos Android que utiliza la API REST de OpenHAB para realizar peticiones a un sistema de automatización del hogar. Esta API, a su vez, redirige las peticiones hacia Home Connect, una plataforma que permite la comunicación con electrodomésticos compatibles con esta tecnología. Además, se ha implementado un servicio REST personalizado para llevar un seguimiento del consumo de energía de cada electrodoméstico y mostrar dicha información en la misma aplicación. El objetivo principal de este proyecto es, por tanto, proporcionar a los usuarios una forma fácil y centralizada de controlar sus electrodomésticos que dispongan de la tecnología de Home Connect y monitorear su consumo de energía desde sus dispositivos móviles. Esto se ha logrado gracias a la integración entre OpenHAB y Home Connect.

Full text

Trabajo Fin de Grado Grado en Ingeniería de las Tecnologías de Telecomunicación Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético Dpto. Ingeniería Telemática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2023 Autor: Belén María Lozano Jurado Tutor: María Teresa Ariza Gómez ii iii Trabajo Fin de Grado Grado en Ingeniería de las Tecnologías de Telecomunicación Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético Autor: Belén María Lozano Jurado Doctora: María Teresa Ariza Gómez Departamento de Ingeniería Telemática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2023 iv v Trabajo Fin de Grado: Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético Autor: Belén María Lozano Jurado 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, 2023 El Secretario del Tribunal vi vii A mi familia y a mis amigos, por su apoyo incondicional. viii ix Agradecimientos Sin duda, el instante más significativo y emotivo en la creación de esta memoria se encuentra en este apartado. Quisiera expresar mi sincero agradecimiento a todas las personas que han contribuido de manera significativa en la realización de este proyecto. Su apoyo, orientación y colaboración han sido fundamentales para el éxito de esta iniciativa. En primer lugar, quiero agradecer de corazón a mi tutora María Teresa Ariza Gómez su dedicación inquebrantable, su orientación experta y sus valiosos consejos a lo largo de todo este proyecto. Su compromiso ha sido fundamental para la realización exitosa de este proyecto. No puedo dejar de expresar mi profunda gratitud hacia mis padres, hermano y abuela, así como a toda mi familia, cuyo apoyo incondicional ha sido mi roca durante todo este proceso. Sus palabras de aliento, comprensión y amor han sido mi fuente de motivación constante. Agradezco profundamente su paciencia y comprensión en los momentos en que mi atención estaba centrada en este proyecto. Su respaldo ha sido esencial en esta travesía. Mi más sincero agradecimiento a mi compañero de vida, Alejandro, por ser mi punto de apoyo día tras día. Gracias por estar siempre ahí, escucharme, ayudarme y motivarme incluso en los momentos más complicados. Gracias a mi querido amigo Juanjo, por ser uno de mis apoyos más importantes a lo largo de esta etapa universitaria. Te agradezco de corazón todos tus consejos, explicaciones y tu disposición para ayudar en todo momento. Gracias a mi amiga Carmen, por inspirarme y aconsejarme en el diseño gráfico de mi aplicación móvil. Y a todos mis amigos, gracias por vuestro apoyo y confianza. Extiendo mi gratitud a todos mis profesores y compañeros por haberme ayudado durante la carrera. Gracias a todos mis seres queridos que ya no están entre nosotros, porque sé que desde allá donde estéis me habéis mandado toda vuestra fuerza y apoyo. Belén María Lozano Jurado Sevilla, 2023 xvi 3.1.3 Simulador de Home Connect 18 3.1.4 API REST de Home Connect 20 3.2 OpenHAB 21 3.2.1 Definición de OpenHAB 21 3.2.2 Configuración de OpenHAB 22 3.2.3 API Explorer de OpenHAB 35 3.3 Ventajas de integrar OpenHAB y Home Connect 38 4 Desarrollo del proyecto 39 4.1 Aplicación Android IntelliHome 39 4.1.1 Diseño de la Interfaz de Usuario 39 4.1.2 Conexión de la aplicación móvil con el servidor de OpenHAB 51 4.1.3 Conexión de la aplicación móvil con el servidor REST de consumo 53 4.2 Servicio REST de consumo 54 4.2.1 Servidor REST de consumo 54 4.2.2 Spring Security 59 4.2.3 Base de datos 66 4.3 Estimación del consumo energético 69 4.3.1 Tramos de consumo energético 69 4.3.2 Creación y configuración de reglas de OpenHAB 69 5 Conclusiones y líneas futuras 79 5.1 Conclusiones personales 79 5.2 Conclusiones técnicas 79 5.3 Líneas futuras 80 5.3.1 Diseño 80 5.3.2 Funcionalidades 80 5.3.3 Seguridad 80 5.3.4 Infraestructura y despliegue 81 Anexo A: Instalación y Configuración del servidor de OpenHAB en Ubuntu 83 A) Instalación del servidor de OpenHAB 83 B) Arranque y parada del servidor de OpenHAB 84 Anexo B: Instalación y Despliegue del servidor REST de Consumo en Ubuntu 87 A) Instalación del servidor REST de Consumo 87 B) Inicialización de la base de datos 87 C) Despliegue del servidor REST de Consumo 87 Referencias 89 xvii ÍNDICE DE TABLAS Tabla 1. Items de cada electrodoméstico 35 Tabla 2. Endpoints utilizados en OpenHAB 36 Tabla 3. Endpoints del servicio Consumo 55 Tabla 4. Métodos Consumo Controller 57 xviii xix ÍNDICE DE FIGURAS Figura 1-1. Arquitectura 4 Figura 2-1. Portátil Dell Inspiron 15 5510 7 Figura 2-2. Android Studio 8 Figura 2-3. Emulador Pixel 4 8 Figura 2-4. Logo OpenHAB 9 Figura 2-5. Logo Home Connect 9 Figura 2-6. Simulador de electrodomésticos Home Connect 9 Figura 2-7. Ubuntu 20.04 10 Figura 2-8. Mozilla Firefox 10 Figura 2-9. Spring 10 Figura 2-10. Maven 10 Figura 2-11. PostgreSQL 11 Figura 2-12. Figma 11 Figura 2-13. RESTClient 11 Figura 2-14. Visual Studio Code 12 Figura 2-15. GitHub 12 Figura 2-16. Wireshark 12 Figura 2-17. Spring Security 13 Figura 3-1. Logo Home Connect 15 Figura 3-2. Registro usuario Home Connect 16 Figura 3-3. Registro app Home Connect 16 Figura 3-4. Menú aplicaciones Home Connect 17 Figura 3-5. Datos bellozAPP Home Connect 18 Figura 3-6. Simulador cafetera 19 Figura 3-7. Logo de OpenHAB 21 Figura 3-8. Registro OpenHAB 22 Figura 3-9. Menú de inicio OpenHAB 23 Figura 3-10. Ajustes OpenHAB 24 Figura 3-11. Binding HomeConnect 24 Figura 3-12. Añadir Thing 25 Figura 3-13. Elegir Binding 25 Figura 3-14. Elegir Home Connect API 26 Figura 3-15. New Home Connect API 26 Figura 3-16. Home Connect Bridge 27 xx Figura 3-17. Ingresar credenciales Home Connect 27 Figura 3-18. Scopes Home Connect 28 Figura 3-19. Autorización exitosa bridge 28 Figura 3-20. Añadir Thing manualmente 29 Figura 3-21. New Coffee Machine 30 Figura 3-22. Scan new things 30 Figura 3-23. Configuración cafetera 31 Figura 3-24. Things Home Connect 31 Figura 3-25. Channels cafetera 32 Figura 3-26. Channel potencia cafetera 32 Figura 3-27. New item Potencia 33 Figura 3-28. Endpoints API REST OpenHAB 36 Figura 3-29. Petición GET API Explorer OpenHAB 37 Figura 3-30. Respuesta del servidor a la petición GET 37 Figura 4-1. Diseño cafetera Figma 40 Figura 4-2. Pantalla Login 41 Figura 4-3. Pantalla Habitaciones 42 Figura 4-4. Añadir habitación 43 Figura 4-5. Editar o eliminar habitación 44 Figura 4-6. Editar habitación 44 Figura 4-7. Eliminar habitación 44 Figura 4-8. Pantalla Cocina 44 Figura 4-9. Pantalla Cafetera 45 Figura 4-10. Pantalla Frigorífico 46 Figura 4-11. Pantalla Horno 47 Figura 4-12. Pantalla Lavavajillas 48 Figura 4-13. Pantalla Lavadero 48 Figura 4-14. Pantalla Lavadora 49 Figura 4-15. Pantalla Secadora 50 Figura 4-16. Pantalla Consumo 51 Figura 4-17. Consumo filtrado 51 Figura 4-18. Diagrama de secuencia comunicación APP, OpenHAB y Home Connect 52 Figura 4-19. Diagrama de secuencia comunicación APP, servidor de consumo y BBDD 53 Figura 4-20. Diagrama de secuencia inicio de sesión 62 Figura 4-21. Diagrama de secuencia consulta consumo 63 Figura 4-22. Petición /login correcta 64 Figura 4-23. Petición /login incorrecta 64 Figura 4-24. Petición de credenciales 65 Figura 4-25. Respuesta correcta servidor 65 xxi Figura 4-26. Crear nueva rule OpenHAB 70 Figura 4-27. Configuración rule OpenHAB 71 Figura 5-1. Barra de navegación 80 xxii xxiii Notación y acrónimos REST API SQL HD SSD XML RAM HTTP APT Transferencia de Estado Representacional Interfaz de Programación de Aplicaciones Lenguaje de Consulta Estructurado Alta Definición Unidad de Estado Sólido Lenguaje de Marcado Extensible Memoria de Acceso Aleatorio Protocolo de Transferencia de Hipertexto Herramienta Avanzada de Gestión de Paquetes JVM TCP IP URL MVC BBDD IoT Máquina Virtual de Java Protocolo de Control de Transmisión Protocolo de Internet Localizador Uniforme de Recursos Modelo Vista Controlador Base de Datos Internet de las Cosas xxiv 1 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 1 INTRODUCCIÓN 1.1 Motivación El presente proyecto surge de la creciente importancia de la automatización del hogar y la necesidad de promover la eficiencia energética en nuestra sociedad actual. Conscientes de la relevancia de este tema, este Trabajo de Fin de Grado se enfoca en el desarrollo de una aplicación moderna y práctica para dispositivos Android, que aproveche la interoperabilidad y flexibilidad de OpenHAB y la innovadora tecnología de Home Connect. El objetivo principal de este proyecto es proporcionar a los usuarios una solución integral y práctica para controlar sus dispositivos del hogar a distancia y monitorear el consumo de los mismos desde la comodidad de sus dispositivos móviles. Esta aplicación no solo mejorará la calidad de vida de los usuarios al ofrecerles un control centralizado de sus electrodomésticos, sino que también promoverá la eficiencia energética al permitir un seguimiento detallado del consumo de energía de cada dispositivo, permitiendo al usuario optimizar su consumo y reducir costos. Este último aspecto adquiere una relevancia aún mayor en el contexto actual de inflación que supone gastos elevados al consumidor. Además, esta investigación representa una oportunidad única para explorar, aprender y aplicar tecnologías de vanguardia, como el desarrollo de servicios REST y la integración de plataformas como OpenHAB y Home Connect. A nivel académico, este proyecto desempeñará un papel fundamental en mi crecimiento personal, permitiéndome adquirir y mejorar mis habilidades en áreas clave como la automatización del hogar, el diseño de aplicaciones móviles y la gestión del consumo energético. Al abordar esta temática, se espera contribuir al conocimiento existente y ofrecer soluciones prácticas que beneficien tanto a los usuarios finales como al medio ambiente. Este proyecto representa una oportunidad para fusionar la innovación tecnológica con la preocupación por la sostenibilidad, estableciendo un precedente para futuras investigaciones y mejoras en el campo de la automatización del hogar. 1.2 Objetivos En esta sección, se presentan los objetivos que se han establecido para el desarrollo de este proyecto: • Realizar una investigación profunda sobre las tecnologías de Home Connect y OpenHAB, comprendiendo sus características, capacidades y requisitos de integración. • Desarrollar una aplicación para dispositivos Android que permita a los usuarios controlar y monitorear sus electrodomésticos de forma remota. • Implementar un servicio REST que permita llevar un seguimiento del consumo de energía de cada electrodoméstico y mostrar dicha información en la aplicación. El éxito es la suma de pequeños esfuerzos repetidos día tras día. - Robert Collier- 8 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 2.2 Recursos Software 2.2.1 Android Studio Android Studio es un entorno de desarrollo integrado (IDE) ampliamente utilizado para crear aplicaciones móviles para dispositivos Android. Proporciona herramientas intuitivas y potentes que facilitan la escritura de código, la depuración, la creación de interfaces de usuario y la gestión de proyectos, lo que permite a los desarrolladores crear aplicaciones de alta calidad y optimizadas para la plataforma Android. [5] 2.2.2 Emulador del Google Pixel 4 Android Studio ofrece diversos emuladores y el elegido para este proyecto ha sido el Google Pixel 4 API 31. Este emulador replica las características hardware y software del dispositivo real, y permite probar y depurar las aplicaciones desarrolladas en el entorno de Android Studio de manera fácil e intuitiva. Figura 2-3. Emulador Pixel 4 Figura 2-2. Android Studio 9 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 2.2.3 OpenHAB OpenHAB es un sistema de automatización del hogar de código abierto escrito en Java. [6] 2.2.4 Binding de Home Connect Es un componente que permite la integración y comunicación entre el sistema de automatización del hogar OpenHAB y los dispositivos conectados a través de la plataforma Home Connect, permitiendo controlar y monitorear los electrodomésticos de manera centralizada. [7] 2.2.5 Simulador de electrodomésticos de Home Connect Para poder probar la comunicación entre la aplicación móvil y los electrodomésticos que soportan la tecnología Home Connect, se ha hecho uso del simulador de electrodomésticos que proporciona Home Connect. Concretamente, dispone de una cafetera, un frigorífico, una lavadora, una secadora, un lavavajillas y un horno, como podemos ver en la figura 2-6. [8] Figura 2-4. Logo OpenHAB Figura 2-5. Logo Home Connect Figura 2-6. Simulador de electrodomésticos Home Connect 10 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 2.2.6 Ubuntu El sistema operativo elegido para el desarrollo de la aplicación móvil, la ejecución en local del servidor personalizado de OpenHAB y el despliegue del servidor REST para el cálculo del consumo de los electrodomésticos, ha sido Ubuntu 20.04. 2.2.7 Mozilla Firefox Este ha sido el navegador elegido para poder visualizar el simulador de Home Connect y para poder acceder al servidor de OpenHAB y configurarlo. 2.2.8 Spring Spring es un entorno de desarrollo de aplicaciones Java que proporciona un conjunto de herramientas y funcionalidades para construir, entre otras cosas, servicios RESTful de manera eficiente y escalable. [9] 2.2.9 Maven Maven es una herramienta de gestión de proyectos que facilita la construcción, gestión de dependencias y compilación de aplicaciones Java de manera eficiente. Está basado en un formato XML. [10] Figura 2-7. Ubuntu 20.04 Figura 2-8. Mozilla Firefox Figura 2-9. Spring Figura 2-10. Maven 11 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 2.2.10 PostgreSQL PostgreSQL es un sistema de gestión de bases de datos relacional de código abierto y robusto que ofrece un alto nivel de funcionalidad y capacidad de adaptación para el almacenamiento y manipulación de datos. [11] 2.2.11 Figma Figma es una herramienta de diseño colaborativo basada en la nube que permite a los equipos crear, prototipar y compartir diseños de interfaces de usuario de manera eficiente. [12] 2.2.12 RESTClient Es una herramienta que permite realizar peticiones HTTP y probar servicios REST directamente desde el navegador, facilitando su desarrollo y depuración. [13] Figura 2-11. PostgreSQL Figura 2-12. Figma Figura 2-13. RESTClient 12 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 2.2.13 Visual Studio Code Visual Studio Code, a menudo llamado VS Code, es un editor de código gratuito y ligero desarrollado por Microsoft. Está diseñado para diversos lenguajes de programación y ofrece características como resaltado de sintaxis, autocompletado de código inteligente, depuración, integración de control de versiones y una amplia gama de extensiones. [14] 2.2.14 GitHub GitHub es una plataforma web que permite a los desarrolladores gestionar, respaldar y colaborar en proyectos de software a través de sistemas de control de versiones. Además de su utilidad para proyectos colaborativos, también es valioso para su uso de forma individual, brindándoles un espacio para mantener un historial de versiones, explorar y respaldar su código de manera eficiente. [15] 2.2.15 Wireshark Wireshark es una herramienta de análisis de red de código abierto que permite capturar y examinar el tráfico de datos en una red. Proporciona información detallada sobre los paquetes de datos, permitiendo a los administradores de red y desarrolladores diagnosticar problemas, analizar protocolos y supervisar la actividad de la red en tiempo real. [16] Figura 2-14. Visual Studio Code Figura 2-15. GitHub Figura 2-16. Wireshark 13 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 2.2.16 Spring Security Spring Security es un marco de seguridad altamente personalizable para aplicaciones Java. Proporciona herramientas para autenticar y autorizar usuarios, proteger recursos y gestionar sesiones. Con características como autenticación de usuarios, control de acceso y protección contra amenazas de seguridad, Spring Security permite a los desarrolladores fortalecer la seguridad de sus aplicaciones de manera efectiva. [17] Figura 2-17. Spring Security 14 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 15 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 3 ESTADO DEL ARTE En este capítulo, se indicará la definición, la configuración y otras características de las tecnologías Home Connect y OpenHab. Además, se expondrán las ventajas de integrar OpenHAB y Home Connect. 3.1 Home Connect 3.1.1 Definición de Home Connect Home Connect es una tecnología que permite conectar y controlar electrodomésticos inteligentes de forma remota a través de una aplicación móvil o un asistente de voz. Con Home Connect, se puede acceder a funciones específicas de cada aparato, recibir notificaciones, consultar su estado, obtener consejos y recetas personalizadas, entre otras funcionalidades. Las marcas de electrodomésticos que están asociadas a Home Connect son: Bosch, Siemens, Gaggenau, Neff y Balay. Por otro lado, Home Connect ofrece su propia aplicación móvil para Android y iOS y, además, lo más interesante es que ofrece una API REST que permite a los desarrolladores crear aplicaciones y servicios innovadores que se integren con los electrodomésticos conectados. La API REST de Home Connect se basa en los principios de arquitectura RESTful y utiliza el formato JSON para el intercambio de datos. Para facilitar el uso de la API, Home Connect proporciona un portal del desarrollador donde se puede encontrar documentación, ejemplos de código, guías de inicio rápido y un simulador de electrodomésticos. El portal del desarrollador también permite gestionar las credenciales de acceso, las suscripciones y el soporte técnico. 3.1.2 Registro y configuración de Home Connect En esta sección, exploraremos detalladamente los pasos requeridos para configurar nuestra cuenta en la web del desarrollador de Home Connect, permitiéndonos aprovechar al máximo esta tecnología y llevar a cabo un control eficiente de nuestros electrodomésticos. 1. Lo primero que tendremos que hacer es registrarnos en el portal del desarrollador [18] y rellenar nuestros datos personales como se puede observar en la figura 3-2. Figura 3-1. Logo Home Connect 16 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético Figura 3-2. Registro usuario Home Connect 2. Una vez registrada nuestra cuenta, nos dirigimos a la pestaña Applications [19] y registramos una nueva aplicación. En la figura 3-3, podemos observar cómo habría que configurar los diferentes campos para que todo funcione de forma óptima. Es de especial importancia que en el apartado “Home Connect User Account for Testing” indiquemos el mismo usuario que hemos configurado en el paso 1 y, en “Redirect URI”, hay que indicar la IP y puerto donde se encuentre corriendo el servidor de OpenHAB seguido, por ejemplo, de “/homeconnect”. Figura 3-3. Registro app Home Connect 17 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 3. Una vez registrada la aplicación, si todo lo hemos realizado correctamente, nos debería salir algo similar a la figura 3-4. A la izquierda, tenemos un ID de cliente y dos enlaces hacia el cliente API Web que ofrece Home Connect, para familiarizarnos con los endpoints 3 de su API REST. Y, a la derecha, tenemos los datos de la aplicación que hemos creado en el paso 2. Figura 3-4. Menú aplicaciones Home Connect 4. Si hacemos clic en “Details” podremos ver la clave secreta del cliente y el resto de los datos que hemos rellenado en el registro de la aplicación. Estos datos serán de crucial importancia para asociar nuestra aplicación Home Connect con OpenHAB. En la figura 3-5, tenemos los datos de nuestra aplicación Home Connect titulada “bellozAPP”. 3 URLs específicas de un servicio web o API a las cuales se puede acceder para realizar solicitudes y obtener respuestas de datos o realizar acciones específicas. 24 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 5. Iniciamos sesión con las credenciales que introdujimos en el paso 1 y ya nos saldrán los ajustes donde podremos configurar el servidor a nuestro gusto, como podemos ver en la figura 3-10. De esta manera, ya tendríamos configurado OpenHAB listo para añadir todos los elementos que queramos en nuestra casa virtual. 3.2.2.2 Configuración binding Home Connect Lo primero que haremos para comenzar la configuración de nuestro servidor de OpenHAB será instalar el binding de Home Connect. Para ello, en los ajustes (Settings) navegamos hasta el apartado Add-ons y hacemos clic al apartado Bindings. Una vez ahí, buscamos HomeConnect Binding y hacemos clic en instalar (ver figura 3-11). A continuación, procederemos a la configuración del binding siguiendo el manual de OpenHAB dedicado al binding de Home Connect [24]: Figura 3-11. Binding HomeConnect Figura 3-10. Ajustes OpenHAB 25 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 1. Nos vamos al apartado Things de la interfaz web de OpenHAB y le damos al botón de añadir (ver figura 3-12). 2. Seleccionamos el binding de Home Connect (ver figura 3-13). Figura 3-13. Elegir Binding Figura 3-12. Añadir Thing 26 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 3. Hacemos clic en Home Connect API para configurar el binding (ver figura 3-14). 4. Rellenamos los datos de Client ID y Client Secret con las credenciales proporcionadas por Home Connect para nuestra aplicación (figura 3-5, apartado 3.1.2) y luego hacemos clic en Show advanced para seleccionar la opción del simulador (ya que no tenemos dispositivos físicos que dispongan de la tecnología Home Connect para hacer nuestras pruebas). Por último, hacemos clic en el botón Create Thing. Podemos ver en la figura 3-15 cómo debe quedar esta configuración. Figura 3-15. New Home Connect API Figura 3-14. Elegir Home Connect API 27 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 5. A continuación, ingresaremos en el navegador esta URL http://127.0.0.1:8080/homeconnect para obtener la autorización por parte de la API de Home Connect y hacemos clic en Authorize Bridge (figura 3-16). 6. Seguidamente, nos redirecciona a una página de Home Connect donde debemos ingresar nuestras credenciales para obtener el token de autorización a la API REST de Home Connect (ver figura 3-17). 7. Al hacer clic en Login nos redirecciona a otra página para aceptar un conjunto de permisos que determinan qué acciones y datos puedes acceder y manipular en los dispositivos. Los podemos observar en la figura 3-18. Figura 3-16. Home Connect Bridge Figura 3-17. Ingresar credenciales Home Connect 28 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 8. Si todo ha salido correctamente debería salir una pantalla similar a la de la figura 3-19. De esta manera, ya tendríamos correctamente configurado nuestro binding de Home Connect en OpenHAB. Figura 3-18. Scopes Home Connect Figura 3-19. Autorización exitosa bridge 29 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 3.2.2.3 Configuración de los electrodomésticos del binding de Home Connect Una vez configurado nuestro binding de Home Connect, es el momento de vincular al mismo nuestros dispositivos del simulador para poder controlarlos correctamente desde nuestra aplicación móvil. Para ello, es necesario crear estos dispositivos (things) y, posteriormente, asociarlos mediante canales (channels) a los diferentes elementos (items) de los electrodomésticos. 3.2.2.3.1 Creació n de Things del binding Hóme Cónnect Para la creación de los dispositivos Home Connect en OpenHAB, seguiremos los siguientes pasos: 1. Hacemos clic en añadir un nuevo Thing de igual manera que en la figura 3-12 del apartado anterior. Seguidamente, hacemos clic en el binding de Home Connect y, a continuación, tenemos 2 opciones: meter manualmente la configuración de cada dispositivo o hacer clic en el botón Scan para que detecte los dispositivos compatibles que se encuentren conectados a la misma red que el servidor de OpenHAB. 2. Para hacerlo manualmente, hacemos clic en el tipo de dispositivo que queremos añadir (figura 3-20). Por ejemplo, si seleccionamos la cafetera (Coffee Machine), habría que rellenar los datos que aparecen en la figura 3-21. Figura 3-20. Añadir Thing manualmente 30 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 3. En cambio, si hacemos clic en el botón Scan es mucho más sencillo, ya que se rellenan automáticamente estos datos (ver figura 3-22). Hacemos clic en Add All y ya se nos añaden automáticamente todos los dispositivos conectados a nuestra red. Figura 3-21. New Coffee Machine Figura 3-22. Scan new things 31 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 4. A continuación, un paso opcional es modificar el nombre de estos dispositivos para que sea más legible y además añadir la zona de la casa en la que se encuentran, rellenando para ello el campo Location (ver figura 3-23). 5. De esta manera, ya tendríamos nuestros 6 dispositivos disponibles en el simulador de Home Connect vinculados a OpenHAB, como podemos comprobar en la figura 3-24. Figura 3-24. Things Home Connect Figura 3-23. Configuración cafetera 32 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 3.2.2.3.2 Creació n de Items y vinculació n de Channels del binding Hóme Cónnect Una vez que se han establecido los 6 dispositivos del simulador de Home Connect en el entorno de OpenHAB, el siguiente paso clave es la creación de elementos (items) que actuarán como intermediarios para gestionar la interacción entre la aplicación móvil y los dispositivos. En este apartado, exploraremos el proceso de configuración de elementos y la forma en que se establece la conexión funcional entre los dispositivos (things) y los elementos (items) a través de canales (channels), facilitando así un control coherente y eficiente de los electrodomésticos mediante la plataforma OpenHAB. Para ello, seguiremos los siguientes pasos: 1. Para añadir los items correspondientes a cada electrodoméstico, nos vamos a la lista de things y hacemos clic en el electrodoméstico al que queramos añadirle sus items. Seguidamente, le damos a la pestaña Channels donde veremos un listado con todos los canales disponibles. En la figura 3-25 podemos observar los channels correspondientes a la cafetera. 2. Hacemos clic por ejemplo en el primer canal “Potencia” y vemos que sale una pestaña donde pone “Add Link to Item…” (ver figura 3-26). Figura 3-25. Channels cafetera Figura 3-26. Channel potencia cafetera 33 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 3. Le damos a “Add Link to Item…” y nos permite 2 opciones: usar un Item existente o crear un nuevo Item, y vincularlo al canal. Elegimos la segunda opción, dejamos los valores por defecto y hacemos clic en el botón Link. Así ya tendríamos creado el nuevo item y vinculado a su canal correspondiente (ver figura 3-27). 4. De la misma manera, repetimos este procedimiento con el resto de los canales e items que queramos configurar en cada electrodoméstico. A continuación, en la tabla 1 podremos ver los diferentes Items asociados a sus Things necesarios en nuestro proyecto: Figura 3-27. New item Potencia 40 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 4. Implementación de las interacciones y retroalimentación con el usuario: por último, se ha llevado a cabo la implementación de los detalles que hacen mucho más visual, atractiva y cómoda a nuestra aplicación. Se ha hecho uso de algunos widgets como PopupMenu para lanzar desplegables con las diferentes opciones que puede seleccionar el usuario o cuadros de diálogo para interactuar con el usuario y solicitar que se rellenen ciertos datos o actuar a modo de aviso, entre otras muchas funcionalidades. A continuación, procederemos a presentar y detallar las distintas pantallas que conforman la aplicación móvil: Figura 4-1. Diseño cafetera Figma 41 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 4.1.1.1 Pantalla Login Cada vez que el usuario inicie la aplicación IntelliHome esta será la pantalla de bienvenida, donde se invitará al usuario a introducir sus credenciales para poder acceder a su casa virtual, como podemos ver en la figura 4-2. Cuando el usuario haga clic en INICIAR SESIÓN tras haber rellenado sus datos, se enviará una petición POST al endpoint /login del servidor de consumo, donde se comprobará si las credenciales son correctas o incorrectas y se le dará acceso o no en consecuencia al usuario. Figura 4-2. Pantalla Login 42 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 4.1.1.2 Pantalla Habitaciones Si el usuario ha introducido de forma correcta las credenciales, se cargará la pantalla “Habitaciones”, donde se listarán automáticamente todas las habitaciones disponibles en la tabla “habitaciones” de la base de datos SQLite de la aplicación (ver figura 4-3). Para lograr esto, es fundamental que el usuario haya previamente creado al menos una habitación siguiendo las indicaciones proporcionadas en la funcionalidad “Añadir nueva habitación”, explicada unas líneas más abajo. La aplicación utiliza una consulta para recuperar todas las habitaciones almacenadas en la base de datos y las presenta en la pantalla de forma ordenada. Cada habitación se muestra con su nombre y la imagen seleccionada por el usuario como icono. Esto proporciona al usuario una vista rápida y organizada de todas las habitaciones en su hogar. Esta pantalla tiene diversas funcionalidades: 1. Cerrar sesión: en la esquina superior derecha, al hacer clic en el texto "Cerrar sesión", seremos redirigidos a la pantalla de Login, al mismo tiempo que todos los datos asociados a la sesión que se acaba de cerrar serán eliminados. 2. Añadir nueva habitación: si hacemos clic en el botón amarillo con el símbolo “+”, nos saldrá un cuadro de diálogo como podemos ver en la figura 4-4. Este cuadro nos pedirá que insertemos un nombre a la nueva habitación así como que seleccionemos de la galería una imagen para ponerle de icono a esta nueva habitación. Cuando hagamos clic en AÑADIR, se insertará esta nueva habitación en la base de datos y ya aparecerá listada entre las demás habitaciones. Nota: es importante destacar que el nombre asignado a la habitación coincida con el atributo "Location" de los dispositivos en OpenHAB. Esto permitirá que los electrodomésticos ubicados en dicha habitación se muestren listados en la pantalla correspondiente a la misma. Figura 4-3. Pantalla Habitaciones 43 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 3. Editar habitación: si mantenemos pulsada una de las habitaciones que aparecen listadas, nos aparecerá un menú con dos opciones como podemos ver en la figura 4-5. Si hacemos clic en “Editar” nos aparecerá un cuadro de dialogo similar al de “Añadir habitación” y podremos cambiarle el nombre y la imagen a la habitación que hemos pulsado como se puede apreciar en la figura 4-6. Cuando hagamos clic en ACEPTAR, se modificará esta habitación en la base de datos y ya aparecerá el cambio listado entre las demás habitaciones. 4. Eliminar habitación: si mantenemos pulsada una de las habitaciones que aparecen listadas, nos aparecerá un menú con dos opciones como podemos ver en la figura 4-5. Si hacemos clic en “Eliminar” nos aparecerá un cuadro de como se puede apreciar en la figura 4-7, preguntándonos si estamos seguros de querer eliminar la habitación que hemos pulsado. Cuando hagamos clic en ACEPTAR, se eliminará esta habitación de la base de datos y ya no aparecerá en el listado de las habitaciones. Figura 4-4. Añadir habitación 44 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 4.1.1.3 Pantalla Electrodomésticos: Cocina Cuando hacemos clic en “Cocina” en la pantalla “Habitaciones”, nos redirigimos a la pantalla “Electrodomésticos”. Al iniciar esta actividad, se hace una petición GET al endpoint /things del servidor de OpenHAB de manera que se cargan en esta pantalla los electrodomésticos cuyo atributo Location tenga el valor Cocina. En nuestro caso, los electrodomésticos que están en esta ubicación son los que podemos ver en la figura Figura 4-8. Pantalla Cocina Figura 4-6. Editar habitación Figura 4-7. Eliminar habitación Figura 4-5. Editar o eliminar habitación 45 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 4-8. 4.1.1.3.1 Pantalla Cafetera Si hacemos clic a la “Cafetera” en la pantalla “Electrodomésticos” (Cocina), seremos redirigidos a la pantalla “Cafetera” (ver figura 4-9). En esta pantalla tenemos diversas funcionalidades (entre paréntesis el elemento XML utilizado): • Interruptor Power para activar o desactivar la potencia de la cafetera (View). • Panel informativo con el estado de operación actual de la cafetera (TextView). • Menú desplegable para elegir el programa de la cafetera (PopupMenu). • Botón para iniciar o parar el programa seleccionado en la cafetera (View). • Botón para navegar hacia el gráfico de consumo energético de la cafetera (View). Cada una de estas funcionalidades, están asociadas a una o varias peticiones al servidor REST de OpenHAB o al de consumo, que serán detalladas en apartados posteriores. 4.1.1.3.2 Pantalla Frigórí ficó Si hacemos clic al “Frigorífico” en la pantalla “Electrodomésticos” (Cocina), seremos redirigidos a la pantalla “Frigorífico” (ver figura 4-10). En esta pantalla tenemos diversas funcionalidades (entre paréntesis el elemento XML utilizado): • Selector de temperatura del frigorífico (NumberPicker). • Interruptor Super Cooling para activar o desactivar el modo super cooling del frigorífico (Switch). • Selector de temperatura del congelador (NumberPicker). • Interruptor Super Freezing para activar o desactivar el modo super freezing del congelador (Switch). • Botón para navegar hacia el gráfico de consumo energético del frigorífico/congelador (View). Figura 4-9. Pantalla Cafetera 46 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético Cada una de estas funcionalidades, están asociadas a una o varias peticiones al servidor REST de OpenHAB o al de consumo, que serán detalladas en apartados posteriores. 4.1.1.3.3 Pantalla Hórnó Si hacemos clic al “Horno” en la pantalla “Electrodomésticos” (Cocina), seremos redirigidos a la pantalla “Horno” (ver figura 4-11). En esta pantalla tenemos diversas funcionalidades (entre paréntesis el elemento XML utilizado): • Interruptor Power para activar o desactivar la potencia del horno (View). • Panel informativo con el tiempo restante aproximado para concluir el programa actual (TextView). • Menú desplegable para elegir el programa del horno (PopupMenu). • Selector de temperatura del horno (NumberPicker). • Selector para elegir la duración del programa de horneado (TimePicker). • Botón para iniciar o parar el programa seleccionado en el horno (View). • Botón para navegar hacia el gráfico de consumo energético del horno (View). Cada una de estas funcionalidades, están asociadas a una o varias peticiones al servidor REST de OpenHAB o al de consumo, que serán detalladas en apartados posteriores. Figura 4-10. Pantalla Frigorífico 47 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 4.1.1.3.4 Pantalla Lavavajillas Si hacemos clic al “Lavavajillas” en la pantalla “Electrodomésticos” (Cocina), seremos redirigidos a la pantalla “Lavavajillas” (ver figura 4-12). En esta pantalla tenemos diversas funcionalidades (entre paréntesis el elemento XML utilizado): • Interruptor Power para activar o desactivar la potencia del lavavajillas (View). • Panel informativo con el tiempo restante aproximado para concluir el programa actual (TextView). • Menú desplegable para elegir el programa del lavavajillas (PopupMenu). • Botón para iniciar o parar el programa seleccionado en el lavavajillas (View). • Botón para navegar hacia el gráfico de consumo energético del lavavajillas (View). Cada una de estas funcionalidades, están asociadas a una o varias peticiones al servidor REST de OpenHAB o al de consumo, que serán detalladas en apartados posteriores. Figura 4-11. Pantalla Horno 48 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 4.1.1.4 Pantalla Electrodomésticos: Lavadero Cuando hacemos clic en “Lavadero” en la pantalla “Habitaciones”, nos redirigimos a la pantalla “Electrodomésticos”. Al iniciar esta actividad, se hace una petición GET al endpoint /things del servidor de OpenHAB de manera que se cargan en esta pantalla los electrodomésticos cuyo atributo Location tenga el valor Lavadero. En nuestro caso, los electrodomésticos que están en esta ubicación son los que podemos ver en la figura 4-13. Figura 4-12. Pantalla Lavavajillas Figura 4-13. Pantalla Lavadero 49 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 4.1.1.4.1 Pantalla Lavadóra Si hacemos clic a la “Lavadora” en la pantalla “Electrodomésticos” (Lavadero), seremos redirigidos a la pantalla “Lavadora” (ver figura 4-14). En esta pantalla tenemos diversas funcionalidades (entre paréntesis el elemento XML utilizado): • Panel informativo con el tiempo restante aproximado para concluir el programa actual (TextView). • Menú desplegable para elegir el programa de lavado (PopupMenu). • Menú desplegable para elegir la temperatura del agua de la lavadora (PopupMenu). • Menú desplegable para elegir la velocidad de centrifugado de la lavadora (PopupMenu). • Botón para iniciar o parar el programa seleccionado en la lavadora (View). • Botón para navegar hacia el gráfico de consumo energético de la lavadora (View). Cada una de estas funcionalidades, están asociadas a una o varias peticiones al servidor REST de OpenHAB o al de consumo, que serán detalladas en apartados posteriores. 4.1.1.4.2 Pantalla Secadóra Si hacemos clic a la “Secadora” en la pantalla “Electrodomésticos” (Lavadero), seremos redirigidos a la pantalla “Secadora” (ver figura 4-15). En esta pantalla tenemos diversas funcionalidades (entre paréntesis el elemento XML utilizado): • Panel informativo con el tiempo restante aproximado para concluir el programa actual (TextView). • Menú desplegable para elegir el material de la ropa (PopupMenu). • Menú desplegable para elegir el programa de secado (PopupMenu). • Botón para iniciar o parar el programa seleccionado en la secadora (View). • Botón para navegar hacia el gráfico de consumo energético de la secadora (View). Figura 4-14. Pantalla Lavadora 56 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético En cambio, para realizar una petición de consumo en horario punta: • GET a http://localhost:8000/consumo/punta/Cafetera. Un ejemplo de respuesta que podríamos obtener por parte del servidor a esta consulta sería: [{"electrodomestico":"Cafetera","fecha":"2023-06-28", "consumoTotalDiario":3.2}, {"electrodomestico":"Cafetera","fecha":"2023-06-30", "consumoTotalDiario":2.4}, {"electrodomestico": "Cafetera","fecha":"2023-07-03", "consumoTotalDiario":37.25}] 4.2.1.4 Clases controladoras Dentro del marco del desarrollo del servicio REST de consumo, se han implementado clases controladoras para gestionar las diversas funcionalidades de manera organizada y eficiente. Estas clases actúan como intermediarias entre las solicitudes realizadas por la aplicación móvil o el servidor de OpenHAB y la lógica subyacente. 4.2.1.4.1 Cónsumó Cóntróller ConsumoController.java es una clase fundamental que se encarga de gestionar las solicitudes relacionadas con el consumo energético de los electrodomésticos. A través de una cuidadosa configuración de endpoints y métodos, este controlador permite que la aplicación móvil envíe solicitudes para obtener información detallada sobre el consumo almacenada en la base de datos o, en su defecto, permite al servidor OpenHAB ingresar nuevos registros de consumo en la base de datos. Esta clase implementa 5 métodos que podemos ver a continuación en la tabla 4: Métodos Endpoint Descripción creaConsumo /consumo Permite crear un nuevo consumo en la tabla consumo de la base de datos. Este método recibe y devuelve un objeto de tipo Consumo. creaConsumoTramo /consumoTramo Permite crear un nuevo consumo (dividido) en la tabla consumo_tramo de la base de datos. Es decir, si el consumo ocupa varios tramos horarios, se crea un consumo para cada horario (ver ejemplo en la siguiente página). Este método recibe y devuelve un objeto de tipo ConsumoTramo. getConsumoPunta /consumo/punta/{electrodomestico} Permite obtener una lista con todos los consumos punta del electrodoméstico indicado. Este método recibe el nombre del electrodoméstico y devuelve una lista de objetos de tipo ConsumoTotalDiario. 57 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético getConsumoLlano /consumo/llano/{electrodomestico} Permite obtener una lista con todos los consumos llano del electrodoméstico indicado. Este método recibe el nombre del electrodoméstico y devuelve una lista de objetos de tipo ConsumoTotalDiario. getConsumoValle /consumo/valle/{electrodomestico} Permite obtener una lista con todos los consumos valle del electrodoméstico indicado. Este método recibe el nombre del electrodoméstico y devuelve una lista de objetos de tipo ConsumoTotalDiario. Tabla 4. Métodos Consumo Controller Ejemplo de división de un registro de consumo en varios consumos por tramo: • Consumo: {"electrodomestico": "Cafetera","fecha_inicio": "2023-07-26","hora_inicio": "23:59:40","fecha_fin": "2023-07-27","hora_fin": "00:00:10","consumo_punta": 0,"consumo_llano": 0.533,"consumo_valle": 0.266} Para este registro de consumo que tendríamos almacenado en la tabla “consumo” de la base de datos, en la tabla “consumo_tramo” se vería dividido en 2 consumos: uno para registrar los 0.533 kWmin de horario llano y otro para el 0.266 kWmin de horario valle. Esto se ha implementado de esta manera para poder tener un cálculo preciso en el caso de aquellos consumos que puedan ocupar distintos días, es decir, que comience un día X el consumo y finalice un día Y, como el presente ejemplo. De esta manera podremos determinar el consumo exacto que se ha realizado cada día. • Consumos por tramo: o Punta: {"electrodomestico": "Cafetera","fecha":"2023-07-26","consumo_punta": 0,"consumo_llano": 0.533,"consumo_valle": 0} o Llano: {"electrodomestico": "Cafetera","fecha":"2023-07-27","consumo_punta": 0,"consumo_llano": 0,"consumo_valle": 0.266} Las clases Consumo, ConsumoTramo y ConsumoTotalDiario tienen los siguientes constructores: //Consumo: consumo original (sin dividir por tipo de consumo según su tramo horario) public Consumo(int id, String electrodomestico, LocalDate fecha_inicio, LocalTime hora_inicio, LocalDate fecha_fin, LocalTime hora_fin, double consumo_punta, double consumo_llano, double consumo_valle) {...} //ConsumoTramo: consumo dividido en tramos (sólo un tipo de consumo por registro) public ConsumoTramo(int id, String electrodomestico, LocalDate fecha, double consumo_punta, double consumo_llano, double consumo_valle) {...} 58 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético //ConsumoTotalDiario: suma de todos los consumos registrados en un día concreto, por tramos (lo que se imprime en el gráfico de barras) public ConsumoTotalDiario(String electrodomestico, LocalDate fecha, double consumo_total_diario) {...} 4.2.1.4.2 Lógin Cóntróller La clase LoginController.java desempeña un papel fundamental en la seguridad y autenticación de la aplicación. Encargada de manejar las solicitudes de inicio de sesión (POST al endpoint /login), este controlador verifica las credenciales proporcionadas por el usuario y responde con una cadena de texto. @Autowired private UserRepository userRepository; @Autowired private BCryptPasswordEncoder bCryptPasswordEncoder; @PostMapping("/login") public ResponseEntity<String> login(@RequestBody Usuario usuario) { Usuario user = null; try { user = userRepository.findByUsername(usuario.getUsuario()); } catch (SQLException e) { e.printStackTrace(); } if (user == null) { System.out.println("Usuario no encontrado"); return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Usuario no encontrado"); } if (bCryptPasswordEncoder.matches(usuario.getContrasenia(), user.getContrasenia())) { // Autenticación exitosa System.out.println("Inicio de sesión exitoso"); return ResponseEntity.ok("Inicio de sesión exitoso"); } else { // Contraseña incorrecta System.out.println("Contraseña incorrecta"); return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Contraseña incorrecta"); } } Este código se entenderá mejor con el diagrama de secuencia del apartado 4.2.2.4. La clase Usuario tiene el siguiente constructor: public Usuario(String usuario, String contrasenia) { this.usuario = usuario; this.contrasenia = contrasenia; } 59 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 4.2.2 Spring Security La protección de datos y recursos es una prioridad en el diseño de cualquier aplicación. Este subapartado se enfoca en cómo se ha implementado la seguridad utilizando Spring Security para el servidor REST de Consumo. Se detallarán los procedimientos de autenticación y autorización que aseguran que los endpoints solo sean accesibles por usuarios autorizados. Mediante este enfoque, se garantiza que los datos sensibles estén protegidos y solo puedan ser accedidos por aquellos que hayan iniciado sesión correctamente. Una vez añadida la dependencia indicada en el apartado 4.2.1.1 necesaria para implementar Spring Security en nuestro servidor, se procede a la creación de las clases SecurityConfig, UserDetailsServiceImpl y UserRepository explicadas a continuación: 4.2.2.1 SecurityConfig Esta clase representa una configuración de seguridad, donde se establecen las reglas de acceso y autenticación para las rutas y recursos protegidos. Concretamente: • Se inyecta la interfaz UserDetailsService para obtener los detalles del usuario. • Se define un bean BCryptPasswordEncoder que proporciona un algoritmo de hash 4 para cifrar contraseñas. • Se crea un filtro de seguridad (SecurityFilterChain) para controlar el acceso a las diferentes rutas. • En authorizeHttpRequests, se establece que la ruta "/login" es accesible sin autenticación, mientras que otras rutas requieren autenticación. • Se configura la autenticación básica mediante httpBasic(), es decir, se requiere usuario y contraseña. • Se define un DaoAuthenticationProvider que utiliza el UserDetailsService y el cifrador de contraseñas. • Se configura un AuthenticationManager para gestionar la autenticación. @Configuration public class SecurityConfig { @Autowired private UserDetailsService userDetailsService; @Bean public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests((authorize) -> authorize .requestMatchers("/login").permitAll() .anyRequest().authenticated() ) .httpBasic() .and() .csrf(AbstractHttpConfigurer::disable); 4 Un hash es una salida única y fija de un algoritmo de hash que transforma datos en una cadena de caracteres, esencial para la verificación y la seguridad de datos, como contraseñas o verificación de integridad. 60 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético return http.build(); } @Bean public DaoAuthenticationProvider authenticationProvider() { DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider(); authProvider.setUserDetailsService(userDetailsService); authProvider.setPasswordEncoder(passwordEncoder()); return authProvider; } @Bean public AuthenticationManager authenticationManager(AuthenticationConfiguration authConfig) throws Exception { return authConfig.getAuthenticationManager(); } } 4.2.2.2 UserDetailsServiceImpl Esta clase llamada UserDetailsServiceImpl es una implementación de UserDetailsService, una interfaz en Spring Security que maneja la carga y validación de detalles de usuarios. Utiliza un repositorio de usuarios UserRepository para buscar y cargar información de usuario desde la base de datos. Luego, construye un objeto UserDetails para la autenticación y autorización, incluyendo el nombre de usuario, contraseña y roles asociados. @Service public class UserDetailsServiceImpl implements UserDetailsService { @Autowired private UserRepository userRepository; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // Implementa la carga de usuarios desde la base de datos Usuario usuario = null; try { usuario = userRepository.findByUsername(username); } catch (SQLException e) { throw new UsernameNotFoundException("Error al buscar usuario en la base de datos", e); } if (usuario == null) { throw new UsernameNotFoundException("Usuario no encontrado: " + username); } return User.builder() .username(usuario.getUsuario()) .password(usuario.getContrasenia()) .roles("USER") .build(); } } 61 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 4.2.2.3 UserRepository Esta clase actúa como un repositorio para acceder y recuperar información de usuario desde nuestra base de datos. Utiliza una consulta SQL para buscar un usuario por su nombre de usuario en la tabla usuarios. Si se encuentra una coincidencia, crea un objeto Usuario con los datos recuperados y lo devuelve. Esta clase está etiquetada con la anotación @Repository, indicando que es un componente de acceso a datos y permitiendo que Spring lo administre como un bean dentro del contexto de la aplicación. @Repository public class UserRepository { //Devuelve el Usuario indicado por el nombre de usuario public Usuario findByUsername(String username) throws SQLException { final String QUERY_USUARIO = "SELECT * FROM usuarios WHERE usuario = ?"; Connection conn = null; ResultSet rs = null; PreparedStatement st = null; Usuario u = null; conn = Conexion.conecta(); st = conn.prepareStatement(QUERY_USUARIO); st.setString(1, username); rs = st.executeQuery(); if (rs.next()) { u = new Usuario(rs.getString("usuario"), rs.getString("contrasenia")); } return u; } } 62 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 4.2.2.4 Diagrama de secuencia inicio de sesión Para aclarar el código descrito en el apartado 4.2.1.4.2 Login Controller, se presenta a continuación un diagrama de secuencia con la comunicación detallada entre las diferentes clases que intervienen en el proceso de inicio de sesión. El usuario rellena las credenciales y hace clic en INICIAR SESIÓN en la pantalla Login. Seguidamente, el servidor a través de las diferentes clases de las que se compone hace una serie de comprobaciones que podemos ver al detalle en la figura 4-20. Figura 4-20. Diagrama de secuencia inicio de sesión 63 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 4.2.2.5 Diagrama de secuencia consulta consumo Por otro lado, para ver la comunicación entre las distintas clases de configuración de Spring Security, se presenta otro diagrama de secuencia que refleja una petición del usuario el cual desea obtener la gráfica de consumo de la cafetera. Para ello, el servidor debe confirmar que el usuario está autorizado para realizar esa consulta y seguidamente, tras ser autorizado, el servidor le proporcionará los datos que solicita (ver figura 4-21). 4.2.2.6 Ejemplo de uso de Spring Security Por último, se va a proporcionar un ejemplo de uso de Spring Security para verificar su correcta configuración. Como hemos mencionado en apartados anteriores, al endpoint /login todo el mundo puede mandarle peticiones sin restricción. • Si mandamos las credenciales correctas de un usuario, recibimos 200 OK por parte del servidor (ver figura 4-22). • En cambio, si enviamos las credenciales incorrectas, recibimos 401 UNAUTHORIZED (ver figura 4-23). Sin embargo, para el resto de endpoints del servidor, se necesita que las peticiones estén autorizadas para poder brindar una respuesta válida. • Si intentamos hacer una petición GET al endpoint /consumo/punta/cafetera nos pedirá que nos autentiquemos como podemos observar en la figura 4-24. • Al introducir las credenciales válidas y hacer clic en “Iniciar sesión”, ya nos permitirá obtener una respuesta por parte del servidor (ver figura 4-25). Figura 4-21. Diagrama de secuencia consulta consumo 64 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético Figura 4-22. Petición /login correcta Figura 4-23. Petición /login incorrecta 65 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético Figura 4-24. Petición de credenciales Figura 4-25. Respuesta correcta servidor 72 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético A continuación, se van a comentar las características fundamentales del código usado para el cálculo estimado del consumo eléctrico de la cafetera. En el primer fragmento de código, podemos identificar lo siguiente: • Se crea un objeto llamado holidays que mapea fechas específicas (mes, día) con sus nombres de festividades correspondientes. Esto permitirá identificar si una fecha determinada es un día festivo. • Se definen dos arrays: TRAMO_L para tramos en días laborables y TRAMO_NL para tramos en días no laborables (sábados, domingos y festivos). Cada elemento en los arrays contiene una tupla con dos elementos: la hora y el tipo de tramo horario ('P' para punta, 'L' para llano y 'V' para valle). • Se define la potencia de la cafetera en vatios (W), lo que será esencial para calcular el consumo energético en cada tramo. • Se importa la clase Java necesaria para realizar peticiones HTTP en OpenHAB. Luego, se definen credenciales de autenticación básica (nombre de usuario y contraseña) y se codifican en base64 para ser utilizadas en las cabeceras de las peticiones HTTP. • Se crea un mapa de cabeceras HTTP que contiene la cabecera "Authorization" con las credenciales básicas codificadas. Esto es crucial para autenticar las solicitudes HTTP hacia el servidor. //Objeto clave, valor con los días festivos var holidays = { "1,1": "Año Nuevo", "1,6": "Epifanía del Señor", "8,15": "Asunción de la Virgen", "10,12": "Fiesta Nacional de España", "11,1": "Todos los Santos", "12,6": "Día de la Constitución Española", "12,8": "Inmaculada Concepción", }; //Arrays de tuplas de 2 elementos (hora, tramo) var TRAMO_L = [[0, 'V'], [8, 'L'], [10, 'P'], [14, 'L'], [18, 'P'], [22, 'L']]; // Tramos laborables L-V (Punta, Valle, Llano) var TRAMO_NL = [[0, 'V']]; //Tramos no laborables S-D y festivos (Valle) //Potencia de la cafetera var potencia_cafetera = 1600; // W //HTTP var http = Java.type('org.openhab.core.model.script.actions.HTTP'); var username = "admin"; var password = "12345"; var basicAuthCredentials = java.util.Base64.getEncoder().encodeToString((username + ":" + password).getBytes()); var headers = new java.util.HashMap(); headers.put("Authorization", "Basic " + basicAuthCredentials); 73 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético En el segundo fragmento de código, se pueden observar las diferentes funciones implementadas en nuestro código, las cuáles serán imprescindibles para determinar si es fin de semana, festivo y determinar el tramo horario en el que nos encontramos y el siguiente al actual. //Función para saber si es fin de semana (calendario inglés) function isWeekend(date) { const dayOfWeek = date.getDay(); return (dayOfWeek === 6) || (dayOfWeek === 0); } //Función para saber si es festivo function isPublicHoliday(date) { return !!holidays[date.getMonth()+1 + ',' + date.getDate()]; // !! convierte a booleano y si hay texto devuelve true } //Función para saber si es fin de semana o festivo function isWeekendOrPublicHoliday(date) { return isPublicHoliday(date) || isWeekend(date); } //Función para saber en el tramo horario que estamos ahora function obtenerTramoActual(tramos, date){ var hora_actual = date.getHours(); // Calcula el siguiente tramo teniendo en cuenta la hora actual for (var i = 0; i < tramos.length; i++) { if (hora_actual < tramos[i][0]) { return tramos[i-1]; } } // Si no se encuentra un tramo es porque estamos en el último del día return tramos[tramos.length-1]; } //Función para saber el siguiente tramo horario function obtenerSiguienteTramo(tramos, date){ var hora_actual = date.getHours(); // Calcula el siguiente tramo teniendo en cuenta la hora actual for (var i = 0; i < tramos.length; i++) { if (hora_actual < tramos[i][0]) { return tramos[i]; } } // Si no se encuentra un tramo, es que es el último del día. Hay que avisar con un null. return null; } //Función para obtener la fecha donde comienza el siguiente tramo function obtenerFechaSigTramo(tramos, date){ var siguiente_tramo = obtenerSiguienteTramo(tramos, date); if (siguiente_tramo === null) { // Si no se encuentra un tramo, es que es el último del día var previous_date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0); // Añadimos 1 día return new Date(previous_date.getTime() + 24 * 60 * 60 * 1000); // en milisegundos } 74 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético return new Date(date.getFullYear(), date.getMonth(), date.getDate(), siguiente_tramo[0], 0, 0); } //Función para rellenar las fechas y horas con un 0 delante para adecuarse al formato dd/mm/aaaa o hh:mm:ss function rellena(text){ return text.toString().padStart(2, "0") } //Función para redondear resultados function redondea(num, decimales){ return Math.round((num + Number.EPSILON) * Math.pow(10, decimales)) / Math.pow(10, decimales); } //Función para crear hora local function createLocalDate() { return new Date(new Date().toLocaleString("en-US", {timeZone: "Europe/Madrid"})); } En tercer lugar, tiene lugar el cálculo de la fecha y hora de inicio y fin del consumo que estamos midiendo. Para ello, justo al iniciarse la ejecución del código se guarda la fecha y hora de inicio. Seguidamente, tiene lugar un bucle while que espera hasta que el estado del electrodoméstico cambie a "Ready", indicando que ha finalizado su funcionamiento. Es en este instante cuando se guardarán la fecha y hora de fin del consumo actual. // Obtener fecha de inicio var start_date = createLocalDate(); var hora_inicio = rellena(start_date.getHours())+":"+rellena(start_date.getMinutes())+":"+rellena(start_date.getSeconds()); var fecha_inicio = start_date.getFullYear()+"-"+rellena((start_date.getMonth()+1))+"- "+rellena(start_date.getDate()); console.log("Cafetera", "Fecha de inicio: " + fecha_inicio); console.log("Cafetera", "Hora de inicio: " + hora_inicio); var item = items.getItem("Cafetera_Operation_State"); console.log("Estado de operación de la cafetera: ", item.state); // Esperar hasta que el programa finalice (pase de "Run" a "Ready") var i = 0; while (item.state.toString() != "Ready") { java.lang.Thread.sleep(1000); // Esperar 1 segundo antes de volver a verificar i++; console.log("Cafetera", "Iteración: " + i, "Estado de operación: " + item.state); } // Obtener fecha de finalización var end_date = createLocalDate(); var hora_fin = rellena(end_date.getHours())+":"+rellena(end_date.getMinutes())+":"+rellena(end_date.getSeconds()); var fecha_fin = end_date.getFullYear()+"-"+rellena((end_date.getMonth()+1))+"- "+rellena(end_date.getDate()); 75 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético console.log("Cafetera", "Fecha de fin: " + fecha_fin); A continuación, se encuentra el corazón de nuestro código, donde se realiza el cálculo del tiempo de uso y consumo en los distintos tramos horarios. Por un lado, almacenamos el tiempo de uso total en tres variables correspondientes a cada tramo (t_uso_punta, t_uso_llano, t_uso_valle). Estas variables se utilizarán para calcular el consumo total del electrodoméstico en cada periodo horario. Por otro lado, guardamos en otras tres variables el consumo parcial en cada uno de los tramos (consumoPuntaParcial, consumoLlanoParcial, consumoValleParcial). Este valor representa el consumo generado en el tramo actual en evaluación (tiempo de uso del tramo actual, diff, multiplicado por la potencia de la cafetera, potencia_cafetera). Este cálculo parcial resulta esencial para el almacenamiento en la base de datos del consumo por tramos, permitiendo la diferenciación de consumos en caso de cambio de día. Posteriormente, se realiza una petición POST al endopoint /consumoTramo del servidor de consumo para registrar este consumo parcial en la tabla consumo_tramo de la base de datos, asegurando un registro preciso de los consumos en cada periodo. // Calcular tiempo de uso var t_uso_punta = 0; var t_uso_valle = 0; var t_uso_llano = 0; var consumoPuntaParcial = 0; var consumoValleParcial = 0; var consumoLlanoParcial = 0; var calc_start_date = start_date; var calc_end_date; var tramo_actual; while (calc_start_date < end_date) { // Calcular qué hora está más cerca, si end_date o el siguiente cambio de tarifa if (isWeekendOrPublicHoliday(calc_start_date)) { tramo_actual = obtenerTramoActual(TRAMO_NL, calc_start_date); console.log("Cafetera", "Tramo actual: " + tramo_actual); var fecha_sig_tramo = obtenerFechaSigTramo(TRAMO_NL, calc_start_date); console.log("Cafetera", "Fecha siguiente tramo: " + fecha_sig_tramo); } else { tramo_actual = obtenerTramoActual(TRAMO_L, calc_start_date); console.log("Cafetera", "Tramo actual: " + tramo_actual); var fecha_sig_tramo = obtenerFechaSigTramo(TRAMO_L, calc_start_date); console.log("Cafetera", "Fecha siguiente tramo: " + fecha_sig_tramo); } console.log("Cafetera", "Calc_start_date: " + calc_start_date); var fecha_tramo_actual = calc_start_date.getFullYear()+"- "+rellena((calc_start_date.getMonth()+1))+"-"+rellena(calc_start_date.getDate()); console.log("Cafetera", "Fecha tramo actual: " + fecha_tramo_actual); calc_end_date = fecha_sig_tramo < end_date ? fecha_sig_tramo : end_date; console.log("Cafetera", "Hora de fin: " + hora_fin); 76 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético console.log("Cafetera", "Calc_end_date: " + calc_end_date); var diff = calc_end_date.getTime() - calc_start_date.getTime(); // en milisegundos console.log("Cafetera", "diff: " + diff); //Reseteamos a 0 por los posibles cambios del anterior tramo consumoPuntaParcial = 0; consumoValleParcial = 0; consumoLlanoParcial = 0; switch (tramo_actual[1]) { case 'P': t_uso_punta += diff / 1000; //en seg console.log("Cafetera", "Tiempo de uso horario punta: " + t_uso_punta + " seg."); consumoPuntaParcial = redondea(((diff/1000) / 60000) * potencia_cafetera, 3); // en kW*min console.log("Cafetera", "Consumo punta parcial: " + consumoPuntaParcial.toString() + " kW*min."); break; case 'V': t_uso_valle += diff / 1000; //en seg console.log("Cafetera", "Tiempo de uso horario valle: " + t_uso_valle + " seg."); consumoValleParcial = redondea(((diff/1000) / 60000) * potencia_cafetera, 3); // en kW*min console.log("Cafetera", "Consumo valle parcial: " + consumoValleParcial.toString() + " kW*min."); break; case 'L': t_uso_llano += diff / 1000; //en seg console.log("Cafetera", "Tiempo de uso horario llano: " + t_uso_llano + " seg."); consumoLlanoParcial = redondea(((diff/1000) / 60000) * potencia_cafetera, 3); // en kW*min console.log("Cafetera", "Consumo llano parcial: " + consumoLlanoParcial.toString() + " kW*min."); break; } //Hacer el POST a la dirección del servicio REST (Insertamos el consumo del tramo actual en la tabla consumo_tramo de la bbdd) var url = "http://localhost:8000/consumoTramo"; var json = JSON.stringify({ electrodomestico: "Cafetera", fecha: fecha_tramo_actual, consumo_punta: consumoPuntaParcial, consumo_llano: consumoLlanoParcial, consumo_valle: consumoValleParcial }); var request = http.sendHttpPostRequest(url, http.CONTENT_TYPE_JSON, json, headers, 5000); console.log("Cafetera", "Respuesta a la petición de consumo diario: " + request); calc_start_date = calc_end_date; } 77 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético Finalmente, llegamos al cálculo de los consumos totales en cada tramo, medidos en kW*min. Esta elección de unidad poco convencional obedece a la naturaleza del simulador, que proporciona intervalos de tiempo extremadamente cortos. Por ejemplo, lo que en la vida real tomaría 2 horas, aquí se reduce a 1 minuto de simulación. Para calcular el consumo, multiplicamos el tiempo acumulado de uso de cada tramo (expresado en segundos y convertido a minutos) por la potencia de la cafetera (dada en W y convertida a kW). Aunque esta estimación no es completamente fiel a la realidad, especialmente en electrodomésticos con programas largos, como lavavajillas o lavadoras, donde el consumo varía durante el ciclo, nuestro simulador carece de un vatímetro para medir el consumo instantáneo y proporcionar un valor preciso. Por tanto, optamos por calcular el consumo como: 𝑐𝑜𝑛𝑠𝑢𝑚𝑜 = 𝑡𝑖𝑒𝑚𝑝𝑜𝑢𝑠𝑜 × 𝑝𝑜𝑡𝑒𝑛𝑐𝑖𝑎𝑒𝑙𝑒𝑐𝑡𝑟𝑜𝑑𝑜𝑚é𝑠𝑡𝑖𝑐𝑜 A continuación, al igual que con el registro del consumo parcial en la base de datos del caso anterior, realizamos un POST al servidor de consumo en el endpoint /consumo para almacenar el consumo completo en la tabla consumo de la base de datos. Aunque esta metodología no es idéntica a una medición precisa, nos brinda una estimación adecuada dentro de las limitaciones del simulador. // Calcular consumo y redondear a 3 decimales var consumoPunta = redondea((t_uso_punta / 60000) * potencia_cafetera, 3); // en kW*min var consumoValle = redondea((t_uso_valle / 60000) * potencia_cafetera, 3); // en kW*min var consumoLlano = redondea((t_uso_llano / 60000) * potencia_cafetera, 3); // en kW*min console.log("Cafetera", "Consumo en punta: " + consumoPunta.toString() + " kW*min"); console.log("Cafetera", "Consumo en valle: " + consumoValle.toString() + " kW*min"); console.log("Cafetera", "Consumo en llano: " + consumoLlano.toString() + " kW*min"); // Hacer el POST a la dirección del servicio REST (insertamos consumo completo a la tabla consumo de la bbdd) var url2 = "http://localhost:8000/consumo"; var json2 = JSON.stringify({ electrodomestico: "Cafetera", fecha_inicio: fecha_inicio, hora_inicio: hora_inicio, fecha_fin: fecha_fin, hora_fin: hora_fin, consumo_punta: consumoPunta, consumo_llano: consumoLlano, consumo_valle: consumoValle }); var request = http.sendHttpPostRequest(url2, http.CONTENT_TYPE_JSON, json2, headers, 5000); console.log("Cafetera", "Respuesta del servidor: " + request); 78 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético Para depurar este código se ha hecho uso de la consola de OpenHAB, la cual en Ubuntu se ejecuta con el siguiente comando: Al introducir este comando, nos pedirá una contraseña la cual por defecto es habopen. Seguidamente, para poder visualizar los logs que se vayan produciendo en tiempo real, bastaría con ejecutar en la consola de OpenHAB este comando: openhab-cli console log:tail 79 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 5 CONCLUSIONES Y LÍNEAS FUTURAS Para concluir esta memoria, es crucial destacar los logros y avances que este proyecto ha alcanzado en el desarrollo de una aplicación Android, la creación de un servicio de consumo y la integración de tecnologías importantes en el sector IoT. Esta sección final no solo recopila las conclusiones personales y técnicas derivadas de este proceso, sino que también delineará las direcciones futuras que podrían llevar este proyecto a niveles aún más altos de innovación y eficacia. 5.1 Conclusiones personales Mirando retrospectivamente, puedo observar que los propósitos que me propuse al comienzo de este proyecto han sido exitosamente cumplidos. Los resultados obtenidos no solo me llenan de satisfacción personal, sino que también refuerzan mis habilidades en el ámbito tecnológico. A lo largo de este viaje, me encontré con desafíos y momentos de incertidumbre. Sin embargo, al contemplar el resultado final, aprecio profundamente cuánto he evolucionado durante este periodo. Las competencias que he adquirido, la confianza que he desarrollado y las oportunidades que ahora se vislumbran para mi crecimiento continuo son testimonio de este proceso. Aunque no contaba con experiencia previa en la creación de proyectos propios, he utilizado los fundamentos proporcionados por mi formación en Ingeniería y he seguido los consejos de mi tutora para alcanzar los objetivos propuestos. Este proyecto no solamente marca una etapa en mi recorrido académico, sino que también confirma que la dedicación y la perseverancia pueden traducirse en logros tangibles y valiosos. Estoy emocionada por las lecciones aprendidas, la confianza que he ganado y las perspectivas emocionantes que esta experiencia ha abierto para mi futuro. 5.2 Conclusiones técnicas Este proyecto ha culminado en la creación de una aplicación Android llamada "IntelliHome", que permite controlar los electrodomésticos Home Connect a través de la integración de OpenHAB. Además, se ha implementado un servicio REST que estima el consumo energético de los dispositivos conectados. La combinación de tecnologías Android, OpenHAB, Home Connect y Spring Boot, entre otras, ha resultado en una aplicación versátil y funcional, que permite a los usuarios controlar sus electrodomésticos y estimar su consumo de manera conveniente. La integración con electrodomésticos Home Connect ha demostrado ser efectiva para brindar a los usuarios un control remoto y automatizado de sus dispositivos. La conexión con OpenHAB y la estimación del consumo basada en tramos horarios proporcionan un valor añadido al ayudar a los usuarios a gestionar su consumo de manera más eficiente. Además, este proyecto ha reforzado mi habilidad para planificar y documentar un proyecto de manera estructurada. La creación de una memoria técnica completa, que incluye desde la arquitectura de la aplicación hasta la descripción de cada componente, me ha proporcionado una visión más profunda de la importancia de la planificación y la documentación en el desarrollo de software. En general, este Trabajo Fin de Grado ha representado un aprendizaje significativo en el desarrollo de aplicaciones móviles y la implementación de servicios REST para la gestión energética. Ha permitido aplicar conceptos teóricos en un entorno práctico y ha proporcionado una base sólida para futuras exploraciones en el campo de la eficiencia energética y la automatización residencial. 80 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 5.3 Líneas futuras El presente apartado destaca la mirada hacia el futuro de este proyecto, delineando posibles direcciones en las que podría evolucionar. Al analizar y anticipar nuevas oportunidades y desafíos, se exploran las áreas en las que se podría expandir o mejorar la aplicación, así como la adopción de nuevas tecnologías y enfoques para seguir enriqueciendo su funcionalidad y alcance. 5.3.1 Diseño En cuanto a las mejoras del diseño, podemos destacar las siguientes: • Creación e implementación de una pantalla Home que oriente al usuario hacia las principales funcionalidades de la aplicación móvil. • Creación e implementación de una pantalla genérica Electrodomésticos que permita listar todos los Things de nuestro servidor OpenHAB. • Creación e implementación de una barra de navegación inferior para que la experiencia del usuario sea más gratificante. Con esta barra el usuario podrá navegar entre las pantallas Home, Habitaciones y Electrodomésticos muy cómodamente (ver figura 5-1). 5.3.2 Funcionalidades Dentro de las funcionalidades adicionales que podrían ser implementadas se encuentran: • Añadir nuevas reglas de OpenHAB para poder programar el arranque de electrodomésticos según le convenga al usuario. • Implementar notificaciones mediante la tecnología Firebase Cloud Messaging en conjunto con las reglas de OpenHAB, para así poder recibir notificaciones de finalización de programas o del estado de algún electrodoméstico incluso cuando la aplicación esté cerrada y el terminal bloqueado. • Modificar el servicio REST de consumo para que permita distinguir el consumo por usuario. • Añadir más electrodomésticos al servidor de OpenHAB aprovechando la amplia variedad de bindings que proporciona esta tecnología. 5.3.3 Seguridad En el campo de la seguridad, se podría mejorar lo siguiente: • Implementación de HTTPS, para cifrar las comunicaciones entre la aplicación y servidores, garantizando la confidencialidad y autenticidad de los datos. Requiere la adquisición de un certificado SSL/TLS, actualización del servidor y ajustes en la aplicación para mejorar la seguridad. Figura 5-1. Barra de navegación 81 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 5.3.4 Infraestructura y despliegue Para concluir, en infraestructura y despliegue algunos aspectos a mejorar podrían ser: • Configuración de NAT para poder realizar peticiones a los servidores de OpenHAB y consumo desde redes externas. • Alojar servidores de OpenHAB y consumo en una Raspberry Pi para garantizar su disponibilidad continua. • Explorar la opción de incorporar vatímetros en los enchufes donde se conectan los electrodomésticos, permitiendo obtener mediciones de consumo precisas. Además, se deberá adaptar el código de las reglas de OpenHAB para almacenar la potencia en cada instante medida por estos vatímetros. 88 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético 89 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético REFERENCIAS [1] José de Lózar Alameda, 2020, «Aplicación domótica en Android con OpenHAB para el control de los dispositivos del hogar».[En línea]. Disponible en: https://idus.us.es/handle/11441/102851 [2] Android Studio, «Cómo configurar las redes de Android Emulator». [En línea]. Disponible en: https://developer.android.com/studio/run/emulator-networking?hl=es-419 [3] Home Connect, «System Architecture». [En línea]. Disponible en: https://developer.homeconnect.com/how_it_works [4] Dell, «Configuración y especificaciones». [En línea]. Disponible en: https://www.dell.com/support/manuals/es-es/inspiron-15-5510-laptop/inspiron-5510-setup-andspecifications/especificaciones-de-inspiron-15-5510?guid=guid-7c9f07ce-626e-44ca-be3aa1fb036413f9&lang=es-mx [5] Android Studio, «Plataforma». [En línea]. Disponible en: https://developer.android.com/about [6] OpenHAB, «OpenHAB». [En línea]. Disponible en: https://www.openhab.org/ [7] OpenHAB, «Home Connect Binding». [En línea]. Disponible en: https://www.openhab.org/addons/bindings/homeconnect/ [8] Home Connect Developer Program, «Simulators». [En línea]. Disponible en: https://developer.homeconnect.com/simulator (requiere registrarse en el portal de Home Connect Developer para poder acceder a los simuladores) [9] Spring, «Spring | Home». [En línea]. Disponible en: https://spring.io/ [10] Maven, «Welcome to Apache Maven». [En línea]. Disponible en: https://maven.apache.org/ [11] PostgreSQL, «PostgreSQL». [En línea]. Disponible en: https://www.postgresql.org/ [12] Figma, «Figma». [En línea]. Disponible en: https://www.figma.com/ [13] RESTClient, «RESTClient, a debugger for RESTful web services». [En línea]. Disponible en: https://addons.mozilla.org/es/firefox/addon/restclient/ [14] Visual Studio Code, «Visual Studio Code». [En línea]. Disponible en: https://code.visualstudio.com/ [15] GitHub, «GitHub». [En línea]. Disponible en: https://github.com/ [16] Wireshark, «Wireshark». [En línea]. Disponible en: https://www.wireshark.org/ [17] Spring Security, «Spring Security». [En línea]. Disponible en: https://docs.spring.io/springsecurity/reference/index.html 90 Integración de OpenHAB y Home Connect en una aplicación Android para el control domótico de los electrodomésticos y la estimación de su consumo energético [18] Home Connect Developer Program, «Sign Up». [En línea]. Disponible en: https://developer.homeconnect.com/ [19] Home Connect Developer Program, «Applications». [En línea]. Disponible en: https://developer.homeconnect.com/applications [20] Home Connect Developer Program, «API Docs». [En línea]. Disponible en: https://api-docs.homeconnect.com [21] Home Connect Developer Program, «Quick Start». [En línea]. Disponible en: https://api-docs.homeconnect.com/quickstart/#the-home-connect-api [22] OpenHAB, «Installation Overview». [En línea]. Disponible en: https://www.openhab.org/docs/installation/#prerequisites [23] OpenHAB, «OpenHAB on Linux». [En línea]. Disponible en: https://www.openhab.org/docs/installation/linux.html [24] OpenHAB, «Home Connect Binding». [En línea]. Disponible en: https://www.openhab.org/addons/bindings/homeconnect [25] Endesa, «¿Cuáles son los horarios de la luz?». [En línea]. Disponible en: https://www.endesa.com/es/blog/blog-de-endesa/horarios-luz-valle-punta-llano