ELO 329 Programación Orientada a Objetos
“REnergy App” Aplicación Android
Sebastían Neira
Benjamín Panatt
Descripción del problema
REnergy App es una aplicación para dispositivos Android que forma
parte del hipotético ecosistema de productos REnergy,
su propósito es servir como interfaz de usuario para el control de 4 módulos REnergy mediante Bluetooth, estos módulos son dispositivos
embebidos que reciben comandos mediante Bluetooth para encender o apagar luces
led. La aplicación provee los medios para conectarse estos módulos y
utilizarlos con fines deportivos, terapéuticos o lúdicos, mediante rutinas
preprogramadas o control manual.
Análisis del problema
El sistema consiste de la
aplicación corriendo en un dispositivo Android, el cual interactúa con el
usuario a través de la pantalla y con los módulos REnergy
mediante Bluetooth conectándose a un modulo maestro
que se conecta a los demás modulos, las interacciones
del usuario incluyen el ingreso a su cuenta, conexión de módulos, selección de
control manual, operación manual de los módulos, selección de rutinas
preprogramadas. El sistema también interactúa con los módulos, estableciendo
conexión con el módulo maestro y enviándole a este mensajes
que le indican a los módulos que hacer.
La implementación de los módulos REnergy si bien parte del trabajo a realizar no se
considera como parte del problema a solucionar, que es la aplicación.
Definición de Requerimientos
Caso de uso A:
Nombre: Login
usuario.
Propósito: el usuario desea
ingresar a la aplicación.
Actor: Usuario.
Pre-Condición: existe un nombre
de usuario y contraseña.
Evento: el usuario ingresa sus
credenciales.
Tipo: manual.
Curso normal de eventos:
Actor |
Sistema |
1) El usuario ingresa su nombre
de usuario y contraseña |
|
2) El usuario presiona el botón
“ingresar” |
3) El sistema verifica las
credenciales y provee acceso a la aplicación |
Variante 1, datos erróneos o
incompletos:
1A1: El usuario ingresa nombre
y/o contraseña incorrecto(s) o
omite alguno de los campos.
3A3: El sistema no da acceso a la
aplicación y notifica al usuario del ingreso de credenciales incorrectas.
Caso de uso B:
Nombre: Conexión modulo.
Propósito: Establecer una
conexión con un módulo REnergy.
Actor: Usuario.
Pre-Condición: Usuario ha
ingresado a su cuenta, existe y está encendido el módulo REnergy,
Bluetooth activado.
Evento: El usuario selecciona la
opción “conectar”.
Tipo: Manual.
Curso normal de eventos:
Actor |
Sistema |
1) Usuario presiona el botón
“conectar” |
2) El sistema muestra una lista
de dispositivos Bluetooth detectados |
3) Usuario selecciona un
dispositivo Bluetooth que corresponde a un modulo REnergy |
4) El sistema establece la
conexión |
|
5) El sistema notifica de la
conexión exitosa |
Caso de uso C:
Nombre: Envíar
comando.
Propósito: Envíar
una orden desde la aplicación a el módulo Renergy maestro, a fin de que se
realice una acción.
Actor: Módulo REnergy.
Pre-Condición: Conexión
establecida entre el módulo y el sistema, el usuario a ingresado un comando en
modo manual o a activado una rutina.
Evento: El sistema envía un
comando por Bluetooth a módulo REnergy.
Tipo: manual/Automático.
Curso normal de eventos:
Actor |
Sistema |
1) El sistema envía por
Bluetooth un mensaje al módulo maestro |
|
2) El módulo maestro recibe el mensaje
y de acuerdo a su contenido cambia su estado o comanda a un módulo
subordinado a cambiar su estado. |
Diseño
La aplicación se compone de
varias pantallas que extienden de una clase común de Widget las cuales se van
componiendo y anidando a través de relaciones de agregación, dándole la
estructura a la aplicación.
Diagrama UML ventanas:
Diagrama de secuencia para
utilizar rutina preprogramada 1 comenzando desde la aplicación recién abierta,
seguido por regreso de ventanas hasta la ventana principal y cierre de
aplicación:
El login
de usuario diseñado es un placeholder para un posible
futuro login verdadero basado en cuentas reales de
usuarios, en el diseño actual funciona como un nombre de usuario y contraseña hardcoded en la app (user:seba,
password:123).
Cabe mencionar que por
limitaciones de tiempo no se logro implementar toda
la funcionalidad propuesta, de modo que las ventanas de rutinas preprogramadas
y de manejo manual se encuentran en estructura pero no en función, se dispone
sin embargo de el prototipo de estas funcionalidades
en la ventana chatpage dentro de avanzado, donde se
puede enviar manualmente mensajes a través de un chat a el módulo maestro
directamente por bluetooth serial, lo que usamos para enviar caracteres que el
módulo sabe interpretar, en ese sentido esta ventana incluso una vez se
complementen las otras sirve como un modo de debugueo
para el desarrollador, evitando pasar por interfaces que abstraen la
comunicación de bajo nivel para el usuario final.
Implementación
Necesitamos de los medios para
desarrollar una aplicación móvil para dispositivos Android, de modo que
decidimos escribir la aplicación en el lenguaje de programación Dart utilizando
el SDK flutter en el IDE Android Studio, el ambiente
de desarrollo es básicamente igual a lo que vimos sobre android
studio en clases pero se debe contar adicionalmente
con el SDK flutter, los detalles de instalación para
poder desarrollar aplicaciones con flutter en android studio se encuentran aquí
en las secciones “Get the Flutter SDK” y “Android setup”,
adicionalmente utilizamos la librería de bluetooth serial de flutter que se puede encontrar acá.
Pruebas
Al abrir la aplicación se muestra
pantalla:
Al ingresar el usuario y clave
correcto nos lleva a la siguiente pantalla:
Sí los datos son erróneos se
muestra:
El siguiente gif ilustra la
navegación por la aplicación, conectando el módulo maestro y desplazándose a la
ventana de rutinas
y en el este
gif (muy pesado para incluír) se muestra la
aplicación comunicándose con el módulo maestro a través de chatPage
Código del proyecto
El código del proyecto se
encuentra en el archivo lib.zip que se puede descargar desde el siguiente enlace
de Google drive.