179
Diseño de un sistema para la recolección de datos de riego de cultivos: Aplicado al cultivo de la caña de azúcar Ana María Cabrera Agudelo, [email protected] Jose Daniel Angarita Mejía, [email protected] Trabajo de Grado para optar al título de Ingeniero (a) Multimedia otorgado por Universidad de San Buenaventura Colombia Asesor (a): Sandra Patricia Cano Mazuera, Doctora (PhD) en Ciencias de la Electrónica Universidad de San Buenaventura Colombia Facultad de Ingeniería Ingeniería Multimedia Santiago de Cali 2017

Diseño de un sistema para la recolección de datos de riego

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Diseño de un sistema para la recolección de datos de riego de cultivos: Aplicado al cultivo de

la caña de azúcar

Ana María Cabrera Agudelo, [email protected]

Jose Daniel Angarita Mejía, [email protected]

Trabajo de Grado para optar al título de Ingeniero (a) Multimedia otorgado por Universidad

de San Buenaventura Colombia

Asesor (a): Sandra Patricia Cano Mazuera, Doctora (PhD) en Ciencias de la Electrónica

Universidad de San Buenaventura Colombia

Facultad de Ingeniería

Ingeniería Multimedia

Santiago de Cali

2017

1

Citar/How to cite: [1]

Referencia/Reference:

Estilo/Style:

IEEE (2014)

A. M. Cabrera Agudelo y J. D. Angarita Mejía,

“Diseño de un sistema para la recolección de datos de

riego de cultivo: Aplicado a la caña de azúcar”,

Trabajo de grado Ingeniería Multimedia, Cali,

Facultad de Ingeniería, 2017.

Bibliotecas Universidad de San Buenaventura

Biblioteca Digital (Repositorio)

http://bibliotecadigital.usb.edu.co

● Biblioteca Fray Alberto Montealegre OFM - Bogotá.

● Biblioteca Fray Arturo Calle Restrepo OFM - Medellín, Bello, Armenia, Ibagué.

● Departamento de Biblioteca - Cali.

● Biblioteca Central Fray Antonio de Marchena – Cartagena.

Universidad de San Buenaventura Colombia

Universidad de San Buenaventura Colombia - http://www.usb.edu.co/

Bogotá - http://www.usbbog.edu.co

Medellín - http://www.usbmed.edu.co

Cali - http://www.usbcali.edu.co

Cartagena - http://www.usbctg.edu.co

Editorial Bonaventuriana - http://www.editorialbonaventuriana.usb.edu.co/

Revistas - http://revistas.usb.edu.co/

2

Dedicatoria

A mi papá, Mario Alfredo Angarita sin su indispensable ayuda nada habría sido posible. - J.A.

Agradecimientos

Cenicaña

Ingeniero Mario Alfredo Angarita

Ingeniero Pedro Ivan Bastidas

3

TABLA DE CONTENIDO

RESUMEN 14

ABSTRACT 14

I. INTRODUCCIÓN 16

II. PLANTEAMIENTO DEL PROBLEMA 18

A. Antecedentes 18

III. JUSTIFICACIÓN 21

IV. OBJETIVOS 22

A. Objetivo General 22

B. Objetivos Específicos 22

V. METODOLOGÍA 23

VI. MARCO TEÓRICO 25

Recolección de datos 25

Interoperabilidad 25

SOA: Arquitectura Orientada al Servicio 27

Servicios Web 27

Estándares 29

Seguridad 36

Sockets 39

Descripción del Recurso (en inglés, Resource Description) 39

Servicio de Descubrimiento (en inglés, Discovery Service) 39

Representación (en inglés, Representation) 40

Patrones de diseño 40

Patrón de diseño Timestamp Transfer [54] 41

Flyweight 43

4

Factory Method 45

Singleton 46

Template Method 47

Arquitectura de Software 49

Estilos y patrones de Arquitectura 49

Objetivos de la Arquitectura de Software 50

JavaScript frameworks 52

Microprocesador y Sistemas embebidos 53

Microprocesadores 53

Microprocesadores en el riego 54

Sistemas embebidos 55

Sistemas de riego de cultivos industriales 55

Tipos de riego 55

Tipos de Suelo 56

Variables de estudio 58

Dependencias entre variables 61

Cultivo de la Caña de Azúcar 62

Sensores profesionales 63

Tarjetas para la adquisición o captura de datos 66

Sensores académicos 68

VII. ANÁLISIS Y DESARROLLO 72

Análisis de otros sistemas de recolección de datos de riego de cultivo 72

Captación de datos 72

Visualización de reportes 73

Configuración inicial de un cultivo o lote 73

Comparación de estilos de arquitectura de servicios web 75

SOAP y la colección WS-* 75

5

REST 76

REST vs SOAP 77

Análisis de estilos de arquitectura de servicios web 88

Requisitos del sistema 90

Requisitos de usuario 90

Requisitos de hardware 92

Requisitos de software 93

Propuesta de Diseño del Sistema 97

Formas de captación del sistema 97

Tipos de Usuario (Perfiles) 98

Componentes del sistema 99

Arquitectura del sistema 100

Navegador web 100

Aplicación móvil 101

Arduino 101

Sensores 102

Modulo wifi 102

Servicio web 102

Base de datos 103

Diseño del sistema 105

Casos de uso 105

Diagramas de secuencias 117

Diagramas de procesos 121

Modelo de datos 122

Patrones de Diseño 134

Identificación de recursos, diseño de URI 134

Descripción de métodos 135

6

Listado de respuestas 136

Descripción del servicio y documentación 137

Descubrimiento del servicio 140

Diseño de Hardware 141

Características del sistema 144

Implementación del Sistema 145

Trigger Lote 145

Trigger Variable 145

Añadir Variable 146

VIII. PRUEBAS Y RESULTADOS 148

Pruebas manuales 148

Pruebas automatizadas 153

IX. CONCLUSIONES 158

X. RECOMENDACIONES 160

REFERENCIAS 161

ANEXOS 169

7

LISTA DE TABLAS

Tabla 1: Seguridad al nivel de aplicación. Tomado de [63]

Tabla 2: Estilos y patrones de arquitectura. Tomado de [92]

Tabla 3: Objetivos de la Arquitectura de Software. Tomado de [92]

Tabla 4: Popularidad de JavaScript frameworks en Github

Tabla 5: Tipos de suelo

Tabla 6: Dependencia de variables

Tabla 7: Comparación captación de datos de sistemas existentes

Tabla 8: Comparación visualización de reportes en sistemas existentes

Tabla 9: Comparación de configuración de cultivo o lote en sistemas existentes

Tabla 10: Comparación de Principios. Tomado de [36]

Tabla 11: Comparación conceptual. Tomado de [36]

Tabla 12: Comparación tecnológica. Tomado de [36]

Tabla 13: Resultados de rendimiento de servicios web SOAP y REST en la computación

móvil. Tomado de [58]

Tabla 14: Diferencias percibidas. Tomado de [61]

Tabla 15: Idoneidad para casos de uso. Tomado de [61]

Tabla 16: Directrices para la elección de una arquitectura de servicios. Tomado de [61]

Tabla 17: Requisitos de Capacidad de usuario del sistema

Tabla 18: Requisitos de restricciones impuestas al usuario en el sistema

Tabla 19: Requisitos de hardware

Tabla 20: Requisitos funcionales del sistema

Tabla 21: Requisitos de interfaz e interacciones

Tabla 22: Requisitos de operación

Tabla 23: Requisitos de recursos

Tabla 24: Requisitos de seguridad

Tabla 25: Flujo de eventos - Iniciar sesión

Tabla 26: Flujo de eventos - Crear cuenta

Tabla 27: Flujo de eventos - Añadir cuenta

Tabla 28: Flujo de eventos - Eliminar cuenta

Tabla 29: Flujo de eventos - Listar usuarios de la compañía

8

Tabla 30: Flujo de eventos - Salir de la plataforma

Tabla 31: Flujo de eventos - Añadir Cultivo

Tabla 32: Flujo de eventos - Actualizar Cultivo

Tabla 33: Flujo de eventos - Eliminar Cultivo

Tabla 34: Flujo de eventos - Añadir sensor a una variable de un cultivo

Tabla 35: Flujo de eventos - Cambiar sensor de un cultivo a otro

Tabla 36: Flujo de eventos - Eliminar sensor de un cultivo

Tabla 37: Flujo de eventos - Eliminar Cultivo

Tabla 38: Flujo de eventos - Eliminar valor a una variable de un cultivo

Tabla 39: Flujo de eventos - Buscar Cultivo por nombre

Tabla 40: Flujo de eventos - Comparar valores de variables en dos gráficas

Tabla 41: Flujo de eventos - Consultar un cultivo específico

Tabla 42: Campos del Cultivo

Tabla 43: Campos del Lote

Tabla 44: Campos de variables

Tabla 45: Campos de valor captado

Tabla 46: Perfiles del sistema

Tabla 47: Campos de sensor

Tabla 48: Campos de Variables del sistema

Tabla 49: Capos de Variables del sistema y personalizadas

Tabla 50: Campos de usuarios

Tabla 51: CRUD correspondiente con HTTP métodos

Tabla 52: Catálogo de respuestas HTTP habituales

Tabla 53: Tiempos de respuesta solicitud ‘Crear un nuevo cultivo’

Tabla 54: Tiempos de respuesta solicitud ‘Editar un cultivo existente’

Tabla 55: Tiempo de respuestas solicitud ‘Seleccionar 10 cultivos’

Tabla 56: Tiempos de respuesta solicitud ‘Eliminar Cultivo’

Tabla 57: Tiempos de respuesta solicitud ‘Eliminar Cultivo’

Tabla 58: Tiempos de respuesta solicitud ‘Editar una variable’

Tabla 59: Tiempos de respuesta solicitud ‘Obtener una variable’

Tabla 60: Tiempos de respuesta solicitud ‘Crear una variable’

Tabla 61: Tiempos de respuesta solicitud ‘Modificar o agregar campos a una variable’

Tabla 62: Pruebas con Arduino, sensor humedad suelo, lluvia y módulo WiFi

9

LISTA DE FIGURAS

Figura 1: Funcionamiento de los servicios web usando SOAP. Tomada de [5]

Figura 2: Arquitectura SOAP. Tomado de [3]

Figura 3: Arquitectura de los mensajes SOAP. Tomado de [5]

Figura 4: Arquitectura de REST. Tomado de [62]

Figura 5: Ejemplo de documento XML, Tomado de [50]

Figura 6: Ejemplo 2-4 definición de interfaz. Tomado de [51]

Figura 7: Relación entre UDDI y WSDL. Tomado de [53]

Figura 8: Modelo Orientado al Recurso. Tomado de [33]

Figura 9: Representación visual del patrón ‘Timestamp Transfer’. Tomado de [54]

Figura 10: Diagrama UML del patrón Flyweight. Tomado de [42]

Figura 11: Diagrama UML del método de fábrica. Tomado de [42]

Figura 12: Diagrama UML del patrón Singleton. Tomado de [42]

Figura 13: Diagrama UML del método de modelado (Template Method). Tomado de [42]

Figura 14: Tendencia de uso de librerías JavaScript del 2009 a 2017, sacado de google trends

compara: Angular, React, Ember y Polymer

Figura 15: Diagrama simplificado de un microprocesador. Tomado de [97]

Figura 16: Componente de un sistema embebido [99]

Figura 17: Tensiometro. Tomado de [82]

Figura 18: Sonda de neutrones. Tomado de [85]

Figura 19: Tarjeta Goblin 2. Tomado de [79]

Figura 20: Tarjeta Arduino UNO. Tomado de [76]

Figura 21: Sensor Humedad Suelo/Módulo HL-69. Tomado de [86]

Figura 22: Sensor de lluvia/Módulo YL-83. Tomado de [87]

Figura 23: Sensor de temperatura para Arduino

Figura 24: Reporte Wisecrop. Tomado de www.wisecrop.com

Figura 25: Percepción de Accesibilidad al Aprendizaje. Tomado de [61]

Figura 26: Percepción de facilidad de aprendizaje. Tomado de [61]

Figura 27: Tendencia de uso de lenguajes de SW entre: NodeJs, Laravel, Java EE 6, Django,

Ruby and rails. Tomado de Google Trends.

Figura 28: Tendencia de uso de frameworks Node.JS que contiene un conjunto de sólidas

características para las aplicaciones web entre: Express.js, koa.js, hapi.js y reatify,js. Tomado

10

de Google Trends

Figura 29: Arquitectura del sistema

Figura 30: Casos de uso aplicaciones

Figura 31: Inicio de sesión y permanecer logueado

Figura 32: Crear cuenta con compañia nueva

Figura 33: Consultar un cultivo específico

Figura 34: Consultar una variable de un cultivo específico

Figura 35: Muestra dos gráficas con diferentes meses

Figura 36: Añadir valor a una variable de un cultivo específico de forma manual

Figura 37: Añadir un sensor a una variable de un cultivo específico

Figura 38: Diagrama de procesos crear, editar y eliminar cultivo

Figura 39: Diagrama de procesos crear, eliminar, editar variable y añadir, eliminar y

modificar sensor

Figura 40: Diagrama de procesos inicio de sesión y crear cuenta

Figura 41: Esquema base de datos

Figura 42: Estructura Cultivo

Figura 43: Estructura Lote

Figura 44: Estructura Variables

Figura 45: Estructura valor captado

Figura 46: Esquema de Perfiles del sistema

Figura 47: Estructura de un sensor

Figura 48: Estructura variables del sistema

Figura 49: Estructura de una variable del sistema

Figura 50: Estructura Usuarios

Figura 51: Almacenamiento de información, actualización, proceso de detección y

eliminación de información. Tomado de [66]

Figura 52: Módulo WiFi ESP8266

Figura 53: Diagrama de conexión de sensor humedad de suelo al Arduino UNO. Tomado de

[88]

Figura 54: Diagrama de conexión sensor de lluvia al Arduino UNO. Tomado de [87]

Figura 55: Diagrama de conexión de módulo WiFi ESP8266 al Arduino UNO. Tomado de

[89]

Figura 56: Trozo del trigger lote

11

Figura 57: Trozo del trigger variable

Figura 58: Trozo añadir variable al sistema

Figura 59: Prueba Arduino - Sensor Humedad del Suelo

Figura 60: Prueba Arduino - Sensor de Lluvia

12

LISTA DE ACRÓNIMOS

API → Application Programming Interface (Interfaz de programación de aplicaciones)

CE → Conductividad Eléctrica

CRUD → Create, Read, Update and Delete (Crear, Leer, Actualizar y Borrar)

DDD → Domain Driven Design (Diseño orientado al dominio)

EFX → Efficient XML (XML Eficiente)

FAO → Food Agriculture Organisation (Organización de Agricultura y Alimentación)

HTTP → Hypertext Transfer Protocol (Protocolo de Transferencia de Hypertexto)

HTTPS → Hypertext Transfer Protocol Secure (Protocolo Seguro de Transferencia de

Hypertexto)

IoT → Internet of Things (Internet de las Cosas)

JSON → JavaScript Object Notation

LARA → Lámina Rápidamente Aprovechable

MIME → Multipurpose Internet Mail Extensions

QoS → Quality of Service (Calidad de Servicio)

REST → Representation State Transfer

ROM → Resource Oriented Model (Modelo Orientado a Recurso)

RPC → Remote Procedure Call (Llamada a Procedimiento Remoto)

SOA → Service Oriented Architecture ( Arquitectura Orientada al Servicio)

SOAP → Simple Object Access Protocol

SOC → System-on-chip (Sistema-en-chip)

SSL → Secure Socket Layer

SW (WS) → Servicio Web (Web Service)

TAG → Grupo Técnico de Arquitectura

TCP → Transmission Control Protocol (Protocolo de Control de Transmisión)

TDR → Time Domain Reflectometry (Reflectómetro de dominio de tiempo)

13

TLS → Transport Layer Security

UDDI → Universal Description, Discovery and Integration

UDP → User Datagram Protocol (Protocolo de datagramas de usuario)

URI → Uniform Resource Identifier (Identificador uniforme de recursos)

USDA → United States Department of Agriculture (Departamento de agricultura de los

Estados Unidos)

W3C → World Wide Web Consortium (Consorcio de la World Wide Web)

WADL → Web Application Description Language

WSDL → Web Services Description Language

XML → Extensible Markup Language

14

RESUMEN

El presente proyecto tiene como objetivo diseñar un sistema para la recolección de datos de

riego de cultivo aplicado al cultivo de la caña de azúcar.

Sirve para recolectar información del sistema de riego aplicado en el cultivo de caña de azúcar

por medio de sensores y/o usuarios que registren el estado del cultivo diariamente, este

procura satisfacer una necesidad, en este caso poder recolectar información sin importar que

el sistema sea utilizado con dispositivos de diferentes marcas. Ahora bien la industria podrá

obtener los datos del riego que está buscando por medio de múltiples opciones.

Para que el objetivo del proyecto sea cumplido requiere un funcionamiento uniforme de todas

las partes que lo componen, este funciona a través de aplicaciones que permiten el ingreso de

datos al sistema, concede añadir nuevas variables de cultivo y sensores, además ofrece reporte

de la información obtenida de las variables existentes, dicha información facilita el análisis

del estado del cultivo. No obstante, cuenta con la integración de elementos de hardware para

emular el envío de datos al Servicio Web desde un lote perteneciente al cultivo, empleando un

Arduino UNO con módulo wifi y sensores académicos.

Palabras claves: Irrigación, Diseño de Sistema, Cultivo, Recolección de datos

ABSTRACT

The present project aims to design a system for the collection of crop irrigation data applied to

the cultivation of sugarcane.

It is used to collect information about the irrigation system applied in the sugarcane

cultivation by means of sensors and / or users that record the state of the crop daily, this seeks

to satisfy a need, in this case to be able to collect information regardless of whether the

system is Used with devices of different brands. Now the industry can get the irrigation data

you are looking for through multiple options.

15

In order for the objective of the project to be fulfilled requires a uniform operation of all its

component parts, it works through applications that allow the input of data to the system, adds

new crop variables and sensors, and also provides information reporting obtained from the

existing variables, this information facilitates the analysis of the state of the crop. However, it

has the integration of hardware elements to emulate the sending of data to the Web Service

from a lot belonging to the crop, using an Arduino UNO with wifi module and academic

sensors.

Keywords: Irrigation, System Design, Cultivation, Data Collection

16

I. INTRODUCCIÓN

Un sistema para la recolección de datos es una herramienta que permite la centralización de la

información para así facilitar el acceso a ésta desde múltiples puntos autenticados. Mediante

un servicio web, sensores de fenómenos físicos, la red y aplicaciones de usuario se logra una

exitosa exposición y comunicación de los datos relevantes que alimentan el sistema. Estos

servicios cumplen unas acciones y tareas específicas que pueden ser integradas en

aplicaciones externas y así permitir a un usuario hacer uso de éstas. La necesidad de

involucrar un sistema de recolección de datos se puede aplicar en prácticamente todas las

industrias y/o aspectos de la vida, ya que la tendencia global es que el acceso a la información

sea cada vez más ubicua.

Por otro lado, los sistemas orientados a cultivos por riego son sistemas relacionados con el

medio ambiente y la inclusión de las tecnologías de la información, dentro de estos sistemas

se está expandiendo de manera rápida con el propósito de capturar datos capaz de ofrecer

información que le permita al usuario final tomar una decisión más rápida.

Este fenómeno no es diferente para la industria del riego, los sistemas de visualización de

variables físicas que los traducen en muchos casos a señales eléctricas, es decir, los sensores,

aportan un mecanismo de control y monitoreo para dicha industria. Este crecimiento en

adquisición de información ha tenido como consecuencia una extensa cantidad de datos

heterogéneos, lo cual ha generado a su vez una necesidad de procesamiento y análisis de esta

misma para poder convertirla en información útil para facilitar el proceso de toma de decisión

del usuario final.

En este trabajo se presenta un sistema de recolección de datos que le permite a una máquina

externa enviar datos relevantes por medio de un servicio web durante el proceso de riego de

cultivos, o por medio de recolección de información a través de sensores de lluvia o humedad

para medir el comportamiento e impacto en el suelo. Este sistema se aplicará a un caso de

estudio en el cultivo de la caña de azúcar para que dichos datos puedan ser almacenados, y

posteriormente accedidos.

17

Los sistemas de comunicación inalámbricos como radio, bluetooth, wifi, etc han evolucionado

mucho a lo largo de los años apoyados en el progreso e interconexión de la internet. Este

cambio no ha sido ajeno para el ambiente empresarial. En la industria del riego de cultivos se

ha realizado mucho avance para el monitoreo y sensado de estos. Sin embargo hay un vacío

en un sistema que ofrezca un lugar centralizado para el almacenamiento de los datos que estos

sistemas de monitoreo pueden obtener para poder ser accedido desde cualquier dispositivo,

ejecutando cualquier sistema operativo en cualquier ubicación que sea requerido.

18

II. PLANTEAMIENTO DEL PROBLEMA

Los servicios web permiten una comunicación y acceso a la información desde cualquier

lugar con acceso a internet, como lo mencionan en [69] “El principal objetivo de un Servicio

Web es brindar interoperabilidad entre aplicaciones que han sido construidas en sistemas

diferentes, con tipos diferentes de middleware, utilizando diferentes almacenes de datos”. Los

sistemas de recolección físicos tienen el inconveniente de que en su gran mayoría son

desarrollados por privados que manejan protocolos y métodos de comunicación particulares

para acceder a estos, dificultando así la integración de estos a sistemas para una visualización

comprensiva de estos datos.

Se hace necesario un sistema con una base de datos para centralizar todos los datos que son

recolectados y así poder ser consumidos por múltiples clientes autorizados para obtener estos;

Por lo que se propone diseñar un sistema de recolección de datos que permita realizar un

almacenamiento de variables físicas capturadas en el proceso del riego de un cultivo y así

poder ser accedidos por cliente (s) externo (s) y habilitar una obtención, visualización y/o

manipulación de estos mismos.

A. Antecedentes

Un sistema de recolección de datos es un conjunto de componentes, aplicaciones y/o

tecnologías que intercambian datos entre sí con el objetivo de ofrecer unos servicios o

resultados específicos. Estos sistemas proporcionan mecanismos de comunicación estándar

entre diferentes aplicaciones, que interactúan entre sí para presentar información dinámica al

usuario. Por medio de un servicio web y elementos físicos como sensores para capturar

información se presenta una buena herramienta para centralizar y exponer los datos del

sistema.

Se han realizado investigaciones relacionados con el diseño de servicios web, como el trabajo

presentado por Lozano [67], donde describe el uso de un servicio web para el control remoto

de aparatos electrónicos por medio de teléfonos inteligentes para los sistemas operativos

Android. En este trabajo los autores propusieron un servicio web de tipo REST elegido por

ser muy sencillo e intuitivo y además, por su característica de ser más rápido en la

19

comunicación entre aplicaciones, que interactúan entre sí. Así mismo, usaron sockets con el

protocolo UDP, los cuales se caracterizan por no necesitar establecer una conexión, ya que

tanto el servidor como el cliente escucha en un puerto y en cualquier momento cualquiera de

ellos puede enviar un mensaje al otro. El autor desarrolló una aplicación que simula el

funcionamiento de una bombilla por medio de un servicio web, el cual envía datos al servidor

a través de sockets, usando mensajes de control. Con este trabajo concluyeron que el uso de

dispositivos móviles para el control remoto de aparatos electrónicos ayuda al ahorro de

energía en el hogar.

Por otro lado, un trabajo propuesto por Johnsrud Lars [68], presenta un análisis de tipos de

compresión de documentos XML para la efectividad de los servidores en dispositivos

móviles. En este documento se estudian dos tipos de compresión el zLIB (biblioteca de

compresión de datos XML de software libre) y EFX, los autores demuestran que estos dos

presentan casi el mismo tiempo de respuesta, siendo el EFX ligeramente mejor. Sin embargo,

estos formatos les toma la mitad de tiempo de respuesta de un documento XML sin

compresión. Con este experimento lograron concluir que el uso de compresores de XML hace

que la transmisión de datos sea más rápida en los servidores web que prestan servicios a

dispositivos móviles y además, sugieren usar el EFX pues proporciona mejor rendimiento y es

aconsejado por W3C.

También se han desarrollado diversas herramientas para monitorear los sistemas de riego,

como Ranch Systems Internet Software [71], es un software de recolección de datos de un

sistema de riego. En esta aplicación se puede monitorear el estado de la humedad del suelo,

temperatura, bombas de agua. Éste funciona con un dispositivo en el campo, el cual se

encarga de recolectar datos de sensores integrados con el sistema de riego, que luego enviará

a un servidor que se encargará de almacenar y analizar los datos de cada variable que

posteriormente se podrán visualizar en una aplicación web en un ordenador o si los datos

lanzan una alerta se enviará un mensaje de texto al celular del operador. Para poder tener o

usar este software el sistema de riego debe ser de Ranch Systems.

Otra herramienta ClimateMinder Technology [72], es un software de recolección de datos

para sistemas de riego. Con el que se puede recolectar datos de la humedad del suelo,

temperatura, concentración de sal en el suelo. Éste funciona en tres partes, primero se tiene

20

los sensores y controladores los cuales contienen integrado el ClimateMinder Wireless

Network para comunicarse con un dispositivo con ClimateMinder Mobile Software, el cual se

encarga de enviar datos determinados de los sensores y controladores a un servidor al mismo

tiempo de recibir órdenes del servidor para cambiar los estados de los controladores. El

servidor se encarga de almacenar, leer, actualizar, analizar y enviar datos y respuestas, para

visualizar los datos se debe tener un dispositivo con acceso a internet e ingresar a la

aplicación web. Para poder usar esta herramienta, todo el sistema de riego (estaciones

meteorológicas, sensores, etc.) debe ser ClimateMinder.

Las herramientas mencionadas anteriormente, pueden ser muy útiles para la recolección de

datos en los sistemas de riego en un cultivo, pero estos programas requieren para su

funcionamiento que el sistema de riego sea de su misma compañía para poder interactuar con

los traductores que envían los datos a los servidores. En Colombia la mayoría de los

agricultores no tienen los recursos económicos para solventar todo un sistema de riego de una

misma compañía, por lo que las herramientas no son usadas y emplean el monitoreo

tradicional por medio de plantillas. Por lo que, una alternativa podría tener una aplicación

móvil que pueda almacenar y visualizar los datos, el cual sea un medio de apoyo tecnológico.

Aclaración: En la sección Análisis de otros sistemas de recolección de datos de riego de

cultivo, se extiende en los antecedentes y se realiza un análisis de la captación de datos,

visualización de reportes y configuración inicial de un cultivo o lote de sistemas existentes.

21

III. JUSTIFICACIÓN

El sistema de recolección de datos tiene como beneficio el desacoplamiento de las interfaces

de las implementaciones, consideraciones de plataforma y facilidad de acceso, brindando así

la capacidad de realizar un enlace de servicio dinámico y acercarse cada vez más a una

interoperabilidad entre lenguajes y entre plataformas.

Colombia es un país privilegiado, en cuanto a la oferta del recurso hídrico. La precipitación

media supera ampliamente los estándares de Suramérica y del mundo. Pero el problema de la

disponibilidad del agua para las plantas es que está muy mal distribuida moviéndose entre

épocas de exceso y época de déficit extremos, lo cual implica que una producción agrícola

exitosa necesita de un buen sistema de riego.

Dichos sistemas de riego pueden ser optimizados mediante el monitoreo y control, a través de

estos se pueden obtener datos para ser analizados posteriormente por agricultores u otros

perfiles involucrados en esa industria. Con la construcción de un Servicio Web que brinde un

acceso ubicuo, remoto y accesible se puede brindar una herramienta para facilitar el trabajo en

la industria del riego y cultivos en general.

Un sistema de bajo costo, basado en sensores de fácil reemplazo, software libre y con un

servicio de fácil acceso para cualquier sistema operativo, lenguaje o arquitectura con

capacidad de conexión a internet brinda beneficios para agricultores en Colombia ya que

puede ser usado para la optimización y eventual automatización de todo el sistema de riego.

22

IV. OBJETIVOS

A. Objetivo General

Diseñar un sistema para la recolección de datos de riego de cultivo aplicado al cultivo de la

caña de azúcar.

B. Objetivos Específicos

● Identificar y seleccionar las variables más representativas para los sistemas de riego en

el cultivo de caña de azúcar.

● Analizar las diferentes tecnologías que existen para la creación de un sistema para la

recolección de datos de riego de cultivo.

● Identificar los diferentes aspectos que deben considerarse para soportar las diferentes

formas de recolección de datos de un sistema de riego de cultivo.

● Implementar el diseño de recolección de datos para cultivos de riego.

● Evaluar el diseño a través de un prototipo funcional aplicado a un caso de estudio en

Colombia con el cultivo de la caña de azúcar.

23

V. METODOLOGÍA

Este proyecto basa su metodología principalmente en el método científico ya que para

identificar y seleccionar las variables más representativas en los sistemas de riego, analizar las

diferentes tecnologías existentes para la recolección de datos e identificar los diferentes

aspectos involucrados en los sistemas de riego se requiere de una profunda investigación

bibliográfica para poder cumplir cada uno de estos objetivos.

Para identificar y seleccionar las variables más representativas para los sistemas de riego en el

cultivo de la caña de azúcar, se investigará en textos académicos y profesionales de la

industria del riego sobre cuales son las variables involucradas en el proceso de riego del

mencionado cultivo y en base a otros estudios se identificarán las más representativas para ser

incluidas en el diseño del sistema.

Para el análisis de tecnologías existentes y los aspectos involucrados en la recolección de

datos de sistemas de riego de cultivo, se realizará una investigación de las diferentes opciones

existentes para llevar a cabo el diseño del sistema, posteriormente se hará una comparación

entre estás, seguido de un análisis y final decisión de cual tecnología usar en cada componente

del sistema.

La implementación del diseño se llevará a cabo siguiendo los patrones de diseño pertinentes

para cada caso específico, estos se definirán realizando una investigación de cada uno y

posterior análisis para establecer el mejor uso de cada patrón en los componentes del sistema.

Debido a la naturaleza de este proyecto, la evaluación del sistema se llevará a cabo mediante

el método empírico - análitico, el cual se basa en la experimentación y lógica empírica. La

razón de ser de esta investigación es ofrecer a la industria con un sistema que sea flexible,

escalable, usable e integrable a cualquier sistema existente, por lo cual se realizarán pruebas

de este alimentando el mismo con datos reales obtenidos de profesionales de la industria. De

igual manera se llevará a cabo un experimento con una tarjeta programable y sensores de

fenómenos físicos para evaluar el sistema con el ingreso automático de datos en tiempo real.

24

25

VI. MARCO TEÓRICO

A continuación se definen algunos conceptos que están relacionados con la propuesta del

proyecto, en el diseño de un sistema de recolección de datos aplicado a un caso de estudio

como el cultivo de la caña de azúcar

Recolección de datos

La recopilación de datos es el proceso de recolección y medición de información sobre las

variables seleccionadas de forma sistemática y establecida, que permite responder a las

preguntas pertinentes y evaluar los resultados. El componente de recopilación de datos de la

investigación es común a todos los campos de estudio incluyendo las ciencias físicas y

sociales, humanidades y negocios. Ayuda a científicos y analistas a recolectar los puntos

principales como información recopilada. Aunque los métodos varían según la disciplina, el

énfasis en la recolección exacta y honesta sigue siendo el mismo. El objetivo de toda la

recolección de datos es capturar evidencia de calidad que luego se traduce en análisis de datos

ricos y permite construir una respuesta convincente y creíble a las preguntas que se han

planteado. [90]

Interoperabilidad

La interoperabilidad se define como la capacidad que tiene un producto o un sistema, cuya

interfaces son totalmente conocidas, para funcionar con otros productos o sistemas existentes

o futuros y eso sin restricción de acceso e implementación. [13]

En el contexto de interoperabilidad en los sistemas de información Lynch Cliford lo explica

como: “la habilidad de una máquina para interactuar provechosamente con otras máquinas

de manera casual y automática, esto sin planeación o negociación previa entre las

organizaciones que operan estas máquinas”. [13] Otras definiciones aceptadas son:

“Interoperabilidad es la posibilidad de que distintos tipos de ordenadores, redes, sistemas

operativos, y aplicaciones trabajen juntos de forma eficaz, sin comunicación previa, de tal

26

forma que puedan intercambiar información de manera útil y con sentido. Hay tres aspectos

que se deben tener en cuenta en la interoperabilidad: semántica, estructural y sintáctica”.

[46]

La interoperabilidad es la capacidad de sistemas múltiples con diversas plataformas de

hardware y de software, estructuras de datos e interfaces, para intercambiar datos con la

pérdida mínima de contenido y de funcionalidad. [13]

La interoperabilidad está relacionada con la posibilidad de que los sistemas de las

Administraciones Públicas trabajen juntos de forma satisfactoria y productiva

independientemente de la tecnología o la aplicación que se utilice, o qué proveedor ha

suministrado el sistema subyacente. [48]

De la misma forma, el El uso de metadatos en la administración electrónica española: los

retos de la interoperabilidad [70] define la interoperabilidad como “la capacidad de los

sistemas de tecnologías de la información y las comunicaciones, y de los procesos

empresariales a los que apoyan, de intercambiar datos y posibilitar la puesta en común de

información y conocimiento”. [48]

El Marco Europeo de Interoperabilidad, una iniciativa para facilitar la interoperabilidad de

servicios y sistemas a nivel pan-europeo, define la interoperabilidad como “la capacidad de

los sistemas de Tecnologías de Información y Comunicación (TIC) y de los procesos de

negocio que soportan, para intercambiar datos y compartir información y conocimientos”.

[13]

Basado en la recolección bibliográfica realizada en [13, 46, 48], se puede definir la

interoperabilidad como: “La capacidad de un sistema de información de comunicar y

compartir datos de forma efectiva (con la mínima o nula pérdida de su valor y funcionalidad),

con uno o varios sistemas de información (siendo generalmente estos sistemas completamente

heterogéneos en sus protocolos de recolección y distribución de datos además, de estar

geográficamente distantes), mediante una interconexión libre, automática y transparente, sin

dejar de utilizar en ningún momento las interfaces del sistema propio”.

27

Sin interoperabilidad no hay Servicios Web, ya que sin éste el servicio perdería su propósito.

Los Servicios Web se están convirtiendo en tecnologías para implementar SOAs. Ellos

simplifican la interoperabilidad permitiendo una mayor integración de aplicación. Proveen el

medio para presentar aplicaciones existentes para que los desarrolladores las puedan acceder a

través de lenguajes y protocolos estándar. La estandarización simplifica la interoperabilidad;

en vez de interactuar con sistemas heterogéneos, cada uno con diferentes formato de datos,

protocolos, etc., las aplicaciones pueden interactuar con sistemas más homogéneos.

SOA: Arquitectura Orientada al Servicio

Una SOA es un paradigma para organizar y utilizar capacidades distribuidas que pueden estar

bajo el control de diferentes dominios de propiedad. [30]

Es un estilo arquitectónico que es compatible con la orientación del servicio (service-

orientation). La orientación a servicios es una manera de pensar en términos de servicios el

desarrollo basado en el servicio y los resultados del servicio.

Un servicio puede definirse como:

● Una representación lógica de una actividad repetible que tiene un resultado esperado

específico.

● Es auto-contenido

● Puede estar compuesto de otros servicios

● Una “caja negra” para los consumidores del servicio [33]

El principal beneficio de la arquitectura SOA es que provee un simple paradigma escalable

para la organización de grandes sistemas que requieren interoperabilidad para realizar una

tarea. SOA es escalable porque hace el menor número de suposiciones sobre la red y

minimiza suposiciones de confianza que se hacen a menudo de manera implícita en los

sistemas de menor escala. [30]

Servicios Web

Los servicios web son un conjunto de protocolos y estándares que sirven para intercambiar

datos entre aplicaciones, además permite utilizar distintas aplicaciones software desarrolladas

28

en lenguajes de programación diferentes y ejecutadas desde cualquier plataforma para

intercambiar datos.

Un servicio web es un método de comunicación entre dos dispositivos electrónicos a través de

una red, también es definido en [1] como un sistema de software diseñado para soportar

interacciones interoperables máquina a máquina a través de una red.

Esta tecnología utiliza un conjunto de protocolos y estándares que le permiten intercambiar

datos entre aplicaciones sin importar el lenguaje o las características físicas del sistema donde

se ejecuta cada aplicación, entre estos estándares encontramos a SOAP1. De igual manera

aunque todavía no ha sido estandarizado, se encuentra REST2 . Ambos servicios permiten que

las máquinas tengan un lenguaje en común, por el cual puedan comunicar información

permitiendo a través de acciones como obtener, poner, borrar, entre otras.

Estos protocolos de servicios funcionan exponiendo diferentes acciones, ya sean de entrada o

salida mediante estándares web W3C [5], como se observa en la Figura 1, el cual muestra el

funcionamiento de un servicio web, aplicado a diferentes contexto de uso.

Figura 1: Funcionamiento de los servicios web usando SOAP. Tomada de [5]

1 SOAP: http://www.w3.org/TR/soap/

2 REST: http://www.w3.org/TR/ws-arch/#relwwwrest

29

La Figura 1, muestra un usuario (que juega el papel de cliente dentro de los Servicios Web), a

través de una aplicación, solicita información sobre un viaje que desea realizar haciendo una

petición a una agencia de viajes que ofrece sus servicios a través de Internet. La agencia de

viajes ofrecerá a su cliente (usuario) la información requerida. Para proporcionar al cliente la

información que necesita, esta agencia de viajes solicita a su vez información a otros recursos

(otros Servicios Web) en relación con el hotel y la compañía aérea. La agencia de viajes

obtendrá información de estos recursos, lo que la convierte a su vez en cliente de esos otros

Servicios Web que le van a proporcionar la información solicitada sobre el hotel y la línea

aérea. Por último, el usuario realizará el pago del viaje a través de la agencia de viajes que

servirá de intermediario entre el usuario y el servicio Web que gestionará el pago.” [2]

En el proceso descrito se observa que se incluyen un conjunto de tecnologías, las cuales hacen

posible la comunicación entre dos sistemas. El estándar SOAP [3] es usado para que el

servicio web sea aplicado a diferentes contextos, como: hotel, agencia de viajes, entre otros.

Estándares

SOAP

En la Figura 2, se observa la arquitectura de la colección WS-* con los estándares actuales y

especificaciones Web emergentes que IBM, Microsoft y otras compañías importantes de TI

han desarrollado. SOAP proporciona un sobre para el envío de mensajes de servicios web a

través de Internet.

30

Figura 2: Arquitectura SOAP. Tomado de [3]

Como se observa en la Figura 3, el sobre SOAP contiene dos partes: Una cabecera opcional

que proporciona información de autenticación, codificación de los datos o como se debe

procesar el mensaje. y el cuerpo del mensaje que puede definirse usando WSDL.

Figura 3: Arquitectura de los mensajes SOAP. Tomado de [5]

Es un protocolo simple y ligero para la comunicación, en un entorno distribuido o

descentralizado. Las operaciones son definidas como puerto WSDL. La comunicación (Figura

31

3) se realiza mediante mensajes codificados en XML y transportado un protocolo de

transporte HTTP. SOAP se define como un mecanismo para el intercambio de información,

estructurada y tipada, entre pares de aplicaciones en un entorno distribuido. [11] Es posible

ver a SOAP desde distintos puntos de vista [49]:

● Como un mecanismo para invocar métodos en servidores, servicios, o componentes,

para lo cual se define en la especificación una metodología para encapsular e

intercambiar invocaciones RPC, en los mensajes, usando la extensibilidad y

flexibilidad que proporciona XML.

● Como un protocolo para intercambio de mensajes (sincrónicos o asincrónicos).

● Como un formato para intercambio de documentos XML.

REST

Es un estilo de arquitectura como se muestra en la Figura 4, creado por el TAG del consorcio

W3C en paralelo con HTTP/1.1. Esta arquitectura fue diseñada especialmente para la

comunicación entre navegadores y servicios web cuyo término fue acuñado por Roy Thomas

Fielding. Al ser REST un estilo de arquitectura, lo cual se define como un conjunto

coordinado de restricciones que controlan el funcionamiento y las características de los

elemento de la arquitectura y permiten las relaciones de unos elementos con otros. [12]

La mayoría de APIs REST están basadas en protocolo de transporte HTTP, lo que infiere que

todo el control de transmisión de información se hace a través de las acciones POST, GET

PUT, DELETE, que sirven para enviar, obtener, reemplazar y eliminar. Este estándar puede

usar tanto XML como JSON como formato de intercambio de mensajes, siendo JSON el más

rápido y entendible para el humano de los dos.

32

Figura 4: Arquitectura de REST. Tomado de [62]

Los servicios web se pueden basar en SOAP o REST. SOAP es un estilo estandarizado

además, de ser más seguro que REST pero el uso de este requiere mayor tiempo de desarrollo

debido a su nivel de complejidad. Por tanto en el desarrollo de aplicaciones ágiles se emplean

servicios web basados en REST para mostrar cantidad de datos masivos. Esto también se debe

al uso de mensajes en formato XML (usados en SOAP) los cuales son complejos comparados

con los de tipo JSON (usados en REST), razón por lo que muchos de los servicios de redes

sociales hacen uso del protocolo REST-JSON.

JSON

JSON es un formato de intercambio de datos ligero, es fácil de leer y escribir para los seres

humanos, al igual que fácil de interpretar y generar para las máquinas. Se basa en un

subconjunto del lenguaje de programación JavaScript, estándar ECMA-262. JSON se basan

en dos estructuras: [6]

● Una colección de pares (nombre —> valor). En varios lenguajes esto se realiza como

un objeto, estructura, mapa, lista con clave o una matriz.

● Una lista ordenada de valores. En la mayoría de lenguajes esto se realiza como una

lista.

33

XML

Es un lenguaje de etiquetado extensible. La W3C lo define como un formato que permite la

lectura de datos a través de diferentes aplicaciones. [50] Este lenguaje sirve para estructurar,

almacenar e intercambiar información. El XML tiene una estructura como se puede ver en la

Figura 5.

Figura 5: Ejemplo de documento XML, Tomado de [50]

XML es un metalenguaje que usa la sintaxis para definir otros lenguajes de etiquetas

estructurados, como DTD, XSL y XLL:

● DTD (Document Type Definition)

Una definición de tipo de documento (DTD) define los bloques de construcción legales de un

documento XML. La declaración de tipo de documento XML contiene o apunta a

declaraciones del marcado que proporcionan una gramática para una clase de documentos.

Esta gramática se conoce como una definición de tipo de documento o DTD. [59]

● XSL (Extensible Stylesheet Language)

XSL es el lenguaje para expresar hojas de estilo. Es un archivo que describe cómo visualizar

un documento añadiendo características avanzadas de estilo, expresadas por un tipo de

documento XML que define un conjunto de elementos llamados ‘Formato de los objetos’ y

atributos. [59]

● XLL (Extensible Linking Language)

34

La especificación XLL, conocida inicialmente como XLink [4], establece tres estructuras

diferentes que pueden ser añadidas a documentos XML: Links “Simples”, Links “Extendidos”

y “Grupos” de Links.

Los Links “Simples” se asemejan a los enlaces HTML que utilizan la etiqueta de elemento A,

estos se diferencian principalmente por referirse a un único recurso remoto, por lo tanto

contiene toda la información en una única etiqueta. Los Links “Extendidos” difieren de los

simples en cuanto a que se puede conectar a múltiples recursos y que son frecuentemente

fuera-de-línea3.

WSDL

Es un lenguaje de descripción de servicios basado en XML. Permite que un servicio y un

cliente establezcan un acuerdo en los que se refiere a los detalles de transporte de mensajes y

contenido, por medio de un documento procesable por dispositivos. El WSDL se usa a

menudo en combinación con SOAP y XML Schema. Como se ha mencionado anteriormente

un programa cliente que se conecta a un servicio web puede leer el WSDL para determinar

qué funciones están disponibles en el servidor. Un documento WSDL se observa en la Figura

6, en el que se visualiza un ejemplo de una definición de interfaz usando WSDL [5]:

Figura 6: Ejemplo 2-4 definición de interfaz. Tomado de [51]

UDDI

Lo definen como uno de los estándares básicos de los servicios Web cuyo objetivo es ser

accedido por los mensajes SOAP y dar paso a documentos WSDL, en los que se describen los

requisitos del protocolo y los formatos del mensaje solicitado para interactuar con los

servicios Web del catálogo de registros. [52] UDDI tiene dos funciones [53]:

3 out-of-line: https://www.w3.org/TR/1998/WD-xlink-19980303#dt-outofline

35

● Un protocolo basado en SOAP que define cómo se comunican los clientes UDD con

registros

● Un conjunto en particular de registros duplicados globalmente

En el registro de un servicio intervienen cuatro tipos de estructuras de datos principales:

● El tipo de datos businessEntity contiene información sobre la empresa que tiene un

servicio publicado.

● El tipo de datos businessService es una descripción de un servicio Web.

● El tipo de datos bindingTemplate contiene información técnica para determinar el

punto de entrada y especificaciones de construcción para invocar un servicio Web.

● El tipo de datos tModel proporciona un sistema de referencia que ayuda a descubrir

servicios Web y actúa como una especificación técnica de un servicio Web

En la Figura 7 se puede ver la relación entre UDDI y WSDL con referencia a los 4 tipos de

estructura que se pueden encontrar en el UDDI

36

Figura 7: Relación entre UDDI y WSDL. Tomado de [53]

Seguridad

El término “seguridad” en los servicios web cobija muchos conceptos: firmas, encriptación,

llaves, federación e identidad. En una arquitectura basada en SOA, esta se enfoca en la

seguridad al nivel de aplicación, sin embargo los mecanismos de seguridad al nivel de

transporte (como HTTPS) son muy usados por su ubicuidad y facilidad de uso aunque se

enfocan prácticamente únicamente en autenticación y transferencia de mensajes mientras que

la colección de especificaciones WS-* relacionadas a seguridad intentan cubrir escenarios

mucho más complejos. En la Tabla 1 se pueden observar los factores principales para

proporcionar seguridad al nivel de aplicación.

Seguridad a nivel de aplicación

Tabla 1: Seguridad al nivel de aplicación. Tomado de [63]

Descripción Web Services Support

Autenticación Estableciendo que quien está

enviando y / o recibiendo mensajes

es quien dice ser.

HTTP: autenticación básica

(nombre de usuario y contraseña).

HTTPS: autentica mediante el uso

de certificados, que se pueden

utilizar en el lado del servidor, el

lado del cliente, o en ambos lados.

WS-Security4: cabeceras de

seguridad de SOAP capaces de

manejar símbolos de nombre de

usuario, certificados X.509, tokens

SAML y otros.

SAML5: apoya el intercambio de

autenticación y autorización de

4 WS-Security: https://en.wikipedia.org/wiki/WS-Security

5 SAML: https://en.wikipedia.org/wiki/SAML_2.0

37

información entre dominios de

seguridad.

OAuth6: Proporciona a los clientes

un "acceso seguro delegado" a los

recursos del servidor en nombre

del propietario de un recurso.

Autorización El control del acceso a los

recursos, incluyendo servicios

Web individuales en función de la

identidad del usuario o rol.

SAML: apoya el intercambio de

autenticación y autorización de

información entre dominios de

seguridad.

XACML: proporciona un lenguaje

de políticas de control de acceso

para especificar las reglas sobre

quién puede hacer qué y cuándo, y

un protocolo para hacer solicitudes

de acceso.

OAuth: en él se especifica un

proceso para los propietarios de

recursos para autorizar el acceso

de terceros a sus recursos de

servidor sin compartir sus

credenciales.

Privacidad y Encriptación de los

datos

Asegura que los datos en el

mensaje es sólo visible para las

partes previstas.

HTTPS: proporciona cifrado de

nivel de transporte; encripta todo

el documento.

WS-Security: el cifrado de XML

proporciona privacidad al mensaje

SOAP; cifrado a nivel de

elemento.

Integridad de los datos y la firma

digital

Detecta cuando los datos en el

mensaje es modificado durante la

HTTPS: proporciona firma digital

de nivel de transporte; firma todo

6 OAuth: https://en.wikipedia.org/wiki/OAuth

38

transmisión. el documento.

WS-Security: la firma XML

proporciona integridad de

mensajes SOAP; firma a nivel de

elemento.

No repudio Permite a una parte para probar

que un mensaje fue enviado o

recibido, o que se ha producido

una transacción. Utilizado por un

tercero para resolver los

desacuerdos.

WS-Security: mensaje no repudio

se proporciona mediante el

aprovechamiento de la Firma

XML.

Inicio de sesión único Permite a un solicitante de servicio

ser autenticado una vez y luego

tener acceso a los recursos

autorizados a través de dominios

de seguridad.

SAML: estándar para el

intercambio de autenticación y

autorización de información entre

sistemas y apoya inicio de sesión

único para ambas interacciones

automáticas y manuales entre los

sistemas.

Registro de auditoría de seguridad

de nivel de servicio

Mantener un registro de todas las

invocaciones de servicio para que

los problemas de seguridad pueden

ser revisados después del hecho.

Personalizado

Seguridad al nivel de transporte

SSL, también conocido como TLS, el Grupo de Trabajo de Ingeniería de Internet (IETF)

oficialmente estandarizada versión de SSL, es el protocolo de nivel de transporte de datos de

comunicación más utilizado que proporciona: [64]

● Autenticación (se establece la comunicación entre dos partes de confianza).

● Confidencialidad (los datos intercambiados son encriptados).

● Integridad del mensaje (se comprueban los datos por posible corrupción).

● Intercambio de claves segura entre el cliente y el servidor.

39

Sockets

Un socket es un punto final de un enlace de comunicación bidireccional entre dos programas

que se ejecutan en la red. [10] Los sockets se crean y se utilizan con un sistema de peticiones

o de llamadas de función a veces llamados API para la familia de protocolos TCP, al cual está

enlazado a un número de puerto.

Los sockets usan dos tipos de protocolos de comunicación, TCP y UDP:

Sockets UDP: Permiten el envío de datagramas a través de la red sin que se haya establecido

previamente una conexión, ya que el propio datagrama incorpora suficiente información de

direccionamiento en su cabecera. Debido a que se desconoce de la conexión los datagramas

pueden llegar en desorden o duplicarse. [55]

Sockets TCP: Son orientados a conexión, esto hace se garantice la transmisión de todos los

octetos sin errores ni omisiones. Además, de que todos los octetos llegarán en el orden en el

que fueron enviados. [55]

Websocket

Websocket es [91] un protocolo que permite establecer una conexión bidireccional, entre un

navegador y servidor web. Los websockets son usualmente usados para hacer streaming y/o

aplicaciones en tiempo real.

Descripción del Recurso (en inglés, Resource Description)

“Una descripción del recurso es cualquier maquina de datos legibles que pueden permitir que

los recursos sean descubiertos. Todas las descripciones de recursos deben contener el

identificador de recursos”. [33]

Servicio de Descubrimiento (en inglés, Discovery Service)

“Un servicio de descubrimiento es un servicio que permite a los agentes recuperar las

descripciones de recursos relacionados con el servicio Web”. [33] Es un servicio, que es

usado para publicar descripciones y buscar descripciones de recursos.

40

Representación (en inglés, Representation)

“Una representación es una pieza de información que describe un estado de recursos”. [33]

Figura 8: Modelo Orientado al Recurso. Tomado de [33]

En la Figura 8 se puede observar que un recurso tiene un URI, una descripción y un dueño,

puede no tener, tener una o múltiples representaciones, es descubierto por un agente y se le

puede aplicar una norma/política (en inglés, policy). El agente interactúa con el

descubrimiento del servicio y descubre recursos.

Patrones de diseño

Un patrón se define como un modelo de muestra que sirve para obtener un resultado esperado.

[54] En el campo de la informática el concepto de patrones de diseño de software es definido

por Nicolás Tedeschi como “Esqueletos que brindan una solución ya probada y documentada

a problemas de desarrollo de software que están sujetos a contextos similares. [37]”, al igual

Cristian Giovanni y Martínez Rodríguez en “Aplicación de patrones de diseño en el diseño de

arquitecturas” lo definen como “Soluciones probadas a una serie de circunstancias

particulares que definen un escenario en el que se puede aplicar esa solución [38]”.

En el desarrollo de aplicaciones o en este caso el diseño de un sistema de recolección de datos

aunque puede que este sea un sistema único, tendrá partes comunes con otros sistemas, como

es el caso del acceso a datos, almacenamiento de información, entre otras. En lugar de buscar

41

una forma de resolver cualquiera de esos problemas recurrentes, se puede encontrar la

solución al problema implementando algún patrón, ya que son soluciones probadas y

documentadas por multitud de programadores. Además, al utilizar patrones de diseño permite

tener control de cohesión y acoplamiento o reutilización de código.

Patrón de diseño Timestamp Transfer [54]

Intención: En un evento de sincronización, sólo las partes del conjunto de datos han cambiado

desde la última sincronización se transfieren entre el dispositivo móvil y el sistema remoto

utilizando un último cambio de marca de tiempo.

Problema: Con el tema de la velocidad de la red y ancho de banda en los dispositivos

móviles, la cantidad de datos transferidos a conciliar conjuntos de datos entre un dispositivo y

un sistema remoto deben reducirse al mínimo. residuos transferencia completa demasiados

recursos y el conjunto de datos no se ajusta a los requisitos más estrictos para la transferencia

de Matemática (descrito más adelante). Todavía es imperativo para sincronizar los datos, pero

se necesita otro método para reducir al mínimo la transferencia de datos.

Aplicabilidad

El conjunto de datos de una aplicación puede ser descargado / cargado de piezas específicas.

● Una aplicación con datos versionados que se almacena en un servicio en línea, que

podría elegir archivos específicos.

● Piezas de datos para cargar o descargar basan en una comparación de la última

actualización de la fecha y hora dispositivo y la fecha y hora de creación/modificación

en el archivo o datos.

Las piezas de datos deben tener un campo para almacenar una marca de tiempo que indica la

última vez que se modificó.

● Si una aplicación y su correspondiente servicio en línea se sincronizan las tablas de

información, cada tabla debe tener una columna de marca de tiempo para facilitar las

comparaciones necesarias para una transferencia de marca de hora.

42

Figura 9: Representación visual del patrón ‘Timestamp Transfer’. Tomado de [54]

Vista representativa

Este diagrama de flujo muestra el aumento de la lógica de una transferencia de marca de hora.

El cliente inicia una solicitud y adjunta una fecha y hora de la solicitud, la cual es procesada

por el servidor para determinar si debe o no devuelve ningún dato.

Solución

Una indicación de la hora proporcionada por el sistema remoto desde la última actualización

satisfactoria se lía con una solicitud de cambio datos. El sistema remoto devuelve sólo los

datos que se ha añadido o cambiado después de esa fecha y hora. Para la presentación de los

datos, el dispositivo sólo presenta datos que se han añadido o modificado desde la última

presentación con éxito.

Beneficios

Menor utilización de ancho de banda que la transferencia completa.

● Mediante la comparación de una marca de tiempo "última actualización" presentada

por una aplicación a un servicio, sólo los datos creado o modificado desde esa fecha y

hora debe ser enviado de nuevo al dispositivo. Del mismo modo, si una aplicación

almacena la fecha y hora de la última vez que se cargan los datos, entonces pueden

43

decidir sobre el siguiente evento de sincronización de sólo los datos de carga de la

meta aún no ha visto.

Compromisos

se debe dar atención cuidadosa a la fuente de las marcas de tiempo.

● Es importante mantener la fuente de las marcas de tiempo consistentes, como la

sincronización puede convertirse incoherente si se utilizan diferentes marcas de

tiempo. Es común el uso de la marca de tiempo a distancia para cualquier los datos

transferidos y la marca de tiempo para cualquier dispositivo de datos cargados.

Puede que no sea evidente cómo manejar la eliminación de datos.

● Una marca de tiempo no va a hacer ningún bien si se eliminan los datos en un sistema

remoto y un dispositivo de intentos Transferencia de marca de tiempo, ya que los

datos borrados no existe para una comparación de marca de tiempo. Una común

solución a este problema es añadir un campo booleano en cada pieza de datos para

indicar si es o no ha sido eliminado.

Flyweight

Intención: Compartir atributos de un objeto que soporta varios objetos teniendo el mismo

valor del atributo. [73] Lo que quiere decir crear sólo un objeto intermedio para cada entidad

concreta como se muestra en la Figura 31. Este patrón comparte estados para soportar un gran

número de objetos pequeños aumentando la eficiencia en espacio. [74]

44

Figura 10: Diagrama UML del patrón Flyweight. Tomado de [42]

Motivación

El motivo no es otro que permitir que sea el objeto que implementa este patrón el que gestione

la separación entre la parte “común” (denominada intrínseca) y la parte “privada”

(denominada extrínseca), centralizando el proceso y evitando así que perdamos referencias

por el camino si realizamos el proceso de una forma un poco más artesanal. [75]

Por lo tanto, dentro de un patrón Flyweight, se distingue entre estos dos tipos de datos:

● Intrínsecos: son los datos compartidos por todos los objetos de un subtipo

determinado. Por norma general, son datos que no cambiarán a lo largo del tiempo, y

si cambian, alterarán el estado de todos los objetos que hagan uso de ellos.

● Extrínsecos: se calculan “al vuelo” fuera del objeto Flyweight. Este cálculo suele

realizarse a partir de los datos intrínsecos y de los parámetros recibidos por los

métodos del objeto Flyweight. La idea detrás de los datos extrínsecos radica en que, o

bien sean calculados a partir de los datos intrínsecos o bien ocupe una cantidad de

memoria mínima en comparación a éstos.

Aplicabilidad

La efectividad de este patrón depende de cómo y cuándo es utilizado, por eso es importante

implementarlo siempre que todas las siguientes situaciones se cumplan:

● Una aplicación usa un gran número de objetos.

● El coste de almacenamiento es alto debido al excesivo número de objetos.

45

● La gran mayoría de los estados de los objetos puede hacerse extrínseco.

● Al separar el estado extrínseco, muchos grupos de objetos pueden reemplazarse por

unos pocos objetos compartidos.

● La aplicación no depende de la identidad de los objetos, pues el patrón se basa en el

compartimento de objetos.

Implementación

● Asegurarse que la sobrecarga de objeto es un tema que necesita atención y el cliente

de la clase es capaz y está dispuesto a absorber la responsabilidad de reajuste.

● Dividir la clase de estado de destino en: Estado compartible (intrínseco) y estado no

compartible (extrínseco).

● Quitar el estado no compartible de los atributos de clase y agregarlo como argumento

de llamada a la lista de métodos afectados.

● Crear un Factory que pueda almacenar en caché y reutilizar instancias de clases

existentes.

● El cliente debe usar el Factory en lugar del operador new.

● El cliente (o un tercero) debe observar o calcular el estado no compartible y

suministrar el estado a través de métodos de clase.

Factory Method

Intención: Crear objetos sin saber que tipo son, siendo otras subclases las encargadas de

decidirlo tal como se puede ver en la Figura 32 en donde se muestra de forma gráfica la idea

de este patrón. [41]

Problema

El sistema tiene un tipo de componentes que se repite numerosas veces, y las instancias tienen

una serie de características en común. Se quiere optimizar el tamaño en memoria que ocupa

para sacar el máximo partido al sistema y no desaprovechar los recursos con datos

redundantes.

46

Figura 11: Diagrama UML del método de fábrica. Tomado de [42]

Consecuencias:

Positivas:

● Simplifica el uso de sistemas complejos con tareas redundantes

● Oculta al cliente la complejidad real del sistema

● Reduce el acoplamiento entre el subsistema y los clientes

Negativas

● Aumenta la complejidad de los objetos

● Aumenta el número de clases del sistema

Singleton

Se usa el patrón Singleton cuando por alguna razón se necesita que exista sólo una instancia

(un objeto) de una determinada Clase. [42] Como se ve en la Figura 33, dicha clase se creará

de forma que tenga una propiedad estática y un constructor privado, así como un método

público estático que será el encargado de crear la instancia (cuando no exista) y guardar una

referencia a la misma en la propiedad estática (devolviendo ésta).

Intención

Garantiza que una clase sólo tenga una instancia y proporciona un punto de acceso global a

ella.

Problema

47

Varios clientes distintos precisan referenciar a un mismo elemento y se quiere asegurar de que

no hay más de una instancia de ese elemento. [40]

Aplicabilidad

● Debe haber exactamente una instancia de una clase y ésta deba ser accesible a los

clientes desde un punto de acceso conocido.

● La única instancia debería ser extensible mediante herencia y los clientes deberían ser

capaces de utilizar una instancia extendida sin modificar su código.

● Consecuencias

● Acceso controlado a la única instancia. Puede tener un control estricto sobre cómo y

cuando acceden los clientes a la instancia.

● Espacio de nombres reducido. El patrón Singleton es una mejora sobre las variables

globales.

● Permite el refinamiento de operaciones y la representación. Se puede crear una

subclase de Singleton.

● Permite un número variable de instancias. El patrón hace que sea fácil cambiar de

opinión y permitir más de una instancia de la clase Singleton.

● Más flexible que las operaciones de clase (static en C#, Shared en VB .NET).

Figura 12: Diagrama UML del patrón Singleton. Tomado de [42]

Template Method

Este sencillo patrón resulta útil en casos en los que se puede implementar en una clase

abstracta el código común que será usado por las clases que heredan de ella, permitiéndoles

que implementan el comportamiento que varía mediante la reescritura (total o parcial) de

determinados métodos. [39]

48

La diferencia con la forma común herencia y sobreescritura de los métodos abstractos estriba

en que la clase abstracta contiene un método denominado 'plantilla' que hace llamadas a los

que han de ser implementados por las clases que hereden de ella así como se ve ilustrado en la

Figura 34.

Figura 13: Diagrama UML del método de modelado (Template Method). Tomado de

[42]

Consecuencias

● La principal: los métodos de plantilla sirven para la reutilización de código.

● Inversión de control: es la clase padre quien llama a las operaciones de los hijos.

● Los métodos de plantilla pueden llamar a los siguientes tipos de operaciones:

Operaciones concretas de las subclases o de otras clases, operaciones concretas en la

propia clase base abstracta, operaciones primitivas (es decir, abstractas), métodos de

fabricación (o también llamados factorías) y también operaciones de enganche (hook).

● Las operaciones de enganche proporcionan comportamiento predeterminado que las

subclases pueden redefinir si es necesario. Normalmente, la implementación

predeterminada no hace nada.

Aplicaciones

● Se quiera implementar las partes de un algoritmo que no cambian y dejar que las

subclases implementan aquellas otras que puedan variar.

● Por motivo de factorizar código, cuando movemos cierto código a una clase base

común evitar código duplicado.

49

● Para controlar el modo en que las subclases extienden la clase base. Haciendo que solo

sea a través de unos métodos de plantilla datos.

Arquitectura de Software

La arquitectura de software [93] es un conjunto de reglas para desarrollar un sistema de

software para una tarea específica. Se refiere a unas estructuras de alto nivel, la disciplina para

crear dichas estructuras y la documentación de estas.

La arquitectura de software se trata decisiones fundamentales de estructura y diseño las cuales

se debe evitar cambiar durante el desarrollo, ya que esto conlleva un alto costo. El objetivo

principal de la arquitectura de software sobre un sistema es categorizar el mayor número de

componentes del sistema para identificar las relaciones entre estos y categorizarlos

acordemente, estos componentes son conglomerados usando conectores los cuales brindan

una relación entre los componentes. Los conectores juegan un rol esencial para distinguir

entre un estilo de arquitectura y otro, de igual manera tienen un efecto importante en las

características de cada estilo particular. [92]

Estilos y patrones de Arquitectura

El entendimiento de estilos de arquitectura provee un lenguaje común con oportunidades para

conversaciones que son independientes de la tecnología, estos pueden ser agrupados por su

área de interés [92], la Tabla 2 lista las mayores áreas de enfoque

Tabla 2: Estilos y patrones de arquitectura. Tomado de [92]

Categoría Estilo de Arquitectura

Comunicación SOA, Mensaje de Bus

Despliegue Cliente/Servidor, Nivel-N, Nivel-3

Dominio Diseño orientado al dominio

Estructura Basado en Componentes, Orientado a objetos,

Arquitectura por capas

Estilo cliente/servidor

50

Este estilo es un tipo de sistema distribuido que involucra una relación entre cliente y

servidor. Puede tener diferentes sistemas de cliente y servidor conectados mediante una red.

[92]

Estilo nivel-3, nivel-N

Este estilo explica la separación de funcionalidades en múltiples partes. Cada segmento es un

nivel que puede ser encontrado en diferentes computadores. Involucra la descomposición

funcional de componentes de servicio, sus aplicaciones y despliegue distribuido. [92]

Estilo basado en componentes

Este estilo describe un enfoque al diseño de sistemas y desarrollo. Involucra la

descomposición del diseño en componentes individuales lógicos o funcionales . Estos

componentes ofrecen unos estándares bien definidos de comunicación, propiedades y eventos.

[92]

Estilo orientado al diseño (DDD)

Este estilo está enfocado a los objetos. Es basado en dominio de sistema, sus componentes, la

forma como se comportan y la relación entre estos. [92]

Estilo orientado a objetos

Este estilo es un prototipo de diseño basado en la división de tareas de una aplicación o

sistema en individuales objetos autosuficientes reusables. Cada objeto contiene los datos y su

comportamiento. [92]

Estilo por capas

Este estilo es más adecuado para aplicaciones que comprenden distintas clases de servicos las

cuales pueden ser organizadas jerárquicamente. Se enfatiza en el agrupamiento de funciones

relaciones en una aplicación en una única pila vertical de capas, la comunicación entre capas

es explícita y ligeramente acoplada. [92]

Objetivos de la Arquitectura de Software

La Tabla 3 lista los diferentes objetivos de la Arquitectura de Software con su correspondiente

descripción.

51

Tabla 3: Objetivos de la Arquitectura de Software. Tomado de [92]

Objetivo Descripción

Plataforma

independiente

La arquitectura del software no dependerá de una plataforma de hardware específica.

Esto ayudará a ejecutar software en cualquier sistema embebido o computadoras

personales con las especificaciones mínimas proporcionadas.

Modularidad de

Hardware

Los componentes de hardware deben dividirse en unidades pequeñas y comunicarse

entre sí a través de un medio cableado o inalámbrico. La arquitectura de software debe

definir reglas y marco para la comunicación entre los diferentes módulos de hardware.

Esto proporcionará al sistema la capacidad de extensión de la característica sin mucho

esfuerzo.

Productividad

Incrementada

La estructura del software debe estar bien definida, por lo que será más fácil agregar

nuevas características.

Mantenimiento de

código

El código debe ser modular y bien estructurado, por lo que será más fácil de refinar y

mantener.

Testabilidad El software estructurado debe proporcionar una función bien definida interfaces para el

usuario final, esto facilita la capacidad de prueba de un módulo en particular.

Diagnóstico y

depuración

También es fácil identificar los errores o los agujeros del lazo dentro de un código bien

estructurado y modular. Las arquitecturas de software deben integrar funciones de

diagnóstico y depuración al diseñar un sistema de software. Así, el usuario final puede

interactuar directamente con los módulos para las funciones de diagnóstico.

Apto para equipo

grande

Cada desarrollador o probador debe ser capaz de trabajar en módulos independientes

paralelamente. Esto es posible debido a la naturaleza modular y estructurada del sistema

de software definido por la arquitectura del software.

Simplicidad El mantenimiento y la implementación de la arquitectura del software debe ser de la

manera fácil de usar.

Disponibilidad Define la proporción de tiempo que el sistema es funcional y operativo. Se puede medir

como el porcentaje del tiempo de inactividad total del sistema durante un período

predefinido. Se ve afectado por problemas de sistema, problemas de organización,

ataques maliciosos y carga del sistema.

Seguridad Capacidad de un sistema para hacer frente a ataques maliciosos desde el exterior o dentro

del sistema.

52

Desempeño Aumentar la eficiencia del sistema con respecto al tiempo de respuesta, rendimiento,

utilización de los recursos y atributos que normalmente entran en conflicto entre sí.

Concurrencia La concurrencia es propiedad del sistema en la que se ejecutan varias tareas

simultáneamente y que interactúan entre sí. Estas tareas pueden ejecutarse en los

múltiples núcleos en el mismo chip.

Escalabilidad Es la capacidad del sistema para manejar un aumento en la carga del sistema.

Costo El costo de construir, mantener y operar el sistema.

Tiempo de vida El período de tiempo en que el producto está activo antes de la jubilación.

Usabilidad La usabilidad incluye la cuestión de la satisfacción de los usuarios de usar el sistema

JavaScript frameworks

Las páginas web han sido estáticas con algún contenido dinámico. Los archivos HTML se

construían una vez por página, este paradigma ha cambiado durante los años, principalmente

por la introducción de algunas librerías, frameworks y tecnologías JavaScript.

jQuery [1] hace sencillo la manipulación del HTML DOM y dinámica actualización de partes

de la página con obtención de datos del servidor. Con AJAX y jQuery es posible crear páginas

interactivas, pero nada como “single-page applications (SPA’s)” que hoy vemos. En jQuery

manualmente se tiene que encontrar el elemento a modificar y definir las acciones a proceder

con el mismo.

Esto lleva que el tipo “client-side JavaScript framework (JSF’s)” se hace popular hoy en día,

[1] con su llegada en el 2009. JSF’s proporciona una extensa librería que le importa la unión

entre el HTML y JavaScript, en lugar de actualizar un elemento explícito del DOM como es

con jQuery. Hoy JSF’s hacen sencillo la obtención de información haciendo uso de peticiones

HTTP y manejo de “route” en el framework. [1] Los “Route” muestra la vista del contenido

de la página web en la barra de direcciones, sin cambiar realmente la página como en las

aplicaciones web clásicas (SPA’s).

53

Figura 14: Tendencia de uso de librerías JavaScript del 2009 a 2017, sacado de google

trends compara: Angular, React, Ember y Polymer

La comunidad de desarrolladores hace uso de Angular, React, Ember, Polymer con más

regularidad que otros JSF’s existentes en el momento. La figura 1 se muestra la tendencia de

los programadores en el uso de JSF’s siendo los más populares en la comunidad React y

Angula, este último más popular, con una mínima diferencia de uso con respecto a React a

diferencia con la popularidad de estos mismos en Github, la tabla 1 enseña que React es el

más preferido por los desarrolladores almacenados en la plataforma.

Tabla 4: Popularidad de JavaScript frameworks en Github

Github

Watch Start Fork

Angular 4,359 55,944 27,929

React 4,465 67,950 12,607

Ember 1,016 17,904 3,720

Polymer 1,044 17,702 1,751

Microprocesador y Sistemas embebidos

Microprocesadores

54

Se define como microprocesador [97] como un circuito integrado digital que es capaz de

realizar múltiples funciones. Está diseñado para ejecutar una serie de instrucciones que se le

dará en una lista, de acuerdo con lo que se necesita. Esa lista se le llama programa y las

instrucciones serán ejecutadas una a una por el microprocesador. Al ser un sistema

programado se puede lograr que el circuito realice tareas distintas con tan solo cambiar el

programa que se ejecuta.

Figura 15: Diagrama simplificado de un microprocesador. Tomado de [97]

En la figura 15 se aprecia un diagrama simplificado de un microprocesador, el cual cuenta con

un contador de programa (PC), el cual es un contador que inicia del cero y se va

incrementando.

Microprocesadores en el riego

Los microprocesadores en el riego se emplean con los controladores los cuales pueden llegar

a cumplir el papel de realizar tareas tales como [98] la secuencia cíclicas de tiempos de

entrega y cortes de agua desde pocos segundos a varias horas, coordinando un conjunto de

válvulas.

55

Sistemas embebidos

[99] Un sistema embebido en principio está formado por un microprocesador o por un

microcontrolador y un software que tiene que ser almacenado en localidades de memoria de

tipo RAM para luego ser ejecutado por el procesador. La figura 16 representa un componente

de un sistema embebido, implementado en una propuesta de diseño de un sistema domótico

de riego.

Figura 16: Componente de un sistema embebido [99]

Sistemas de riego de cultivos industriales

Tipos de riego

Las lluvias generalmente no están bien distribuidas, se concentran en épocas cuando su aporte

es excesivo, mientras que en otras épocas hay un déficit total, es por ello que el sistema de

riego debe de suplir en forma oportuna, las deficiencias de humedad en el perfil del suelo de

donde las raíces puedan extraer la humedad.

56

En el Valle del Cauca se utilizan diferentes sistemas de riego, el riego por gravedad

(43.095%), multicompuertas (50%), aspersión (15%), goteo (1%), pivote central y

autopropulsado frontal (0,05%). [15] Cada sistema posee una eficiencia diferente, que es

respectivamente del 25%, 55%, 65%,98% y 90%. [22]

Riego por gravedad

Este sistema depende mucho del trabajo manual con la pala, la eficiencia está entre el 20% al

25%, generalmente se riega cada 15 días y se aplican 2.000 m3 /Ha., en caso de que se

presente alguna lluvia intermedia, se trabaja con el balance hídrico. [23]

Riego por multicompuertas

Su eficiencia está entre el 55% al 60%, se aplican aproximadamente 1.000 m3 /Ha y su ciclo

sigue siendo de 15 días. [24]

Riego por aspersión

La eficiencia está alrededor del 65% y los ciclos de riego generalmente son de 10 días,

dependiendo del tipo de suelo.[25]

Riego por goteo

Su eficiencia es del 98%, el ciclo de riego puede ser diario o semanal. Este tipo de riego,

permite mantener buena oxigenación radicular lo cual junto con la fertigación (fertilización a

través del sistema de riego) aumentan la producción del cultivo.[26]

Tipos de Suelo

Los suelos de la parte plana, donde se ubican los cultivos de la caña de azúcar, en su mayoría

son aluviales, y algunos de los del piedemonte son de origen coluvio-aluviales, predominan

los suelos franco-arcillosos con un PH entre 5.5 y 7.0, el contenido de materia orgánica está

entre 2 y 4%, el fósforo disponible es superior a los 10 mg/Kg y el contenido de potasio K,

superior a 0,2 cmol/Kg de suelo. La relación de Ca/Mg intercambiables es adecuada y los

contenidos de éstos nutrientes en el suelo son altos. La mayoría de los suelos son molisoles y

vertisoles. [16]

57

La clasificación más utilizada en Colombia, es la de la FAO y la Sociedad Americana de

Suelos de USDA (Soil Survey Staff), así como la taxonomía de suelos de USDA. [17] En la

Tabla 2, se describen los tipos de suelo más conocidos a los cuales se les indican su tipo de

textura y una breve descripción.

Tabla 5: Tipos de suelo

Alfisoles

Textura arcillosa. Suelos de regiones húmedas la mayor parte del año.

Andisoles

Textura franco arenosa

Suelo de depósitos volcánicos, regiones húmedas,

buena acumulación de humus. Productividad natural

alta.

Aridisoles

Textura franco arenosa.

Suelos de zonas desérticas, suelos poco lixiviados,

pobres en materia orgánica. Generalmente

enriquecidos con CaCO3 (carbonato de calcio), PH

entre neutro y básico, pueden tener problemas de

presencia de Na (Sodio).[18]

Entisoles

Textura franco arenosa.

Tienen un 30% de fragmentos rocosos, formados tras

aluviones de los cuales dependen mineralmente (Nilo).

Pobres en materia orgánica. En Colombia se presentan

en la Orinoquia, amazonía, áreas de la región andina y

del Caribe.

Espodosoles

Textura franco limoso arenoso.

Suelos de climas aluviales, húmedos , a partir de

materiales parentales asociados a cenizas volcánicas y

a materiales arenosos. PH ácido, fertilidad baja.

Histosoles

Suelos orgánicos. Se desarrollan en ambientes de

condiciones húmedas y frías. Suelo liviano, se forman

en zonas depresionales de los páramos.

Inceptisoles

Textura desde arcillo arenosa hasta franco arenosa.

Suelos orgánicos, de PH ácido, acumulan arcillas

amorfas. Iniciaron como suelos volcánicos,

predominan en la cordillera de los Andes, presentes en

las vegas de los ríos Caquetà, Guaviare, Putumayo y

Amazonas. [19]

Molisoles

Textura franco limosa.

Suelos de zonas de pastizales(Pradera), marcados en

climas templados, húmedos y semiáridos. Suelos

58

oscuros, con buena descomposición de materia

orgánica, bien estructurados, de alta fertilidad,

dominancia de arcillas.[20]

Oxisoles

Textura franco arcillosa.

Suelos tropicales ricos en sesquióxido de hierro y

aluminio. Proporción de arcilla 1:1 Relacionados con

climas húmedos de alta precipitación, suelos lavados

de escasa fertilidad, en Colombia se encuentran en la

Amazonía.

Ultisoles

Suelos de textura arcillosa.

Suelos de horizonte argílico, de poco espesor,

vegetación arbórea, de color pardo rojizo oscuro, no

muestran presencia de saturación hídrica.

Vertisoles

Suelos muy ricos en arcilla, que se quiebran en

estación seca, formando grietas de 1 cm de ancho.

Suelos con fuerte expansión al humedecerse y

contracción al secarse y que pueden romper raíces..

Característicos de zonas de pantano. [21]

Variables de estudio

El registro de la humedad del suelo y de las variables que lo afectan son los que determinan

cuánto y cómo regar. También hay que tener en cuenta constantes tales como: Capacidad de

campo del suelo, LARA, y punto de marchitez permanente.

La evapotranspiración y el Uso consuntivo son dos conceptos que generalmente se confunden,

la evapotranspiración depende de la evaporación diaria y del uso consuntivo en ese momento

del desarrollo de la planta, por ejemplo una evaporación de 5 mm y un Uso consuntivo de 0.7,

al multiplicar estos factores nos da una evapotranspiración de 3.5 mm. El valor de la

evaporación lo obtenemos de las estaciones meteorológicas. [7]

La evaporación es el agua que se evapora directamente del suelo, la evapotranspiración es la

cantidad de agua utilizada por las plantas para realizar sus funciones y termina evaporándose

a través de los estomas.

La cantidad de agua que necesita un cultivo para desarrollarse, puede expresarse en términos

de volumen por unidad de área, m3/ha, o como lámina en mm (lt/m2). Cuando se expresa que

59

un cultivo requiere de 1mm, quiere decir que el cultivo absorberá uniformemente distribuido

sobre toda el área del campo. [8]

Para calcular las necesidades de riego de los diferentes cultivos, se utilizan las mismas

variables, la diferencia radica únicamente en el Kc, el factor de cultivo.[9]

El Kc va aumentando de acuerdo a la edad del cultivo, la necesidad de agua aumenta en forma

constante desde la germinación hasta alcanzar su máximo durante la floración y formación de

frutos, una vez formado el fruto se reduce el requerimiento de agua, por ejemplo la caña

inicia en 0,4, sube paulatinamente a los 10 meses a 0,8, luego desciende a los 12 meses a 0,3.

[28]

El Kc no es universal, la mayoría de las tablas están hechas para zonas no tropicales y para la

época cuando los días son más largos, éstas tablas se pueden utilizar aplicando una reducción

del 20%, así en E.U. se habla de un Kc máximo para el maíz de 1,0 pero en el trópico es de

0,8, en Colombia otros valores a manera de ejemplo son: frutales 0,7, plátano 1,1, palma

0.65, tomate 0,85. [29]

Existen factores como la luminosidad, la velocidad del viento, la humedad relativa del aire

que inciden sobre la evaporación, es decir ya están contenidos en el valor de la evaporación,

así como la capilaridad y la percolación inciden en la humedad del suelo y si se tiene éste

valor no hay necesidad de conocer los otros. [29]

Por lo cual tenemos como variables de estudio:

● Cultivo

○ LARA

○ Capacidad de campo

○ Tipo de riego (Eficiencia del riego, Aplicación/ciclo)

○ Variedad del cultivo

○ Área del cultivo

○ Periodo de agostamiento. (Contado desde la fecha de siembra)

○ Geolocalización

● K del cultivo (Factor de Cultivo)

60

● Evaporación

● Evapotranspiración

● Precipitación efectiva

● Riego efectivo

● Humedad del suelo (Balance hídrico)

Aclaración: En el capítulo 3 sección Diseño del servicio web centralizado: Modelo de

datos en el esquema de base de datos en el objeto variables, objeto cultivo y objeto lote se

puede encontrar el uso de estas variables en el sistema desarrollado para el proyecto, cabe

anotar.

Ev. Evaporación

La evaporación, al igual que la lluvia o la cantidad de riego, se mide en mm, 1 mm es el

equivalente de distribuir 1 litro por cada m2, o lo que es igual 10 m3 en 1 hectárea. La

evaporación depende de la temperatura, es dada por estaciones meteorológicas, se puede

tomar un valor promedio, que en el Valle del Cauca es de 5,5 mm. [27]

Kc. Factor del cultivo

Es una constante para el tipo de cultivo, se halla en las tablas diseñadas experimentalmente

por ingenieros agrícolas como apoyo al diseño de sistemas de riego. Estos valores son

diferentes para las zonas tropicales en comparación a las zonas templadas. Depende de la

variedad y de la edad del cultivo, para caña este valor se halla entre 0,4 y 0,8. [95]

En cuanto al periodo vegetativo, existen diferencias entre variedades, la tendencia es que de

18 meses se ha reducido a 13 meses, algunas son más resistentes a la sequía y el Ka de cultivo

puede llegar a reducirse hasta en un 30%., básicamente esta es la única diferencia que es

muy importante para tener en cuenta como variable de riego. [27]

Transpiración - Evapotranspiración

La transpiración es la cantidad de agua medida en mm, que la planta absorbe desde el suelo

para utilizarla en sus procesos biológicos y para devolver parte a la atmósfera por los estomas

de las hojas, durante el proceso de respiración. Es el resultado de multiplicar la evaporación

61

por el factor de cultivo, por ejemplo con una evaporación de 5,5 mm y un factor de cultivo de

0,6 tenemos una transpiración de 3,3 mm. [27]

LARA – Lámina rápidamente aprovechable

El agua útil en realidad no está fácilmente disponible para las plantas, debido a que el suelo

hace resistencia y la tensión de succión que deben realizar las raíces es muy alta por eso existe

otro concepto que es la lámina de riego rápidamente aprovechable,

LARA que se toma experimentalmente y en el Valle del Cauca ha resultado ser el 50% de la

capacidad de campo. [28]

Agostamiento

Periodo en que no se riega al final del cultivo, obligando a que la planta devuelva nutrientes

desde las hojas hacia el tallo, buscando que el azúcar se concentre en el tallo, para la caña de

azúcar el periodo es de 2 a 3 meses.

Dependencias entre variables

En la Tabla 6 se observa las variables básicas involucradas en un sistema de riego de un

cultivo con su respectiva (s) dependencia (s).

Tabla 6: Dependencia de variables

Variable Depende de

LARA Tipo de suelo

Capacidad de campo Tipo de suelo

Evaporación

Temperatura

Luminosidad

Viento

K de cultivo Variedad de cultivo

Edad del cultivo

Evapotranspiración Evaporación

K de cultivo

62

Periodo de agostamiento Fecha inicial de cultivo

Balance hídrico (Humedad del suelo)

Precipitación efectiva

Riego efectivo

Evapotranspiración

Aclaración: Las variables usadas en el sistema se pueden encontrar en la sección Modelo de

datos apartado Objeto Variables. En el cual se da una explicación de las variables usadas y

las que se capturan por medio de sensores, además de la posibilidad de añadir más variables si

así lo desa el cliente y estas pueden ser tanto calculadas por el sistema como sensada o

ingresada por un usuario.

Cultivo de la Caña de Azúcar

El cultivo de la caña de azúcar en el Valle de cauca es altamente tecnificado y el de mayor

área sembrada (248.0000 Hectáreas, de las 265.000 Totales), alcanza aproximadamente el

1,5% de la producción mundial de azúcar, se obtienen los rendimientos más altos del mundo,

120 toneladas de caña por hectárea, con una concentración de azúcar promedia de 13%, el

mayor costo de la producción está precisamente en la adquisición de sistemas de riego y su

aplicación. Además es un sector que genera 25.000 empleos directos e indirectos, con una

contribución al PIB nacional del 10,3% anual. [14]

En Colombia se cosecha todos los días, sin importar el clima, y esto se hace de día y de

noche, en otros países solo se realiza durante los tres meses de verano, Colombia es de los

pocos sitios en el mundo en el que las fábricas extractoras de azúcar no paran en ningún

momento del año.

Balance hídrico

No toda el agua que recibe la caña de azúcar proviene del riego, pues las lluvias tienen un

aporte importante. El balance hídrico es el resultado de sumas y restas entre las necesidades,

lo disponible y el faltante (o excedentes), de ese resultado sabremos cuánta agua es necesaria

para llegar a la LARA. [28]

63

El balance hídrico es similar a una contabilidad de agua, en el suelo que permite comparar las

ganancias y las pérdidas de humedad.

Variedades

La caña de azúcar es originaria de la India, pero a lo largo de la zona tropical en el mundo se

han desarrollado variedades que para los especialistas revisten de grandes diferencias, aunque

para un observador no especializado esas diferencias generalmente pasan desapercibidas.

En Colombia existen más de 350 variedades, muchas de las cuales son producto del trabajo de

entidades colombianas, pero en el Valle del Cauca predominan 5, la entidad encargada de la

creación de nuevas variedades y de su divulgación es Cenicaña. El desarrollo de una variedad

exige más de 10 años de trabajo. [94]

Medición de necesidad de riego y componentes involucrados

El agricultor necesita tomar dos decisiones importantes referente al riego, cuándo y cuánto

regar, para ello debe conocer algunas variables, pero de todas ellas la más importante es la

humedad del suelo. Para saber cuál es la humedad disponible en el suelo para la planta, hay

varios métodos, unos son directos y otros indirectos.

El agua que absorbe la planta, la toma del suelo a través de sus raíces en contra de las fuerzas

de fijación de la tierra [78], la capacidad de acumulación máxima de agua del suelo es la

llamada capacidad de campo (CC), y es diferente para cada suelo, dependiendo de su textura,

un suelo arcilloso tiene más capacidad de acumulación que uno franco y mucho más que uno

arenoso, el agua se acumula en los poros del suelo, por medio de la fuerza de capilaridad.

A medida que el agua acumulada empieza a utilizarse la humedad baja por debajo de la

capacidad de campo y progresivamente la tensión que se ejerce sobre el sistema de raíces es

mayor hasta un punto crítico cuando la planta ya no es capaz de absorber agua del suelo y

muere, se llama punto de marchitez permanente. (PMP).

Sensores profesionales

Existen diferentes métodos para medir la humedad del suelo. Todos los métodos usan una

propiedad física que cambia con la humedad. Algunas de estas propiedades son:

64

El peso de suelo La tensión del agua dentro del suelo

La humedad del aire dentro del suelo La dispersión de la radiación que entra al

suelo

La atenuación de la radiación que entra al

suelo

La constante dieléctrica del suelo

La resistencia eléctrica del suelo La textura del suelo

La energía para cambiar la temperatura del

suelo

Entre los métodos se encuentran: gravimétrico, por resistencia eléctrica, reflectometría, entre

otros los cuales usan componentes como:

● Tensiómetros

● Sonda de neutrones

● Termómetros de luz infrarroja

Resistencia eléctrica

Algunos dispositivos como los bloques de yeso, nylon o fibra utilizan la resistencia eléctrica

para medir la humedad del suelo. El principio físico es que la humedad del suelo se puede

determinar por la resistencia al paso de la corriente entre dos electrodos en contacto con el

suelo, entre más agua haya en la tierra, más baja la resistencia. [79]

Para medir la humedad del suelo, los bloques se entierran a una profundidad deseada con las

terminales eléctricas extendiéndose hasta la superficie del suelo. Las terminales se conectan a

un medidor y se toma la lectura. [80]

Reflectometría

La reflectometría se basa en la relación que existe entre el contenido de humedad del suelo y

su constante dieléctrica El agua tiene una constante dieléctrica mucho más alta que la del

65

suelo, por lo que la constante dieléctrica del suelo húmedo dependerá principalmente de su

contenido de humedad. La constante dieléctrica del suelo se mide aplicando al suelo una onda

electromagnética de alta frecuencia y midiendo la velocidad de propagación mediante un

reflectómetro de dominio de tiempo. [81]

Tensiometro

La tensión del suelo al fijar el agua es aprovechada por el sistema más antiguo de medición de

la humedad [78], el tensiómetro, es al mismo tiempo el más utilizado, también se pueden

integrar con equipos de lectura electrónica.

Los tensiómetros miden la intensidad de la fuerza con la que el suelo retiene el agua. La

mayoría de los tensiómetros tienen una punta de cerámica o porosa, conectada a una columna

de agua, los tensiómetros se pueden instalar a la profundidad que se desee e instalar varios, lo

que puede ayudar a monitorear no solo la humedad en la zona radicular sino el movimiento

del nivel freático.

Figura 17: Tensiometro. Tomado de [82]

Sonda de neutrones

La sonda de neutrones se ha empleado extensamente en trabajos de investigación para la

medición de humedad del suelo. Una sonda de electrones contiene una unidad radioactiva,

66

que envía una cierta cantidad de neutrones rápidos. Estos neutrones son de un tamaño similar

a los átomos de hidrógeno que hacen parte del agua.

Cuando los neutrones chocan contra los átomos de hidrógeno, se vuelven más lentos, un

detector dentro de la sonda mide la proporción de neutrones rápidos que salen y los lentos que

regresan. [83]

Figura 18: Sonda de neutrones. Tomado de [85]

Termómetros de luz infrarroja

De forma similar al proceso de reducción de la temperatura del cuerpo humano cuando se

suda, las plantas regulan su temperatura a medida que transpiran a través de los estomas, pero

cuando hay escasez de agua en el suelo las plantas cierran sus estomas y empiezan a aumentar

la temperatura de sus hojas, en ese momento la capacidad de campo está agotada y se debe de

regar de forma inmediata, usando un termómetro de luz infrarroja se puede medir este nivel

de temperatura. [84]

Tarjetas para la adquisición o captura de datos

Existen tarjetas programadoras para controlar y usar los componentes de la sección Sensores

académicos y crear un sistema como lo son: Arduino, Raspberry Pi o Goblin 2.

La tarjeta Goblin 2

67

Es “es una tarjeta de desarrollo disenada para ser autonoma, cuenta con un modulo para

controlar la carga de una bateria de Li-ion de 3.7V a 4.2V, versatil en conectividad y lista

para comunicacion remota. Integra conectividad por protocolo RS-485 y voltajes de salida de

24V, 5V y 3.3V ideal para sensores industriales o sensores con senales analogicas/digitales.

Su diseno para el internet de las cosas es gracias al SIM5320A que incorpora y asi poder

tener la conectividad con servidores web mediante alguna red celular. ” [77]

De esta tarjeta se puede resaltar que cuenta con módulos integrados como el SIM5320A que

le permite una conexión a internet a través de una red celular lo cual puede ser muy práctico

para la conexión a un Servidor Web en lugares remotos o de difícil acceso.

Figura 19: Tarjeta Goblin 2. Tomado de [79]

La tarjeta Arduino UNO

Es “una placa electrónica basada en el ATmega328P. Cuenta con 14 pines digitales de

entrada / salida (de los cuales 6 se podrán utilizar como salidas PWM), 6 entradas

analógicas, un cristal de cuarzo de 16MHz, una conexión USB, un conector de alimentación,

una cabecera ICSP y un botón de reinicio. Contiene todo lo necesario para apoyar el

microcontrolador; basta con conectarlo a un ordenador con un cable USB o la corriente con

un adaptador de CA a CC o una batería para empezar.” [76]

Esta tarjeta no cuenta con módulos integrados, por cual cualquier funcionalidad que se quiera

suplir, como conexión a internet, captura de humedad

68

Figura 20: Tarjeta Arduino UNO. Tomado de [76]

Sensores académicos

Existen sensores de uso académico que pueden hacer las veces de su homólogo profesional

Algunos de los fenómenos físicos, pero no limitado a estos, que pueden ser capturados por

sensores de Arduino son:

● Temperatura

● Humedad de suelo

● Lluvia

● Presión atmosférica

● Luminosidad

Sensor humedad suelo

El sensor de Humedad de Suelo es usado para determinar el nivel de humedad alrededor del

sensor indicada por el nivel de resistencia en el mismo.

Un higrómetro de suelo HL-69 [86] es un sensor que mide la humedad del suelo. Es un sensor

que mide la humedad del suelo por la variación de su conductividad. El HL-69 se distribuye

69

con una placa de medición estándar que permite obtener la medición como valor analógico o

como una salida digital, activada cuando la humedad supera un cierto umbral.

Figura 21: Sensor Humedad Suelo/Módulo HL-69. Tomado de [86]

Los valores obtenidos van desde 0 (sumergido en agua), a 1023 en el aire. La salida digital se

dispara cuando el valor de humedad supera un cierto umbral, el cual se ajusta mediante el

potenciómetro. Esto quiere decir, que se obtiene una señal LOW cuando el suelo no está

húmedo, y HIGH cuando la humedad supera el valor programado. [86]

Sensor de lluvia

El sensor de lluvia permite determinar un nivel de humedad sobre la placa mediante la

resistencia que esté presente, a menor resistencia significa menor presencia de agua y

viceversa.

“Este módulo consiste en una serie de pistas conductoras impresas sobre una placa de

baquelita. La separación entre las pistas es muy pequeña. Lo que este módulo hace es crear un

corto circuito cada vez que las pistas se mojan. El agua hace que se cree un camino de baja

resistencia entre las pistas con polaridad positiva y las pistas conectadas al GND. La corriente

que fluye a través de estas pistas se ve limitada por resistencias de 10K en cada conductor, lo

que impide que el cortocircuito que se genera cuando se moja la placa vaya a estropear el

micro controlador.” [87]

70

Figura 22: Sensor de lluvia/Módulo YL-83. Tomado de [87]

Al igual que el sensor de humedad de suelo, los valores obtenidos van desde 0 (sumergido en

agua), a 1023 en el aire completamente seco.

Sensor de temperatura

El LM35 “es un sensor de temperatura digital. A diferencia de otros dispositivos como los

termistores en los que la medición de temperatura se obtiene de la medición de su resistencia

eléctrica, el LM35 es un integrado con su propio circuito de control, que proporciona una

salida de voltaje proporcional a la temperatura.”

El LM35 es un sensor de temperatura con una precisión de 1 ºC. Su rango de medición va

desde -55 ºC hasta 150 ºC, cada grado Celsius equivale a 10 mV, lo cual quiere decir que:

150 º𝐶 = 1500 𝑚𝑉

−55 º𝐶 = −550 𝑚𝑉

71

Figura 23: Sensor de temperatura para Arduino

72

VII. ANÁLISIS Y DESARROLLO

Análisis de otros sistemas de recolección de datos de riego de cultivo

Existen múltiples sistemas de captación y visualización de información del riego de cultivos.

Algunos de estos sistemas son: Wisecrop, AquaDaia, Instacrops, Flower Power, Appgro.

Esta sección se divide en los siguientes análisis: Captación de datos, Visualización de

reportes, Configuración inicial de un cultivo o lote.

Captación de datos

Es la forma en la que el sistema adquiere los datos que posteriormente serán reportados de

forma visual a un usuario. En la Tabla 7 se distribuyen los sistemas por captación de sensores

y/o por usuario.

Tabla 7: Comparación captación de datos de sistemas existentes

Sensores Wisecrop, Instacrop, Flower Power

Usuario AquaDaia, Appgro

Los sistemas que usan sensores son aquellas que distribuyen dispositivos de producción para

agricultores como son: sensores y controladores. Estos dispositivos no pueden ser consumidos

por terceros para almacenar y visualizar la información captada. En la página de Wisercrop se

puede encontrar la frase “Recuerde que la inversión en una estrategia de riego adecuada se

puede traducir en un aumento de hasta el 30% de la productividad en comparación con las

estrategias empíricas de riego.”7 con lo cual se puede interpretar que el uso de sensores y

controladores es la mejor forma de manejar la productividad en el cultivo. Pero esto no es del

todo cierto si el sensor usado no es de una buena calidad los datos obtenidos son subjetivos.

7 "Riego - Wisecrop." https://www.wisecrop.com/es/apps/riego1. Accessed 20 Apr. 2017.

73

En conclusión el mejor sistema de captación de información es el uso de sensores siempre y

cuando estos sean de buena calidad. Pero si el usuario no puede costear estos también es útil

contar con un sistema que permita al usuario ingresar los valores y/o que este calcule el valor

para obtener resultados en unidad de medida no subjetiva.

Visualización de reportes

Es la forma en cómo el sistema presenta la información captada en una vista que puede

acceder un usuario. En la tabla 8 se divide por visualización gráfica y/o tabla.

Tabla 8: Comparación visualización de reportes en sistemas existentes

Grafica Wisecrop, Instacrop, Flower Power, AquaDaia

Tabla tipo excel Wisecrop, Appgro

El uso de gráficas para exponer la información es la más usada en estos sistemas, siendo esta

la más legible para el usuario. Pero el uso de tablas es al igual que la gráfica un complemento

para procesar mejor la información. Se observa que Wisecrop hace uso de los dos tipos de

visualización como se puede ver en la figura 24.

En conclusión el uso de gráfica y tabla es la mejor propuesta de los sistemas ya que se puede

ver información relevante con solo mirar la tabla que contendrá estos datos ya analizados y al

mismo tiempo ver los cambios de la variable en el transcurso del tiempo.

Configuración inicial de un cultivo o lote

En este apartado se quiere analizar las forma en que se hace la configuración inicial de un

cultivo o lote, teniendo en cuenta geolocalización, información básica del cultivo,

información sobre el cultivo por medio de la base de datos del cultivo y toma de foto del

cultivo. En la tabla 9 se presenta el uso o no de los anteriores puntos a evaluar.

Tabla 9: Comparación de configuración de cultivo o lote en sistemas existentes

Sistemas Geolocalización Información Básica Información DB

Sistema

Foto

74

Wisecrop Si Si No No

Instacrop Si Si No No

Flower Power No Si Si Si

AquaDaia No Si No No

Appgro Si Si No No

Estos sistemas le dan una gran importancia a la información básica del cultivo o lote a sensar

siendo esta requerida en todos los sistemas evaluado, además es también importante poder

ubicar el lote en un mapa de la finca en estos sistemas.

En conclusión la configuración inicial de un cultivo debe contar con un formulario que

contenga la información básica del mismo y para una mejor experiencia de usuario ubicar este

en un mapa.

Figura 24: Reporte Wisecrop. Tomado de www.wisecrop.com

En conclusión un sistema de recolección de datos de riego debe contar con captadores

humanos tanto como con sensores para abarcar más usuarios, además de contar con

controladores que puedan ser controlados a distancia. Por el lado de la visualización es ideal

brindar al usuario información analizada y gráfica de la fluctuación de los datos. También al

configurar un cultivo es vital solicitar toda la información básica de este como es el LARA,

75

Área, Tipo de suelo, Fecha de inicio, Humedad inicial del suelo, Tipo de riego, Capacidad de

campo y Variedad de cultivo. Al igual de pedirle que ubique su cultivo en un mapa.

Comparación de estilos de arquitectura de servicios web

Existen múltiples estilos que pueden ser usados para la integración y comunicación de

aplicaciones o sistemas empresariales o de consumo general. La elección entre confiar en una

base de datos compartida, una transferencia de archivos, llamar procedimientos/métodos

remotos, o intercambiando mensajes de manera asincrónica es una decisión de arquitectura

que puede llegar a tener un gran impacto en los requisitos de todo el sistema. [31]

La colección de servicios web de tecnología (SOAP, WSDL, WS-Addressing, WS-

ReliableMessaging, WS-Security, etc.) [31, 32, 33] ofrece interoperabilidad para ambos: RPC

y estilos de integración de mensajes. [34] Los servicios web RESTful [35] también ofrecen

una posibilidad para implementar sistemas de llamada a procedimiento remoto a través de la

Web.

Para definir la arquitectura correcta para cada aplicación o sistema que se planee crear, se

vuelve necesario tomar una decisión de diseño, integración y tecnología basado en

argumentos técnicos y comparaciones justas de las capacidades y características ofrecidas por

cada alternativa.

SOAP y la colección WS-*

Pese a su percibida complejidad, el formato de los mensajes SOAP y el lenguaje de definición

de la interfaz WSDL han obtenido una adopción generalizada como las tecnologías que

permiten una verdadera interoperabilidad entre sistemas de middleware. Entre sus ventajas se

encuentra la transparencia e independencia de protocolo. El protocolo de transporte puede

cambiar en el transcurso de la comunicación del mensaje, pero siendo declarados como

cabeceras SOAP, los aspectos de QoS, tales como encriptación y transferencia confiable

pueden ser independientes del transporte usado.

El contrato WSDL provee una descripción procesable para la máquina de la sintaxis y

estructura correspondiente a los mensajes de solicitud y respuesta. Usando WSDL para

76

describir una interfaz del servicio ayuda a abstraer detalles de la plataforma de

implementación, protocolos de comunicación y detalles de serialización.

Pueden existir problemas de interoperabilidad cuando tipos de datos nativos y construcciones

del lenguaje de la implementación del servicio se encuentran en su interfaz. Dada la

expresividad de los estándares de la colección de WS-* hubo muchos problemas de este tipo

en las primeras implementaciones, las cuales se atribuyen principalmente a la falta de

coordinación entre XML y lenguajes (orientados a objetos) de programación existentes. [54,

55]

REST

El estilo REST está basado en 4 principios:

● Identificación de recursos a través de URI

● Interfaz uniforme

● Mensajes auto descriptivos

● Interacciones con estado a través de hipervínculos

Los servicios web RESTful son percibidos como sencillos debido a que operan sobre

estándares conocidos (HTTP, XML, URI, MIME). Una infraestructura tan liviana es muy

fácil de adoptar, el esfuerzo necesario para construir un cliente hacía un servicio RESTful es

muy pequeño para los desarrolladores, tan simple como probarlo desde un navegador sin

necesidad de ningún desarrollo. Dado a la posibilidad de trabajar con formatos livianos como

JSON o si se desea hasta con texto plano, REST tiene más cabida para optimizar el

rendimiento del Servicio Web.

Al no estar estandarizado hay confusión entre las mejores prácticas para construir servicios

RESTful. Algunas recomendaciones se han establecido no formalmente, existen defensores de

usar los 4 verbos (GET, POST, PUT, DELETE)8 y el uso de URIs “bonitas”, al igual que

existen otros que se basan en el mínimo denominador común y recomiendan usar solo 2

verbos (GET para solicitudes que no generan ningún cambio y POST para todo lo demás),

8 En HTTP 1.1 se hace referencia a 8 verbos: GET, POST, PUT, DELETE, HEAD, TRACE, OPTIONS,

CONNECT.

77

esto debido a las restricciones que puedan tener proxies y firewalls sobre las conexiones

HTTP.

REST vs SOAP

En esta sección realizaremos un análisis cualitativo basado en el trabajo realizado en [36, 61],

y el cuantitativo realizado en [58] de cada servicio y seguidamente una comparación de estos,

dividida en 5 secciones: Comparación de principios, comparación conceptual, comparación

tecnológica, comparación de rendimiento y comparación de preferencias de desarrollo en los

cuales se tienen en cuenta los siguientes factores:

1. Comparación de principios

1.1. Capas de protocolo

1.2. Acoplamiento débil

2. Comparación conceptual

2.1. Estilo de integración

2.2. Diseño de los contratos

2.3. Representación/Modelado de

recursos

2.4. Patrones de intercambio de

mensajes

3. Comparación tecnológica

3.1. Protocolo de transporte

3.2. Formato de carga útil

3.3. Identificación del servicio

3.4. Descripción del servicio

3.5. Fiabilidad, seguridad,

transacciones

4. Comparación de rendimiento

4.1. Tiempo total de respuesta

4.2. Tamaño de paquetes

5. Comparación de preferencias de

desarrollo

5.1. Diferencias percibidas

5.2. Accesibilidad y facilidad de

aprendizaje

5.3. Idoneidad para casos de uso

Comparación de principios

Un Servicio Web tiene como objetivo la comunicación de información, y esto lo hace a través

de unos principios definidos, los cuales determinan cómo el estilo arquitectónico, por ejemplo

REST, maneja las necesidades y objetivos del diseño. En la Tabla 10 se muestra la

comparación de principios que se han establecido entre REST y SOAP. Se comparan las

capas de protocolo y el acoplamiento débil, obteniendo que REST opera sobre HTTP en el

nivel de aplicación y transporte mientras SOAP solo en el nivel de transporte. En cuanto a

78

acoplamiento débil se observa que en SOAP se puede soportar mientras en REST no es

posible.

Tabla 10: Comparación de Principios. Tomado de [36]

Principio y Aspectos de la

Arquitectura REST SOAP

Capas de protocolo 2 1

HTTP: nivel de aplicación Si

HTTP: nivel de transporte Si Si

Acoplamiento débil 1 2

Tiempo/Disponibilidad Si

Ubicación Si Si

Capas de protocolo

Para REST la Web es vista como un medio para publicar información accesible globalmente,

cada aplicación se convierte en parte de la Web usando URIs para identificar los recursos que

ofrecen, usando los verbos de HTTP para exponer operaciones o recursos.

Para SOAP, la Web es vista como un medio para transportar mensajes, los cuales son

intercambiados entre diferentes ‘endpoints’ de los servicios Web. Esto quiere decir, que

utilizan la Web para tener la habilidad de interactuar entre sí, pero no hacen parte de esta.

Acoplamiento débil

Un aspecto importante del acoplamiento débil tiene que ver con la habilidad de los

consumidores de interactuar con el proveedor del servicio hasta cuando este no está

disponible [36], evitando así que los clientes sean afectados cuando el servicio sufre de

problemas temporales.

Debido a que en SOAP existe la capacidad para implementar sistemas basados en mensajes

(No RPC), SOAs, el bus de mensajes hace posible llegar a tal grado de acoplamiento débil,

dado que los mensajes pueden ser transferidos usando colas fiables y persistentes. Dado que

los servicios Web RESTful se enfocan exclusivamente en interacciones de la forma RPC, en

esta tecnología no puede llegar a implementarse un sistema que soporte dicho acoplamiento,

79

cuando el servidor está caído todos los clientes se ven afectados y deben prever este

escenario.

Comparación conceptual

En la Tabla 11 se realiza una comparación conceptual de las decisiones requeridas para

desarrollar el servicio web usando alguno de los dos estilos. En los cuatro aspectos

comparados, para el estilo REST no es necesario tomar una decisión, debido a su simplicidad

solo hay una opción mientras que para SOAP, por su complejidad, presenta opciones en tres

de los cuatro.

Adicionalmente a estos aspectos hay que tener en cuenta para el estilo REST: la identificación

de recursos (de que objeto del mundo real fueron abstraídos), el diseño del URI (cada URI

debe ser “bonita” [43]), la semántica de la interacción de recursos (decidir qué verbos se

deben usar) y la relación de estos.

Tabla 11: Comparación conceptual. Tomado de [36]

Decisiones de Arquitectura REST SOAP

Estilo de integración 1 2

Base de datos compartida

Transferencia de archivos

Llamada a procedimiento remoto Si Si

Mensajería Si

Diseño de los contratos 1 2

Contrato de primera Si

Contrato de última Si

Contrato de menos Si

Representación de datos 1 1

Régimen XML Opcional Si

Hazlo tu mismo Si

Patrones de intercambio de 1 2

80

mensajes

Solicitud – Respuesta Si Si

Un sentido Si

Diseño de los contratos

Contrato de primera hace referencia a iniciar el desarrollo de un servicio a partir de la

especificación de su interfaz, mientras que el contrato de ultima un servicio existente es

publicado con un contrato generado automáticamente. En REST no es necesario tomar una

decisión sobre cuáles son las operaciones disponibles (Contrato de menos). Es recomendable

enfocarse en definir los recursos expuestos.

Representación/Modelado de datos

El content-type9 de cada recurso debe ser seleccionado de la lista de formatos estándar, si se

escoge una representación basada en XML no es necesario.

Patrones de intercambio de mensajes

Determinar si cada operación actúa de manera sincrónica o asincrónica.

Comparación tecnológica

En la Tabla 12, se muestra un comparación entre los dos estilos REST y SOAP, la cual

destaca que SOAP tiene una mayor cobertura de protocolos para realizar el transporte

mientras REST solo funciona sobre HTTP. Por otro lado, REST posee múltiples formatos

para la carga o transferencia de datos mientras que SOAP solo trabaja en XML, mientras que

SOAP posee servicios complementarios (opcionales) que le brindan alternativas en temas

como Identificación de recursos, Confiabilidad, Seguridad, Transacciones y Descubrimiento

del servicio. Claramente SOAP es un estilo más completo y estandarizado, pero esto a su vez

significa que tiene mayor grado de complejidad para el desarrollo tanto del servicio como tal,

como de las aplicaciones que lo consumen.

Tabla 12: Comparación tecnológica. Tomado de [36]

Decisiones de Arquitectura REST SOAP

9 Content-type: Tiene como objetivo describir la información contenida en el cuerpo de una solicitud.

81

Protocolo de transporte 1 7

HTTP Si Si (POST)

TCP Si

SMTP Si

JMS Si

MQ Si

BEEP Si

IIOP Si

Formato de carga útil 6 1

XML (SOAP) Si Si

XML (POX) Si

XML (RSS) Si

JSON Si

YAML Si

MIME Si

Identificación del servicio 1 2

URI Si Si

WS-Addressing Si

Descripción del servicio 3 2

Documentación textual Si

Régimen XML Opcional Si

WSDL WSDL 2.0 Si

WADL Si

Confiabilidad 1 4

WS-Reliability Si

WS-ReliableMessaging Si

Nativo Si

Hazlo tu mismo Si Si

82

Seguridad 1 2

HTTPS Si Si

WS-Security Si

Transacciones 1 3

WS-AT, WS-BA Si

WS-CAF Si

Hazlo tu mismo Si Si

Protocolo de transporte

La Web está construida sobre el protocolo HTTP, para construir servicios RESTful no hay

elección alguna dado que solo se comunica mediante éste. SOAP es independiente y se puede

transferir mediante múltiples protocolos, a través del WSDL se define el protocolo adecuado

de transporte, en la Tabla 12 se muestran algunas opciones de protocolos disponibles, los

mensajes se pueden transportar usando el protocolo más adecuado para cada caso.

Formato de carga útil

Servicios web RESTful no poseen un único formato para representar los recursos, por el

contrario pueden escoger de la variedad de tipos de documento MIME, esto puede llegar a

complicar la comunicación ya que el cliente debe conocer de antemano cómo va a recibir la

información para poder tratarla acorde. Mientras que SOAP solo es presentado en XML, sin

embargo, en la experiencia en desarrollo de servicios web (al igual que en [36]) el beneficio

de trabajar con JSON en vez de XML puede superar el costo de mantenimiento y

complicaciones en la interoperabilidad que puede llegar a presentar REST.

Identificación del servicio

Servicios Web RESTful operan sobre el estándar URI para el nombramiento de la dirección

de los recursos, lo cual permite encapsular toda la información sobre el recurso en este

mismo, adicionalmente pueden ser referenciados fácilmente, compartidos y dada su

legibilidad hasta usados para publicidad. [44]

Descripción del servicio

83

Mientras que el Servicio Web SOAP se basan en una estandarizada, fuertemente-tipado

interfaz (WSDL), los RESTful han adoptado una más orientada al humano, con descripciones

textuales dando a los desarrolladores extensa documentación del API proveído. En general,

tener una buena documentación ayuda enormemente a reducir el tiempo de prueba y error

pero no puede reemplazar el uso de un compilador de una descripción interfaz de lenguaje.

Para atacar esta limitación se ha presentado el WADL [45] al igual que el WSDL 2.0 se puede

aplicar para describir servicios Web RESTful

Fiabilidad, Seguridad y Transacciones

Ambos estilos soportan HTTP y HTTPS, garantizando así una seguridad básica usada

ampliamente en el ambiente web.

La colección de servicios WS-* contiene especificaciones opcionales para cubrir las

propiedades de QoS respecto al intercambio de mensajes, aportando así una calidad en la

comunicación independiente del protocolo de transporte.

Comparación de rendimiento

Debido a que ya se han realizado numerosos estudios [56,57,58,59,60] en cuanto al

rendimiento de SOAP y REST, y comparaciones entre estos; en esta sección nos basaremos

en experimentos ya realizados y publicados para realizar una comparación de rendimiento

entre estos dos estilos.

La comunicación SOAP genera un mayor tráfico en la red, mayor latencia y retardos de

procesamiento, como una alternativa a estas implicaciones se usa la arquitectura RESTful. En

[60] se concluye que el uso de mensajes SOAP requiere un gran ancho de banda,

“codificación y descodificación de mensajes SOAP basado en XML consume recursos”. Por

lo cual se prefiere usar servicios web RESTful para obtener mejor rendimiento. En [58] se

evalúa el rendimiento de ambos servicios web en el ambiente de la computación móvil. Dos

puntos de referencia están implementados basados en parámetros de tipo float10 y string11, el

cliente de servicio corre en un emulador móvil, los resultados se capturan para ambos estilos

en términos de tiempo total de respuesta y tamaño del mensaje, la Tabla 8 muestra que el

10

Float: https://msdn.microsoft.com/es-co/library/b1e65aza.aspx 11

String: https://docs.oracle.com/javase/7/docs/api/java/lang/String.html

84

tamaño de los mensajes en el estilo REST es de 9 a diez veces menor que el tamaño de los

mensajes basados en SOAP. De igual manera, el tiempo requerido para el procesamiento y

transmisión es de 5 a 6 veces menor que servicios web basados en SOAP.

Tabla 13: Resultados de rendimiento de servicios web SOAP y REST en la computación

móvil. Tomado de [58]

Número de

elementos de la

matriz

Tamaño del mensaje (byte) Tiempo (Milisegundos)

SOAP/HTTP REST (HTTP) SOAP/HTTP REST (HTTP)

Referencia #1: Concatenación de texto

2 351 39 781 359

3 371 48 828 344

4 395 63 828 359

5 418 76 969 360

Referencia #2: Adición de números flotantes

2 357 32 781 359

3 383 36 781 407

4 409 35 922 375

5 435 39 1016 359

Comparación de preferencias de desarrolladores

Existen numerosos estudios para comparar REST y la colección WS-* en cuanto a

rendimiento (ver sección Comparación de rendimiento) y características, sin embargo se ha

dejado de lado un aspecto que se considera importante al momento de decidir por un estilo

arquitectónico para la construcción de un Servicio Web. En [61], 69 desarrolladores novatos

aprendieron ambas tecnologías e implementaron aplicaciones de telefonía móvil que

recuperan información de datos de sensores, en ambas arquitectura de servicio RESTful y

WS-*.

Diferencias percibidas

85

En la Tabla 14, se observan unas diferencias cualitativas de ambos estilos. REST fue

percibido “muy fácil de entender, aprender e implementar, ligero y escalable”, mientras que

SOAP “permite operaciones más complejas, provee alta seguridad y un mayor nivel de

abstracción”.

Tabla 14: Diferencias percibidas. Tomado de [61]

REST ( N = 69 ) #

Fácil de entender, aprender e implementar 36

Ligero 27

Fácil de usar por los clientes 25

Más escalable 21

No se requieren librerías 17

Accesible en navegadores 14

Re usa funcionalidades http 10

WS-* ( N = 69 ) #

WSDL permite publicar una interfaz WS-* 31

Permite operaciones más complejas 24

Ofrece mejor seguridad 19

Provee un nivel más alto de abstracción 11

Tiene más características 10

Accesibilidad y facilidad de aprendizaje

Los resultados de la encuesta realizada en [61] mostraron que REST es estadísticamente más

fácil y rápido de aprender que SOAP. Justificando que los Servicios Web RESTful son más

fáciles de aprender debido a que se basan en tecnologías tales como HTTP y HTML, las

cuales son muy conocidas y familiares para personas involucradas en tecnología.

Como se observa en la Figura 25, se percibe una mayor accesibilidad para el aprendizaje de

servicios RESTful sobre WS-*, alrededor de 40 personas consideran la velocidad de

aprendizaje ‘no rápida’ y 25 ‘para nada rápida’, mientras sobre 40 encuestados consideran la

86

velocidad de aprender servicios REST como ‘rápida’ y alrededor de 25 la consideran ‘muy

rápida’.

Figura 25: Percepción de Accesibilidad al Aprendizaje. Tomado de [61]

Como se observa en la Figura 26, los encuestados perciben que la curva de aprendizaje es

mucho menor para servicios RESTful, alrededor de 45 encuestados perciben que los servicios

RESTful tienen un nivel de facilidad ‘fácil’ mientras menos de 10 lo consideran así para

servicios basados en SOAP.

Figura 26: Percepción de facilidad de aprendizaje. Tomado de [61]

87

Idoneidad para casos de uso

En la Tabla 15, se observa los casos de uso donde cada estilo es recomendado, REST es

percibido como adecuado para aplicaciones simples, mientras que SOAP para aplicaciones

donde la seguridad es importante.

Tabla 15: Idoneidad para casos de uso. Tomado de [61]

REST ( N = 37 ) #

Para aplicaciones simples, con funcionalidad atómica 23

Para las aplicaciones web y aplicaciones web híbridas 14

Si la seguridad no es un requisito básico 8

Para las aplicaciones centradas en el usuario 6

Para entornos heterogéneos 6

WS-* ( N = 37 ) #

Para aplicaciones seguras 20

Cuando se necesitan contratos en formatos de

mensajes

16

Directrices para la elección de una arquitectura de servicios

Aunque el estudio realizado en [61] es enfocado al internet de las cosas IoT, se considera que

las recomendaciones y directrices son muy pertinentes para el presente proyecto debido a su

naturaleza móvil. En la Tabla 16, se muestran una serie de directrices para elegir una

arquitectura de servicios, es decir, que forma de comunicación elegir entre REST y SOAP,

dependiendo del (de los) requisito (s) de cada servicio se puede decidir por la arquitectura con

mayor recomendación (+).

Tabla 16: Directrices para la elección de una arquitectura de servicios. Tomado de [61]

Requisito REST SOAP Justificación

Móvil y Embebido + - Ligero, Soporte IP/HTTP

Facilidad de uso ++ - Fácil de aprender

Fomenta la adopción de ++ - Fácil de prototipar

88

terceros

Escalabilidad ++ + Mecanismos Web

Integración Web +++ + Web es RESTful

Negocios + ++ QoS y seguridad

Contratos de servicio + ++ WSDL

Seguridad - +++ WS-Security

Como se observa REST se recomienda en los aspectos de facilidad de uso, integración web,

escalabilidad, móvil y embebido, pero a diferencia de SOAP no se considera ideal para la

implementación de sistemas donde la seguridad toma una vital importancia.

Análisis de estilos de arquitectura de servicios web

Después de haber realizado una recopilación bibliográfica [32, 36, 56, 57, 58, 59, 60, 61]

sobre las ventajas y desventajas de cada protocolo (SOAP y REST), se ha encontrado que

SOAP es un protocolo basado en mensajes que están escritos en XML, mientras que REST es

un protocolo más simple.

REST tiene ventajas comparadas con SOAP, como por ejemplo, requiere de poca

infraestructura de apoyo sobre HTTP ya que están soportados por la mayoría de los lenguaje

de programación, sistemas operativos y servidores. Aunque a diferencia de SOAP, éste sólo

soporta el protocolo HTTP, lo cual puede ser una desventaja, ya que SOAP permite la

transmisión de mensajes XML sobre HTTP y permite trabajar con protocolos de capa de

transporte. Sin embargo, en muchos casos una transferencia sobre HTTP es suficiente para

satisfacer una necesidad específica, como se puede considerar el caso de este proyecto

aplicado a los sistema de riego.

SOAP es tradicionalmente un enfoque basado en estándares, pero la mayoría de Servicios

Web con API públicas ofrecen interfaces REST, mientras que algunos ofrecen ambos SOAP y

REST. Dos gigantes del ámbito empresarial, Salesforce12 y Amazon13, ofrecen ambos SOAP

12

Salesforce: https://www.salesforce.com 13

Amazon Web Services: https://aws.amazon.com/

89

y REST, aunque para el caso de AWS en su blog oficial14 han resaltado un consumo de 80%

para REST sobre 20% para SOAP. Por otro lado, SOAP es muy usado en software

empresarial, por ejemplo, Google implementa todos sus servicios usando SOAP, con la

excepción de Blogger que usa XML-RPC. [56]

Mientras que SOAP proporciona una manera estandarizada para acceder y manipular objetos

remotamente, REST se enfoca en las operaciones que pueden ser ejecutadas sobre los

recursos que expone. Dado que REST hereda operaciones de HTTP, es la opción más

acertada para crear un Web API abierta.

Comunicando información de objetos de ida y vuelta puede consumir mucho ancho de banda,

que puede ser limitada en ambientes donde la conexión es escasa o costosa, por ejemplo en un

cultivo de caña de azúcar en una ubicación remota, una API consumida por una aplicación

móvil es uno de los casos más comunes donde se debe evitar el uso de SOAP debido a su

mayor complejidad de mensajes y consumo de recursos.

El requisito principal de la computación móvil es la conexión del sistema móvil a un ambiente

de computación distribuido convencional. [60] Debido a que los posibles clientes que estarían

consumiendo el servicio web que se desarrolla en este proyecto pueden llegar a tener un

componente grande de computación móvil (debido a la ubicación, en algunos casos, remota

de los cultivos de caña de azúcar) y por las consideraciones mencionadas en este análisis se

considera que el estilo RESTful brinda unas ventajas sobre SOAP para el desarrollo del

Servicio Web. Sin embargo, considerando que el ámbito del enfoque de este proyecto es

empresarial la seguridad toma una importancia alta, por esto se considera que para los

potenciales clientes puede ser importante contar con ambas opciones de diseño estructural,

por cuestiones de tiempo y simplicidad el alcance de este proyecto se concentrará en el

desarrollo del servicio RESTful dejando explícito la necesidad de un desarrollo de servicio

SOAP para futuros trabajos.

14

https://aws.amazon.com/blogs/aws/rest_vs_soap/

90

Requisitos del sistema

Requisitos de usuario

Esta sección describe los requisitos de usuario del sistema de recolección de datos. La

especificación de requisitos de usuario se divide en requisitos de capacidad y requisitos de

restricción impuestos al sistema por el usuario.

La especificación de los requisitos se hace en una tabla con las siguientes propiedades:

● Identificador: Identificador único del requisito.

● Descripción: Descripción del requisito.

● Necesidad: Importancia del requisito para el usuario. (Esencial, Deseable)

● Prioridad: Indica la prioridad establecida para el requisito siendo el valor alto el de

mayor prioridad y baja el de menor prioridad. (Alta, Media, Baja)

● Estabilidad: Indica si el requisito está sujeto a modificaciones. (Estable, No estable)

● Fuente: Indica la procedencia de la especificación del requisito. (Cliente, Dev

(Programador) )

Requisito de capacidad

Los siguientes requisitos hacen referencia a la capacidad de usuario del sistema.

Tabla 17: Requisitos de Capacidad de usuario del sistema

ID Descripción Necesidad Prioridad Estabilidad Fuente

UR01 El sistema debe mostrar la información

en la interfaz en base al usuario

logueado

Esencial Alta Estable Cliente

UR02 El sistema debe soportar el ingreso de

variables personalizadas indicadas por

un usuario

Esencial Alta Estable Cliente

UR03 El sistema debe permitir al usuario

ingresar sensores en los lotes creados

Esencial Alta Estable Dev

UR04 El sistema debe poder alterar el estado Esencial Alta Estable Dev

91

de los elementos almacenados en el

mismo

UR05 El sistema debe proveer al usuario una

interfaz de ingreso al sistema

Esencial Media Estable Cliente

UR06 El sistema debería incluir el método de

recuperación de contraseña a un usario

que se ha olvidado de ella

Deseable Baja No estable Dev

UR07 El sistema debe bloquear determinadas

acciones a usuarios que no cuenten con

los permisos necesarios

Esencial Alta Estable Dev

UR08 El sistema debe ser capaz de captar

datos recuperados por sensores que

estén incluidos en el mismo

Esencial Alta Estable Cliente

UR09 El sistema debe ser capaz de localizar el

cultivo y/o lote en el mapa de la finca

Deseable Baja No estable Cliente

UR13 El sistema debe brindar

retroalimentación a los usuarios de las

acciones que estos implementen en el

sistema

Deseable Media No estable Dev

Requisito de restricción

Los siguientes requisitos hacen referencia a las restricciones impuestas al usuario en el

sistema.

Tabla 18: Requisitos de restricciones impuestas al usuario en el sistema

ID Descripción Necesidad Prioridad Estabilidad Fuente

UR10 El sistema debe proveer ingreso a el

desde cualquier lugar del mundo

Esencial Alta Estable Cliente

UR11 El sistema debe poder ser accedido

desde cualquier dispositivo móvil

Esencial Media No estable Cliente

UR12 El sistema debe poder ser accedido Esencial Alta Estable Dev

92

desde cualquier dispositivo IOS con

sistema operativo iOS 9 y posteriores

Requisitos de hardware

Esta sección describe los requisitos de hardware del sistema de recolección de datos.

La especificación de los requisitos se hace en una tabla con las siguientes propiedades:

● Identificador: Identificador único del requisito.

● Descripción: Descripción del requisito.

● Necesidad: Importancia del requisito para el usuario. (Esencial, Deseable)

● Prioridad: Indica la prioridad establecida para el requisito siendo el valor alto el de

mayor prioridad y baja el de menor prioridad. (Alta, Media, Baja)

● Estabilidad: Indica si el requisito está sujeto a modificaciones. (Estable, No estable)

Tabla 19: Requisitos de hardware

ID Descripción Necesidad Prioridad Estabilidad

HR01 Capacidad mínima 256 MB, para computadores Esencial Alta Estable

HR02 RAM mínima de 2G recomendable de 4G, para

computadores

Esencial Alta Estable

HR03 Procesador mínimo i3 recomendable i5, para

computadores

Esencial Alta Estable

HR04 Sensor HL-69 Esencial Alta Estable

HR05 Sensor YL-83 Esencial Alta Estable

HR06 Modulo wifi ESP8266 Esencial Alta Estable

HR07 Arduino UNO Esencial Alta Estable

93

HR08 Ipad con sistema apple A7 o posteriores Esencial Alta Estable

HR09 Ipad con memoria mínima de 1024 MB LPDDR3

RAM

Esencial Alta Estable

HR10 Ipad con “storage” mínimo de 16GB Esencial Alta Estable

HR11 Ipad con gráfica Quad-core PowerVR G6430 Esencial Alta Estable

HR12 Ipad con CPU mínima de 1.3 GHz dual-core Apple

Cyclone

Esencial Alta Estable

HR13 Ipad con conectividad mínima de Wi-Fi802.11

a/b/g/n @ 2.4 GHz and 5GHz

Esencial Alta Estable

Requisitos de software

Esta sección describe los requisitos de software del sistema de recolección de datos. La

especificación de requisitos de software se divide en requisitos funcionales, requisitos no

funcionales de interfaz y requisitos no funcionales de operación que especifican cómo debe de

llevarse a cabo.

La especificación de los requisitos se hace en una tabla con las siguientes propiedades:

● Identificador: Identificador único del requisito.

● Descripción: Descripción del requisito.

● Necesidad: Importancia del requisito para el usuario.

● Prioridad: Indica la prioridad establecida para el requisito siendo el valor alto el de

mayor prioridad y baja el de menor prioridad.

● Estabilidad: Indica si el requisito está sujeto a modificaciones.

● Fuente: Indica la procedencia de la especificación del requisito.

Requisitos funcionales

Los requisitos funcionales que a continuación se detallan definen qué hace el sistema.

94

Tabla 20: Requisitos funcionales del sistema

ID Descripción Necesidad Prioridad Estabilidad Fuente

SR01 El sistema debe mostrar la información

proveída por el usuario en la interfaz

Esencial Alta Estable UR01

SR02 El sistema debe ser capaz de captar

datos tanto ingresados por un usuario

humano como por un controlador

(Arduino)

Esencial Alta Estable UR02

SR03 El sistema debe ser capaz de permitir a

usuarios autorizados eliminar, crear,

actualizar y/o modificar cultivos y lotes

Esencial Alta Estable UR04

UR07

UR06

SR10 El sistema debe ser capaz de enviar

notificaciones al usuario de cambios en

el cultivo y/o lote

Deseable Bajo No estable UR04

SR11 El sistema debe permitir la

geolocalización el cultivo en el mapa

Deseable Medio No estable UR09

Requisitos de interfaz

Los requisitos de interfaz definen el modo en que interactúan y se comunican las interfaces y

diferentes módulos del sistema.

Tabla 21: Requisitos de interfaz e interacciones

ID Descripción Necesidad Prioridad Estabilidad Fuente

SR12 El sistema debe ser capaz de ser

accedido desde cualquier explorador

web que esté soportado: Chrome 21.0,

Safari 10.0, Mozilla 18.0, Safari 6.1 y

Opera 17.0

Esencial Alta Estable UR10

SR13 Els sistema debe permitir descarga en

dispositivos iOS con sistema operativo

iOS 9 o superiores

Esencial Media Estable UR11

UR12

SR14 El sistema debe tener una comunicación Esencial Alta Estable HR01

95

entre los pares por medio de HTTPS HR07

SR15 El sistema debe tener una comunicación

con sensores por medio de

controladores (Arduino)

Esencial Alta Estable HR01

HR02

HR03

HR04

Requisitos de operación

Los requisitos de operación definen cómo debe de operar del sistema.

Tabla 22: Requisitos de operación

ID Descripción Necesidad Prioridad Estabilidad Fuente

SR16 El sistema debe retroalimentar al usuario

después de que este realice alguna

acción en el sistema.

Esencial Alta Estable UR13

SR17 El sistema debe solicitar confirmaciones

en operaciones de alto riesgo como la

eliminación de un cultivo.

Deseable Media No estable UR13

SR18 El sistema debe generar reportes de

forma gráfica con charts y/o tablas

Deseable Alta Estable UR13

UR04

Requisitos de recursos

Los requisitos de recursos definen los recursos mínimos para que la aplicación pueda ponerse

en marcha.

Tabla 23: Requisitos de recursos

ID Descripción Necesidad Prioridad Estabilidad Fuente

SR20 El sistema debe contener un servicio

web con operaciones de CRUD e

implementaciones de funciones a

realizar después, antes o mientras de

algún cambio, creación o eliminación

Esencial Alta Estable UR04

UR08

96

SR21 El sistema requiere que los dispositivos

que se conecten estén conectados a una

red. Si se usa en un lugar sin conexión a

internet y la red sea la misma en la que

está corriendo el servicio.

Esencial Alta Estable UR12

UR13

UR14

UR15

SR22 El sistema requiere de un dispositivo

que sea capaz de hacer entender la

recolección de datos que obtienen los

sensores como es el caso de un Arduino

para este diseño

Esencial Alta Estable HR01

SR23 El sistema requiere de sensores

compatibles con la unidad de control

que estén conectados y se comunique

con el SW

Esencial Alta Estable HR02

HR03

HR04

Requisitos de seguridad

Los requisitos de seguridad definen las características de seguridad del sistema.

Tabla 24: Requisitos de seguridad

ID Descripción Necesidad Prioridad Estabilidad Fuente

SR19 El sistema requiere que cualquier

operación de un usuario humano se

debe ser enviado headers de

autorización para ello

Esencial Alta Estable UR04

SR09 El sistema requiere que los usuarios se

conecten por usuario y contraseña

Escencial Medio Estable UR05

SR24 El sistema requiere tener un tiempo de

vencimiento de la autorización

alrededor de los 15 min

Escencial Medio Estable UR04

97

Propuesta de Diseño del Sistema

Se propone el diseño de un sistema que permita captar variables de un sistema de riego y

generar gráfica por variable con los valores obtenidos de la misma con información básica del

lote.

Las variables soportadas en primera instancia son: Factor de cultivo, Riego efectivo,

Precipitación efectiva, Precipitación efectiva real, Evaporación, Evapotranspiración,

Humedad del suelo y Humedad del suelo real. Las anteriores variables soportadas se capturan

de diferente forma en el sistema.

Formas de captación del sistema

A continuación se presenta las formas de captación del sistema y las variables que soportan

los mismos.

Ingresada por el usuario

Estas son las variables que el usuario ingresa manualmente en el sistema por medio de algún

dispositivo de entrada (plataforma web o móvil), las cuales son: Factor de cultivo, Riego

efectivo, Precipitación efectiva, Evaporación.

Calculada por el sistema

Estas son las variables que el sistema calcula en base a una fórmula estipulada en el mismo,

las cuales son: Evapotranspiración (cálculo: El producto de Evaporación por Factor de

cultivo) y Humedad de suelo (cálculo: Humedad de suelo anterior menos la suma de

Evapotranspiración con Precipitación efectiva y Riego efectivo ).

Captada por sensor

Estas son las variables que son obtenidas por medio de un sensor que es controlado por una

tarjeta programada Arduino y por el mismo hace peticiones de almacenamiento de estas, las

cuales son: Humedad del suelo real y Precipitación efectiva real.

98

Tipos de Usuario (Perfiles)

Este sistema cuenta con manejo de usuarios, por lo tanto cumplen un roles específico los

cuales son: Visitante, Registrador y Administrador. A continuación exponemos el rol que

cumple cada uno en el sistema:

Visitante

Estos usuarios solo pueden ver la información de cultivos, lotes, sensores y variables. No

tienen permitido ver el listado de usuario y al igual que no pueden modificar, crear o eliminar

ningún elemento del sistema (cultivo, lotes, sensores, usuarios o variables).

Registrador

Estos usuarios pueden hacer lo mismo del visitante además de poder ver el listado de usuarios

y poder crear y modificar los elementos usuarios, cultivo y lotes. No tienen permitido crear y

modificar sensores y variables y tampoco pueden eliminar usuarios, cultivos, lotes, sensores o

variables

99

Administrador

Estos usuarios pueden hacer lo mismo que el registrador además de crear y modificar

sensores y variables personalizadas y también pueden eliminar usuarios, cultivos, lotes,

sensores o variables personalizadas

Componentes del sistema

El sistema cuenta con tres clientes, dos de visualización y captación de datos manuales y

calculados y uno de captador de datos por sensores. Estos clientes son:

Plataforma virtual

Se puede acceder a esta por medio de un explorador moderno preferiblemente Chrome para

una mejor experiencia. Desde esta se puede visualizar todos los elementos del sistema

almacenados tales como los cultivos, lotes, variables, usuarios y sensores. En la misma el

usuario puede interactuar creando, modificando y eliminado algunos elementos del sistema

que tienen permitido interactuar. Esta plataforma cuenta con mayor información visible para

los usuarios y no importa si el usuario accede desde un computador o un dispositivo móvil.

Dispositivo móvil

Se puede acceder a esta por medio de un dispositivo iOS 9 o posteriores y esta solo para iPad.

Desde esta se puede visualizar todos los elementos del sistema. En la misma el usuario puede

interactuar creando y modificando elementos así esté en modo offline.

Tarjeta programada Arduino

Este cliente es el comunicador de sensores al sistema. Desde la tarjeta se obtienen los valores

captados por los sensores conectados a unos de los pines que en el mismo instante que se

obtiene el valor este envía al servicio el dato o datos recolectados. Este solo puede actualizar y

añadir valores a las variables representativa del sensor.

El sistema es capaz de hacer CRUD en la base de datos (NoSQL) realizando operaciones de

creación, lectura, actualización y eliminado de datos dependiendo del cliente y acción

solicitada. Así mismo se activan operaciones que escuchan eventos de creación, eliminación y

100

actualización que modifican valores del elemento o elementos relacionados. Las operaciones

que soporta el sistema son:

● CRUD Cultivo

● CRUD Lote

● CRUD Usuario

● Leer Variable

● CRUD Sensor

● Trigger Variable

● Trigger Sensor

● Trigger Cultivo

● Trigger Lote

● CRUD Variable personalizada

Arquitectura del sistema

Se propone posteriormente una arquitectura para el diseño propuesto. Los módulos que

componen este son: navegador web, aplicación móvil, Arduino, sensores, modulo wifi,

servicio web y base de datos.

Navegador web

El navegador web representa el cliente que se conecta al sistema por medio de un explorador

tal como Chrome, Safari entre otros. Su comunicación con el servicio web es por medio de

peticiones HTTP preferiblemente HTTPS por más seguridad en el envío de datos.

ReactJS con redux son las tecnologías a usar en la implementación del cliente. Pero también

se puede hacer uso de otras tecnologías como es Angular, Ember, Polymer u otras populares o

usadas en el momento de la intención de uso de este diseño. El cliente contiene una

integración directa con el servidor de almacenamiento de información con el fin de enseñar la

información a almacenar de forma instantánea (real-time-database) en todos los dispositivos

conectados. Este debe contener un generador de reportes por ello se hace uso de tecnologías

de generación de gráficas haciendo uso de Google Charts para esta implementación, pero en

la comunidad se pueden encontrar otras librerías tales como ChartsJs, D3js, Recharts,

Graphics.

El cliente web se necesita para tener una interfaz entendible, de visualización e ingreso de

datos para un usuario y que se integre con el servicio web que interopera con los demás

101

clientes conectados por medio de un mismo cliente web u otro cliente los cual puede ser un

controlador en el sistema de riego o aplicación móvil.

Aplicación móvil

La aplicación móvil representa el cliente que se conecta al sistema por medio de un aplicativo

nativo o híbrido. Su comunicación con el servicio web es por medio de peticiones HTTPS.

El aplicativo dependiendo del tipo de dispositivo se pondrá en funcionamiento con las

tecnologías pertinentes, en el caso de este diseño se usará un dispositivo con sistema operativo

iOS con soporte desde iOS 9 y posteriores que soportan Swift 3.0. El cliente se integra con

“Firebase real time database” en el uso de lectura de datos aprovechando la funcionalidad

“real-time” que ofrece. Para la visualización de reportes de la información almacenada se

hace uso de Charts 3.0.

La aplicación móvil se es necesaria en el caso de uso de un cliente sin computador y apartado

de la finca y con conexión a internet el cual desea estar pendiente del estado de su cultivo.

Arduino

La tarjeta programable Arduino hacer representación de un controlador de riego, la cual

obtiene y distribuye la información capturada por sensores, al mismo tiempo que con la

integración de un sistema embebido asignar tareas a bombas y/o dispositivos de riego en el

lote (hectárea controlada). En el diseño planteado la función del Arduino se limita a la

captación y envío de datos al servicio web haciendo uso de un módulo wifi con el cual pude

hacer peticiones HTTPS.

La tarjeta programable se necesita para tener un dispositivo que emule la captación y envío de

información para ser probado el sistema planteado. Se aconseja que si es para uso industrial

hacer consultas de integración de sistemas embebidos por controladores a servicios por

motivos de protocolos únicos de cada dispositivo.

102

Sensores

Los sensores captan la información “real” del suelo, en este diseño se emplean sensores

académicos para la precipitación efectiva (lluvia) y humedad del suelo. Se usan por

demostración de captación de información. Estos se comunican únicamente con el Arduino

por medio de los pines del mismo. Se usan los sensores HL-69 para la humedad de suelo y

YL-83 para lluvia

Modulo wifi

El módulo wifi se emplea para darle conectividad al arduino con la red, el módulo

implementado en el diseño es el Wifi ESP8266.

Servicio web

El servicio web (SW) hace referencia a la parte lógica que se comunica con el servicio de

almacenamiento para crear y actualizar datos. Este diseño hace uso de una base de datos

NoSQL no contiene funcionalidad de triggers como es en el caso de las SQL, debido a hello si

se decide por este sistema de almacenamiento el servicio debe contener funciones que hagan

de triggers y realicen operaciones necesarias para las funcionalidades de variables

personalizadas, campos formulan, promedio y/o cálculo de valores numéricos como son el

LARA, capacidad de campo entre otros del cultivo o algún otro método necesario que se

aplique a más de un elemento después, antes o durante la eliminación, actualización o

creación de elementos en el sistema.

Figura 27: Tendencia de uso de lenguajes de SW entre: NodeJs, Laravel, Java EE 6,

Django, Ruby and rails. Tomado de Google Trends.

103

En el diseño propuesto se hace uso de Node.Js como lenguaje del SW siendo uno de los más

populares en la comunidad hoy en día, la figura 27 se aprecia las tendencias de uso de los

lenguajes al lado de SW: Laravel, Node.Js, Django, Java EE 6 y Ruby and rails de las cuales

la preferida por la comunidad de programadores es Laravel seguida por Node.Js siendo este

último JavaScript al lado del SW. Se usan los módulos Express que [96] proporciona un

conjunto sólido de características para las aplicaciones web, la figura 28 las tendencias de los

programadores están en usar Hapi.js o Express.js para ser implantados como complemento de

Node.Js . Para el servicio de almacenamiento el cual es por Firebase el usado en este diseño se

usa el módulo firebase-admin.

El SW se almacena para hacer el hosting en una instancia EC215 de AWS16 con sistema

operativo Linux, de tipo t2.small, en la zona eu-west-1a. Se instala dentro de esta Forever17 y

Node.Js 6.10.3 para correr el código del SW y la aplicación web .

Figura 28: Tendencia de uso de frameworks Node.JS que contiene un conjunto de sólidas

características para las aplicaciones web entre: Express.js, koa.js, hapi.js y reatify,js.

Tomado de Google Trends

Base de datos

Módulo de gestión de almacenamiento del sistema, se usa en el diseño Firebase para esta

funcionalidad. Se usa la tecnología NoSQL se define esta por la ventaja de ser ejecutada en

15

Elastic Compute Cloud (EC2): https://aws.amazon.com/ec2/ 16

Amazon Web Services (AWS): https://aws.amazon.com/ 17

Forever: https://github.com/foreverjs/forever

104

maquinas de pocos recursos viendo siendo útil en el ámbito de los sistemas embebidos. En el

desarrollo se implanta Firebase más que todo por su característica de “real-time” pero existen

otras opciones de este tipo de bases de datos tales como: Dynamodb, Cassandra, Mongodb.

El sistema se construyó usando una base de datos NoSQL documental a la cual se le hace

CRUD por medio de un servicio web desarrollado en NodeJS18 debido a que esta es una base

de datos sin triggers en el servicio se desarrolló unas funciones que se encargan de hacer

operaciones específicas al terminar de crear, actualizar o eliminar información de la base de

datos en algunos métodos. En la Figura 15 se representa la arquitectura donde se puede

apreciar la interacción del servicio web con firebase.

Los clientes del sistema pueden ser de visualización y/o recolección como se aprecia en la

Figura 29 los clientes web y móvil recolectan datos por medio de un usuario que ingresa

información y el mismo puede ver la información organizada, estos se comunican con el

servicio web por medio de http y headers de autenticación.

El cliente arduino solo recolecta datos de los sensores conectados al mismo y los envía

haciendo uso del módulo wifi por medio de http como los otros clientes a diferencia del web y

el móvil este no envía headers de autenticación pero para poder hacer modificaciones en la

base de datos los sensores deben estar configurados antes en el sistema.

18

Node.js: https://nodejs.org

105

Figura 29: Arquitectura del sistema

El Servicio Web proporciona un medio estándar de interoperabilidad entre distintas

aplicaciones de software que se pueden ejecutar en plataformas diferentes y ser construidas en

múltiples lenguajes de programación.

El Servicio Web es diseñado con un ROM19 ilustrado en la Figura 8, este modelo se concentra

en los aspectos de la arquitectura que se relacionan a los recursos20. Los recursos representan

cualquier cosa que puede tener un identificador único para poder ser referenciado

posteriormente, de igual manera pueden tener un dueño y unos controles definidos y puede

llegar a tener más de una representación.

Diseño del sistema

Casos de uso

19

The Resource Oriented Model: https://www.w3.org/TR/ws-

arch/#resource_oriented_model#resource_oriented_model 20

RFC 2396: http://ietf.org/rfc/rfc2396.txt

106

Figura 30: Casos de uso aplicaciones

INICIAR SESIÓN

ESPECIFICACIÓN DEL CASO DE USO: CU1

CU1: Iniciar Sesión

Descripción: Permite a un usuario acceder a la plataforma con algunos o todos los permisos,

dependiendo si éste es administrador, registrado o visitante

Actores: Todos

Precondiciones: El usuario tiene que estar registrado en el sistema

Flujo de eventos: Flujo Básico.

Tabla 25: Flujo de eventos - Iniciar sesión

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario solicita ingresar a la plataforma El sistema muestra un formulario de validación de

datos

107

El usuario ingresa correo electrónico y contraseña El sistema valida los datos y de ser correctos permite

que el usuario vea la plataforma según sea sus

privilegios

Flujo alternativos: Usuario incorrecto

Acción 3: Si los datos no son correctos, se le avisara al actor de ello, permitiéndole volver a

ingresar los datos.

Flujo alternativos: Entrar a páginas sin logueo (Solo aplicación web)

Acción 1: El usuario entra a una dirección sin haberse identificado, se le cargará en la

dirección el formulario de iniciar sesión, permitiéndole ingresar el correo electrónico y

contraseña.

Flujo alternativos: Usuario no recuerda la contraseña

Acción 3: Si no recuerda la contraseña, se le avisara al actor de solicitar que le envíen una

recuperación de contraseña al correo.

CREAR CUENTA

ESPECIFICACIÓN DEL CASO DE USO: CU2

CU2: Crear cuenta

Descripción: Permite a un usuario con compañía no registrada crear una cuenta

Actores: Todos

Precondiciones: La compañía no debe existir en la base de datos

Flujo de eventos: Flujo Básico.

Tabla 26: Flujo de eventos - Crear cuenta

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario solicita crear una cuenta en la plataforma El sistema muestra un formulario de ingreso de datos

El usuario ingresa correo electrónico, contraseña,

empresa, nombre, apellido

El sistema valida los datos y de ser correctos crea la

cuenta y permite que el usuario vea la plataforma con

todos los privilegios

108

Flujo alternativos: Empresa existente

Acción 3: Si la compañía existe, se le avisara al actor de la existencia y que solicite a la

empresa que lo agregue a la plataforma.

Flujo alternativos: Correo electrónico en uso

Acción 3: El usuario entra un correo electrónico en uso, se le avisa al actor de que ya existe el

correo y además de darle la opción de recuperar contraseña.

Flujo alternativos: Información ingresada nula

Acción 3: El usuario no ingresa todos los campos, se le avisara al actor que todos los campos

del formulario son requeridos para la creación de una cuenta padre.

AÑADIR CUENTA

ESPECIFICACIÓN DEL CASO DE USO: CU3

CU3: Añadir cuenta

Descripción: Permite a un usuario añadir una cuenta a la lista de cuentas de la compañía

Actores: Administrador

Precondiciones: El usuario debe estar logueado y ser administrador

Flujo de eventos: Flujo Básico.

Tabla 27: Flujo de eventos - Añadir cuenta

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario solicita añadir una cuenta en la plataforma El sistema muestra un formulario de ingreso de datos

El usuario ingresa correo electrónico, contraseña,

nombre, apellido, perfil

El sistema valida los datos y de ser correctos crea la

cuenta y permite que el usuario vea la nueva cuenta

en la lista de cuentas

Flujo alternativos: Correo electrónico en uso

Acción 3: El usuario entra un correo electrónico en uso, se le avisa al actor de que ya existe el

correo y además de darle la opción de ver el usuario.

109

Flujo alternativos: Información ingresada nula

Acción 3: El usuario no ingresa todos los campos, se le avisara al actor que todos los campos

del formulario son requeridos para la creación de una cuenta.

ELIMINAR CUENTA

ESPECIFICACIÓN DEL CASO DE USO: CU4

CU4: Eliminar cuenta

Descripción: Permite a un usuario eliminar una cuenta a la lista de cuentas de la compañía

Actores: Administrador

Precondiciones: El usuario debe estar logueado y ser administrador

Flujo de eventos: Flujo Básico.

Tabla 28: Flujo de eventos - Eliminar cuenta

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario solicita eliminar una cuenta en la

plataforma

El sistema muestra una alerta, advirtiendo al actor

que está apunto de eliminar un usuario

El usuario acepta eliminar la cuenta El sistema valida los datos y elimina la cuenta

seleccionada y permite ver al usuario la lista de

usuarios sin la cuenta eliminada

Flujo alternativos: El usuario no acepta eliminar la cuenta, se cierra la alerta y no se presenta

ningún cambio en el listado de usuarios

LISTAR USUARIOS DE LA COMPAÑÍA

ESPECIFICACIÓN DEL CASO DE USO: CU5

CU5: Listar usuarios de la compañía

Descripción: Permite a un usuario ver el listado de usuarios

Actores: Registrador, Administrador

Precondiciones: El usuario debe estar logueado y deben existir usuarios de la compañía en la

base de datos

110

Flujo de eventos: Flujo Básico.

Tabla 29: Flujo de eventos - Listar usuarios de la compañía

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario solicita listar los usuarios de la compañía a

la plataforma

El sistema muestra el listado de usuarios.

SALIR DE LA PLATAFORMA

ESPECIFICACIÓN DEL CASO DE USO: CU6

CU6: Salir de la plataforma

Descripción: Permite a un usuario desloguearse de la plataforma

Actores: Todos

Precondiciones: El usuario debe estar logueado

Flujo de eventos: Flujo Básico.

Tabla 30: Flujo de eventos - Salir de la plataforma

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario solicita salir de la plataforma El sistema borra los cookies del usuario y muestra el

formulario de inicio de sesión

AÑADIR CULTIVO

ESPECIFICACIÓN DEL CASO DE USO: CU7

CU7: Añadir cultivo

Descripción: Permite a un usuario crear un cultivo en la base de datos

Actores: Registrador, Administrador

Precondiciones: El usuario debe estar logueado

Flujo de eventos: Flujo Básico.

Tabla 31: Flujo de eventos - Añadir Cultivo

111

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario solicita añadir un cultivo a la plataforma El sistema muestra el formulario de registro

El usuario ingresa el nombre del cultivo, fecha de

inicio, LARA, capacidad de campo, área del campo,

tipo de cultivo, tipo de riego, adjunta una imagen del

cultivo.

El sistema valida los datos y de ser correctos crea el

nuevo cultivo y además permite ver al usuario el

nuevo cultivo.

Flujo alternativos: Información requerida nula

Acción 3: El usuario no ingresa información requerida, se le avisara al actor de que esa

información es requerida y le permite ingresar los datos nuevamente.

ACTUALIZAR CULTIVO

ESPECIFICACIÓN DEL CASO DE USO: CU8

CU8: Actualizar cultivo

Descripción: Permite a un usuario editar un cultivo de la base de datos

Actores: Registrador, Administrador

Precondiciones: El usuario debe estar logueado y el cultivo debe existir en la base de datos

Flujo de eventos: Flujo Básico.

Tabla 32: Flujo de eventos - Actualizar Cultivo

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario solicita editar un cultivo a la plataforma El sistema muestra el formulario de edición

El usuario cambia el nombre del cultivo, fecha de

inicio, LARA, capacidad de campo, área del campo,

tipo de cultivo, tipo de riego, adjunta un nueva

imagen del cultivo.

El sistema valida los datos y de ser correctos

actualiza el cultivo y además permite ver al usuario

los cambios en el cultivo.

ELIMINAR CULTIVO

ESPECIFICACIÓN DEL CASO DE USO: CU9

CU9: Eliminar cultivo

112

Descripción: Permite a un usuario eliminar un cultivo de la base de datos

Actores: Administrador

Precondiciones: El usuario debe estar logueado y el cultivo debe existir en la base de datos

Flujo de eventos: Flujo Básico.

Tabla 33: Flujo de eventos - Eliminar Cultivo

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario solicita eliminar un cultivo a la plataforma El sistema muestra una alerta, avisando al actor que

va a eliminar un cultivo con todo lo que esté

relacionado a el.

El usuario acepta eliminar el cultivo El sistema valida los datos y de ser correctos elimina

el cultivo.

AÑADIR SENSOR A UN CULTIVO

ESPECIFICACIÓN DEL CASO DE USO: CU10

CU10: Añadir sensor a un cultivo

Descripción: Permite a un usuario añadir un sensor a la base de datos

Actores: Registrador, Administrador

Precondiciones: El usuario debe estar logueado y el cultivo debe existir en la base de datos

Flujo de eventos: Flujo Básico.

Tabla 34: Flujo de eventos - Añadir sensor a una variable de un cultivo

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario solicita añadir un sensor a un cultivo a la

plataforma

El sistema muestra el formulario.

El usuario ingresa el identificador único del sensor, el

tipo de envío de datos (discretos o continuos)

El sistema valida los datos y de ser correctos agrega

el sensor a la variable del cultivo.

CAMBIAR SENSOR DE UN CULTIVO A OTRO

ESPECIFICACIÓN DEL CASO DE USO: CU11

113

CU11: Cambiar sensor de un cultivo a otro

Descripción: Permite a un usuario cambiar un sensor de una variable a otra variable de otro

cultivo

Actores: Administrador

Precondiciones: El usuario debe estar logueado y el sensor debe de existir

Flujo de eventos: Flujo Básico.

114

Tabla 35: Flujo de eventos - Cambiar sensor de un cultivo a otro

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario solicita cambiar un sensor de cultivo a la

plataforma

El sistema muestra el formulario pertinente.

El usuario ingresa el id del cultivo al cual se cambia

el sensor

El sistema valida los datos y de ser correctos borra el

sensor del cultivo actual y crea el sensor en el nuevo

cultivo.

ELIMINAR SENSOR DE UN CULTIVO

ESPECIFICACIÓN DEL CASO DE USO: CU12

CU12: Eliminar sensor de un cultivo

Descripción: Permite a un usuario eliminar un sensor de la base de datos

Actores: Administrador

Precondiciones: El usuario debe estar logueado y el sensor debe de existir

Flujo de eventos: Flujo Básico.

Tabla 36: Flujo de eventos - Eliminar sensor de un cultivo

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario solicita eliminar un sensor a la plataforma El sistema muestra una alerta, avisando al actor que

va a eliminar un sensor del cultivo.

El usuario acepta eliminar el sensor El sistema valida los datos y de ser correctos elimina

el sensor.

AÑADIR VALOR A UNA VARIABLE DE UN CULTIVO

ESPECIFICACIÓN DEL CASO DE USO: CU13

CU13: Añadir valor a una variable de un cultivo

Descripción: Permite a un usuario añadir un valor de nivel a una variable

Actores: Registrador, Administrador

Precondiciones: El usuario debe estar logueado y el cultivo debe existir en la base de datos

115

Flujo de eventos: Flujo Básico.

Tabla 37: Flujo de eventos - Eliminar Cultivo

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario solicita añadir un valor a una variable de

un cultivo a la plataforma

El sistema muestra el formulario correspondiente

El usuario ingresa el valor del nivel, la fecha a la cual

pertenece y el tipo de dato (para aproximar con el

valor actual o para colocar como valor del dia)

El sistema valida los datos y de ser correctos crea el

valor del nivel a una variable del cultivo.

ELIMINAR VALOR A UNA VARIABLE DE UN CULTIVO EN UNA FECHA

ESPECÍFICA

ESPECIFICACIÓN DEL CASO DE USO: CU14

CU14: Eliminar valor a una variable de un cultivo en una fecha específica

Descripción: Permite a un usuario eliminar un valor de nivel a una variable en una fecha

específica

Actores: Administrador

Precondiciones: El usuario debe estar logueado y el valor de nivel en la fecha debe existir en

la variable

Flujo de eventos: Flujo Básico.

Tabla 38: Flujo de eventos - Eliminar valor a una variable de un cultivo

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario solicita eliminar un valor de una variable El sistema muestra un calendario

El usuario selecciona la fecha de la valor que desea

eliminar

El sistema muestra una alerta, informando al actor

que está apunto de eliminar un valor de la variable

El usuario acepta eliminar el valor de la variable El sistema valida los datos y de ser correctors elimina

el valor de la variable

BUSCAR CULTIVO POR NOMBRE

116

ESPECIFICACIÓN DEL CASO DE USO: CU15

CU15: Buscar cultivo por nombre

Descripción: Permite a un usuario consultar un cultivos por su nombre

Actores: Todos

Precondiciones: El usuario debe estar logueado y el cultivo debe existir en la base de datos

Flujo de eventos: Flujo Básico.

Tabla 39: Flujo de eventos - Buscar Cultivo por nombre

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario ingresa un nombre de un cultivo y solicita

el cultivo

El sistema muestra un listado de cultivos que

contienen las palabras ingresadas

COMPARAR VALORES DE VARIABLE EN DOS GRÁFICAS

ESPECIFICACIÓN DEL CASO DE USO: CU16

CU16: Comparar valores de variables en dos gráficas

Descripción: Permite a un usuario comparar los niveles en etapas diferentes del cultivo por

medio de dos tablas filtradas por meses

Actores: Todos

Precondiciones: El usuario debe estar logueado y la variable debe tener más de un mes con

información

Flujo de eventos: Flujo Básico.

117

Tabla 40: Flujo de eventos - Comparar valores de variables en dos gráficas

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario solicita comparar niveles de un variable a

la plataforma

El sistema muestra dos tablas, una con la información

estandarizada por el usuario y otra nueva con el

último mes de información

El usuario selecciona el mes que desea ver en cada

tabla

El sistema valida los datos y despliega la gráficas en

el mes solicitado

CONSULTAR UN CULTIVOS ESPECÍFICO

ESPECIFICACIÓN DEL CASO DE USO: CU17

CU17: Consultar un cultivo específico

Descripción: Permite a un usuario ingresar a un cultivo conocido por la plataforma

Actores: Todos

Precondiciones: El usuario debe estar logueado y el cultivo debe existir en la base de datos

Flujo de eventos: Flujo Básico.

Tabla 41: Flujo de eventos - Consultar un cultivo específico

ACCIÓN DE LOS ACTORES RESPUESTA DEL SISTEMA

El usuario solicita ver un cultivo específico a la

plataforma

El sistema muestra la vista del cultivo

Diagramas de secuencias

Este apartado presenta los diagramas de secuencia del módulo web del sistema. Cada

diagrama de secuencia muestra la secuencia de comunicación mediante mensajes entre

objetos necesarios para la realización del caso de uso.

118

Figura 31: Inicio de sesión y permanecer logueado

Figura 32: Crear cuenta con compañia nueva

119

Figura 33: Consultar un cultivo específico

Figura 34: Consultar una variable de un cultivo específico

120

Figura 35: Muestra dos gráficas con diferentes meses

Figura 36: Añadir valor a una variable de un cultivo específico de forma manual

121

Figura 37: Añadir un sensor a una variable de un cultivo específico

Diagramas de procesos

Este apartado presenta los diagramas de procesos del módulo web del sistema. Cada diagrama

de procesos muestra la secuencia de acciones necesarias para realización de los casos de uso.

Figura 38: Diagrama de procesos crear, editar y eliminar cultivo

122

Figura 39: Diagrama de procesos crear, eliminar, editar variable y añadir, eliminar y

modificar sensor

Figura 40: Diagrama de procesos inicio de sesión y crear cuenta

Modelo de datos

En esta sección se describe el modelo de datos propuesto para la plataforma. Debido a que se

hizo uso de una base de datos NoSQL y optado por el método de documentación. En la figura

41 se puede observar la estructura del modelo de datos.

123

Figura 41: Esquema base de datos

Objeto Crops ( Cultivos )

En este objeto se encuentra toda la información que se obtiene del cultivo. En la figura 42 se

puede observar la estructura del cultivo.

Figura 42: Estructura Cultivo

En la tabla 44 se puede encontrar una descripción de todos los campos que pertenecen al

cultivo.

Tabla 42: Campos del Cultivo

Campo Descripción

124

Area Es el área en la que se encuentra todo el cultivo este valor por defecto es en

hectáreas, este valor puede ser ingresado por el usuario o si el usuario colocó

isCalculate esta es la suma de todas las áreas de los lotes.

CropVariety Es la variedad del cultivo esta debe ser ingresada por el usuario.

FieldCapacity Es la capacidad de campo, esta puede ser ingresada por el usuario o si el usuario

colocó isCalculate esta es el promedio de la capacidad de campo de los lotes.

IrrigationType Es el tipo de riego implementado en el cultivo, esta debe ser ingresada por el

usuario.

Lara Es el lara del cultivo puede ser ingresada por el usuario o si el usuario colocó

isCalculate esta es el promedio del LARA de los lotes.

StartDate Es la fecha en la que se empezó a sembrar, esta debe ser ingresada por el usuario.

IsCalculate Es el condicional para saber si se calculan algunas variables del cultivo con

relación a lo que se encuentra en los lotes o si el usuario ingresa los valores que

deben tener esas variables.

Lotes Es un listado de todos los lotes que componen el cultivo. Su estructura la se

puede encontrar en Campo Cultivo: Lotes

CreateDate

ModifyDate

CreateBy

ModifyBy

Son datos de control de usuarios.

125

Campo Cultivo: Lotes

En este campo se encuentra toda la información que se obtiene de los lotes. En la figura 39 se

puede ver la estructura del lote, donde keyLot es el identificador único del lote generado por

el sistema.

Figura 43: Estructura Lote

En la tabla 43 se puede encontrar una descripción de todos los campos que pertenecen al lote.

Tabla 43: Campos del Lote

Campo Descripción

Area Es el área en la que se encuentra todo el cultivo este valor por defecto es en

hectáreas, este valor debe ser ingresado por el usuario.

CropVariety Es la variedad del cultivo esta debe ser ingresada por el usuario.

FieldCapacity Es la capacidad de campo, esta debe ser ingresada por el usuario.

IrrigationType Es el tipo de riego implementado en el cultivo, esta debe ser ingresada por el

usuario

Lara Es el lara del cultivo debe ser ingresada por el usuario.

126

StartDate Es la fecha en la que se empezó a sembrar, esta debe ser ingresada por el usuario.

Variables Es un listado de todas las variables de cultivo que se recolectan en el lote (por

ejemplo: Evaporación). Su estructura la se puede encontrar en Campo Lote:

Variables

CreateDate

ModifyDate

CreateBy

ModifyBy

Son datos de control de usuarios.

Campo Lote: Variables

En este campo se encuentra toda la información que se obtiene de una variable. En la figura

44 se puede observar la estructura de una variable, donde “Variable -> apiName” hace

referencia a que el identificador único de una variable es el apiName de la misma.

Figura 44: Estructura Variables

En la tabla 44 se puede encontrar una descripción de todos los campos que pertenecen a la

variable.

Tabla 44: Campos de variables

Campo Descripción

ApiName Es el nombre de la variable establecido por el sistema. Si esta es una variable

creada por un usuario terminará con las siglas “__c”.

127

Max Es el valor máximo que puede obtener la variable. Establecido por el sistema o

por el usuario si esta fue creada.

Min Es el valor mínimo que puede obtener la variable. Establecido por el sistema o

por el usuario si esta fue creada.

Values Listado de todos los valores que se han captado de esa variable. Su estructura la

se puede encontrar en Campo Variable: Values

CreateDate

ModifyDate

CreateBy

ModifyBy

Son datos de control de usuarios.

Campo Variable: Values

En este objeto se encuentra toda la información que se obtiene de un valor captado. En la

figura 45 se puede ver la estructura de un valor captado, dónde “Date String ‘YYYY-MM-

DD’” hace referencia al identificador único del valor captado en la fecha específica.

Figura 45: Estructura valor captado

En la tabla 45 se puede encontrar una descripción de todos los campos que pertenecen a un

valor captado.

Tabla 45: Campos de valor captado

Campo Descripción

Max Es el valor máximo que ha obtenido ese valor en esa fecha

128

Min Es el valor mínimo que ha obtenido ese valor en esa fecha

Values Listado de todos los valores que se han captado en esa fecha. Por ejemplo un

valor: 2017-03-19 10:30:00 = 100

Alert Es el mensaje que se muestra si el valor está por encima o por debajo del límite

LastValue El último valor obtenido de la variable

Average Promedio de todos los valores que se han obtenido en la fecha

CreateDate

ModifyDate

CreateBy

ModifyBy

Son datos de control de usuarios.

Objeto ProfileNames (Perfiles)

En este objeto se encuentra todos los perfiles existentes en el sistema. En la figura 46 se puede

ver los perfiles del sistema.

Figura 46: Esquema de Perfiles del sistema

En la tabla 46 se puede encontrar una descripción de todos los perfiles existentes.

Tabla 46: Perfiles del sistema

Campo Descripción

129

Admin Este puede crear, modificar, eliminar y ver cualquier cosa de la aplicación que se

pueda crear, modificar o ver.

Register Este puede crear, modificar y ver algunas cosa de la aplicación que se pueda

crear, modificar o ver.

Visit Este puede ver cualquier cosa de la aplicación que se pueda ver.

Objeto Sensors (Sensores)

En este objeto se encuentra toda la información que se obtiene de un sensor. En la figura 47 se

puede ver la estructura de un sensor.

Figura 47: Estructura de un sensor

En la tabla 47 se puede encontrar una descripción de todos los campos que pertenecen a un

sensor.

Tabla 47: Campos de sensor

Campo Descripción

keySensor El Id o serial obtenido por el usuario que representa al sensor

Crop Este contiene el key (identificador único) perteneciente al cultivo al cual se está

sensando

130

Lotes Listado de lotes que contiene los key (identificador único) perteneciente a los

lotes que se estan sensando. Por ejemplo: K-50PyUrtpYXoki7, K-

50PyUrtpYXoki8

Id Es el identificador único del sensor con el cual se identifica cuando hace

peticiones. En el caso del arduino se crea un ID para la tarjeta el cual se quema

con el programa y es el usado para la petición.

Name Nombre el cual el usuario quiera darle al sensor.

Status Es el estado del sensor los cuales pueden ser: active (Activado) o disabled

(Desactivado).

Varialbe Es el api name de la variable que se está obteniendo los datos.

CreateDate

ModifyDate

CreateBy

ModifyBy

Son datos de control de usuarios.

Objeto Variables (Variables del sistema)

En este objeto se encuentra todas la variables que están por defecto en el sistema. En la figura

48 se puede ver la estructura del objeto variables del sistema. Para tener más información

sobre las variables véase Variables de estudio:

Figura 48: Estructura variables del sistema

En la tabla 48 se puede encontrar una descripción de todas los variables existentes.

131

Tabla 48: Campos de Variables del sistema

Campo Descripción

CropFactor Es el factor de cultivo y es no calculada y ni se sensada por el

sistema.

EffectiveIrrigation Es el riego efectivo y es no calculada y ni se sensada por el sistema.

EffectivePrecipitation Es la precipitación efectiva y es no calculada y se sensa por el

sistema

EffectivePrecipitationReal Es la variable para la precipitación efectiva para sensores.

Evaporation Es la evaporación y es no calculada y se puede sensar. (En este

proyecto no se hace sensar esta variable), por el sistema.

EvaporationReal Es la variable para la evaporación para sensores.

Evapotranspiration Es la evapotranspiración y se calcula y no se sensa por el sistema.

SoilMoisture Es la humedad del suelo y se calcula y se puede sensar por el

sistema.

SoilMoistureReal Es la variable para la humedad del suelo para sensores.

El sistema permite crear nuevas variables que contengan el modelo de “Objeto variable” que

se describe a continuación.

Objeto Variable (Variable del sistema)

En la figura 49 se puede ver la estructura de una variable del sistema. Las variables por

defecto no se pueden cambiar sus configuraciones, solo las que contengan en el apiName

“__c” se pueden editar.

132

Figura 49: Estructura de una variable del sistema

En la tabla 49 se puede encontrar una descripción de todos los campos que puede tener una

variable.

Tabla 49: Capos de Variables del sistema y personalizadas

Campo Descripción

Alert Variable si es verdadera enseña mensajes al usuario cuando ingresa a la variable de

que se está por debajo o por encima del valor máximo o mínimo que puede

Max Contiene el valor máximo que puede tener la variable.

Min Contiene el valor mínimo que puede tener la variable.

Name Nombre al cual se referencia a la variable. Este no puede contener caracteres

especiales como por ejemplo la letra “ñ”.

Status Contiene el estado de la variable que puede ser active (Activa) o disabled

(Desactivado).

isCalculate Es la variable para la evaporación para sensores.

Formula Contiene una fórmula que sólo puede tener operadores matemáticos enlazados a un o

varios (apiName.Average o/y apiName.LastValue) o/y números. Por ejemplo:

“SoilMoisture.LastValue - (Evapotranspiration.Average +

EffectivePrecipitation.Average + EffectiveIrrigation.Average)”

Sensor Variable si es verdadera ignora el isCalculate tomando los valores solo de sensores.

133

CreateDate

ModifyDate

CreateBy

ModifyBy

Son datos de control de usuarios.

Objeto Users (Usuarios)

En este objeto se encuentra toda la información que se obtiene de un usuario. En la figura 50

se puede ver la estructura de usuarios. El keyUser es el user id que le da el sistema.

Figura 50: Estructura Usuarios

En la tabla 50 se puede encontrar una descripción de todos los campos que puede tener un

usuario.

Tabla 50: Campos de usuarios

Campo Descripción

Email Contiene el correo electrónico del usuario

FirstName Contiene el nombre del usuario.

LastName Contiene el apellido del usuario.

Name Contiene el nombre completo del usuario.

Phone Contiene el teléfono del usuario.

134

Profile Contiene el perfil del usuario.

Title Contiene el cargo que ocupa el usuario.

CreateDate

ModifyDate

CreateBy

ModifyBy

Son datos de control de usuarios.

Patrones de Diseño

En esta sección se mencionan los patrones de diseño que se implementan en el diseño del

sistema, estos son:

Template Method

Se emplea el patrón usando React que usan este patrón en su arquitectura, por ejemplo con el

uso de componentes los cuales son clases que contiene un código que se repite numerosas

veces en la aplicación.

Factory Method

Se utiliza el patón con Redux con sus clases reusables que son como una fabrica de datos de

un determinado tipo, por ejemplo la clase crop.js retorna la información dependiendo de qué

tipo de petición se realizó al servidor o acción dentro de la misma aplicación.

Flyweight Method

Se aplica en la generación de listados de objetos en la aplicación móvil en swift, cuando se

realiza un petición de los cultivos este primero crea los cultivos obtenidos crop y los añade a

un dictionary que posteriormente se recorre en un dispatchQueue.main.async para que no

colapse la memoria y se ordenan los cultivos obtenidos según la fecha de modificación.

Identificación de recursos, diseño de URI

REST depende en que el creador del servicio defina la URL de la mejor manera para describir

el recurso al cual hace referencia. Es muy importante escoger nombres representativos,

aunque no hay ninguna limitación para esto, es un buena práctica usar nombres abstraídos de

la realidad comprensibles para el ser humano.

135

Ejemplos de recursos y sus identificadores únicos:

● Una lista de estudiantes: http://university.edu/students

● La cantidad de estudiantes de ingeniería:

http://university.edu/students/engineering/quantity

● El blog mas visto: http://example.com/blogs/mostviewed

Se definen las siguientes URI del sistema usando el concepto de UPSERT el cual trata de

realizar actualizaciones o creaciones desde el mismo método y proveer identificador único del

elemento cuando se desea realizar una actualización:

1. <dominio>/upsert/crop

2. <dominio>/upsert/lote

3. <dominio>/upsert/variable

4. <dominio>/upsert/sensor

5. <dominio>/delete/crop

6. <dominio>/delete/lote

7. <dominio>/delete/value

8. <dominio>/delete/variable

9. <dominio>/delete/sensor

10. <dominio>/add/value/sensor

Descripción de métodos

Los recursos son manipulados por medio de transferencias representaciones a través de una

interfaz uniforme dirigida por el identificador de recursos.

Cada representación tiene que implementar una interfaz CRUD para lograr la interfaz

uniforme requerido por la arquitectura REST. HTTP / 1.1 protocolo define ocho métodos o

verbos, dos de los cuales permite que definen dicha interface: GET y POST. La Tabla 51

muestra la correspondencia de los métodos HTTP y acciones CRUD.

Tabla 51: CRUD correspondiente con HTTP métodos

136

Método CRUD Descripción

POST upsert (crear o actualizar),

eliminar

Crear, eliminar o actualizar un

nuevo recurso

GET Recuperar Recuperar información

Cualquier representación tiene que aceptar todos estos dos métodos, aunque esto no implica

que tienen que ponerse en práctica. Cada una de las URIs corresponde a una acción específica

si la uri contiene /delete/ esto infiere que la operación es de eliminación.

En el caso de que está sea /upsert/ la operación a seguir depende de los datos encontrados en

el “body” de la petición los casos pueden ser:

1. El body conteniendo el identificador único del elemento este se debe actualizar

2. El body sin el identificador único del elemento este es un elemento nuevo

Listado de respuestas

Se debe aclarar que las posibles respuestas se pueden enviar al cliente en función de la

petición recibida. HTTP define cinco categorías de respuestas

● 1xx Informativo

● 2xx Éxito

● 3xx Redirección

● 4xx Error en el lado del cliente

● 5xx Error en el lado del servidor

Cada uno de estos grupos contiene algunos códigos HTTP predefinidas que permiten el envío

de más información en la respuesta. Las respuestas más habituales con respecto a los métodos

descritos anteriormente se muestran en la Tabla 52.

Tabla 52: Catálogo de respuestas HTTP habituales

Código Método Mensaje

137

200 GET solicitud exitosa de la petición la

representación se envía al cliente

201 POST Creado (La ubicación del nuevo

recurso está en cabecera

Location)

400 Todos Mala solicitud (mala solicitud

creada)

401 Todos No autorizado (el cliente tiene

que ser autenticado)

404 Todos No se ha encontrado (el recurso

no está en el sistema)

405 Todos Método no permitido

500 Todos Error interno del servidor (error

interno del Servidor)

Es posible definir nuevos códigos y respuestas HTTP, aunque no se recomienda. Si un cliente

recibe un código HTTP que no sabe, se lo considerará como un código de respuesta X00

(donde X es la categoría en la que se define el nuevo código HTTP).

Además de la respuesta de código HTTP y el mensaje, el servidor tiene que enviar la

representación adecuada en el caso de peticiones GET o la dirección URL del recurso creado

(en el campo de cabecera Location) para peticiones POST. Es obligatorio para los servidores

que utilizan correctamente los códigos de respuesta HTTP. Los clientes deben comprender al

menos las respuestas de código descritas en la Tabla 52

Descripción del servicio y documentación

La solución propuesta por la plataforma presentada en este documento implementa un registro

de servicios centralizada. Se utiliza para proporcionar capacidades de publicación /

despublicación / actualización de las descripciones de servicio aplicaciones. Este servicio

tiene dos representaciones: una representación JSON que se utiliza por las aplicaciones que

desean publicar sus servicios, una representación HTML que proporciona, para cada servicio

registrada, una documentación. La plataforma ofrece registro de servicios centralizados para

138

asegurar misma 'apariencia' para la documentación de todos los servicios, apoyando de este

modo la integración a nivel de interfaz de usuario.

Cada servicio debe proporcionar una documentación que contenga al menos la siguiente

información:

● Grupo al que pertenece

● Nombre y una breve descripción

● URL que lo identifica

● El API name

● Versión

● Para cada representación:

○ Headers

■ Nombre de la cabecera

■ Tipo de la cabecera

■ Descripción de la cabecera

○ Parámetros si contiene campos (JSON)

■ Nombre del campo

■ Tipo del campo

■ Descripción del campo

○ Método disponible

■ El método y lo que hace.

■ URL donde se aplica

■ Código de respuesta y mensaje

El registro de servicios contiene por defecto todos los servicios proporcionados por la

plataforma de integración. Su nombre es "servicios" y la URL para acceder a ella se

determina por el dominio del servidor donde la plataforma está desplegado, por ejemplo:

http://www.domain.com/doc/servicio

139

Las capacidades de edición, Anulación de la publicación y actualización de los servicios

registrados se muestran en la Figura 35. Estas capacidades se describen de la siguiente manera

Paso 1

Para almacenar una nueva información o crear una nueva tabla variable o columna de tablas

editables, los desarrolladores deben lanzar una petición POST en esa dirección URL con un

JSON en sus solicitudes corporales que contienen la información detallada anteriormente. Tal

JSON debe tener la estructura definida para la petición realizada. Encabezado de autorización,

ubicación de la respuesta, en caso de un código de respuesta 201, la URL donde se encuentra

la API del servicio.

Paso 2

Para actualizar una información, tabla o columna, los desarrolladores pueden actualizar su

API de servicio, el lanzamiento de una solicitud PUT en la dirección URL a la que pertenece.

Limitarse a proporcionar el mismo JSON que se utiliza para registrar el servicio más las

actualizaciones necesarias es suficiente.

Paso 3

Para desechar, eliminar información, tablas personalizadas o columnas personalizadas, los

desarrolladores pueden eliminar su API de servicio, el lanzamiento de una solicitud DELETE

en la dirección URL a la que pertenece. El encabezado de autorización y permisos de

administrador.

140

Descubrimiento del servicio

Figura 51: Almacenamiento de información, actualización, proceso de detección y

eliminación de información. Tomado de [66]

En el proceso de descubrimiento de servicios, no es necesario que los desarrolladores hayan

registrado previamente sus API del servicio, ya que el registro de servicios contiene al menos

todos los servicios proporcionados por la plataforma de integración.

En primer lugar, un usuario o una herramienta quiere buscar un servicio en el registro de

servicios. Para ello, se lanza una petición GET de recursos los "servicios" (Paso 3). La

respuesta recuperada contiene una lista de todos los servicios:

En segundo lugar, el usuario puede iterar sobre la colección hasta que encuentra el servicio

que pueda satisfacer sus necesidades (por ejemplo: mirando a nombre del servicio,

descripción, nombre de la aplicación, etc.) (Paso 4).

En tercer lugar, una vez que el usuario ha elegido el servicio, se puede:

● Recuperar API del servicio mediante el lanzamiento de una petición GET en la URL

'servicios / id', que permite el acceso a la API. Contiene información suficiente para

141

unirse e invocar el servicio: URL para acceder a ella, métodos permitidos, los cuales

están disponibles las representaciones posibles respuestas.

● Consumir el servicio mediante el lanzamiento de una petición en la URL almacenada

en la url. Se supone herramienta conoce la semántica de la estructura de recursos, ya

que es una estructura acordada. Si no es así, el desarrollador puede aprender el

significado de los recursos recuperados API (servicios tienen una representación

HTML para almacenar la documentación legible por humanos). descubrimiento de

servicio también se puede utilizar para verificar si un servicio conocido está disponible

en que el despliegue de la plataforma.

Diseño de Hardware

Usando el módulo ESP8266 para conectar el Arduino UNO a una red WiFi se accede a

internet para realizar llamados POST al servicio central enviando una cabecera de

autenticación y datos captados por los sensores en el cuerpo de la solicitud, se configura la

tarjeta para enviar información en un intervalo de tiempo determinado arbitrariamente

creando un registro nuevo en la base de datos en cada solicitud.

La tarjeta es programada para trabajar con un sensor de humedad de suelo (ver Marco

Teórico: Sensores académicos), un sensor de lluvia (ver Marco Teórico: Sensores

académicos) y el módulo de WiFi, usando una protoboard todos son conectados

simultáneamente a la tarjeta para crear un sistema de hardware de recolección de datos

relevantes en los sistemas de riego.

Módulo WiFi ESP8266

El módulo WiFi ESP8266 es un SOC auto contenido, con la colección del protocolo TCP/IP

integrada. Puede dar acceso a cualquier microcontrolador a una red WiFi.

142

Figura 52: Módulo WiFi ESP8266

Implementación

Para la implementación se conectan los dos sensores y el módulo WiFi a la tarjeta Arduino. El

Arduino se conecta a internet mediante el módulo WiFi, los sensores obtienen información en

un intervalo de tiempo predeterminado, en cada ciclo la tarjeta Arduino hace un llamado

HTTP al servicio para almacenar los datos obtenidos por el sensor.

Diagramas de conexión

Figura 53: Diagrama de conexión de sensor humedad de suelo al Arduino UNO. Tomado de

[88]

143

Figura 54: Diagrama de conexión sensor de lluvia al Arduino UNO. Tomado de [87]

Figura 55: Diagrama de conexión de módulo WiFi ESP8266 al Arduino UNO. Tomado de

[89]

144

Características del sistema

Variables personalizadas

se puede encontrar estas variables personalizadas en el objeto de variables (Objeto

Variables) y para su creación deben respetar la estructura predeterminada para las variables

explicada en “Objeto Variables”.

Campo fórmula

El campo fórmula permite al usuario general una operación matemática sencilla con la cual se

pueda calcular el valor de la variable con este campo activo. Este campo solo es permitido

para ciertas variables y no puede contener valores no numéricos o variables no existentes en el

sistema. Las operaciones matemáticas que acepta son: suma, resta, multiplicación y división.

Tarjeta programable

La tarjeta programada le da al sistema una interacción con dispositivos hardware como los

son los sensores. Esta se encarga de procesar los datos recibido por sensores y enviarlos al

servicio web, siendo estos valores de variables más exactos que los calculados o obtenidos por

un usuario.

Cálculo del LARA, capacidad de campo y área en base a los datos del lote en el cultivo

Se calcula los valores numéricos de la información inicial de un cultivo mientras este se

encuentre en el estado isCalculated como verdadero. Esta información es más exacta que la

que puede ingresar un usuario

Promedio de valor por fecha de una variable obtenida por sensores

Se realiza el promedio de los datos captados por sensores durante el día debido que en la

práctica se usa un valor por dia. La funcionalidad permite obtener un var ponderado de lo que

sucedió el día anterior.

Sincronización en tiempo real

145

Se sincronizan los valores actualizados, creados y eliminados en las plataformas virtuales con

interfaz teniendo a los usuarios con los últimos estados del cultivo .

Implementación del Sistema

En esta sección se expone algunos funcionamientos relevantes del servicio web desarrollado

para la recolección de datos.

Trigger Lote

Este método es activado cuando un lote es actualizado o creado. Su función es actualizar

campos del cultivo si el campo isCalculate igual a true. En la figura 61 se puede ver un trozo

del código que se usa para actualizar un campo del cultivo. En ese script se obtienen todos los

lotes que pertenecen al cultivo y se itera en ellos obteniendo su LARA, capacidad de campo y

área, para que posteriormente se aplique la operación pertinente para saber el valor de esos

campos en el cultivo.

Figura 56: Trozo del trigger lote

Trigger Variable

Este método es activado cuando una variable es actualizada o creada. Su función es colocar el

promedio de la fecha actualizada, añadir notificaciones a los usuarios si la variable está por

146

debajo del nivel o por encima a los usuarios. Además de hacer los cálculos de las variable que

tienen fórmula y contiene la variable modificada. En la figura 62 se puede ver un trozo del

código que se usa en este método.

Figura 57: Trozo del trigger variable

Este trozo contiene la funcionalidad de sacar el promedio y indicar si es menor o mayor que el

límite permitido para la variable

Añadir Variable

Esta operación del servicio crea nuevas variables al sistema. Su funcionalidad es añadir

nuevas variables de captación al sistema y posteriormente al lote.

En la figura 63 se puede observar un trozo del código que hace esta operación del sistema.

Este script hace el insert en la base de datos siempre y cuando la variable a crear no se

encuentre ya en el sistema. Si la operación termina de forma exitosa se llama el trigger de

variables para que añada esa nueva variable a todos los lotes existentes y si esta hace uso de

una fórmula añadir todos los valores que pueden tener hasta el momento esa variable.

147

Figura 58: Trozo añadir variable al sistema

148

VIII. PRUEBAS Y RESULTADOS

Pruebas manuales

Para validar el diseño del sistema de recolección de datos, se aplica a un caso de estudio con

datos que se han obtenido de diferentes cultivos (apéndice 1 y 2) a la vez poder consultar

estos datos y poder verlos en una interfaz amigable. Para comenzar a usar el servicio este debe

registrarse y obtener las credenciales (Id y Secret Key) que serán necesarias para la conexión

con el servicio.

Todos los datos obtenidos están registrados en milímetros (mm).

El sistema de recolección de datos planteado se ha sometido a varios casos de uso por medio

de una aplicación desarrollada de forma nativa, se hace uso del simulador de mac para

compilar la aplicación en un iPad air con iOS 9.2.1 y como consola se usó la del explorador

Safari.

Funcionalidad: Crear un nuevo cultivo

El usuario quiere crear su primer cultivo o añadir uno nuevo en la plataforma.

Tiempos del proceso de petición de 5 cultivos siendo 2 de ellos con datos reales, los tiempos

están en milisegundos (ms). Estos tiempos se tomaron de la inspección de network de el

explorador que tomó de las acciones realizadas desde un iPad mini 2 con iOS 9.2.1 de la

aplicación desarrollada con ionic 2 y usando el módulo de angular2/http.

Tabla 53: Tiempos de respuesta solicitud ‘Crear un nuevo cultivo’

Petición enviada

(Request send)

Tiempo de envío

primer byte

(TTFB)

Descargar

contenido

En espera

(Queueing)

Prepararse

(Stalled)

0.12 111.70 2.24 0.33 4.14

149

0.12 141.93 2.79 0.30 4.82

0.12 180.19 2.28 0.31 4.21

0.11 258.60 2.29 0.29 3.16

0.12 174.67 2.26 0.28 3.42

Funcionalidad: Editar un cultivo existente

El usuario quiere modificar la información del cultivo.

Tiempos del proceso de petición de 5 cultivos siendo 2 de ellos con datos reales, los tiempos

están en milisegundos (ms).

Tabla 54: Tiempos de respuesta solicitud ‘Editar un cultivo existente’

Petición enviada

(Request send)

Tiempo de envío

primer byte

(TTFB)

Descargar

contenido

En espera

(Queueing)

Prepararse

(Stalled)

0.11 12.20 0.92 0.35 0.72

0.12 7.14 1.30 0.39 1.05

0.10 8.26 0.65 0.63 0.84

0.12 9.03 1.40 0.70 0.75

0.14 11.23 0.75 0.33 0.91

Funcionalidad: Seleccionar 10 cultivos

El cliente abre la vista “Cultivos” en la plataforma y esta debe cargar los últimos 10 cultivos

modificados. El cliente también puede colocar nuevos filtros de búsqueda para la

visualización de los cultivos

Tiempos del proceso de petición de 5 cultivos siendo 2 de ellos con datos reales, los tiempos

están en milisegundos (ms).

Tabla 55: Tiempo de respuestas solicitud ‘Seleccionar 10 cultivos’

Petición enviada Tiempo de envío Descargar En espera Prepararse

150

(Request send) primer byte

(TTFB)

contenido (Queueing) (Stalled)

0.12 33.90 1.14 0.82 0.88

0.16 12.48 1.05 0.90 1.05

0.10 8.19 1.98 0.48 1.05

Funcionalidad: Eliminar Cultivo

El cliente desea eliminar un cultivo así que se dirige a el cultivo al cual desea eliminar y hace

clic en eliminar, este debe ser eliminado solo si el cliente que ha realizado la acción tiene

permisos de administrador.

Tiempos del proceso de petición de 5 cultivos siendo 2 de ellos con datos reales, los tiempos

están en milisegundos (ms).

Tabla 56: Tiempos de respuesta solicitud ‘Eliminar Cultivo’

Petición enviada

(Request send)

Tiempo de envío

primer byte

(TTFB)

Descargar

contenido

En espera

(Queueing)

Prepararse

(Stalled)

0.10 115.52 1.93 0.31 1.12

0.13 51.42 0.92 0.34 0.69

0.13 12.05 1.39 0.70 1.03

0.17 12.51 1.28 1.21 0.65

0.12 8.21 0.74 0.37 0.52

Funcionalidad: Añadir un nuevo valor a una variable

El cliente desea añadir los valores a las variables de un cultivo que acaba de crear así que se

dirige en al cultivo en la pestaña de variables y selecciona la variable a la cual le va agregar

los valores y le agrega los valores y guarda.

Tiempos del proceso de petición de 5 cultivos siendo 2 de ellos con datos reales, los tiempos

están en milisegundos (ms).

151

Tabla 57: Tiempos de respuesta solicitud ‘Eliminar Cultivo’

Petición enviada

(Request send)

Tiempo de envío

primer byte

(TTFB)

Descargar

contenido

En espera

(Queueing)

Prepararse

(Stalled)

0.10 111.70 2.10 0.30 4.20

0.12 121.93 2.05 0.29 4.90

0.11 110.19 2.33 0.30 4.25

0.11 100.60 2.20 0.31 3.05

0.10 110.67 2.24 0.30 3.30

Funcionalidad: Editar una variable

El cliente determina que se ha equivocado en el valor dado a una variable así que se dirige a la

variable y la edita.

Tiempos del proceso de petición de 5 cultivos siendo 2 de ellos con datos reales, los tiempos

están en milisegundos (ms).

Tabla 58: Tiempos de respuesta solicitud ‘Editar una variable’

Petición enviada

(Request send)

Tiempo de envío

primer byte

(TTFB)

Descargar

contenido

En espera

(Queueing)

Prepararse

(Stalled)

0.12 104.51 1.90 0.30 0.96

0.12 50.41 0.90 0.36 0.69

0.12 11.04 1.40 0.70 1.03

0.12 11.50 1.30 1.20 0.65

0.12 7.20 0.76 0.40 0.52

Funcionalidad: Obtener una variable

El cliente quiere ver todas las variables del cultivo y sus últimos valores con la fecha

respectiva.

152

Tiempos del proceso de petición de 5 cultivos siendo 2 de ellos con datos reales, los tiempos

están en milisegundos (ms).

Tabla 59: Tiempos de respuesta solicitud ‘Obtener una variable’

Petición enviada

(Request send)

Tiempo de envío

primer byte

(TTFB)

Descargar

contenido

En espera

(Queueing)

Prepararse

(Stalled)

0.11 11.61 1.90 0.34 0.96

0.18 50.41 1.90 0.36 0.69

Funcionalidad: Crear una nueva variable

El cliente tiene un cultivo el cual presenta una variable la cual no existe en el sistema.

Tiempos del proceso de petición de 5 cultivos siendo 2 de ellos con datos reales, los tiempos

están en milisegundos (ms). Después de hacer un 2 o 3 creación de una tabla el servicio

colapsa.

Tabla 60: Tiempos de respuesta solicitud ‘Crear una variable’

Petición enviada

(Request send)

Tiempo de envío

primer byte

(TTFB)

Descargar

contenido

En espera

(Queueing)

Prepararse

(Stalled)

0.17 427.87 0.85 0.29 2.72

0.17 191.60 0.89 0.30 1.47

0.19 101.61 0.86 0.35 1.45

Funcionalidad: Modificar o agregar campos a una variable

El cliente quiere agregar y modificar campos de las variables.

Tiempos del proceso de petición de 5 cultivos siendo 2 de ellos con datos reales, los tiempos

están en milisegundos (ms).

Tabla 61: Tiempos de respuesta solicitud ‘Modificar o agregar campos a una variable’

153

Petición enviada

(Request send)

Tiempo de envío

primer byte

(TTFB)

Descargar

contenido

En espera

(Queueing)

Prepararse

(Stalled)

0.17 427.87 0.75 0.29 2.72

0.17 191.60 0.89 0.30 1.47

0.19 101.61 0.86 0.35 1.45

0.17 111.60 0.90 0.30 1.45

0.17 311.61 0.69 0.30 1.45

Pruebas automatizadas

Se realizan una serie de pruebas simulando condiciones climáticas que afectan directamente el

cultivo, usando los siguientes componentes:

● Sensor de humedad de suelo

● Sensor de lluvia

● Módulo WiFi ESP8266

● Tarjeta Arduino UNO

para enviar datos automáticamente al servicio web.

En la sección Pruebas manuales se realizaron pruebas con datos de cultivos reales en el

sistema de recolección. En esta sección se realizan pruebas de inicio-a-fin (End-to-End

testing21) del sistema planteado, el proceso ilustrado en la Figura 29: Arquitectura del sistema

es puesto a prueba con el sensor de humedad de suelo y precipitación efectiva conectados a la

tarjeta Arduino UNO, esta a su vez por medio de un módulo WiFi se conecta a internet para

poder hacer las solicitudes al servicio web y enviar los datos físicos obtenidos por los

sensores.

Cabe resaltar que a diferencia de la sección Pruebas manuales donde los datos son

manejados en mm, en las pruebas con los sensores para Arduino el dato arrojado por la

resistencia entre 0 y 1023 es numérico sin ninguna unidad de medida.

Las siguientes pruebas son realizadas usando una conexión a internet telefónica en la cual se

miden los tiempos de:

21

End-to-End Testing: https://www.techopedia.com/definition/7035/end-to-end-test

154

● Petición enviada (Request send)

La siguiente prueba de laboratorio se realiza con 220.5 cm3 de tierra, la cual en estado seco

tiene un peso de 14g y en estado de completa humedad de 32g (datos obtenido de forma

experimental).

El experimento se llevó a cabo ubicando la tierra totalmente seca (tiempo 1) en un contenedor

de plástico con rejilla en la parte inferior que no permite que la tierra traspase pero sí que el

agua escurra en un contenedor inferior. En intervalos de 1 minuto (en algunos puntos se

maneja un tiempo diferente arbitrariamente) se agregan 10 cm3 sobre la placa del sensor de

lluvia la cual escurre sobre este y llega a la tierra y se obtienen los valores de resistencia de

ambos sensores, inmediatamente son enviados al servicio para su registro y posterior análisis.

En la Tabla 62 se puede observar 30 registros tomados de la tarjeta Arduino usando los

sensores, las columnas de tiempo muestran el momento en minutos y segundos en el que es

obtenido el registro, la columna de Agua muestra la cantidad de agua que es agregada a la

tierra en cm3, las columnas de los sensores son los datos arrojados por la resistencia después

de ser expuestos a la cantidad acumulada de agua (sumatoria de agua), las columnas de

tiempos de petición muestran el tiempo que toma la solicitud para enviar el dato al Servicio

Web.

El sensor lluvia es ubicado en 3 posiciones diferentes durante la prueba, la posición 1 es

completamente horizontal sobre la tierra, la posición 2 es en un ángulo de 45º y finalmente la

posición 3 es un ángulo de 90º, esto se realiza para demostrar que este sensor tiene un alto

grado de error ya que puede variar según su ubicación.

Tabla 62: Pruebas con Arduino, sensor humedad suelo, lluvia y módulo WiFi

Tiempo

Tiempo

(seg.)

Agua

(cc)

Sensor

Lluvia

Sensor

Humedad

Suelo

Tiempo

Petición

(Lluvia)

Tiempo

Petición

(Suelo)

Comentario

s

1 0:00:00 0 0 1023 1023 71.0ms 479.00 ms

Sensor lluvia

en Posición 1

155

2 0:00:10 10 6 727 742 475.0 ms 486.00 ms

3 0:00:30 30 10 623 533 555.0ms 495.00 ms

4 0:00:50 50 10 572 515 475.0ms 496.00 ms

5 0:02:00 120 10 565 526 1010.0ms 480.00 ms

6 0:03:00 180 10 464 452 498.99ms 481.00 ms

7 0:04:00 240 10 396 370 555.0ms 484.00 ms

8 0:05:00 300 10 664 497 498.99ms 483.00 ms

Sensor lluvia

cambia a

posición 2

9 0:06:00 360 10 626 418 589.29 ms 502.00 ms

10 0:07:00 420 10 663 425 506.03 ms 505.00 ms

11 0:08:00 480 10 593 434 490.325 ms 805.00 ms

12 0:09:00 540 10 708 456 491.665 ms 487.00 ms

13 0:10:00 600 10 668 462 508.16 ms 498.00 ms

14 0:10:30 630 0 680 510 685.64 ms 821.00 ms

15 0:11:00 660 10 668 461 477.895 ms 494.00 ms

16 0:11:30 690 0 722 509 498.46 ms 480.00 ms

17 0:12:00 720 10 626 467 504.59 ms 471.00 ms

18 0:13:00 780 10 602 448 511.98 ms 488.00 ms

19 0:14:00 840 10 618 455 501.37 ms 476.00 ms

20 0:15:00 900 10 604 446 1054.1 ms 674.00 ms

21 0:16:00 960 10 642 440 915.7 ms 1365.00 ms

22 0:16:30 990 0 750 494 487.05 ms 506.00 ms

23 0:17:00 1020 10 544 435 480.365 ms 488.00 ms

24 0:18:00 1080 10 591 439 497.13 ms 479.00 ms

25 0:19:00 1140 10 706 444 485.285 ms 484.00 ms

Sensor lluvia

cambia a

156

posición 3

26 0:20:00 1200 10 709 440 483.26 ms 479.00 ms

27 0:21:00 1260 10 715 438 472.935 ms 503.00 ms

28 0:22:00 1320 10 712 438 502.69 ms 494.00 ms

29 0:23:00 1380 10 506 444 484.515 ms 910.00 ms

Sensor lluvia

cambia a

posición 1

30 0:24:00 1440 10 468 449 507.4 ms 536.00 ms

256

De la Tabla 62 se puede analizar que el total de agua suministrada fue de 256 cm3, que el

menor número arrojado por el sensor de humedad de suelo es de 370 y del sensor de lluvia de

396. De igual manera se observa una constancia en los tiempos de envíos con algunas

variaciones debido a la naturaleza de las conexiones celulares.

Figura 59: Prueba Arduino - Sensor Humedad del Suelo

157

Figura 60: Prueba Arduino - Sensor de Lluvia

De las Figuras 64 y 65 se puede observar que rápidamente los sensores de humedad de suelo y

lluvia llegan al rango de 350 - 500/400 - 750 respectivamente y se mantienen en una pequeña

oscilación en éste.

De los 256 cm3 de agua suministrados la tierra logra absorber y retener 50 cm3 y 206 cm3 son

escurridos al contenedor inferior.

158

IX. CONCLUSIONES

Este trabajo ha explorado, el diseño y desarrollo de un sistema de recolección de datos de

sistemas de riego para cultivos, con un enfoque específico al caso de cultivos de caña de

azúcar en el departamento del Valle del Cauca, Colombia. Mucho del proceso de diseño se

enfocó en Patrones de diseño, servicios webs existentes y captura de fenómenos físicos como

lluvia y humedad de suelo por medio de sensores los cuales ayudaron a un mejor

entendimiento del sistema a desarrollar, por lo cual se concluye lo siguiente:

● Debido a la naturaleza heterogénea de la industria del riego de cultivos, donde existen

múltiples cultivos y dentro de estos diferentes variedades del mismo cultivo, múltiples

empresas proveedoras de sensores, bombas de riego, programadores y otros

componentes de los Sistemas de Riego, es de vital importanci que este tipo de sistemas

sea escalable y adaptable a diferentes tipos de cultivos, sensores, programadores y

todos los componentes involucrados.

● En este proyecto se identificaron diferentes aspectos y factores involucrados en la

recolección de datos en un sistema de riego, como sensores, tarjetas programadoras,

fenómenos físicos, entre otro. Sin embargo, por el alcance del mismo en el diseño del

sistema solo se usan 2 sensores (lluvia y humedad de suelo) y una tarjeta

programadora (Arduino UNO) para la recolección de datos directamente de

fenómenos físicos, los cuales se prueban insuficientes a la hora de realizar un uso

industrial del sistema, se hace necesario tener múltiples módulos de sensores para el

envío de datos desde varios lotes.

● El diseño de un sistema de recolección de datos requiere de un proceso de

investigación, definición de estructura y servicios profundo analizando todos los casos

más comunes de uso, los cuales pueden tener varios errores que también se deben

contemplar en el diseño de este ya que muchos de esos errores pueden ser causa de un

mal funcionamiento del sistema desarrollado en base al diseño planteado.

● En este trabajo se realizó una comparación de los estándares REST y SOAP, se puede

concluir que para lograr una interoperabilidad más profunda es adecuado integrar al

159

sistema múltiples tecnologías de interconexión para así facilitar la integración de

nuevos componentes.

● Finalmente se puede concluir que se requiere una alta cantidad de pruebas en cultivos

reales para poder evaluar el diseño del sistema en un ambiente industrial.

160

X. RECOMENDACIONES

En esta tesis es explícita la necesidad de extender la construcción del Servicio para soportar

un estilo de arquitectura basado en SOAP, debido a las ventajas que SOAP ofrece en

seguridad sobre servicios RESTful y dado que este Servicio está enfocado hacia una industria

donde este puede ser un factor que cobra importancia para algún agente. Adicionalmente toda

la colección WS-* ofrece estándares en diferentes niveles que pueden ser aprovechados por

algunos agentes para integrar sus sistemas existentes al Servicio.

De igual manera, el sistema fue diseñado pensando en el desarrollo de un cliente que pueda

brindar información necesaria, ágil y útil a los agricultores sobre su (s) cultivo (s). El Sistema

puede ser extendido con variables (tablas) personalizadas para ajustarse a la necesidad de cada

agente y cada cultivo para así satisfacer cualquier necesidad que pueda presentarse y no haya

sido prevista por la versión estándar de este Sistema. Un trabajo a realizar es una aplicación

cliente que usa los datos almacenados para manejar un servicio de alerta en tiempo real sobre

exceso o déficit de agua en el cultivo.

El sistema puede extenderse para proveer diferentes opciones de visualización de los datos

recolectados, ya que en este proyecto solo se presentó una gráfica. De igual manera, se puede

añadir estándar para diferentes cultivos a la caña de azúcar debido a que la base de los

cultivos es similar.

Los componentes de hardware usados para el diseño de este sistema son enteramente

académicos y no suplen necesidades reales de la industria del riego en Colombia, por

consiguiente es necesario extender el sistema con sensores y tarjetas programables de uso

industrial para poder tener una aplicación industrial real.

161

REFERENCIAS

1. Pena, M., Pardal, J., & Villaverde, P., “Arduino y Node.js”, Moncho Pena, 2015

2. Millas, J. A., González, G., Salomon, M., & Rodríguez, Á., “Diseño de estructuras

dinámicas para ofrecer gráficos y pantallas emergentes en entorno web”, 2014

3. Weerawarana S., Curbera F., Leymann F., Storey T., & Ferguson, D, “Web Services

Platform Architecture: Soap, Wsdl, Ws-Policy, Ws-Addressing, Ws-Bpel, Ws-

Reliable Messaging and More. Prentice Hall PTR, Upper Saddle River, NJ, USA”,

2005

4. Wood, D, “Linking enterprise data. Place of publication not identified: Springer”,

2014.

5. Guía Breve de Servicios Web. Octubre 24, 2015, de W3C, 2006 [Online]

http://www.w3c.es/Divulgacion/GuiasBreves/ServiciosWeb

6. Introducing JSON, 2016 [Online] http://www.json.org/

7. Evapotranspiration and crop coefficients for coffee trees « Water .... Obtenido May 30,

2017, [Online] http://www.aguayriego.com/en/2016/02/evapotranspiracion-y-

coeficientes-de-cultivo-para-el-cafeto/

8. Races D., Smith, K, “Servicio de recursos, fomento y aprovechamiento de las aguas.

Roma: FAO”, 2006

9. Silva, J., Silva, P., Silva, T., Lúcio, J., Santos, D., & Santos, M. (), “Determinação do

Coeficiente de Cultivo (Kc) para a Cultura do Pimentão Através de Lisimetria de

Drenagem no Agreste Alagoano. Anais Do II Inovagri International Meeting - 2014”,

2014

10. Millas, J. A., González, G., Salomon, M., & Rodríguez, Á, “Diseño de estructuras

dinámicas para ofrecer gráficos y pantallas emergentes en entorno web.”, 2014

11. Michaelis, C. D., & Ames, D. P, “Web Feature Service (WFS) and Web Map Service

(WMS)”, Encyclopedia of GIS, 1-3, 2016

162

12. Chanchí, G. E., Campo, W. Y., Amaya, J. P., & Arciniegas, J. L, “Esquema de

servicios para Televisión Digital Interactiva, basados en el protocolo REST-JSON.”

Cadernos de Informática, pp.233-240, 2011

13. Spinak, E, “LA NORMA Z39. 50”, Informatio. Revista del Instituto de Información

de la Facultad de Información y Comunicación, (1), 2013

14. Cruz, R., Torres, J.S., & Besosa T.R, “Asociación de cultivadores de caña de azúcar,

de Colombia, Asocaña”, informe anual 2010- 2011, 2011

15. Viveros, C. A, “Mayor eficiencia en el uso del agua para la producción de caña de

azúcar. En Tesis doctoral en fitomejoramiento” Palmira: Universidad nacional de

Colombia. Pp.24-25, 2011

16. Roger-Estrade, J., Richard, G., Dexter, A. R., Boizard, H., De Tourdonnet, S.,

Bertrand, M., & Caneill, J, “Integration of soil structure variations with time and space

into models for crop management: a review. In Sustainable Agriculture” (pp. 813-

822). Springer Netherlands, 2009

17. “Investigación sobre el uso del suelo agropecuario en el Valle del Cauca”, DANE,

2012

18. Gisbert, J. M, “Génesis del suelo. Universidad politécnica de Valencia”, 2010

19. Ramos-Reyes, R., Sánchez-Hernández, R., & Gama-Campillo, L. M, “Análisis de

cambios de uso del suelo en el municipio costero de Comalcalco, Tabasco, México.

Ecosistemas y recursos agropecuarios” 3(8), 151-160, 2016

20. Horras, D. A., Studdert, G., & XLinzon, “Distribution properties, land use and

management of mollisols in South America”, Sci 21. Pp.511-530, 2011

21. Arévalo G., & Gauggel C, “Curso de manejo de suelos y nutrición vegetal, manual de

pràcticas. Tegucigalpa, Honduras Zamorano”. P.75, 2010

22. Cruz, R. “Necesidad de agua de la caña de azúcar Carta trimestral”, 2010 Vol. 42.

P.41, 2010

23. OLGUÍN VILLALOBOS, L. R, “Impacto de la implementación del sistema de riego

por goteo, en la rentabilidad de los cultivos de caña de azúcar, en la Empresa Sociedad

Agrícola Valle Grande SAC”, durante el período 2009-2012, 2013

24. “Proyecto subsectorial de Irrigación. Sistema de riego por multicompuertas”, Perú:

Ministerio de Agricultura - Oficina de gestión, 2014

163

25. Cavero, J., Urrego, Y., Faci, J.M., Fernández, A., & Martínez, A, “Razones

agronómicas para el riego por aspersión nocturno en maíz. Zaragoza: Departamento de

suelo y Agua. Estación experimental de aula”, Tierras 214 p.26, 2010

26. Fontela, C., Salatino, S., & Mirábile, C. “Riego por goteo en Mendoza, Argentina:

evaluación de la uniformidad del riego y del incremento de salinidad, sodicidad e

iones cloruro en el suelo”, Rev. FCA UN Cuyo, 41(1), 135-154, 2009

27. Allen, R.G, “Riego y Drenaje. Evaporación del cultivo”, Utah State University, Logan

Utah. EU, 2009

28. Cruz Valderrama, J. R, “Manejo eficiente del riego en el cultivo de caña de azúcar en

el valle geográfico del Río Cauca” (No. 633.61 C957m). CENICAÑA, 2015

29. Herrera, “Avances técnicos para la programación y manejo del riego en caña de

azúcar” México DF: Editorial Continental, 2004

30. MacKenzie, C. M., Laskey, K., McCabe, F., Brown, P. F., & Metz, R, “Reference

model for service oriented architecture” 1.0. oasis standard, 12 October 2006, 2011

31. Roshen, W, “SOA-Based Enterprise Integration: A Step-by-Step Guide to Services-

based Application”, McGraw-Hill, Inc, 2009

32. “Architecture Overview - ts - Angular 2”, 2015, [Online]

https://angular.io/docs/ts/latest/guide/architecture.html.

33. “Service Oriented Architecture : What Is SOA?”. 2016, [Online]

http://www.opengroup.org/soa/source-book/soa/soa.htm#soa_definition

34. S. Vinoski. “Putting the “Web” into Web services: Interaction models, part 1: Current

practice”, 2002

35. Hamad, H., Saad, M., & Abed, R. “Performance Evaluation of RESTful Web

Services for Mobile Devices” Int. Arab J. e-Technol., 1(3), 72-78, 2010

36. Pautasso, C., Zimmermann, O., & Leymann, F., “RESTful Web Services vs. ‘Big’

Web Services: Making the Right Architectural Decision. Beijing: Conclusiones de la

17ª”, Conferencia Internacional sobre el World Wide Web. pp. 805-812, 2008

37. Bonfè, M., Fantuzzi, C., & Secchi, C. “Design patterns for model-based automation

software design and implementation. Control Engineering Practice”, 21(11), 1608-

1619, 2013

38. “APLICACIÓN DE PATRONES DE DISEÑO EN EL DISEÑO”, 2012 [Online]:

http://biblioteca.usac.edu.gt/tesis/08/08_0584_CS.pdf.

164

39. Freeman, A, “The Template Method Pattern. Pro Design Patterns in Swift”, 517-524,

2014

40. The Singleton Pattern, “Pro JavaScript Design Patterns”, 65-82, 2008

41. López, R, “Análisis y Diseño Orientado a Objetos de un framework para el modelado

estadístico con MLG - TDX”, 2011 [Online]:

http://www.tdx.cat/bitstream/handle/10803/9442/trjl1de1.pdf?sequence=1.

42. A. Freeman, “The Flyweight Pattern,” Pro Design Patterns in Swift, pp. 339–356,

2014.

43. Zhou, J., & Ding, Y. “An Analysis of URLs Generated from JavaScript Code”,

IEEE/ACIS 11th International Conference on Computer and Information Science,

2012

44. Feroz, M. N., & Mengel, S, “Phishing URL Detection Using URL Ranking” 2015

IEEE International Congress on Big Data, 2015

45. Pautasso, C. “RESTful Web service composition with BPEL for REST. Data &

Knowledge Engineering”, 68(9), 851-866, 2009

46. Martorelli, S. L., Sanz, C. V., Giacomantone, J., & Martorelli, S. R, “ParasitePics: An

Animal Parasitology Image Repository Prototype for Teaching and Learning”, 2009

47. Paradiso, G, “Diario de un Consultor. Edición Especia”, 2015 [Online]:

https://books.google.com.co/books?id=xPUTCwAAQBAJ

48. Definiendo la innovación; La innovación en la Administración Pública; Transnacional:

La transformación a través de las ideas; La innovación en las Administraciones

Públicas: Una perspectiva desde la empresa y la universidad; La innovación del sector

público: Una mirada personal; La Administración Pública en Iberoamérica: Estado de

la cuestión y nuevos horizontes; Bibliografía. (n.d.). Introducción a La Innovación En

La Administración Pública. Visiones Para Una Administración Pública Innovadora,

11-104.

49. Daigneau, R, “Service Design Patterns: fundamental design solutions for

SOAP/WSDL and restful Web Services” Addison-Wesley, 2011

50. “Guía Breve de Tecnologías XML - W3C”, 2006, [Online]:

http://www.w3c.es/Divulgacion/GuiasBreves/TecnologiasXML.

51. Christensen, E., Curbera, F., Meredith, G., & Weerawarana, S, “Web services

description language (wsdl) 1.1”, 2015, [Online]: http://www. w3. org/TR/wsdl.

Accessed, 05-22.

165

52. J. Zhang, X. Yu, P. Liu, and Z. Wang, “Research on Improving Performance of

Semantic Search in UDDI,” 2009 WRI Global Congress on Intelligent Systems, 2009

53. "Relación entre UDDI y WSDL - IBM.", 2012 [Online]: http://www-

01.ibm.com/support/knowledgecenter/SS8PJ7_8.5.1/org.eclipse.jst.ws.consumption.ui

.doc.user/concepts/cwsdlud.html?lang=es

54. MCCORMICK, Z, “Data Synchronization Patterns in Mobile Application Design”,

2012 [Online]: https://www.dre.vanderbilt.edu/~schmidt/PDF/PatternPaperv11.pdf.

55. Yvonnet, J., Monteiro, E., & He, Q. C, “Computational homogenization method and

reduced database model for hyperelastic heterogeneous structures. International

Journal for Multiscale Computational Engineering”, 11(3), 2013

56. Castillo, P.A., Bernier, J.l., Arenas, M.G., Merelo, J.J., & García-Sánchez, P. (Mayo

25, 2011). “SOAP vs REST: Comparing a master-slave GA implementation”, 2013

57. Potti, P.K., Ahuja, S., Umapathy, K., & Prodanoff, Z, “Comparing Performance of

Web Service Interaction Styles: SOAP vs. REST”, University of North Florida: Actas

de la Conferencia sobre Investigación en Sistemas de Información Aplicada, 2012

58. Hamad, H., Saad, M., & ,Abed R, “Performance Evaluation of RESTful Web Services

for Mobile Devices”, Departamento de Ingeniería Informática de la Universidad

Islámica de Gaza, Palestina: Diario Árabe Internacional de e-Tecnologia, 2010

59. Parsons, M. A., Godøy, Ø., LeDrew, E., De Bruin, T. F., Danis, B., Tomlinson, S., &

Carlson, D, “A conceptual framework for managing very diverse data for complex,

interdisciplinary science”, Journal of Information Science, 37(6), 555-569, 2011

60. Mumbaikar, S., & Padiya, P. “Web Services Based On SOAP and REST Principles”,

Revista Internacional de Publicaciones científicas y de investigación, Volumen 3,

Número 5, 2013

61. Guinard, D., Ion, I., & Mayerm, S, “In Search of an Internet of Things Service

Architecture: REST or WS-*? A Developers’ Perspective. En MOBILE AND

UBIQUITOUS SYSTEMS: COMPUTING, NETWORKING, AND SERVICES”,

(pp.326-337). ETH Zurich, Suiza: Instituto de Computación Ubicua, 2012

62. Masse, M. “REST API Design Rulebook: Designing Consistent RESTful Web Service

Interfaces.", O'Reilly Media, Inc, 2011

63. Newcomer, E., & Lomow, G, “Understanding SOA with Web Services” ISBN 978-0-

321-18086-5, 2004

166

64. “Understanding Web Services Security Concepts”, 2016 [Online]:

https://docs.oracle.com/cd/E23943_01/web.1111/b32511/intro_security.htm#WSSEC

2342

65. “Custom Objects | SOAP API Developer Guide”, 2014 [Online]:

https://developer.salesforce.com/docs/atlas.en-

us.api.meta/api/sforce_api_objects_custom_objects.htm.

66. Felipe, O, “Design and development of a REST-based Web service Platform for

Applications Integration”, 2010, [Online]:

http://upcommons.upc.edu/bitstream/handle/2099.1/8553/Master%20thesis%20-

%20Luis%20Oliva.pdf.

67. Lozano, M, “Desarrollo de una aplicación móvil android para control remoto de un

servicio web”, 2012 [Online]: http://e-

archivo.uc3m.es/bitstream/handle/10016/16913/TFG_Maria_Lozano_Perez.pdf?seque

nce=1.

68. Johnsrud, L., Hadzic, D., Hafsøe, T., Johnsen, F. T., & Lund, K., “Efficient web

services in mobile networks”. En WEB SERVICES. IEEE Sixth European

Conference, 2008

69. Zheng, Z., Ma, H., Lyu, M. R., & King, I, “Wsrec: A collaborative filtering based web

service recommender system In Web Services,” 2009. ICWS 2009. IEEE International

Conference on (pp. 437-444). IEEE, 2009

70. Hernández-Pérez, T., Rodríguez-Mateos, D., Martín-Galán, B., & García-Moreno, M.

A, “El uso de metadatos en la administración electrónica española: Los retos de la

interoperabilidad”, Revista Española De Documentación Científica,32(4), 67-91, 2009

71. “Ranch Systems Internet Software”, 2015 [Online]:

http://www.ranchsystems.com/ssite/rs-internetsoftware-gettingstartedguide-1.1.pdf

72. “ClimateMinder Technology”, 2015 [Online]:

http://www.rainbird.com/ag/products/ClimateMinder/Technology.htm

73. Larman, C. “Applying UML and Patterns: An Introduction to Object Oriented

Analysis and Design and Interative Development”, Pearson Education India, 2012

74. Capítulo 4, “En PATRONES DE DISEÑO”, 2009 [Online]:

http://catarina.udlap.mx/u_dl_a/tales/documentos/lis/diaz_c_a/capitulo4.pdf.

75. Osmani, A, “Learning JavaScript Design Patterns: A JavaScript and jQuery

Developer's Guide”, O'Reilly Media, Inc, 2012

167

76. “Arduino UNO”, 2016 [Online]: https://www.arduino.cc/en/main/arduinoBoardUno

77. “Globin 2 Manual, VERSE Technology”, 2016, [Online]: http://www.verse-

technology.com/wp-content/uploads/2016/10/MANUAL-GOBLIN-ESPAÑOL.pdf

78. Bakhtiari, B., & Liaghat, A. M, “Seasonal sensitivity analysis for climatic variables of

ASCE-Penman-Monteith model in a semi-arid climate. Journal of Agricultural

Science and Technology”, 13, 1135-1145, 2011

79. Minet, J., Lambot, S., Delaide, G., Huisman, J. A., Vereecken, H., & Vanclooster, M,

“A generalized frequency domain reflectometry modeling technique for soil electrical

properties determination. Vadose zone journal”, 9(4), 1063-1072, 2010

80. Thakur, A., Roychowdhury, S., Kundu, D., & Singh, R, “Evaluation of planting

methods in irrigated rice. Archives of Agronomy and Soil Science”, 50(6), 631-640,

2004

81. Černý, R, “Time-domain reflectometry method and its application for measuring

moisture content in porous materials: A review. Measurement”, 42(3), 329-336, 2009

82. “Fundamentos de la Humedad del Suelo - IRROMETER - Básicos”, 2017 [Online]:

http://www.irrometer.com/basicssp.html

83. “Influencia de tratamiento alternativo del agua de riego en los ....” 2017 [Onlie]:

http://revistaeidenar.univalle.edu.co/revista/ejemplares/12/j.htm

84. Red Agrícola Dr. Luis Gorovich, “Desarrollo de sensores para las plantas”, Chile,

2016.

85. “American Laborayory”, 2017, [Online]:

http://media.americanlaboratory.com/m/20/article/38090-fig1.jpg

86. Luis Llamas, “Medir La Humedad Del Suelo Con Arduino E Higrómetro FC-28”,

2017, [Online]: https://www.luisllamas.es/arduino-humedad-suelo-fc-28/

87. “Arduino Rain Sensor Manual and Tutorial | Henry's Bench”, 2015. [Online]:

http://henrysbench.capnfatz.com/henrys-bench/arduino-sensors-and-input/arduino-

rain-sensor-module-guide-and-tutorial/

88. “Homeautomation, Measure soil Moisture with Arduino - Gardening”, 2017, [Online]:

http://www.homautomation.org/2014/06/20/measure-soil-moisture-with-arduino-

gardening/

89. Prometec, “ARDUINO Y WIFI” ESP8266, 2017, [Online]:

http://www.prometec.net/arduino-wifi/

168

90. Ores, J. W. S., Audet, S. A., Carney, J. K., Gottesman, J. M., Donders, A. P., &

Ujhelyi, M. R, U.S. “Patent No. 7,594,889”, Washington, DC: U.S. Patent and

Trademark Office, 2009

91. Wang, V., Salim, F., & Moskovits, P, “WebSocket Security. The Definitive Guide to

HTML5 WebSocket”, 129-147, 2013

92. Chavan, P.U., Dr. Murugan, M. y Chavan, P.P, “A Review on Software Architecture

Styles with Layered Robotic Software Architecture”, International Conference on

Computing Communication Control and Automation, 2015

93. Babu, D.K., Rajulu, G.P., Reddy R.A., Kumari A.A.N, “Selection of Architecture

Styles using Analytic Network Process for the Optimization of Software

Architecture”, International Journal of Computer Science and Information Security,

Vol. 8 No.1, 2010

94. Ramirez, J., Insuasty, O. y Viveros, C.A., “Comportamiento Agroindustrial de 10

variedades de caña de azúcar en Santander Colombia”, 183-195, 2014

95. Cruz, V.J., Torres, J.S., Besosa, T.R. y Rojas, L.R., “Resultados preliminares acerca

de la función de respuesta de la caña de azúcar al agua”, Carta trimestral 2-2010 Vol

32 Nº 3-4, 3-5., 2010

96. Mardan, A., & Gorczynski, R. “Express.js: Tworzenie aplikacji sieciowych w Node.js.

Gliwice: Helion”, 2016

97. Rossano, Víctor. Electrónica & microcontroladores PIC. USERSHOP, 2009.

98. Romay, C., L. Génova, H. Salgado, and S. M. Zabala. "RECOMENDACIONES PARA

MEJORAR LA EFICIENCIA EN EL RIEGO DISCONTINUO PROGRAMANDO LA VALVULA

AUTOMATICA." Riego y drenaje, Facultad de agronomía de Buenos Aires, Av. San Martin

4453, 2014.

99. Miniguano, Félix, Ricardo Paúl, Pacheco Chiguano, and Daniel Patricio. "Diseño e

implementación de un sistema domótico de riego de plantas controlado remotamente a través

del Internet.", 2011.

169

ANEXOS

1. Datos de riego cultivo Caña de Azúcar, datos obtenidos de Valle del río Cauca, fuente:

Cenicaña.

Cultivo: Caña de azúcar

Ubicación/Sitio de cultivo: Valle del río Cauca

Datos entregados por: Cenicaña

Constantes

Fecha de inicio Variedad de

Cultivo Tipo de riego

Capacidad de

campo LARA

01 - Junio - 2015 CC8592 Sin información 100 60

Variables

Evaporació

n

Factor de

cultivo

Evapotrans

piración

Balance Hídrico

Día Precipitaci

ón efectiva

Riego

efectivo

Humedad

del suelo

1 4,02 0,7 2,81 0 0 60

2 3,06 0,7 2,14 0 40 97,19

3 7,3 0,7 5,11 0 0 95,04

4 5,24 0,7 3,67 0 0 89,93

5 6,12 0,7 4,28 0 0 86,27

6 5,36 0,7 3,75 0 0 81,98

7 2,8 0,7 1,96 7,4 0 85,63

8 2,28 0,7 1,60 5,6 0 89,27

9 2,34 0,7 1,64 0 0 87,67

10 7,2 0,7 5,04 0 0 86,04

11 4,94 0,7 3,46 13,2 0 94,20

12 4,92 0,7 3,44 0 0 90,74

13 3,96 0,7 2,77 0 0 87,29

170

14 2,42 0,7 1,69 0 0 84,52

15 4,68 0,7 3,28 0 0 82,83

16 3,84 0,7 2,69 0 0 79,55

17 6,94 0,7 4,86 0 0 76,86

18 3,44 0,7 2,41 0 0 72,01

19 6,16 0,7 4,31 0 30 99,60

20 5,02 0,7 3,51 0 0 95,29

21 5,46 0,7 3,82 0 0 91,77

22 5,08 0,7 3,56 0 0 87,95

23 4,96 0,7 3,47 0 0 84,39

24 5,72 0,7 4,00 0 0 80,92

25 4,34 0,7 3,04 0 0 76,92

26 3,36 0,7 2,35 0 0 73,88

27 5,78 0,7 4,05 0 0 71,53

28 5,78 0,7 4,05 0 0 67,48

29 6,26 0,7 4,38 0 0 63,44

30 3,86 0,7 2,70 0 0 59,05

31 6,32 0,7 4,42 0 0 56,35

2. Datos de riego cultivo Caña de Azúcar, datos obtenidos de Hacienda Casablanca,

fuente Ing. Pedro Ivan Bastidas.

Cultivo: Caña de azúcar

Ubicación/Sitio de cultivo: Hacienda Casablanca

Norte del Cauca

Datos entregados por: Ing. Pedro Ivan Bastidas

2.1. Mes de Noviembre 2015

Constantes

Área de

cultivo

Fecha de

inicio

Variedad de

Cultivo Tipo de riego

Capacidad de

campo LARA

10 Ha 01 - CC01-1940 Multicompuer 114 57

171

Noviembre -

2015

tas

Variables

Evaporació

n

Factor de

cultivo

Evapotrans

piración

Balance Hídrico

Día Precipitaci

ón efectiva

Riego

efectivo

Humedad

del suelo

1 4,02 0,5 2,01 0 0 62

2 4,02 0,5 2,01 0 40 99,99

3 6,2 0,5 3,10 0 0 97,98

4 7,5 0,5 3,75 0 0 94,88

5 6,3 0,5 3,15 0 0 91,13

6 5,3 0,5 2,65 10 0 97,98

7 4,8 0,5 2,40 0 0 95,33

8 4,9 0,5 2,45 12 0 104,93

9 4,1 0,5 2,05 0 0 102,48

10 6,2 0,5 3,10 0 0 100,43

11 0,5 0,5 0,25 15 0 112,33

12 4,9 0,5 2,45 0 0 112,08

13 4,3 0,5 2,15 0 0 109,63

14 3,8 0,5 1,90 0 0 107,48

15 4,5 0,5 2,25 0 0 105,58

16 5,5 0,5 2,75 0 17 120,33

17 6,8 0,5 3,40 0 0 117,58

18 5,4 0,5 2,70 0 0 114,18

19 6 0,5 3,00 0 0 111,48

20 6,2 0,5 3,10 0 0 108,48

21 5,6 0,5 2,80 0 0 105,38

22 5,2 0,5 2,60 0 0 102,58

23 4,8 0,5 2,40 0 0 99,98

24 4,7 0,5 2,35 0 0 97,58

172

25 4,5 0,5 2,25 0 0 95,23

26 4,1 0,5 2,05 0 0 92,98

27 4 0,5 2,00 0 0 90,93

28 4,3 0,5 2,15 0 0 88,93

29 3,9 0,5 1,95 0 0 86,78

30 3,8 0,5 1,90 0 34 118,83

31

2.2. Mes de Diciembre 2015

Constantes

Área de

cultivo

Fecha de

inicio

Variedad de

Cultivo Tipo de riego

Capacidad de

campo LARA

10 Ha

01 -

Diciembre -

2015

CC01-1940 Multicompuer

tas 114 57

Variables

Evaporació

n

Factor de

cultivo

Evapotrans

piración

Balance Hídrico

Día Precipitaci

ón efectiva

Riego

efectivo

Humedad

del suelo

1 3,8 0,6 2,28 0 0 101,07

2 4 0,6 2,40 0 0 98,79

3 5,5 0,6 3,30 0 0 96,39

4 5,8 0,6 3,48 0 0 93,09

5 6,3 0,6 3,78 0 0 89,61

6 6,7 0,6 4,02 0 0 85,83

7 6,8 0,6 4,08 0 0 81,81

8 7 0,6 4,20 0 0 77,73

9 6,7 0,6 4,02 0 0 73,53

10 6,2 0,6 3,72 0 0 69,51

173

11 5,9 0,6 3,54 0 0 65,79

12 5,2 0,6 3,12 0 0 62,25

13 4,8 0,6 2,88 0 0 59,13

14 4,3 0,6 2,58 0 0 56,25

15 4,4 0,6 2,64 0 0 53,67

16 4,9 0,6 2,94 0 40 91,03

17 5,8 0,6 3,48 0 0 88,09

18 5,9 0,6 3,54 0 0 84,61

19 6 0,6 3,60 0 0 81,07

20 6,2 0,6 3,72 0 0 77,47

21 5,6 0,6 3,36 0 0 73,75

22 5,2 0,6 3,12 0 0 70,39

23 4,8 0,6 2,88 0 0 67,27

24 4,7 0,6 2,82 0 0 64,39

25 4,5 0,6 2,70 0 0 61,57

26 4,1 0,6 2,46 0 0 58,87

27 4 0,6 2,40 0 0 56,41

28 4,3 0,6 2,58 0 0 54,01

29 3,9 0,6 2,34 0 40 91,43

30 3,8 0,6 2,28 0 0 89,09

31 3,5 0,6 2,10 0 0 86,81

2.3. Mes de Enero de 2016

Constantes

Área de

cultivo

Fecha de

inicio

Variedad de

Cultivo Tipo de riego

Capacidad de

campo LARA

10 Ha 01 - Enero -

2015 CC01-1940

Multicompuer

tas 114 57

Variables

174

Evaporació

n

Factor de

cultivo

Evapotrans

piración

Balance Hídrico

Día Precipitaci

ón efectiva

Riego

efectivo

Humedad

del suelo

1 3,7 0,7 2,59 0 0 101,07

2 3,9 0,7 2,73 0 0 98,48

3 5,6 0,7 3,92 0 0 95,75

4 5,9 0,7 4,13 0 0 91,83

5 6,2 0,7 4,34 0 0 87,70

6 6,6 0,7 4,62 0 0 83,36

7 6,9 0,7 4,83 0 0 78,74

8 6,7 0,7 4,69 0 40 113,91

9 7 0,7 4,90 0 0 109,22

10 6,8 0,7 4,76 0 0 104,32

11 6,3 0,7 4,41 0 0 99,56

12 6,1 0,7 4,27 0 0 95,15

13 5,9 0,7 4,13 0 0 90,88

14 5,7 0,7 3,99 0 0 86,75

15 5,5 0,7 3,85 0 0 82,76

16 5,4 0,7 3,78 0 0 78,91

17 5,5 0,7 3,85 0 0 75,13

18 5,9 0,7 4,13 0 0 71,28

19 6,3 0,7 4,41 0 35 102,15

20 6,5 0,7 4,55 0 0 97,74

21 6,6 0,7 4,62 0 0 93,19

22 6,4 0,7 4,48 0 0 88,57

23 5,9 0,7 4,13 0 0 84,09

24 5,4 0,7 3,78 0 0 79,96

25 4,9 0,7 3,43 0 0 76,18

26 4,5 0,7 3,15 0 0 72,75

27 4,3 0,7 3,01 0 0 69,60

28 4,4 0,7 3,08 0 0 66,59

175

29 4,2 0,7 2,94 0 0 63,51

30 4,1 0,7 2,87 0 35 95,57

31 3,9 0,7 2,73 0 0 92,70

2.4. Mes de Febrero de 2016

Constantes

Área de

cultivo

Fecha de

inicio

Variedad de

Cultivo Tipo de riego

Capacidad de

campo LARA

10 Ha 01 - Febrero -

2015 CC01-1940

Multicompuer

tas 114 57

Variables

Evaporació

n

Factor de

cultivo

Evapotrans

piración

Balance Hídrico

Día Precipitaci

ón efectiva

Riego

efectivo

Humedad

del suelo

1 3,9 0,8 3,12 0 0 96,6

2 4,1 0,8 3,28 0 0 93,48

3 4,9 0,8 3,92 0 0 90,20

4 5,5 0,8 4,40 0 0 86,28

5 6 0,8 4,80 0 0 81,88

6 6,5 0,8 5,20 0 0 77,08

7 6,6 0,8 5,28 0 0 71,88

8 6,8 0,8 5,44 0 0 66,60

9 6,9 0,8 5,52 0 45 106,16

10 7 0,8 5,60 0 0 100,64

11 6,8 0,8 5,44 0 0 95,04

12 6,5 0,8 5,20 0 0 89,60

13 6,3 0,8 5,04 0 0 84,40

14 6,2 0,8 4,96 0 0 79,36

15 6,2 0,8 4,96 0 0 74,40

176

16 6,5 0,8 5,20 0 0 69,44

17 6,6 0,8 5,28 0 0 64,24

18 6,2 0,8 4,96 0 0 58,96

19 6 0,8 4,80 0 0 54,00

20 5,9 0,8 4,72 0 50 99,20

21 5,8 0,8 4,64 0 0 94,48

22 6 0,8 4,80 0 0 89,84

23 6,2 0,8 4,96 0 0 85,04

24 6,4 0,8 5,12 0 0 80,08

25 6,6 0,8 5,28 0 0 74,96

26 6,7 0,8 5,36 0 0 69,68

27 6,3 0,8 5,04 0 0 64,32

28 6 0,8 4,80 0 0 59,28

29 5,5 0,8 4,40 0 0 54,48

30

31

3. Vistazos de código fuente servicio web y aplicación móvil

3.1. Método request de clase server-api

/**

*@method request

*@param {String} uri debe ser por ejemplo: http://localhost:3010/api/crop

*@param {String} method debe ser por ejemplo: Post, el método debe tener la primera

letra en mayúscula

*@param {Obejct} body debe ser las opciones requeridas dependiendo del método que se

realice este es un JSON el cual es afectado por la función JSON.stringify()**/

request(method, uri, body, callback){

lef bodysend = JSON.stringify(body);

this.http.request(new Request({

177

method: RequestMethod[method],

url: uri,

headers : {

'access-key': this.token,

'Content-Type': 'application/json'

},

body:bodysend

})).subscribe(res => {

console.log('result', res.json())

callback(null, res.json().insertId);

}).error(err =>{

callback(err);

});

}

3.2. Método saveCrop del cliente

saveCrop(){

let newCrop = JSON.stringify({

Name : this.Name,

CropVariety: this.CropVariety,

FieldCapacity : this.FieldCapacity,

LARA: this.LARA,

CropStartDate: (new

Date(this.CropStartDate)).toISOString().substring(0,19).replace('T', ' '),

TypeIrrigation: this.TypeIrrigation,

CropArea: this.CropArea

});

Server.request(‘Post’,’/api/crops’,newCrop, function(err, result){

178

if(err){

console.log(‘error:’, err);

}

this.navParams.get('page2').saveCrop(result);

this.nav.pop();

});

}

3.3. Método listCrops del cliente

listCrops(limit){

let getCrop = JSON.stringify({

data: [ Name, LARA, CropStartDate, Id ],

limit: limit,

whereClause: “CropStartDate >= CURDATE() - INTERVAL 1 WEEK”

});

Server.request(Get,’/api/crops’,getCrop, function(err, result){

if(err){

console.log(‘error:’, err);

}

this.crops = result.data;

});

}