Desarrollo de un sistema para la alimentación automática de aves rapaces
Abstract
Grado en Ingeniería Informática
Full text
Escuela de Ingenier´ ıa Inform´ atica TRABAJO FIN DE GRADO Grado en Ingenier´ ıa Inform´ atica Desarrollo de un sistema para la alimentaci´ on autom´ atica de aves rapaces Autor: D. David de la Varga del Ca˜no Tutores: Dr. Diego R. Llanos Ferraris D. Guillermo Vicente Oliva
2
Resumen El siguiente Trabajo Fin de Grado consiste en el desarrollo de un prototipo para la alimentaci´on autom´atica de aves rapaces. El prop´osito que se plantea: el due˜no de un ave rapaz ser´a capaz de alimentar a su animal desde cualquier lugar, para lo que es necesario un sistema que sirva de control y el prototipo que ser´a controlado, el prototipo ser´a fabricado. De este modo el cetrero que as´ı es como se denomina al due˜no de un ave rapaz, pueda utilizar tanto el sistema de control, a trav´es de una p´agina web, como el comedero f´ısico para mantener atendidas las necesidades alimenticias de su ave. Se cubrir´an las necesidades de alimentar al animal en un instante previamente establecido o en un momento decidido por el cetrero. Adem´as, se mantendr´a la informaci´on m´as relevante de cada comedero. 3
4
Abstract 5
6
´ Indice general 1. Introducci´on 15 1.1. Contextoymotivaci´on ................................. 15 1.2. Objetivosyalcance................................... 15 1.3. Explicaci´on del escenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2. An´alisis de requisitos 17 2.1. Definici´on de los actores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.1.1. Administrador.................................. 17 2.1.2. Usuario ..................................... 17 2.1.3. UsuarioExterno................................. 17 2.2. Requisitosfuncionales ................................. 17 2.3. Requisitos no funcionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.4. Reglasdenegocio.................................... 18 2.5. Requisitos de informaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3. Plan de proyecto 19 3.1. Prop´osito, alcance y objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.2. Artefactosdeproyecto ................................. 19 3.3. Plandetrabajo..................................... 19 3.3.1. DiagramasdeGantt .............................. 23 3.4. Presupuesto....................................... 26 3.4.1. Proyectosoftware................................ 26 3.4.2. ProyectoIoT .................................. 26 3.4.3. Total....................................... 26 4. Modelo de An´alisis 27 4.1. Casosdeusodelsistema................................ 27 4.1.1. Diagrama de Casos de Uso . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.1.2. Casos de Uso del actor Administrador . . . . . . . . . . . . . . . . . . . . 29 4.1.3. Casos de Uso del actor Usuario . . . . . . . . . . . . . . . . . . . . . . . . 30 4.1.4. Casos de uso del actor Usuario Externo . . . . . . . . . . . . . . . . . . . . 37 4.2. Modelodedominio ................................... 38 4.3. Modelodedatos..................................... 38 5. Dise˜no 39 5.1. Arquitecturadelsistema................................ 39 5.2. Interfazdeusuario ................................... 41 5.3. Modelo de dominio en dise˜no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.4. Modelodedatos..................................... 45 5.5. Diagramasdesecuencia................................. 46 5.5.1. Diagrama de secuencia del caso de uso: Registrar usuario . . . . . . . . . . 47 5.5.2. Diagrama de secuencia del caso de uso: Servir una raci´on . . . . . . . . . . 48 5.5.3. Diagrama de secuencia del caso de uso: Programar un comedero . . . . . . 49 7
5.5.4. Diagrama de secuencia del caso de uso: Borrar Programaci´on . . . . . . . . 50 5.5.5. Diagrama de secuencia del caso de uso: Registrar n´umero de raciones . . . 50 5.5.6. Diagramas de flujo para la Raspberry Pi . . . . . . . . . . . . . . . . . . . 51 5.6. Planosdelcomedero .................................. 53 5.6.1. Parte superior del Comedero . . . . . . . . . . . . . . . . . . . . . . . . . . 53 5.6.2. Parte inferior del Comedero . . . . . . . . . . . . . . . . . . . . . . . . . . 55 6. Implementaci´on 59 6.1. Entornodedesarrollo.................................. 59 6.2. Versiones necesarias de software . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 6.3. Herramientasutilizadas................................. 59 6.4. Controldeversiones .................................. 59 6.5. Servidor de la aplicaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 6.6. Implementaci´on de la base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . 60 6.7. Sobre el framework Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 7. Pruebas 63 7.1. Pruebasdelfrontend .................................. 63 7.1.1. Pruebas de caja negra para los usuarios generales . . . . . . . . . . . . . . 63 7.1.2. Pruebas de caja blanca para los usuarios generales . . . . . . . . . . . . . . 64 7.1.3. Pruebas de caja negra para los usuarios administradores . . . . . . . . . . 67 7.1.4. Pruebas de caja blanca para los usuarios administradores . . . . . . . . . . 68 7.1.5. Pruebas sobre la API Rest . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 8. Manual del usuario 75 8.1. Usuarionormal ..................................... 75 8.1.1. Iniciodesesi´on ................................. 75 8.1.2. Editarnombre.................................. 77 8.1.3. A˜nadirraciones................................. 77 8.1.4. Programarcomedero .............................. 79 8.1.5. Borrar programaci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 8.1.6. Servir ...................................... 81 8.2. Usuarioadministrador ................................. 81 8.2.1. Iniciarsesi´on .................................. 81 8.2.2. CrearUsuario.................................. 82 8.2.3. CrearComedero................................. 84 8.2.4. GenerarToken ................................. 84 9. Manual del programador 87 9.1. Comprensi´on del framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 9.2. Estructura de ficheros de Django . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 9.3. Configuraci´on de la Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 9.3.1. Hardwareysoftware .............................. 89 9.3.2. Instalaci´on.................................... 90 9.3.3. Configuraci´on de la conexi´on WiFi . . . . . . . . . . . . . . . . . . . . . . 90 9.3.4. Ejecuci´on autom´atica del script . . . . . . . . . . . . . . . . . . . . . . . . 91 10.Resultados 93 10.1.Im´agenes......................................... 93 10.2.V´ıdeo .......................................... 94 8
11.Conclusiones y trabajo futuro 95 11.1.Conclusiones....................................... 95 11.2.Trabajofuturo ..................................... 95 Anexos 98 I. Ap´endice A 101 9
1.3. Explicaci´on del escenario Como el mundo de la cetrer´ıa no es algo mayormente conocido, se procede a explicar brevemente en que consiste el cuidado de un ave de presa y as´ı se pretende justificar este proyecto. Estos animales act´uan por el hambre, es decir, ellos en la naturaleza salen a buscar alimento si se sienten hambrientos, si no es as´ı permanecer´an posados. Por este hecho y para que las aves obedezcan a su due˜no, es necesario saber su sensaci´on de hambre, el cual se controla a trav´es de su peso. Para ello es necesario gestionar de forma precisa lo que comen diariamente. Un ejemplo, si el due˜no del p´ajaro quisiera salir fuera un fin de semana deber´ıa dejar a alguien al cargo de tus animales. Aqu´ı es donde entra la soluci´on que propone este proyecto, podr´a controlar a las aves sin necesidad de encontrarse d´onde ellas est´en. Ahora que se ha puesto en situaci´on de lo que ser´a el proyecto se procede a detallar los requisitos del mismo. 16
Cap´ıtulo 2 An´alisis de requisitos 2.1. Definici´on de los actores 2.1.1. Administrador El Administrador es el encargado de dar de alta nuevos Usuarios y los Comederos asociados a estos Usuarios. 2.1.2. Usuario El Usuario puede utilizar la aplicaci´on web para consultar la informaci´on de sus comederos y ejecutar diversas funciones: servir una raci´on, programar... 2.1.3. Usuario Externo El Usuario Externo es aquel que no est´a registrado en el sistema. ´ El podr´a consultar la informaci´on del proyecto y las instrucciones de uso. 2.2. Requisitos funcionales 1. La aplicaci´on permitir´a al Usuario identificarse mediante usuario y contrase˜na. 2. La aplicaci´on mostrar´a todos los comederos que tengas activos, en cada uno podr´an verse los datos relativos al mismo: nombre, raciones actuales, raciones m´aximas y descripci´on de la programaci´on. 3. La aplicaci´on permitir´a al Usuario introducir una nueva cantidad de raciones. 4. La aplicaci´on permitir´a al Usuario modificar las raciones previamente introducidas. 5. La aplicaci´on permitir´a dar la orden de servir una raci´on. 6. La aplicaci´on permitir´a programar el servicio de una/s raci´on/es para un d´ıa o varios d´ıas y para uno o varios comederos, permitiendo elegir la hora para cada uno de los d´ıas y para cada comedero. 7. La aplicaci´on permitir´a borrar la programaci´on establecida para un comedero. 8. La aplicaci´on permitir´a al Usuario editar la programaci´on de cada uno de los comederos. 9. La aplicaci´on permitir´a editar el nombre del comedero. 17
10. La aplicaci´on permitir´a al Administrador registrar un nuevo Usuario mediante un nombre de usuario, una contrase˜na y la MAC asociada a la Raspberry en uso. 11. La aplicaci´on permitir´a al Administrador dar de alta nuevos Comederos. 12. La aplicaci´on permitir´a al Administrador asignar un n´umero m´aximo de raciones a un modelo de Comedero. 13. La aplicaci´on permitir´a al Administrador visualizar todos los Usuarios y los Comederos que poseen. 14. La aplicaci´on permitir´a ver toda la informaci´on relativa al proyecto. 15. La aplicaci´on permitir´a ver las instrucciones de uso de toda la aplicaci´on 2.3. Requisitos no funcionales 1. La aplicaci´on web se desarrollar´a en el framework Django basado en Python. 2. La aplicaci´on web ser´a al menos compatible para los navegadores Google Chrome y Mozilla Firefox. 3. La aplicaci´on web se albergar´a en un servidor (PythonAnywhere). 4. La Raspberry funcionar´a sobre Raspbian. 5. La Raspberry actuar´a sobre un servo para servir la comida. 6. La Raspberry estar´a embebida en el comedero con el que interactuar´a. 7. El comedero estar´a dise˜nado en freeCAD 0.16. Se adjuntar´an los planos. 8. El comedero se imprimir´a en 3D. 9. El prototipo del comedero se imprimir´a en un pl´astico denominado PLA (Poli´acido l´actico). 2.4. Reglas de negocio 1. Las raciones m´aximas que un comedero puede servir est´an limitadas por el n´umero de huecos para almacenarlas. 2. El n´umero m´aximo de programaciones que se pueden establecer para un comedero estar´a limitado por la cantidad de raciones actuales albergadas por el comedero y nunca ser´a superior al n´umero m´aximo de raciones posibles. 3. Si existen raciones previas registradas en el comedero se advertir´a antes de a˜nadir m´as raciones. 4. La programaci´on m´as temprana que se puede establecer para un comedero es, como m´aximo, al d´ıa siguiente del que se encuentra. 2.5. Requisitos de informaci´on 1. La cantidad de comida por raci´on depende del usuario que utilice la aplicaci´on. T´ıpicamente el cetrero sabr´a la cantidad de comida adecuada que contendr´a cada raci´on. 2. Es obligaci´on del usuario de la aplicaci´on retirar las raciones que perezcan o no utilizar´a. Una vez conocidos los requisitos del sistema a elaborar se procede a planificar el proyecto. 18
Cap´ıtulo 3 Plan de proyecto 3.1. Prop´osito, alcance y objetivos Como se ha introducido anteriormente el prop´osito de este proyecto es cubrir la necesidad de alimentar remotamente a las aves de cetrer´ıa, para as´ı mantener sus cuidados aunque el due˜no no se encuentre en el lugar donde las aves habitan. Se podr´a servir a decisi´on el alimento, o bien, programar un servicio. Tambi´en se mantendr´a informado del estado de cada comedero. Todo esto accesible desde la interfaz web de Hungry Falconry. 3.2. Artefactos de proyecto El conjunto de artefactos RUP est´a compuesto del siguiente modo: Modelo de negocio Requisitos An´alisis Dise˜no Implementaci´on Pruebas Despliegue 3.3. Plan de trabajo A continuaci´on se realizar´a una estimaci´on del esfuerzo y duraci´on de las diferentes etapas que lo compondr´an, siguiendo un modelo en cascada. Para llevar a cabo este proyecto es necesario tener conocimientos de los siguientes ´ambitos: Conocimientos de Python Conocimientos de HTML, CSS junto con Bootstrap Conocimientos sobre el Framework Django Conocimientos en SQL, espec´ıficamente SQLite Conocimientos de control de servomotores mediante Python y pines GPIO en Raspberry Pi Conocimientos de dise˜no 3D con FreeCAD 0.16 Conocimientos en impresi´on 3D 19
Fase de Inicio 1. Inicio de la fase de inicio Predecesoras: Duraci´on: 2. Elicitaci´on de requisitos Predecesoras: 1 Duraci´on: 5 d´ıas Se obtiene los requisitos para alcanzar los objetivos que se proponen. Adem´as de definir con que herramientas se llevar´an a cabo. 3. Calendario de tareas Predecesoras: 2 Duraci´on: 1 d´ıas Se distribuyen las tareas a lo largo del periodo de desarrollo del proyecto. 4. Adquisici´on de conocimientos en Django Predecesoras: 3 Duraci´on: 12 d´ıas En este periodo se espera adquirir los conocimientos suficientes para trabajar con dicho framework. 5. Control de versiones Predecesoras: 3 Duraci´on: 1 d´ıas Se establecer´a un sistema de control de versiones git, en GitHub. 6. Fin de la fase de inicio Predecesoras: 4, 5 Duraci´on: Fase de elaboraci´on 7. Inicio de la fase de elaboraci´on Predecesoras: 6 Duraci´on: 8. Casos de Uso Predecesoras: 7 Duraci´on: 5 d´ıas Se identificar´an y describir´an los casos de uso del sistema a partir de los requisitos. 9. Modelo de dominio Predecesoras: 8 20
Duraci´on: 1 d´ıas Realizaci´on del modelo del dominio. Identificar las clases implicadas. 10. Modelo de la base de datos Predecesoras: 9 Duraci´on: 1 d´ıas Realizaci´on del modelo de datos. Una versi´on simplificada de lo que ser´a la base de datos. 11. Dise˜no en 3D del prototipo Predecesoras: 7 Duraci´on: 9 d´ıas Se dise˜nar´a el prototipo con FreeCAD. Software de dise˜no en 3D. 12. Boceto de la interfaz de usuario Predecesoras: 9 Duraci´on: 1 d´ıas Se realizar´an unos bocetos de la interfaz de usuario que servir´an como referencia. 13. Dise˜no de la arquitectura del sistema Predecesoras: 10, 12 Duraci´on: 2 d´ıas La mayor´ıa de la arquitectura del sistema viene determinada por el framework. 14. Dise˜no de la base de datos Predecesoras: 13 Duraci´on: 2 d´ıas Se construir´a el esquema final de la base de datos. Su creaci´on va ligada a los denominados modelos del framework. 15. Diagramas de secuencia en dise˜no Predecesoras: 13, 14 Duraci´on: 5 d´ıas Realizaci´on de los diagramas de secuencia de los casos de uso de mayor relevancia. 16. Fin de la fase de elaboraci´on Predecesoras: 11, 15 Duraci´on: Fase de construcci´on 17. Inicio de la fase de construcci´on Predecesoras: 16 Duraci´on: 21
18. Configuraci´on del entorno de desarrollo Predecesoras: 17 Duraci´on: 1 d´ıa Se configurar´a una base de datos de prueba y se instalar´a lo correspondiente al framework. 19. Desarrollo del backend Predecesoras: 18 Duraci´on: 20 d´ıa Se desarrollar´a la gesti´on de usuarios y funcionalidades. As´ı como el API REST con ¡. El script cliente con Python. 20. Desarrollo del frontend Predecesoras: 18 Duraci´on: 10 d´ıa Se realizar´an todas las vistas del sistema, la capa de presentaci´on, con Bootstrap, HTML y CSS. 21. Impresi´on 3D del prototipo Predecesoras: 18 Duraci´on: 5 d´ıa Se imprimir´a el prototipo en 3D. La duraci´on viene determinada por el tiempo invertido por la impresora. 22. Fin de la fase de construcci´on Predecesoras: 19, 20, 21 Duraci´on: Fase de Transici´on 23. Inicio de la fase de transici´on Predecesoras: 22 Duraci´on: 24. Pruebas Predecesoras: 23 Duraci´on: 8 d´ıas 25. Elaborar manual del programador Predecesoras: 24 Duraci´on: 3 d´ıas 26. Elaborar manual del usuario Predecesoras: 24 Duraci´on: 2 d´ıas 27. Fin de la fase de transici´on Predecesoras: 25, 26 Duraci´on: 22
3.3.1. Diagramas de Gantt A continuaci´on se muestra los diagramas de Gantt de la planificaci´on del proyecto, es una aproximaci´on de la calendarizaci´on. En el Anexo I - Diagrama de Gantt Completo se muestra la planificaci´on completa. Fase de Inicio Figura 3.1: Diagrama de Gantt para la Fase de Inicio Fase de Elaboraci´on Figura 3.2: Diagrama de Gantt para la Fase de Elaboraci´on 23
Fase de Construcci´on Figura 3.3: Diagrama de Gantt para la Fase de Construcci´on Fase de Transici´on Figura 3.4: Diagrama de Gantt para la Fase de Transici´on Diagrama de Gantt completo 24
8 11 18 25 4 11 18 25 1 8 15 22 29 6 13 20 27 Feb '19 Mar '19 Apr '19 May '19 Hungry Falconry 0h 0% Fase de Inicio 0h 0% Inicio fase de Inicio 0 0% Elicitacion de requisitos 0 0% Calendario de tareas 0 0% Conocimientos en DJango 0 0% Control de versiones 0 0% Fin fase de Inicio 0 0% Fase de elaboracion 0h 0% 7. Inicio fase Elaboracion 0 0% 8. Casos de Uso 0 0% 9. Modelo de dominio 0 0% 10. Modelo de la Base de Datos 0 0% 11. Diseño 3D prototipo 0 0% 12. Boceto interfaz usuario 0 0% 13. Arquitectura del sistema 0 0% 14. Diseño BD 0 0% 15. Diagramas secuencias 0 0% 16. Fin fase Elaboracion 0 0% Fase de construccion 0h 0% 17. Inicio fase Construccion 0 0% 18. Configuracion entorno desarrollo 0 0% 19. Desarrollo backend 0 0% 20. Desarrollo frontend 0 0% 21. Impresion 3D del prototipo 0 0% 22. Fin fase Construccion 0 0% Fase de transicion 0h 0% 23. Inicio fase Transicion 0 0% 24. Pruebas 0 0% 25. Manual del programador 0 0% 26. Manual del usuario 0 0% Fin fase de transicion 0 0% Powered by TCPDF (www.tcpdf.org)
Editar Programaci´on CU-4 Editar programaci´on Actor Usuario Descripci´on El sistema deber´a permitir editar la programaci´on de un comedero. Precondici´on El actor ha iniciado sesi´on en el sistema, el comedero tiene raciones y una programaci´on previa. Secuencia Normal Paso Acci´on 1 El actor selecciona la opci´on editar programaci´on. 2 El sistema muestra el men´u de editar programaci´on de un comedero. 3 Se ejecuta el caso de uso ((Programar un comedero)) 4 El sistema muestra un mensaje de ´exito y el caso de uso finaliza. Postcondici´on Excepciones Variaci´on Acci´on Tabla 4.4: Caso de Uso 4 - Editar programaci´on Borrar programaci´on CU-5 Borrar programaci´on Actor Usuario Descripci´on El sistema deber´a permitir borrar la programaci´on de un comedero. Precondici´on El actor ha iniciado sesi´on en el sistema, el comedero tiene una programaci´on previa. Secuencia Normal Paso Acci´on 1 El actor selecciona la opci´on borrar programaci´on. 2 El sistema muestra un mensaje de confirmaci´on. 3 Se actor selecciona Si. 4 El sistema muestra un mensaje de ´exito y el caso de uso finaliza. Postcondici´on Se ha borrado la programaci´on del comedero. Excepciones Variaci´on Acci´on 3a El actor selecciona No. El caso de uso finaliza y queda sin efecto. Tabla 4.5: Caso de Uso 5 - Borrar programaci´on 32
Registrar el n´umero de raciones CU-6 Registrar el n´umero de raciones Actor Usuario Descripci´on El sistema deber´a permitir registrar el n´umero de raciones que previamente se han introducido en el comedero. Precondici´on El actor ha introducido las raciones en forma de alimento en el comedero. Secuencia Normal Paso Acci´on 1 El actor selecciona la opci´on nuevas raciones. 2 El sistema muestra el men´u de a˜nadir raciones. 3 El actor registra el n´umero de raciones y pulsa aceptar. 4 El sistema muestra un mensaje de ´exito y el caso de uso finaliza. Postcondici´on Se ha registrado la cantidad de raciones que ahora contiene el comedero. Excepciones Variaci´on Acci´on 1a El actor selecciona a˜nadir m´as raciones. 2a El comedero tenia raciones ya introducidas, entonces el sistema advierte de que se eliminaran las anteriores raciones. 3a El actor introduce un n´umero superior a la cantidad de raciones m´aximas permitidas por el comedero, el sistema muestra un error y el caso de uso contin´ua en el paso 2. 3b El actor introduce 0 o menos raciones, el sistema muestra un error y el caso de uso contin´ua en el paso 2. 3c El actor pulsa Atr´as y el caso de uso queda sin efecto. 4a Ocurre alg´un error en el proceso, se muestra un mensaje de error y el caso de uso contin´ua en el paso 3. Tabla 4.6: Caso de Uso 6 - Registrar el n´umero de raciones 33
Editar n´umero de raciones CU-7 Editar n´umero de raciones Actor Usuario Descripci´on El sistema deber´a permitir editar el n´umero de raciones que previamente se han introducido en el comedero. Precondici´on Se ha ejecutado el Caso de Uso (( Registrar el n´umero de raciones de un comedero)). Secuencia Normal Paso Acci´on 1 El actor selecciona la opci´on editar raciones. 2 El sistema muestra el men´u de editar raciones y la cantidad anterior de raciones. 3 El actor pulsa la opci´on a˜nadir raci´on. 4 El sistema aumenta en 1 el n´umero de raciones por cada pulsaci´on. 5 El actor pulsa Aceptar. 6 El sistema muestra un mensaje de ´exito y el Caso de Uso finaliza. Postcondici´on Se ha editado la cantidad de raciones que ahora contiene el comedero. Excepciones Variaci´on Acci´on 2a El comedero no ten´ıa raciones previamente introducidas, se muestra un mensaje de error y el Caso de Uso finaliza. 3a El actor pulsa la opci´on restar raci´on. 3b El actor pulsa cancelar y el caso de uso queda sin efecto. 4a El sistema disminuye en 1 el n´umero de raciones por cada pulsaci´on. 5a El actor pulsa Cancelar y el Caso de Uso queda sin efecto. 6a Ocurre alg´un error en el proceso, se muestra un mensaje de error y el caso de uso contin´ua en el paso 5. Tabla 4.7: Caso de Uso 7 - Editar n´umero de raciones 34
Identificarse CU-8 Identificarse Actor Usuario y Administrador Descripci´on El sistema permitir´a iniciar sesi´on en ´el. Precondici´on El usuario debe estar registrado en el sistema. Secuencia Normal Paso Acci´on 1 El actor entra en el sistema. 2 El sistema muestra la vista de iniciar sesi´on. 3 El actor introduce el nombre de usuario, contrase˜na y pulsa Iniciar Sesi´on. 4 El sistema comprueba los datos introducidos y se ejecuta el caso de uso (( Consultar informaci´on de todos mis comederos )) para el rol de Usuario y la vista correspondiente al Administrador en el caso de que el rol sea Administrador. Postcondici´on El actor ha iniciado sesi´on en el sistema. Excepciones Variaci´on Acci´on 3a El actor pulsa Cancelar y el caso de uso queda sin efecto. 4a El sistema comprueba que los datos introducidos son err´oneos, muestra un mensaje de error y el caso de uso contin´ua en el paso 2. Tabla 4.8: Caso de Uso 8 - Identificarse 35
Consultar informaci´on de todos mis comederos CU-9 Consultar informaci´on de todos mis comederos Actor Usuario Descripci´on El sistema mostrar´a la informaci´on de todos los comederos que tenga el Usuario en funcionamiento. Precondici´on Se ha ejecutado el Caso de Uso ((Identificarse)). Secuencia Normal Paso Acci´on 1 El sistema muestra una lista con toda la informaci´on correspondiente a los comederos que el usuario tiene activos. Postcondici´on Excepciones Variaci´on Acci´on Tabla 4.9: Caso de Uso 9 - Consultar informaci´on de todos mis comederos Editar informaci´on CU-10 Editar informaci´on Actor Usuario Descripci´on El sistema permitir´a editar la informaci´on de un comedero tales como el nombre. Precondici´on El actor se ha identificado en el sistema y tiene comederos activos. Secuencia Normal Paso Acci´on 1 El actor selecciona la opci´on de editar informaci´on de un comedero. 2 El sistema muestra el men´u de editar propiedades de un comedero. 3 El actor modifica el nombre. Pulsa Aceptar. 4 El sistema muestra un mensaje de ´exito y el caso de uso finaliza. Postcondici´on La informaci´on editada queda guardada. Excepciones Variaci´on Acci´on 3a El actor pulsa Atr´as y el caso de uso queda sin efecto. 4a Ocurre alg´un error en el proceso, se muestra un mensaje de error y el caso de uso contin´ua en el paso 3. Tabla 4.10: Caso de Uso 10 - Editar informaci´on 36
4.1.4. Casos de uso del actor Usuario Externo Consultar informaci´on del proyecto CU-11 Consultar informaci´on del proyecto Actor Usuario Externo Descripci´on El sistema permitir´a ver toda la informaci´on relevante para el usuario del proyecto Precondici´on Secuencia Normal Paso Acci´on 1 El actor selecciona la opci´on de informaci´on del proyecto. 2 El sistema muestra toda la informaci´on referente al proyecto. Postcondici´on Excepciones Variaci´on Acci´on Tabla 4.11: Caso de Uso 11 - Editar Consultar informaci´on del proyecto Consultar instrucciones de uso de la aplicaci´on CU-12 Consultar instrucciones de uso de la aplicaci´on Actor Usuario Externo Descripci´on El sistema permitir´a ver las instrucciones de uso de la aplicaci´on. Precondici´on Secuencia Normal Paso Acci´on 1 El actor selecciona la opci´on de instrucciones de uso. 2 El sistema muestra toda la informaci´on referente a las instrucciones de uso. Que pasos hay que seguir para hacer cada funcionalidad. Postcondici´on Excepciones Variaci´on Acci´on Tabla 4.12: Caso de Uso 12 - Consultar instrucciones de uso de la aplicaci´on 37
4.2. Modelo de dominio El siguiente diagrama muestra las clases detectadas junto con sus atributos. Figura 4.2: Diagrama modelo de dominio en an´alisis 4.3. Modelo de datos El siguiente apartado muestra el diagrama entidad relaci´on de la base de datos que se implementar´a. Los campos algorithm,salt yhash ser´an explicados en la fase de dise˜no. Figura 4.3: Diagrama de la base de datos en an´alisis Realizada la fase de an´alisis se procede a la fase de dise˜no. 38
Cap´ıtulo 5 Dise˜no 5.1. Arquitectura del sistema Como el proyecto se desarrollar´a con el framework Django, la arquitectura viene definida por ´el mismo. En esencia Django sigue una arquitectura Modelo-Vista-Controlador (MVC) pero con una salvedad, a las vistas las denominan plantillas (Templates) y a los controladores, vistas (Views). As´ı que se podr´ıa establecer el acr´onimo MTV (Model-Template-View) [4]. Figura 5.1: Arquitectura Django 39
En realidad los paquetes no son directorios como tal, se trata de ficheros Python (.py) que alojan funciones y clases pero que est´an diferenciados por funcionalidad. Es decir, en el fichero views.py est´an todos los controladores, act´ua como paquete de clases, pero no es un directorio, es un fichero Python. Lo primero que hay que diferenciar es la existencia de tres niveles. Se procede a explicar del nivel m´as externo al m´as interno. En el nivel m´as externo de todos se encuentra el manage , encargado, entre una multitud de funcionalidades, de crear los proyectos y las aplicaciones, crear superusuarios, arrancar el servidor... En el paquete static se encuentran todos los archivos gr´aficos, ficheros css y javascript. El siguiente nivel, el nivel de proyecto, llamado hungryFalconry, alberga las opciones ( settings ), las urls y el paquete wsgi , utilizado para el despliegue. El paquete urls se encarga del direccionamiento interno del proyecto: para una URL dada se ejecutar´a una acci´on. Adem´as incluye las URL de las aplicaciones del proyecto. El paquete settings se encarga de toda la configuraci´on del proyecto, librer´ıas instaladas, opciones de estas librer´ıas, conexi´on a la base de datos, idioma, zona horaria... Nivel de aplicaciones. Aqu´ı se encuentran las aplicaciones desarrolladas dentro del mismo proyecto. En este caso solo existe una, denominada hungryFalconryApp . Dentro de cada aplicaci´on existen tres paquetes m´as relevantes que el resto. El paquete models , encargado de crear los objetos y adem´as plasmarlos en forma de tabla a la base de datos. Sigue actuando como el Modelo en una arquitectura MVC. Las plantillas ( templates ), corresponden a la vista en arquitectura MVC. Albergan el HTML y javascript correspondientes para visualizaci´on de la p´agina. Por ´ultimo las views , act´uan como controladores de vista, por cada acci´on ocurrida en las templates se ejecutar´a una view. El resto de paquetes: urls: Asocia cada URL a una acci´on, que es ejecutada en las views. admin : Registra los modelos para que sean accesibles desde la p´agina de administraci´on. Para as´ı poderlos crear, editar, borrar... apps: Registra todas las aplicaciones instaladas en el proyecto. forms : Crea formularios. Es capaz de crear un formulario y ubicarlo en las templates para luego recoger sus valores y enviarlos a las views. test: Para crear pruebas de las aplicaciones. permisions : Pertenece a Django Rest Framework. Establece los permisos para los recursos de la API Rest. serializers : Pertenece a Django Rest Framework. Se encarga de enviar los campos establecidos de la base de datos a trav´es de la API Rest. 40
5.2. Interfaz de usuario En esta secci´on se incluir´an los bocetos de las vista que compondr´an la p´agina web [ 1 ]. S´olo se muestra la vista del Usuario, pues, gracias al framework, las funciones de gesti´on que llevar´ıa a cabo el Administrador vienen ya implementadas. Figura 5.2: Vista inicio de sesi´on 41
5.5.2. Diagrama de secuencia del caso de uso: Servir una raci´on Figura 5.10: Diagrama de secuencia del caso de uso: Servir una raci´on 48
5.5.3. Diagrama de secuencia del caso de uso: Programar un comedero Figura 5.11: Diagrama de secuencia del caso de uso: Programar un comedero 49
5.5.4. Diagrama de secuencia del caso de uso: Borrar Programaci´on Figura 5.12: Diagrama de secuencia del caso de uso: Borrar Programaci´on 5.5.5. Diagrama de secuencia del caso de uso: Registrar n´umero de raciones Figura 5.13: Diagrama de secuencia del caso de uso: Registrar n´umero de raciones 50
5.5.6. Diagramas de flujo para la Raspberry Pi Autenticaci´on contra el API Rest Figura 5.14: Diagrama de secuencia: Autenticaci´on contra la API Rest 51
Escucha activa para la espera de un servicio y guardar programaci´on Figura 5.15: Diagrama de secuencia: Servir y guardar programaci´on 52
Cumplir programaci´on establecida y guardada Figura 5.16: Diagrama de secuencia: Consumir programaci´on establecida 5.6. Planos del comedero 5.6.1. Parte superior del Comedero 53
Figura 5.17: Plano parte superior del comedero 54
5.6.2. Parte inferior del Comedero 55
Figura 5.18: Plano parte inferior del comedero 56
Establecidas ambas partes del dise˜no del sistema, aplicaci´on web y prototipo, se procede a su realizaci´on. 57
Prueba 1.4 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de modificar las raciones Acci´on Se modifican las raciones de un comedero Resultado Esperado Se sobrescribe el valor de raciones anterior por el que actual introducido Prueba 1.5 Requisito funcional 6. Prueba 1.5 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de programar un comedero Acci´on Se programa el servicio de una raci´on Resultado Esperado Se a˜nade un nuevo d´ıa y hora a la lista de programaciones, su estado es pendiente, se refleja con un icono de reloj Prueba 1.6 Requisito funcional 6. Prueba 1.6 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de programar un comedero Acci´on Llega el instante programado Resultado Esperado Se sirve una raci´on del comedero, se resta una raci´on y la programaci´on asociada se marca como servida con un tick verde en la lista de programaciones Prueba 1.7 Requisito funcional 7. Prueba 1.7 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de borrar una programaci´on Acci´on Se borra una programaci´on Resultado Esperado Se elimina la programaci´on correspondiente. Si es una programaci´on servida no se borrar´a Prueba 1.8 Requisito funcional 9. Prueba 1.8 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de editar el nombre del comedero Acci´on Se edita el nombre del comedero Resultado Esperado Se edita el nombre del comedero y se refleja en la vista de todos los comederos 7.1.2. Pruebas de caja blanca para los usuarios generales Prueba 1.9 Requisito funcional 3 y 4. Prueba 1.9 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de a˜nadir nuevas raciones Acci´on Se accede al men´u de a˜nadir raciones. Resultado Esperado Como existen raciones anteriores se muestra un mensaje de advertencia. 64
Figura 7.1: Mensaje de advertencia a˜nadiendo raciones Prueba 1.10 Requisito funcional 3 y 4. Prueba 1.10 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de a˜nadir m´as raciones de las permitidas. Acci´on Se intenta a˜nadir m´as raciones que el n´umero m´aximo de raciones. Resultado Esperado Se muestra un mensaje de error, advirtiendo de que es un n´umero de raciones err´oneo. Figura 7.2: Mensaje de error a˜nadiendo m´as raciones de las permitidas Prueba 1.11 Requisito funcional 3 y 4. Prueba 1.11 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de a˜nadir un n´umero negativo de raciones. Acci´on Se intenta a˜nadir un n´umero negativo de raciones. Resultado Esperado Se muestra un mensaje de error, advirtiendo de que es un n´umero de raciones err´oneo. 65
Figura 7.3: Mensaje de error a˜nadiendo un n´umero negativo de raciones Prueba 1.12 Requisito funcional 3 y 4. Prueba 1.12 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de a˜nadir cero raciones. Acci´on Se intenta a˜nadir cero raciones. Resultado Esperado Se muestra un mensaje de error, advirtiendo de que es un n´umero de raciones err´oneo. Figura 7.4: Mensaje de error a˜nadiendo cero raciones En el caso de las figuras proporcionadas para las pruebas 1.10, 1.11 y 1.12 se observa que el comedero posee una raci´on, este par´ametro no influye en el comportamiento ni las pruebas ni del programa, porque si se introduce un n´umero de raciones correcto este valor se sobrescribir´a. 66
Prueba 1.13 Requisito funcional 6. Prueba 1.13 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de a˜nadir m´as programaciones que raciones actuales. Acci´on Se intenta a˜nadir una segunda programaci´on teniendo solo una raci´on en el comedero. Resultado Esperado Se muestra un mensaje de error, advirtiendo de que es no se puede programar m´as servicios que raciones. Figura 7.5: Mensaje de error a˜nadiendo m´as programaciones que raciones actuales 7.1.3. Pruebas de caja negra para los usuarios administradores Prueba 2.1 Requisito funcional 1. Prueba 2.1 Descripci´on Esta prueba est´a destinada a probar el funcionamiento del inicio de sesi´on Acci´on Iniciar sesi´on en la aplicaci´on web con rol Administrador Resultado Esperado El usuario tiene acceso a todas las funcionalidades de administrador Prueba 2.2 Requisito funcional 10. Prueba 2.2 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de registrar un nuevo usuario Acci´on Se registra un usuario nuevo Resultado Esperado El nuevo usuario sale en la lista de usuarios, con todos sus datos 67
Prueba 2.3 Requisito funcional 11. Prueba 2.3 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de registrar un nuevo comedero Acci´on Se da de alta un nuevo comedero Resultado Esperado El nuevo comedero aparece en la lista de todos los comederos, con su nombre. Adem´as aparece asociado a un usuario existente 7.1.4. Pruebas de caja blanca para los usuarios administradores No se realizar´an pruebas de caja blanca para el sitio del Administrador, pues es una funcionalidad proporcionada por el propio framework, as´ı que se supondr´a su correcto funcionamiento. 68
7.1.5. Pruebas sobre la API Rest Para las siguientes pruebas se usar´a la interfaz gr´afica proporcionada por Django REST framework. Se adjunta la URL sin la direcci´on del servidor. Previa autenticaci´on en todas las pruebas. En este caso la autenticaci´on es mediante usuario y contrase˜na. Prueba 3.1 Prueba 3.1 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de la operaci´on GET para todos los comederos. Resultado Esperado Se consigue un JSON con todos los comederos del sistema. Figura 7.6: GET comederos API REST Prueba 3.2 Prueba 3.2 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de la operaci´on GET para un comedero. Resultado Esperado Se consigue un JSON con la informaci´on del comedero deseado. 69
Figura 7.7: GET un s´olo comedero API REST Prueba 3.3 Prueba 3.3 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de la operaci´on GET para la programaci´on de un comedero. Resultado Esperado Se consigue un JSON con todas las programaciones del comedero deseado. Figura 7.8: GET programaci´on para un comedero API REST 70
Prueba 3.4 Prueba 3.4 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de la operaci´on GET para los usuarios del sistema y sus comederos. Resultado Esperado Se consigue un JSON con todos los usuarios y sus comederos. Figura 7.9: GET usuarios y sus comederos API REST 71
Prueba 3.5 Prueba 3.5 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de la operaci´on GET para un s´olo usuario del sistema y sus comederos. Resultado Esperado Se consigue un JSON con datos del usuario y sus comederos. Figura 7.10: GET un solo usuario y sus comederos API REST 72
Prueba 3.6 Prueba 3.6 Descripci´on Esta prueba est´a destinada a probar el funcionamiento de la operaci´on PUT para modificar la programaci´on de un comedero. Resultado Esperado Se modifica los datos de la programaci´on. Figura 7.11: PUT programaci´on de un comedero API REST 73
Figura 8.7: Vista programar comederos con nueva programaci´on 8.1.5. Borrar programaci´on Para borrar una programaci´on nos dirigimos al men´u de Programar comedero (ver Fig. 8.8) y all´ı pulsamos la papelera asociada a la programaci´on que queremos eliminar. Nos mostrar´a un mensaje de confirmaci´on y en el caso de aceptar (Si), se borrar´a la programaci´on. Figura 8.8: Vista programar comederos con nueva programaci´on 80
8.1.6. Servir Para servir inmediatamente una raci´on del comedero podemos hacerlo pulsando la opci´on de Servir de la pantalla principal. S´olo se podr´a servir si hay raciones introducidas en el comedero y en el caso de que el n´umero de programaciones no sea igual al n´umero de raciones que guarde el comedero, es decir, si hay una programaci´on por raci´on no se podr´a servir. Figura 8.9: Vista confirmaci´on cuando se sirve 8.2. Usuario administrador El men´u de administraci´on es accesible desde http://davidelavarga.pythonanywhere.com/ admin. 8.2.1. Iniciar sesi´on El administrador iniciar´a sesi´on (ver Fig. 8.9) y se le mostrar´a el panel de control (ver Fig. 8.10). En el panel de control se observa toda la funcionalidad que el administrador puede modificar: Grupos, Usuarios, Comederos y Programaci´on. Los Tokens son necesarios para la autenticaci´on. Y a la derecha del panel de control se guarda un historial de acciones que va realizando el administrador. 81
Figura 8.10: Vista inicio de sesi´on para Administrador 8.2.2. Crear Usuario Nos dirigiremos a la creaci´on de Usuarios presionando el texto de A˜nadir en la fila de Usuarios. Y se mostrar´a la vista de creaci´on de Usuarios (ver Fig. 8.11). Se completan los campos con la petici´on correspondiente del Usuario. Se pulsa GRABAR. 82
Figura 8.11: Vista panel de control para Administrador Figura 8.12: Vista a˜nadir Usuario para Administrador 83
8.2.3. Crear Comedero Ahora hay que crear el Comedero que se le proporcionar´a al Usuario. Nos dirigimos a A˜nadir en la fila de Comederos. Se completan los campos adecuadamente. En el campo MAC es importante poner correctamente la direcci´on MAC de la Raspberry Pi embebida en el comedero. Despu´es para asociar al Usuario adecuado lo seleccionamos en el desplegable del campo titular. Figura 8.13: Vista a˜nadir Comedero para Administrador 8.2.4. Generar Token Es necesario generar un token para el usuario y a˜nadirlo al programa que se ejecuta en la Raspberry Pi. Se realizar´a dirigi´endonos al apartado de Tokens y seleccionando el usuario deseado, una vez adquirido el token lo copiaremos en la l´ınea pertinente del programa que se encuentra en la Raspberry: /home/pi/Desktop/pruebaAPIRest/simulacion rest.py (ver Fig. 8.14 y 8.15). Figura 8.14: Vista Token en el c´odigo 84
Figura 8.15: Vista a˜nadir Token para un Usuario Explicadas las instrucciones de uso de la aplicaci´on, ahora se llevar´a a cabo la explicaci´on de la aplicaci´on para un desarrollador. 85
86
Cap´ıtulo 9 Manual del programador En este cap´ıtulo se detallar´an las cuestiones necesarias para que un posible futuro programador pudiera extender el sistema, bien a˜nadiendo m´as funcionalidades o modificando y mejorando las actuales. 9.1. Comprensi´on del framework Para poder entender y posteriormente trabajar sobre esta aplicaci´on es necesario y primordial conocer el framework Django 2.2 [ 2 ]. Adem´as, para la comprensi´on de la API Rest es necesario conocimiento sobre Django Rest Framework [9]. 9.2. Estructura de ficheros de Django La siguiente estructura est´a explicada, aunque a menor nivel de detalle, en el apartado 5.1 Arquitectura. La estructura de directorios que sigue es la siguiente: hungryFalconry/ – hungryFalconry/ —— settings.py —— urls.py —— wsgi.py —— init .py – hungryFalconryApp/ —— migration/ —— templates/ ———– hungryFalconryApp/ —————– add raciones.html —————– base.html —————– editar info.html —————– programar info.html —————– tus comederos.html ———– registration/ —————– login.html —— init .py —— admin.py —— apps.py —— forms.py —— models.py —— permissions.py 87
—— serializers.py —— urls.py —— views.py —— tests.py – static/ —— admin/ —— bootstrap4 datetime/ —— bootstrap datepicker plus/ —— css/ —— images/ —— rest framework/ – manage.py – requirements.txt – db.sqlite3 Una vez conocida la estructura de directorios y ficheros que sigue el sistema, se procede a describirlos. El directorio principal, hungryFalconry , contiene el proyecto, las aplicaciones, la base de datos y los ficheros necesarios para arrancar y configurar el servidor. El directorio hungryFalconry, que cuelga del anterior, contiene todo lo relativo a configuraciones (settings.py), todas las URLs del proyecto y las aplicaciones (urls.py) y todo lo necesario para el despliegue (wsgi.py). El directorio hungryFalconryApp corresponde a la aplicaci´on con su nombre. Dentro de ´el se encuentra: templates/hungryFalconryApp : contiene los HTML para la vista en el navegador. El fichero base.html contiene la informaci´on com´un a todas las plantillas, a excepci´on de la plantilla login.html, situada en el directorio registration/. templates/registration: HTML para la plantilla de inicio de sesi´on. models.py : Es una representaci´on de las tablas de la base de datos, adem´as cuando se aplica una migraci´on (necesaria cuando se crea o modifica un modelo) se crea una tabla con el nombre del modelo en cuesti´on y una columna por etiqueta (CharField, IntegerField ...) existente en el modelo. Aqu´ı existen los modelos: Comedero , Programaci´on y Usuario . Tambi´en existen algunos m´etodos utilizados para la validaci´on de determinados campos de los modelos. views.py : Son los tradicionalmente denominados controladores [ 4 ]. Se han desarrollado m´etodos para las funcionalidades de la aplicaci´on y clases para las de la API Rest. •tus comederos : Recupera los Comederos del Usuario y muestra la vista de sus comederos. •servir : Para el comedero seleccionado cambia el valor de la variable tengo que servir a True. Gracias a este cambio y a trav´es del consumo de la API Rest, el comedero asociado actuar´a en consecuencia, sirviendo una raci´on y devolviendo esta variable a False, tambi´en se restar´a una raci´on. •add raciones : Para el nombre del comedero pasado como par´ametro muestra la vista de a˜nadir raciones, una vez completado el formulario guarda el n´umero de raciones nuevas. •editar info : Para el nombre del comedero pasado como par´ametro muestra la vista de editar informaci´on y una vez completado el formulario modifica el nombre del comedero. •programar comederos : Para el nombre del comedero pasado como par´ametro muestra la vista de programar comederos, una vez seleccionado d´ıa y hora guarda una nueva 88
programaci´on para el comedero. Cuando llegue el momento, el comedero, mediante el consumo de la API Rest, actuar´a sirviendo una raci´on y marcando la programaci´on correspondiente como servida, tambi´en se restar´a una raci´on. •borrar programacion : Una vez en la vista programar comederos y seleccionando el icono de la papelera se borrar´a la programaci´on. Toda la documentaci´on de la API en http://davidelavarga.pythonanywhere. com/docs y en el Anexo 1 • (API Rest) ComederoList , para la URL comederos/ devuelve la lista de todos los comederos. • (API Rest) ComederoDetail , para las acciones de POST, PUT y PATCH sobre los comederos. • (API Rest) ProgramacionList , para la URL programacion/pk/get devuelve las programaciones relativas al comedero con dicha pk (Clave primaria). • (API Rest) ProgramacionDetail para las acciones de POST, PUT y PATCH sobre las programaciones. •(API Rest) UserList, para la URL users/ devuelve todos los usuarios. • (API Rest) UserDetail para la URL users/pk se pueden ejecutar las acciones de POST, PUT y PATCH del comedero con dicha pk (Clave primaria). forms.py : Aqu´ı se crean los denominados formularios, por lo general en esta aplicaci´on un formulario se crea a partir de un conjunto de etiquetas de una tabla de la base de datos. Cada formulario se crear´a a la hora de construir la template, esto sucede cuando se invoca a alg´un m´etodo o clase de views.py. serializers.py , se encarga de determinar que subconjunto de etiquetas de los modelos se env´ıan a trav´es de la API Rest. Existe una clase serializer por cada modelo: ComederoSerializer,UserSerializer,ProgramacionSerializer. permissions.py , define los permisos para los recursos de la API Rest. IsOwnerOrReadOnly establece permisos de lectura para los recursos y de lectura y escritura para el propietario de ese recurso. Entendiendo como propietario el usuario que se ha registrado. static/ , almacena todos los archivos para el estilo y formato de los diferentes elementos de la aplicaci´on. Para las siguientes librer´ıas instaladas en el proyecto contiene los ficheros .css , JavaScript (.js) e im´agenes necesarias. Las librer´ıas instaladas son admin, bootstrap4 datetime, bootstrap datepicker plus y rest framework. Los directorios images/ y css/ est´an creados por el desarrollador para la aplicaci´on, contienen las im´agenes y el estilo de la aplicaci´on, respectivamente. 9.3. Configuraci´on de la Raspberry Pi 9.3.1. Hardware y software Raspberry Pi 3 Model B+ Micro SD 16 GB 2018-11-13-raspbian-stretch-full.img 89
Aplicaci´on de alg´un tipo de envoltorio para convertir esta aplicaci´on en una aplicaci´on m´ovil. Desarrollo de una interfaz de gesti´on de usuarios m´as completa. Dise˜no de un modelo de comedero capaz de ser construido por m´odulos. Es decir, que un comedero pueda ser de una raci´on y luego pueda ampliarse a tres raciones f´acilmente. Refrigeraci´on del comedero para evitar que el alimento perezca. A trav´es de c´elulas peltier y sistema aislante tipo PIRALU (panel de espuma r´ıgida de poliisocianurato revestido de aluminio). Implementar un sistema de comunicaci´on alternativo a la conexi´on WiFi, permitiendo as´ı la conexi´on desde lugares remotos (3G, 4G). Implantaci´on de un sensor de presi´on en el comedero para cerciorar que el alimento ha sido expulsado del interior cuando se ha realizado la acci´on de servir. 96
Bibliograf´ıa [1] https://balsamiq.com/. Balsamiq mockups. ´ Ultimo acceso: 10 de junio de 2019. [2] https://djangoproject.com/. Django. ´ Ultimo acceso: 12 de junio de 2019. [3] https://docs.djangoproject.com/en/2.2/topics/auth/passwords/. Password management in django. ´ Ultimo acceso: 12 de junio de 2019. [4] https://docs.djangoproject.com/es/2.2/faq/general/. Django parece ser un framework mvc, pero ustedes llaman al controlador (( vista )) , y a la vista (( plantilla )) . ¿c´omo es que no usan los nombres est´andares?, Marzo 2019. ´ Ultimo acceso: 12 de junio de 2019. [5] https://getbootstrap.com/. Bootstrap. ´ Ultimo acceso: 12 de junio de 2019. [6] https://pypi.org/. django-bootstrap-datepicker-plus. ´ Ultimo acceso: 12 de junio de 2019. [7] https://pypi.org/. django-bootstrap4. ´ Ultimo acceso: 12 de junio de 2019. [8] https://pypi.org. Django jquery. ´ Ultimo acceso: 12 de junio de 2019. [9] https://www.django-rest framework.org/. Django rest framework. ´ Ultimo acceso: 12 de junio de 2019. [10] https://www.jetbrains.com/. The python ide for professional developers. ´ Ultimo acceso: 12 de junio de 2019. [11] https://www.pythonanywhere.com/. Host, run, and code python in the cloud! ´ Ultimo acceso: 12 de junio de 2019. [12] https://www.sqlite.org/index.html. Sqlite. ´ Ultimo acceso: 12 de junio de 2019. 97
98
Anexos 99
Anexo I Ap´endice A Documentaci´on API Rest 101
Hungry Falconry API Rest api-token-auth comederos programacion users none python Authentication Source Code shell javascript python api-token-auth comederos Hungry Falconry API Rest # Install the Python client library $ pip install coreapi Interact create POST /api-token-auth/ Request Body The request body should be a "application/json" encoded object, containing the following items. Parameter Description username required Valid username for authentication password required Valid password for authentication import coreapi # Initialize a client & load the schema document client = coreapi.Client() schema = client.get("http://localhost:8000/docs/") # Interact with the API endpoint action = ["api-token-auth", "create"] params = { "username": ..., "password": ..., } result = client.action(schema, action, params=params) Interact list GET /comederos/ Devuelve una lista de todos los Comederos. import coreapi # Initialize a client & load the schema document client = coreapi.Client() schema = client.get("http://localhost:8000/docs/") # Interact with the API endpoint action = ["comederos", "list"] result = client.action(schema, action) Interact create POST /comederos/ Devuelve una lista de todos los Comederos. Request Body The request body should be a "application/json" encoded object, containing the following items. Parameter Description mac required nombre required tengo_que_servir numRacionesActuales required nuevaProgramacion
Hungry Falconry API Rest api-token-auth comederos programacion users none python Authentication Source Code shell javascript python import coreapi # Initialize a client & load the schema document client = coreapi.Client() schema = client.get("http://localhost:8000/docs/") # Interact with the API endpoint action = ["comederos", "create"] params = { "mac": ..., "nombre": ..., "tengo_que_servir": ..., "numRacionesActuales": ..., "nuevaProgramacion": ..., } result = client.action(schema, action, params=params) Interact read GET /comederos/{mac}/ Devuelve una instancia de Comederos. Path Parameters The following parameters should be included in the URL path. Parameter Description mac required A unique value identifying this comedero. import coreapi # Initialize a client & load the schema document client = coreapi.Client() schema = client.get("http://localhost:8000/docs/") # Interact with the API endpoint action = ["comederos", "read"] params = { "mac": ..., } result = client.action(schema, action, params=params) Interact update PUT /comederos/{mac}/ Edita una instancia de Comedero. Path Parameters The following parameters should be included in the URL path. Parameter Description mac required A unique value identifying this comedero. Request Body The request body should be a "application/json" encoded object, containing the following items. Parameter Description mac required nombre required tengo_que_servir numRacionesActuales required nuevaProgramacion
Hungry Falconry API Rest api-token-auth comederos programacion users none python Authentication Source Code shell javascript python import coreapi # Initialize a client & load the schema document client = coreapi.Client() schema = client.get("http://localhost:8000/docs/") # Interact with the API endpoint action = ["comederos", "update"] params = { "mac": ..., "mac": ..., "nombre": ..., "tengo_que_servir": ..., "numRacionesActuales": ..., "nuevaProgramacion": ..., } result = client.action(schema, action, params=params) Interact partial_update PATCH /comederos/{mac}/ Path Parameters The following parameters should be included in the URL path. Parameter Description mac required A unique value identifying this comedero. Request Body The request body should be a "application/json" encoded object, containing the following items. Parameter Description mac nombre tengo_que_servir numRacionesActuales nuevaProgramacion import coreapi # Initialize a client & load the schema document client = coreapi.Client() schema = client.get("http://localhost:8000/docs/") # Interact with the API endpoint action = ["comederos", "partial_update"] params = { "mac": ..., "mac": ..., "nombre": ..., "tengo_que_servir": ..., "numRacionesActuales": ..., "nuevaProgramacion": ..., } result = client.action(schema, action, params=params) Interact delete DELETE /comederos/{mac}/ Elimina una instancia de Comedero. Path Parameters The following parameters should be included in the URL path. Parameter Description mac required A unique value identifying this comedero.
Hungry Falconry API Rest api-token-auth comederos programacion users none python Authentication Source Code shell javascript python import coreapi # Initialize a client & load the schema document client = coreapi.Client() schema = client.get("http://localhost:8000/docs/") # Interact with the API endpoint action = ["comederos", "delete"] params = { "mac": ..., } result = client.action(schema, action, params=params) Interact read_0 GET /comederos/{mac}{format} Devuelve una instancia de Comederos. Path Parameters The following parameters should be included in the URL path. Parameter Description format required mac required A unique value identifying this comedero. import coreapi # Initialize a client & load the schema document client = coreapi.Client() schema = client.get("http://localhost:8000/docs/") # Interact with the API endpoint action = ["comederos", "read_0"] params = { "format": ..., "mac": ..., } result = client.action(schema, action, params=params) Interact update_0 PUT /comederos/{mac}{format} Edita una instancia de Comedero. Path Parameters The following parameters should be included in the URL path. Parameter Description format required mac required A unique value identifying this comedero. Request Body The request body should be a "application/json" encoded object, containing the following items. Parameter Description mac required nombre required tengo_que_servir numRacionesActuales required nuevaProgramacion
Hungry Falconry API Rest api-token-auth comederos programacion users none python Authentication Source Code shell javascript python import coreapi # Initialize a client & load the schema document client = coreapi.Client() schema = client.get("http://localhost:8000/docs/") # Interact with the API endpoint action = ["programacion", "set > update"] params = { "id": ..., "dia": ..., "hora": ..., "comedero": ..., "servida": ..., } result = client.action(schema, action, params=params) Interact set > partial_update PATCH /programacion/{id}/set Path Parameters The following parameters should be included in the URL path. Parameter Description id required A unique integer value identifying this programacion. Request Body The request body should be a "application/json" encoded object, containing the following items. Parameter Description dia hora comedero servida import coreapi # Initialize a client & load the schema document client = coreapi.Client() schema = client.get("http://localhost:8000/docs/") # Interact with the API endpoint action = ["programacion", "set > partial_update"] params = { "id": ..., "dia": ..., "hora": ..., "comedero": ..., "servida": ..., } result = client.action(schema, action, params=params) Interact set > delete DELETE /programacion/{id}/set Elimina una instancia de Programacion. Path Parameters The following parameters should be included in the URL path. Parameter Description id required A unique integer value identifying this programacion.
Hungry Falconry API Rest api-token-auth comederos programacion users none python Authentication Source Code shell javascript python users import coreapi # Initialize a client & load the schema document client = coreapi.Client() schema = client.get("http://localhost:8000/docs/") # Interact with the API endpoint action = ["programacion", "set > delete"] params = { "id": ..., } result = client.action(schema, action, params=params) Interact list GET /users/ Devuelve una lista de todos los Usuarios. import coreapi # Initialize a client & load the schema document client = coreapi.Client() schema = client.get("http://localhost:8000/docs/") # Interact with the API endpoint action = ["users", "list"] result = client.action(schema, action) Interact read GET /users/{id}/ Devuelve una instancia de Usuario. Path Parameters The following parameters should be included in the URL path. Parameter Description id required A unique integer value identifying this usuario. import coreapi # Initialize a client & load the schema document client = coreapi.Client() schema = client.get("http://localhost:8000/docs/") # Interact with the API endpoint action = ["users", "read"] params = { "id": ..., } result = client.action(schema, action, params=params) Interact read_0 GET /users/{id}{format} Devuelve una instancia de Usuario. Path Parameters The following parameters should be included in the URL path. Parameter Description id required A unique integer value identifying this usuario. format required