ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) GRADO EN INGENIERÍA TELEMÁTICA ESTUDIO DE LA PLATAFORMA DE IOT BLUEMIX Y DESARROLLO DE UNA SOLUCIÓN SMART AGRICULTURE Autor: Amaya Manzano Ibarra Director: David Contreras Bárcena Madrid Junio 2016
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO DE LA PLATAFORMA DE IOT BLUEMIX Y DESARROLLO DE UNA SOLUCIÓN SMART AGRICULTURE
Autor: Amaya Manzano Ibarra
Director: David Contreras Bárcena
Madrid Junio 2016
Declaro, bajo mi responsabilidad, que el Proyecto presentado con el título
Estudio de la plataforma de IOT Bluemix y desarrollo de una solución Smart Agriculture
en la ETS de Ingeniería - ICAI de la Universidad Pontificia Comillas en el
curso académico (2015/16) es de mi autoría, original e inédito y
no ha sido presentado con anterioridad a otros efectos.
El Proyecto no es plagio de otro, ni total ni parcialmente y la información que ha sido
tomada de otros documentos está debidamente referenciada.
Fdo.: …………………………………………… Fecha: 16/07/2016
Autorizada la entrega del proyecto
EL DIRECTOR DEL PROYECTO
Fdo.: …………………………………………… Fecha: ……/ ……/ ……
Vº Bº del Coordinador de Proyectos
Fdo.: …………………………………………… Fecha: ……/ ……/ ……
AUTORIZACIÓN PARA LA DIGITALIZACIÓN, DEPÓSITO Y DIVULGACIÓN EN RED DE PROYECTOS FIN DE GRADO, FIN DE MÁSTER, TESINAS O MEMORIAS DE BACHILLERATO
1º. Declaración de la autoría y acreditación de la misma. El autor D. Amaya Manzano Ibarra DECLARA ser el titular de los derechos de propiedad intelectual de la obra: Estudio de la plataforma de IOT Bluemix y desarrollo de una solución Smart Agriculture, que ésta es una obra original, y que ostenta la condición de autor en el sentido que otorga la Ley de Propiedad Intelectual. 2º. Objeto y fines de la cesión. Con el fin de dar la máxima difusión a la obra citada a través del Repositorio institucional de la Universidad, el autor CEDE a la Universidad Pontificia Comillas, de forma gratuita y no exclusiva, por el máximo plazo legal y con ámbito universal, los derechos de digitalización, de archivo, de reproducción, de distribución y de comunicación pública, incluido el derecho de puesta a disposición electrónica, tal y como se describen en la Ley de Propiedad Intelectual. El derecho de transformación se cede a los únicos efectos de lo dispuesto en la letra a) del apartado siguiente. 3º. Condiciones de la cesión y acceso Sin perjuicio de la titularidad de la obra, que sigue correspondiendo a su autor, la cesión de derechos contemplada en esta licencia habilita para:
a) Transformarla con el fin de adaptarla a cualquier tecnología que permita incorporarla a internet y hacerla accesible; incorporar metadatos para realizar el registro de la obra e incorporar “marcas de agua” o cualquier otro sistema de seguridad o de protección.
b) Reproducirla en un soporte digital para su incorporación a una base de datos electrónica, incluyendo el derecho de reproducir y almacenar la obra en servidores, a los efectos de garantizar su seguridad, conservación y preservar el formato.
c) Comunicarla, por defecto, a través de un archivo institucional abierto, accesible de modo libre y gratuito a través de internet.
d) Cualquier otra forma de acceso (restringido, embargado, cerrado) deberá solicitarse expresamente y obedecer a causas justificadas.
e) Asignar por defecto a estos trabajos una licencia Creative Commons. f) Asignar por defecto a estos trabajos un HANDLE (URL persistente).
4º. Derechos del autor. El autor, en tanto que titular de una obra tiene derecho a:
a) Que la Universidad identifique claramente su nombre como autor de la misma b) Comunicar y dar publicidad a la obra en la versión que ceda y en otras posteriores a través de
cualquier medio. c) Solicitar la retirada de la obra del repositorio por causa justificada. d) Recibir notificación fehaciente de cualquier reclamación que puedan formular terceras personas
en relación con la obra y, en particular, de reclamaciones relativas a los derechos de propiedad intelectual sobre ella.
5º. Deberes del autor.
• El autor se compromete a:
a) Garantizar que el compromiso que adquiere mediante el presente escrito no infringe ningún derecho de terceros, ya sean de propiedad industrial, intelectual o cualquier otro.
b) Garantizar que el contenido de las obras no atenta contra los derechos al honor, a la intimidad y a la imagen de terceros.
c) Asumir toda reclamación o responsabilidad, incluyendo las indemnizaciones por daños, que pudieran ejercitarse contra la Universidad por terceros que vieran infringidos sus derechos e intereses a causa de la cesión.
d) Asumir la responsabilidad en el caso de que las instituciones fueran condenadas por infracción de derechos derivada de las obras objeto de la cesión.
6º. Fines y funcionamiento del Repositorio Institucional. La obra se pondrá a disposición de los usuarios para que hagan de ella un uso justo y respetuoso con los derechos del autor, según lo permitido por la legislación aplicable, y con fines de estudio, investigación, o cualquier otro fin lícito. Con dicha finalidad, la Universidad asume los siguientes deberes y se reserva las siguientes facultades: La Universidad informará a los usuarios del archivo sobre los usos permitidos, y no
garantiza ni asume responsabilidad alguna por otras formas en que los usuarios hagan un uso posterior de las obras no conforme con la legislación vigente. El uso posterior, más allá de la copia privada, requerirá que se cite la fuente y se reconozca la autoría, que no se obtenga beneficio comercial, y que no se realicen obras derivadas.
La Universidad no revisará el contenido de las obras, que en todo caso permanecerá bajo la responsabilidad exclusive del autor y no estará obligada a ejercitar acciones legales en nombre del autor en el supuesto de infracciones a derechos de propiedad intelectual derivados del depósito y archivo de las obras. El autor renuncia a cualquier reclamación frente a la Universidad por las formas no ajustadas a la legislación vigente en que los usuarios hagan uso de las obras.
La Universidad adoptará las medidas necesarias para la preservación de la obra en un futuro. La Universidad se reserva la facultad de retirar la obra, previa notificación al autor, en supuestos
suficientemente justificados, o en caso de reclamaciones de terceros. Madrid, a 16 de Julio de 2016
ACEPTA
Fdo. ………………………………………………
Motivos para solicitar el acceso restringido, cerrado o embargado del trabajo en el Repositorio Institucional:
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO DE LA PLATAFORMA DE IOT BLUEMIX Y DESARROLLO DE UNA SOLUCIÓN SMART AGRICULTURE
Autor: Amaya Manzano Ibarra
Director: David Contreras Bárcena
Madrid Junio 2016
Agradecimientos A mi familia, novio, amigos y mi director de proyecto.
También muy en especial a Paco por conseguirme todos los contactos para las entrevistas.
¡Gracias a todos!
"Si no puedes volar entonces corre. Si no puedes correr entonces camina. Si no puedes
caminar entonces arrástrate, pero sea lo que hagas, sigue moviéndote hacia adelante."
Martin Luther King Jr.
ESTUDIO DE LA PLATAFORMA DE IOT BLUEMIX Y DESARROLLO DE UNA SOLUCIÓN SMART AGRICULTURE
Autor: Manzano Ibarra, Amaya. Director: Contreras Bárcena, David. Entidad Colaboradora: Universidad Pontificia Comillas (ICAI).
RESUMEN DEL PROYECTO Análisis y estudio de la plataforma de IoT Bluemix para desarrollar un prototipo de Smart Agriculture aplicado al sector vitivinícola. Se estudiarán las necesidades de los viticultores y se creará un proyecto a medida con un entorno muy intuitivo y unas alertas adecuadas a través de notificaciones push.
Palabras clave: Big Data, Cloud Computing, IoT, Smart Agriculture
1. Introducción
En la actualidad se habla con frecuencia sobre el Internet de las Cosas y el Big Data y su impacto en la sociedad del futuro. Casi todas las semanas salen noticias sobre estos dos conceptos, que unidos, se definen como una red de objetos físicos interconectados que permiten el intercambio de datos para que éstos sean analizados de una forma inteligente y proporcionen conocimiento al usuario. Según el Hype Cycle de Gartner [1], las plataformas IoT son una tecnología muy innovadora y con mucho potencial como se verá reflejado más adelante en la memoria. Este proyecto se centrará en profundizar cómo funciona Bluemix y qué ofrece para la realización de proyectos IoT. Aplicando las conclusiones obtenidas, se desarrolla una solución llamada VinIoT para la monitorización de los viñedos.
2. Definición del proyecto
La primera fase del proyecto se centra en el estudio de las posibilidades que ofrece Bluemix para el desarrollo de proyectos IoT. Se estudiarán, entre otras cosas, la interconexión con los sensores, las posibilidades que ofrece Node-RED y las distintas herramientas de visualización de datos.
En la segunda fase, se usarán los sensores SimpleLink SensorTag de Texas Instruments para recoger información del entorno vitivinícola. Los datos que sean recogidos por los sensores pasarán por un Gateway y se vincularán al sistema creado en la nube a través del protocolo MQTT para que puedan ser almacenados y analizados. Con la información tratada y analizada podrán generarse los informes y las notificaciones push correspondientes para mejorar la calidad del vino, tener un mayor conocimiento de lo que se está cultivando, alertar de un problema o incluso ayudar en la toma de decisiones.
Es muy importante definir bien los requisitos del usuario para proporcionarle la información, predicciones o alertas necesarias. Estos requisitos serán definidos mediante una serie de entrevistas realizadas a viticultores y enólogos para entender cómo funciona el cultivo de la vid y conocer de primera mano los problemas y soluciones para afrontar los cambios en la meteorología y las reacciones del terreno para conseguir optimizar las cosechas.
3. Descripción del sistema
En este proyecto se ha decidido crear dos aplicaciones dentro de Bluemix una que se llamará IoT Pruebas y otra NodeApp. La primera tendrá toda la lógica del proyecto dentro del servidor de Node-RED, acceso a varias bases de datos Cloudant y todas las interfaces menos la de login en la parte del cliente. La segunda aplicación servirá de autenticación para el usuario utilizando un servidor Node.js configurado específicamente.
Ilustración 1: Esquema general del sistema
Uno de los servicios más importantes que ofrece IoT Foundation de Bluemix es el Node-RED y su potente interfaz gráfica. Este servicio se monta sobre un servidor Node.js y su versión gráfica contiene una serie de ‘nodos’ que son unos simples iconos que mediante un movimiento de ‘drag & drop’ se dejan en el panel de control y se unen con unas líneas para interconectar funcionalidades. Cada nodo ofrece una funcionalidad diferente y éstos aparecen por defecto en el menú; también pueden personalizarse programándolos uno mismo con JavaScript o cogiéndolo de las librerías de la página web GitHub en el que se pueden encontrar los nodos o flujos desarrollados por otras personas.
La base de datos recomendada es la que ofrece el servicio de Cloudant que se conecta a la perfección con Node-RED. Cloudant ofrece un almacenamiento NoSQL utilizando el formato JSON para el almacenamiento y recuperación de la información. En la siguiente ilustración puede verse uno de los flujos creados para el almacenamiento de las alertas y su visualización en la web.
Ilustración 2: Flujo de Node-RED para la conexión con Cloudant
4. Resultados
El interfaz con el que va a interactuar el viticultor va a ser una página web desde la que se podrá visualizar todo el contenido ofrecido: alertas de heladas, regadío, enfermedades fúngicas como la de botrytis, recomendaciones de retrasar la poda, gráficos de la temperatura, luz y humedad en tiempo real, acceso a los históricos… En la ilustración 3 puede verse un ejemplo de la interfaz gráfica del panel de control.
Ilustración 3: Resultado de la página del panel de control
5. Conclusiones
Las plataformas IoT todavía tienen escasa presencia en el mercado y por lo tanto baja difusión en el ámbito empresarial. Sin embargo se trata de una tecnología muy nueva que puede catalogarse como “Innovation Trigger” según el Hype Cycle de Gartner [1].
Las plataformas IoT convierten al desarrollo del prototipo de Smart Agriculture en un proyecto muy innovador, y lo será más en cuanto dichas plataformas desarrollen todo el potencial que encierran.
El uso de la plataforma Bluemix es una buena muestra de las optimistas perspectivas del proyecto. Bluemix se vende como si todo fueran ventajas, pero al final no se aportaron todas las que se suponían inicialmente debido al estado de madurez en el que se encuentra la plataforma.
Como conclusión, las plataformas IoT incorporan un altísimo potencial que se hará realidad en el momento que se conozcan más los detalles de su utilización, convirtiéndose en herramienta imprescindible para las empresas.
6. Referencias
[1] H. Levy, «Understand where technologies sit in the cycle of maturity for their relevance to your organization,» Gartner, 20 Obtubre 2015. [En línea]. Available: http://www.gartner.com/smarterwithgartner/whats-new-in-gartners-hype-cycle-for-emerging-technologies-2015/.
IOT BLUEMIX PLATFORM STUDY AND DEVELOPMENT OF A SMART AGRICULTURE SOLUTION
Author: Manzano Ibarra, Amaya. Supervisor: Contreras Bárcena, David. Collaborating Entity: Universidad Pontificia Comillas (ICAI).
ABSTRACT Analysis and study of Bluemix IoT platform to develop a prototype of Smart Agriculture applied to the wine sector. Vintner’s needs will be studied and a project with a very intuitive environment and the adequate push notifications alerts will be created.
Keywords: Big Data, Cloud Computing, IoT, Smart Agriculture
1. Introduction
Nowadays we frequently hear about the Internet of Things, Big Data and its impact on our future society. Almost every week newspapers print news about these two concepts; together we could define them as a network of physical objects that allow the exchange of data for it to be analyzed in an intelligent way and provide knowledge to the user. According to Gartner’s Hype Cycle [1], IoT platforms are a very innovative technology with a great potential as we will see reflected later in the memory. This project will deepen in how bluemix works and what it offers for the realization of IoT projects. Applying all findings, a solution called VinIoT for monitoring vineyards will be developed.
2. Description of the project
The first phase of the project focuses on the study of the possibilities Bluemix provides for the development of IoT projects. Things that will be studied, among others, are the connection with sensors, Node-RED possibilities and different data visualization tools.
In the second phase, the SimpleLink SensorTag Texas Instruments sensor will be used to collect information from the wine environment. Data is collected by the sensors, then it will pass through a Gateway and reach the system created in the cloud using the MQTT protocol so that data can be stored and analysed there. When the information is processed and analysed, reports can be generated and the corresponding push notifications will be sent to improve the quality of the vineyards. This system will provide to the vintner a greater knowledge of what is being cultivated, warn of some kind of problem or even assist in decision making.
It is very important to perfectly define the user requirements to provide the necessary information, predictions and alerts to the vintner. These requirements will be defined using the information collected through a series of interviews to vintners and oenologists to understand how the cultivation of the vineyards work in order to solve some of the problems they find and to work on the optimization of crops.
3. Description of the system
Two applications within Bluemix have been created; one called “IoT Pruebas” and other “NodeApp”. The first will contain all the logic of the project within the Node -RED server, it will have access to multiple Cloudant databases and will contain all interfaces except the login for the front-end. The second application will provide authentication for the user using a specifically configured Node.js server.
Illustration 1: General scheme of the system
One of the most important services offered in the IoT Foundation module is Node-RED and its powerful graphic interface. This service uses Node.js server and its graphic version contains a series of 'nodes' that are simple icons which can be moved by 'drag & drop' and are left in the control panel waiting to be interconnect with some lines. Each node provides different functionalities; some appear by default in the menu, but others can be customized with JavaScript or you can take them from GitHub libraries, where you can find nodes or flows already developed by other people.
The recommended data base is the Cloudant service, which connects directly with Node-RED. Cloudant offers NoSQL using the JSON format for the storage and retrieval of information. The following illustration shows one flow created for storing and collecting alerts from the database and how to show it on the web.
Illustration 2: Node-RED flow connecting with Cloudant
4. Results
The vintner will be interacting with a web page from which he can view all content offered: alerts for frosting, irrigation, fungal diseases such as botrytis, recommendations to delay pruning, temperature, light and humidity real time graphs, access to the historic... Illustration 3 shows an example of the dashboard.
Illustration 3: Dashboard result
5. Conclusions
IoT platforms still have little presence in the market and therefore low diffusion in businesses. However it is a very new technology that can be categorized as "Innovation Trigger" according to the Gartner Hype Cycle [1].
IoT platforms make the development of a Smart Agriculture prototype a very innovative project, and will be more interesting when such platforms develop all their potential.
The usage of the Bluemix platform is a very good example of the optimistic prospects of this project. When Bluemix was sold, everything were advantages, but after being able to work with it, it has been seen that the state of maturity of the platform is still low.
In conclusion, IoT platforms have a great potential that will become reality when developers receive more complete details about the usage. But in the end, I think this technology will become an essential tool for companies.
6. References
[1] H. Levy, «Understand where technologies sit in the cycle of maturity for their relevance to your organization,» Gartner, 20 Obtubre 2015. [En línea]. Available: http://www.gartner.com/smarterwithgartner/whats-new-in-gartners-hype-cycle-for-emerging-technologies-2015/.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ÍNDICE DE LA MEMORIA
I
Índice de la memoria
Capítulo 1. Introducción .................................................................................................. 11
1.1 Motivación del proyecto ...................................................................................................... 11
Capítulo 2. Descripción de las Tecnologías ..................................................................... 15
2.1 Bluemix ............................................................................................................................... 15
2.2 Arquitectura IoT .................................................................................................................. 17
2.2.1 Instrumentación .............................................................................................................. 17
2.2.2 Interconexión .................................................................................................................. 19
2.2.3 Inteligencia ..................................................................................................................... 21
Capítulo 3. Estado de la Cuestión .................................................................................... 23
3.1 Modelo de la Conferencia TedX ......................................................................................... 23
3.2 Modelo de IoTSimple .......................................................................................................... 24
3.3 Modelo de Siega System ..................................................................................................... 25
3.4 Diferenciación ..................................................................................................................... 25
Capítulo 4. Definición del Trabajo .................................................................................. 27
4.1 Justificación ......................................................................................................................... 27
4.2 Objetivos ............................................................................................................................. 29
4.3 Metodología y Recursos ...................................................................................................... 29
4.3.1 Scrum .............................................................................................................................. 30
4.3.2 Recursos ......................................................................................................................... 31
4.4 Planificación y Estimación Económica ............................................................................... 32
4.4.1 Recursos humanos .......................................................................................................... 32
4.4.2 Recursos materiales ........................................................................................................ 34
Capítulo 5. Estudio y Análisis del servicio IoT de Bluemix ............................................ 37
5.1 Conceptos IoT Foundation .................................................................................................. 37
5.1.1 Organizaciones ............................................................................................................... 37
5.1.2 Dispositivos .................................................................................................................... 37
5.1.3 Aplicaciones ................................................................................................................... 37
5.1.4 Sucesos ........................................................................................................................... 38
5.1.5 Mandatos ........................................................................................................................ 38
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ÍNDICE DE LA MEMORIA
II
5.1.6 Dispositivos gestionados y no gestionados .................................................................... 38
5.1.7 Almacenamiento de sucesos históricos ........................................................................... 39
5.1.8 Crear una aplicación IoT Foundation............................................................................ 39
5.1.9 Registrar el SensorTag en Bluemix ................................................................................ 42
5.2 Node-RED ........................................................................................................................... 50
5.2.1 ¿Qué es Node-RED? ....................................................................................................... 50
5.2.2 Abrir Node-RED desde Bluemix IoT .............................................................................. 51
5.2.3 Descripción del entorno ................................................................................................. 52
5.2.4 Nodos Default ................................................................................................................. 54
5.2.5 Ejemplos Node-RED ....................................................................................................... 62
5.3 Crear el primer servidor con Node.js .................................................................................. 83
Capítulo 6. Desarrollo de la solución IoT: VinIoT ......................................................... 85
6.1 Requisitos ............................................................................................................................ 85
6.2 Arquitectura cliente-servidor ............................................................................................... 86
6.2.1 Back-end ......................................................................................................................... 89
6.2.2 Front-end ........................................................................................................................ 95
Capítulo 7. Análisis de Resultados ................................................................................. 111
7.1 Resultado gráfico de la página del tiempo ........................................................................ 111
7.2 Resultado gráfico de la página del panel de control .......................................................... 112
7.3 Resultado gráfico de la página de los datos históricos ...................................................... 113
7.4 Resultado gráfico de una de las páginas de alertas ............................................................ 114
Capítulo 8. Conclusiones y Trabajos Futuros ............................................................... 115
8.1 Conclusiones ..................................................................................................................... 115
8.2 Trabajos Futuros ................................................................................................................ 117
Capítulo 9. Bibliografía .................................................................................................. 119
ANEXO A 131
Apartado A.1 - Conectar el SensorTag a la Nube ...................................................................... 131
Apartado A.2 – Cosas que hacer para que se puedan recibir emails del sistema IoT ................ 133
ANEXO B 135
Apartado B.1 - Entrevistas ......................................................................................................... 135
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ÍNDICE DE LA MEMORIA
III
ANEXO C 137
Apartado C.1 - Flujo de la Media .............................................................................................. 137
Apartado C.2 - Flujo para guardar datos en Cloudant ............................................................... 137
Apartado C.3 - Flujo para sacar datos de Cloudant ................................................................... 138
Apartado C.4 - Flujo para crear un formulario de recogida de datos y mostrar usando Ajax ... 138
Apartado C.5 - Flujo para crear un formulario de recogida de datos y mostrar usando JSON .. 139
ANEXO D 141
Apartado D.1 - viniothome24.html ............................................................................................ 141
Apartado D.2 - tiempo.html ....................................................................................................... 154
Apartado D.3 - calendario.html ................................................................................................. 158
Apartado D.4 - historico.html .................................................................................................... 162
Apartado D.5 - heladas.html ...................................................................................................... 169
Apartado D.6 - regadio.html ...................................................................................................... 173
Apartado D.7 - botrytis.html ...................................................................................................... 176
Apartado D.8 - corregirpoda.html .............................................................................................. 180
Apartado D.9 - login.html .......................................................................................................... 183
ANEXO E 187
Apartado E.1 - Flujos Node-RED. Sección de gráficos en tiempo real ..................................... 187
Apartado E.2 - Flujos Node-RED. Sección de alertas ............................................................... 188
Apartado E.3 - Flujos Node-RED. Sección de Chat .................................................................. 191
Apartado E.4 - Flujos Node-RED. Sección del Histórico .......................................................... 192
Apartado E.5 - Sección del Tweets ............................................................................................ 194
ANEXO F 197
Apartado F.1 - Definiciones ....................................................................................................... 197
ANEXO G 201
Apartado G.1 – Tarifas de precio/hora trabajada según el perfil profesional ............................ 201
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ÍNDICE DE TABLAS
IV
Índice de figuras
Figura 1: Gartner's Technology Hype Cycle [3] ................................................................. 13
Figura 2: Diagrama de sistemas que forman Bluemix ........................................................ 15
Figura 3: Arquitectura del Proyecto .................................................................................... 17
Figura 4: Parte delantera del SensorTag [8] ........................................................................ 18
Figura 5: Parte trasera SensorTag [8] .................................................................................. 18
Figura 6: Aplicación del iOs para el sensor ......................................................................... 19
Figura 7: Calendario de trabajo ........................................................................................... 30
Figura 8: Estimación de costes de Bluemix [28] ................................................................. 35
Figura 9: Precio del SensorTag 2.0 [29] .............................................................................. 35
Figura 10: Crear una app IoT Foundation (paso 1) ............................................................. 39
Figura 11: Crear una app IoT Foundation (paso 2) ............................................................. 40
Figura 12: Crear una app IoT Foundation (paso 3) ............................................................. 40
Figura 13: Crear una app IoT Foundation (paso 4a) ........................................................... 41
Figura 14: Crear una app IoT Foundation (paso 4b) ........................................................... 41
Figura 15: Obtener datos IoT Foundation para el sensor (paso 1) ...................................... 42
Figura 16: Obtener datos IoT Foundation para el sensor (paso 2) ...................................... 42
Figura 17: Obtener datos IoT Foundation para el sensor (paso 3) ...................................... 42
Figura 18: Obtener datos IoT Foundation para el sensor (paso 4) ...................................... 43
Figura 19: Obtener datos IoT Foundation para el sensor (paso 5) ...................................... 43
Figura 20: Obtener datos IoT Foundation para el sensor (paso 6) ...................................... 43
Figura 21: Obtener datos IoT Foundation para el sensor (paso 7) ...................................... 44
Figura 22: Obtener datos IoT Foundation para el sensor (paso 8) ...................................... 44
Figura 23: Obtener datos IoT Foundation para el sensor (paso 9) ...................................... 44
Figura 24: Obtener datos IoT Foundation para el sensor (paso 10) .................................... 45
Figura 25: Obtener datos IoT Foundation para el sensor (paso 11) .................................... 45
Figura 26: Obtener datos IoT Foundation para el sensor (paso 12) .................................... 45
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ÍNDICE DE TABLAS
V
Figura 27: Obtener datos IoT Foundation para el sensor (paso 13) .................................... 46
Figura 28: Obtener datos IoT Foundation para el sensor (paso 14) .................................... 46
Figura 29: Pasos para registrar un dispositivo ..................................................................... 48
Figura 30: Resultado del registro del dispositivo ................................................................ 49
Figura 31: Abrir Node-RED (paso 1) .................................................................................. 51
Figura 32: Abrir Node-RED (paso 2) .................................................................................. 51
Figura 33: Entorno de Node-RED ....................................................................................... 53
Figura 34: Menú Node-RED ............................................................................................... 53
Figura 35: Tipos de nodos ................................................................................................... 54
Figura 36: Ejemplo ‘Hola Mundo’ ...................................................................................... 63
Figura 37: Ejemplo outputs/inputs ...................................................................................... 64
Figura 38: Ejemplo obtención datos de un sensor ............................................................... 65
Figura 39: Ejemplos de funciones, templates, switches y cambios ..................................... 66
Figura 40: Ejemplo cambio variables .................................................................................. 67
Figura 41: Ejemplos triggers y delays ................................................................................. 68
Figura 42: Ejemplos de redondeo, cambios y rbe ............................................................... 69
Figura 43: Nodo openweather ............................................................................................. 70
Figura 44: Página web openweather .................................................................................... 70
Figura 45: Crear account openweather ................................................................................ 70
Figura 46: API Key openweather ........................................................................................ 71
Figura 47: Añadir un Git (paso 1) ....................................................................................... 71
Figura 48: Añadir un Git (paso 2) ....................................................................................... 71
Figura 49: Configurar el Git (paso 1) .................................................................................. 72
Figura 50: Configurar el Git (paso 2) .................................................................................. 72
Figura 51: Configurar el Git (paso 3) .................................................................................. 72
Figura 52: Ejemplo nodo weather + tweet + email ............................................................. 73
Figura 53: Entrar en el repositorio Git................................................................................. 74
Figura 54: Instalación del nodo nuevo del repositorio ........................................................ 74
Figura 55: Flujo para hacer la media [Descargar en: Anexo C - Apartado C.1 ] ................ 75
Figura 56: Crear una Base de datos Cloudant (paso 1) ....................................................... 76
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ÍNDICE DE TABLAS
VI
Figura 57: Crear una Base de datos Cloudant (paso 2) ....................................................... 76
Figura 58: Crear una Base de datos Cloudant (paso 3) ....................................................... 76
Figura 59: Crear una Base de datos Cloudant (paso 4) ....................................................... 77
Figura 60: Crear una Base de datos Cloudant (paso 5) ....................................................... 77
Figura 61: Editar la función de búsqueda de Cloudant ....................................................... 78
Figura 62: Flujo para guardar datos en una BBDD [Descargar en: Anexo C - Apartado C.2]
............................................................................................................................................. 78
Figura 63: Flujo para recoger los datos de una base de datos Cloudant según una búsqueda
[Descargar en: Anexo C - Apartado C.3)] ........................................................................... 79
Figura 64: Formulario + Ajax [Descargar en: Anexo C - Apartado C.4] ............................ 80
Figura 65: Formulario + JSON [Descargar en: Anexo C - Apartado C.5 ] ......................... 81
Figura 66: Montar un servidor con Node.js (paso 1) ........................................................... 84
Figura 67: Montar un servidor con Node.js (paso 2) ........................................................... 84
Figura 68: Estructura general del proyecto.......................................................................... 88
Figura 69: Flujos para los gráficos en tiempo real .............................................................. 90
Figura 70: Flujo de las alertas de heladas ............................................................................ 91
Figura 71: Flujo de alertas para activar el regadío .............................................................. 91
Figura 72: Flujo de alertas para avisar de una posible enfermedad (Botrytis) .................... 92
Figura 73: Flujo de las alertas de retrasar la poda a mediados de Enero ............................. 92
Figura 74: Flujo del chat ...................................................................................................... 93
Figura 75: Flujo para guardar y mostrar los datos históricos .............................................. 94
Figura 76: Flujo para mandar un tweet informativo del estado del tiempo ......................... 94
Figura 77: Flujo para mandar un tweet sobre la calidad del vino de ese año ...................... 95
Figura 78: Casos de uso panel de control ............................................................................ 95
Figura 79: Crear un Widget de Twitter (paso 1) ................................................................. 99
Figura 80: Crear un Widget de Twitter (paso 2) ................................................................. 99
Figura 81: Crear un Widget de Twitter (paso 3) ................................................................. 99
Figura 82: Crear un Widget de Twitter (paso 4) ............................................................... 100
Figura 83: Casos de uso página del tiempo ....................................................................... 100
Figura 84: Casos de uso página del calendario.................................................................. 101
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ÍNDICE DE TABLAS
VII
Figura 85: Casos de uso de la página del histórico............................................................ 102
Figura 86: Casos de uso de las alertas ............................................................................... 107
Figura 87: Diagrama de secuencia Login .......................................................................... 108
Figura 88: Resultado gráfico de las consultas del tiempo ................................................. 111
Figura 89: Resultado gráfico del panel de control ............................................................. 112
Figura 90: Resultado gráfico de las búsquedas en el histórico .......................................... 113
Figura 91: Resultado gráfico de las alertas de heladas ...................................................... 114
Figura 92: Conectar el SensorTag a la Nube (paso 1) ....................................................... 131
Figura 93: Conectar el SensorTag a la Nube (paso 2) ....................................................... 132
Figura 94: Conectar el SensorTag a la Nube (paso 3) ....................................................... 132
Figura 95: Activar el “Acceso de aplicaciones menos seguras (paso 1)” ......................... 133
Figura 96: Activar el “Acceso de aplicaciones menos seguras (paso 2)” ......................... 133
Figura 97: Activar el “Acceso de aplicaciones menos seguras (paso 3)” ......................... 134
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ÍNDICE DE TABLAS
VIII
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ÍNDICE DE TABLAS
IX
Índice de tablas
Tabla 1: Comparativa de sistemas de Smart Agriculture .................................................... 26
Tabla 2: Horas trabajadas por tarea y perfil (Total: 402) .................................................... 33
Tabla 3: Coste de los recursos humanos (Total: 15.755€) .................................................. 34
Tabla 4: Nodos de Input ...................................................................................................... 56
Tabla 5: Nodos de output .................................................................................................... 57
Tabla 6: Nodos de función................................................................................................... 59
Tabla 7: Nodos de social ..................................................................................................... 59
Tabla 8: Nodos de almacenamiento .................................................................................... 60
Tabla 9: Nodos de IBM_Watson ......................................................................................... 61
Tabla 10: Nodos de Análisis ................................................................................................ 62
Tabla 11: Nodos Avanzados ................................................................................................ 62
Tabla 12: Tarifas actuales del mercado según el perfil profesional .................................. 201
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ÍNDICE DE TABLAS
X
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
INTRODUCCIÓN
11
Capítulo 1. INTRODUCCIÓN
En la actualidad se está hablando mucho sobre el Internet de las Cosas y el Big Data y su
impacto en la sociedad del futuro. Casi todas las semanas salen noticias sobre estos 2
conceptos, que uniéndolos, se definen como una red de objetos físicos interconectados que
permiten el intercambio de datos para que éstos sean analizados de una forma inteligente y
proporcionen conocimiento 1 al usuario [1].
Este proyecto tiene la finalidad de crear una plataforma de almacenamiento y análisis
masivo de información procedente de sensores utilizando la plataforma de Cloud
Computing Bluemix de IBM. Se creará así un servicio innovador de Internet de las Cosas
(IoT) orientado al campo vinícola.
La infraestructura de sensores se creará utilizando los sensores SimpleLink SensorTag de
Texas Instruments que recogerán información del entorno vinícola. Los datos que sean
recogidos por los sensores pasarán por un Gateway (GW) y se vincularán al sistema creado
en la nube a través del protocolo MQTT para que puedan ser almacenados y analizados.
Con esta información se podrán generar los informes y las notificaciones push
correspondientes para mejorar la calidad del vino, tener un mayor conocimiento de lo que
se está cultivando, alertar de un problema o incluso hasta ayudar en la toma de decisiones.
Para consultar las alguna de las definiciones más importantes del proyecto ir al Anexo F.
1.1 MOTIVACIÓN DEL PROYECTO
Uno de los motivos de la realización de este proyecto es poder investigar cómo funciona
una plataforma como servicio y cómo integrar esto en in proyecto IoT. Se ha elegido
Bluemix como plataforma como servicio por las siguientes razones [2]:
1 Información que desconozca y útil para el usuario.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
INTRODUCCIÓN
12
Bluemix ayuda a reducir mucho los tiempos en el desarrollo de un proyecto ya que permite
crear e implantar de una manera muy rápida los proyectos sin tener que preocuparse por la
infraestructura. Los desarrolladores necesitan menos tiempo ya que pueden utilizar tres
tipos de tecnologías de computación: Cloud Foundry, Docker y OpenStack.
Bluemix utiliza modelos de computación basados en estándares abiertos, lo que permite
migrar las aplicaciones a una empresa, ponerlas en algún otro cloud o compartir recursos.
También se pueden escalar los elementos de computación, de forma que se puede
monitorizar, desplegar y administrar toda la aplicación. Al tener un gran catálogo de
servicios Bluemix ofrece mucha flexibilidad al consumidor. Las preocupaciones por saber
qué nuevas tecnologías se van a usar para un proyecto son menores porque solo hay que
focalizarse en Bluemix y no en el software, hardware y las soluciones de infraestructura
que puedan necesitarse. Únicamente hay que preocuparse del diseño de la aplicación y del
código.
La seguridad en Bluemix es muy alta, está desarrollado por capas de encriptación y un
hacker no podrá nunca ver lo que hay en la nube. Además es compatible con casi cualquier
lenguaje de programación y runtime. Ahorrando tiempo también se ahorra dinero al no
tener que ocuparse de montar una infraestructura teniendo que invertir en hardware u otro
tipo de soluciones.
Por todas estas ventajas que nos da la plataforma se ha decidido investigar qué
posibilidades nos da el servicio de Bluemix en la parte de IoT y así poder conocerlo en
mayor profundidad para que la universidad pueda beneficiarse de estos puntos en futuros
proyectos de IoT que se quieran realizar.
Además de todas estas cosas también hay que destacar que este es un proyecto innovador y
en auge ya que según el último estudio de Gartner (Figura 1) podemos ver que el IoT y las
Plataformas IoT dentro del Cloud Computing son tecnologías con mucho potencial en la
actualidad y a un futuro no muy lejano:
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
INTRODUCCIÓN
13
Figura 1: Gartner's Technology Hype Cycle [3]
Como se puede apreciar destacado en rojo en la Figura 1, las Plataformas IoT están ahora
mismo en el “Innovation Trigger” lo que significa que están empezando a tener presencia
en el mercado pero que todavía la tecnología no está del todo implantada en el mundo
empresarial, por lo que son una tecnología potencial que van a terminar de adaptarse a 5/10
años vista. Es por este gran componente de innovación que este proyecto se ha visto
motivado a utilizar una plataforma de IoT para su realización. Según un estudio de Gartner,
una plataforma IoT permite a las empresas a monitorizar y controlar los procesos de IoT y
a construir aplicaciones que completen los requerimientos digitales de una empresa [4].
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
INTRODUCCIÓN
14
Además, se puede ver que el Internet de las Cosas se encuentra en el “Peak of Inflated
Expectations”. Esto es porque es una concepto que ya ha tenido varios casos de éxito y
más empresas lo están utilizando; se adaptará totalmente al mercado dentro de 5/10 años.
Con esto se puede saber que el proyecto está usando una tecnología que va a ser muy
interesante para las empresas desde ahora y que este proyecto tiene un gran potencial
comercial porque la finalidad que buscan estas plataformas ya está testada en el mercado.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESCRIPCIÓN DE LAS TECNOLOGÍAS
15
Capítulo 2. DESCRIPCIÓN DE LAS TECNOLOGÍAS
2.1 BLUEMIX
Para el desarrollo de este proyecto se utilizará Bluemix, que es una plataforma ‘open-
standard’ de innovación digital diseñada para facilitar las tareas a los desarrolladores [5].
Se considera una plataforma como servicio (Public Platform as a Service- PaaS) que
contiene todo lo necesario para soportar el ciclo de vida completo de construcción, puesta
en marcha y mantenimiento de aplicaciones y servicios web disponibles en Internet con la
particularidad de que no es necesario que los desarrolladores se instalen el software en sus
equipos [6]. Estas aplicaciones pueden ser Web, Movil, Big Data, Analytics, IoT,
Watson… Se puede observar en la Figura 2 los elementos que componen la plataforma.
Figura 2: Diagrama de sistemas que forman Bluemix
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESCRIPCIÓN DE LAS TECNOLOGÍAS
16
La pieza clave de agilidad que proporciona este modelo de computación es que todos los
elementos que vemos en la columna de sistemas dentro del PaaS están administrados por el
proveedor de servicios, en este caso Bluemix. De esta manera el desarrollador solo se tiene
que centrar en su código y en sus datos y no tiene que consumir recursos en administrar
otros elementos que no están directamente relacionados con su desarrollo; es una manera
de corroborar el dicho de “zapatero a tus zapatos”. Además el desarrollador no tendrá que
estar pendiente de las nuevas actualizaciones ni de la seguridad ya que Bluemix es líder en
ese aspecto.
En este desarrollo el contenedor principal que se utiliza es el de Internet of Things
Foundation para poder crear rápidamente aplicaciones que se aprovechen del análisis de
datos recibidos a través de sensores. Este servicio proporciona un simple acceso de
aplicación potente a dispositivos IoT y datos. Con los datos recibidos se pueden componer
rápidamente aplicaciones analíticas, aplicaciones móviles de IoT y paneles de control de
visualización para poder utilizar toda esa información en el campo empresarial en segundo
plano. Desataca principalmente por 4 factores [7]:
1. Conectividad y escalabilidad: Se utiliza el protocolo MQTT estándar del sector para
conectar dispositivos y aplicaciones. Este protocolo está preparado para intercambiar datos
de manera eficiente a y desde dispositivos en tiempo real.
2. Gestión eficiente de los dispositivos: Se pueden configurar y gestionar los dispositivos
conectados desde un panel de control centralizado, realizando acciones como actualizar el
firmware, diagnosticar o eliminar un dispositivo o recibir metadatos.
3. Seguridad: Los metadatos se envían y se reciben de forma segura utilizando el
protocolo MQTT con TLS2 para proteger las comunicaciones entre el dispositivo y la
plataforma.
2 Protocolo criptográfico que proporciona privacidad e integridad de los datos entre 2 aplicaciones que se están comunicando.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESCRIPCIÓN DE LAS TECNOLOGÍAS
17
4. Almacenamiento y visualización de datos: IoT Foundation permite acceder a los datos
en tiempo real de los dispositivos conectados, así como almacenarlos durante un tiempo
para tener un histórico de datos.
2.2 ARQUITECTURA IOT
Figura 3: Arquitectura del Proyecto
Un proyecto IoT consta de 3 “capas” interrelacionadas entre sí [1] y para cada capa habrá
que pensar qué elementos son los que más nos combiene utilizar para desarrollar un
proyecto en el mundo vinícola.
2.2.1 INSTRUMENTACIÓN
Se deben elegir los sensores dentro del sensor SimpleLink SensorTag adecuados según los
requisitos funcionales y no funcionales que querramos que tenga nuestro sistema IoT
vinícola. Los sensores que nos ofrece son los siguientes (Figura 4 y Figura 5) :
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESCRIPCIÓN DE LAS TECNOLOGÍAS
18
Figura 4: Parte delantera del SensorTag [8]
Figura 5: Parte trasera SensorTag [8]
Para definir estas funcionalidades se harán entrevistas con varios viticultores que conocen
de primera mano cómo funcona el cultivo de la vid para saber las necesidades de los
productores e identificar qué se necesita monitorizar y qué sensores utilizar. A priori, los
sensres de humedad, temperatura y luz serán los elegidos. Con esto se sabrá qué datos se
reciben para después saber que tratamiento darles.
En la instrumentación no solo se tiene en cuenta los sensores sino también los actuadores,
como puede ser por ejemplo el caso de un movil recibe alertas de problemas, las
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESCRIPCIÓN DE LAS TECNOLOGÍAS
19
publicaciones en twitter de parámetros sobre la calidad del vino de la cosecha de cierto
año, cuando saldrán al mercado las primeras botellas…
2.2.2 INTERCONEXIÓN
2.2.2.1 Gateway
El gateway (GW) que se usará para todas las pruebas será la aplicación “Bluetooth low
energy, Starter” de Texas Instruments instalado en un iPhone 6 como podemos ver en la
Figura 6. Será el encargado de actuar como pasarela entre los sensores y la nube para que
los datos lleguen a través de internet (con la tecnología que se elija, en el caso de las
pruebas la Wi-Fi) de manera correcta y con el protocolo MQTT deseado.
Figura 6: Aplicación del iOs para el sensor
2.2.2.2 Bluetooth Smart
Para la comunicación entre el iPhone y el sensor se utilizará á tecnología denominada
Bluetooth Smart, también llamada Bluetooth LE o Bluetooth de baja energía. Es una
tecnología digital de radio inalámbrica nueva especial para pequeños dispositivos. Ofrece
conexión inalámbrica entre dispositivos móviles u ordenadores y otros dispositivos
pequeños que usen una pila de botón [9]. Al usar una pila de botón para el sensor, como se
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESCRIPCIÓN DE LAS TECNOLOGÍAS
20
ha visto antes en la Figura 5, la tecnología que permita la conexión no puede consumir
mucha batería del aparato puesto que se apagaría enseguida. Es por ello que se ha utilizado
la conexión Bluetooth Smart, ya que una de sus particularidades es que consume muy poca
energía.
2.2.2.3 MQTT
El protocolo que se va a utilizar por debajo de la tecnología Wi-Fi que se usará en las
pruebas se llama MQTT. Se utilizará en la interconexión del GW con la nube de IoT
Foundation. Este protocolo es un modelo de publicación por subscripción, eficiente, ligero
y que consume poca batería. Además, este protocolo es perfectamente compatible y es el
recomendado por Bluemix [10].
El protocolo MQTT se utiliza mucho en el IoT porque hace mñas facil la recogida de datos
de los sensores, la publicación de los diferentes valores obtenidos y la configuración de
nodos remota. Funciona sobre TCP/IP o sobre otros protocolos de red bidirecionales y sin
pérdidas. Sus principales caracteríasticas son [11]:
• Utiliza los mensajes broadcat para la publicación t subscripción de los datos
indepentientemente de la aplicación.
• Transporta los mensajes de forma transparente con un flujo de datos optimizado
para reducir el tráfico de la red.
• Tiene 3 calidades de servicio:
o “A lo sumo una vez”: es como el protocolo TCP pero con pérdida de
mensajes, y es usado para cuándo no es crítico el retraso de un envío de
información.
o “Al menos una”: la llegada de mensajes está asegurada pero puede haver
diplicidad.
o “Exactamente una vez”: la llegada de los mensajes está asegurada
exactamente una vez.
• Tiene un mecanismo para notificar pérdidas de conexión no esperadas.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESCRIPCIÓN DE LAS TECNOLOGÍAS
21
2.2.3 INTELIGENCIA
Esta es la parte en la que se centra principalmente este proyecto y la parte más importante
puesto que es dónde se deben definir unos requisitos del usuario para proporcionarle la
información, predicciones o alertas necesarias. Estos requisitos serán definidos mediante
una serie de entrevistas realizadas a viticultores y enólogos para entender cómo funciona el
cultivo de la vid y saber la información que es necesario proporcionar. Más adelante en el
Capítulo 6 se hablará del proceso de desarrollo del prototipo y se podrán encontrar las
entrevistas en el ANEXO B. Esta parte es una parte muy importante del desarrollo del
prototipo puesto que se pretende proporcionar conocimiento util a los productores y hay
que entender sus necesidades para poder darles lo que buscan.
Después de definir unos requisitos hay que pensar en la capacidad de gestión,
almacenamiento y de visualizarción de la información de manera gráfica, clara y
entendible para los productores (Analytics). Con lo cual toda esta gran cantidad de
información procedente de los sensores será procesada para proporcionar una serie de
patrones al productor según sus necesidades (BigData).
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESCRIPCIÓN DE LAS TECNOLOGÍAS
22
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTADO DE LA CUESTIÓN
23
Capítulo 3. ESTADO DE LA CUESTIÓN
En la actualidad hay varios sistemas de Smart Agriculture como vamos a ver descrito a
continuación:
3.1 MODELO DE LA CONFERENCIA TEDX
Según dice Vijay Kumar en una conferencia de TedX [12] "La agricultura es uno de los
problemas más grandes al que nos enfrentamos hoy en día. Esto es porque 1 de cada 7
personas en el mundo está malnutrida, el 80% de la tierra cultivable ya está cultivada, la
población llegará hasta los 9 Billones para el año 2050 y la eficiencia de los sistemas que
existen en el mundo está mejorando pero el sistema de producción en la agricultura está
haciendo lo contrario debido a la escasez de agua, las enfermedades de las plantas, el
cambio climático y otros factores".
Lo que plantea Kumar es hacer volar a unos drones con una serie de sensores integrados
por los campos de cultivo para crear modelos individuales de cada planta cultivada al igual
que se hace en la medicina con los seres humanos. Con este sistema se ayuda al agricultor
a saber qué tipo de cuidados le tiene que dar a esa planta específica, como por ejemplo si
tiene que aumentar o disminuir de agua, fertilizador o pesticida que se le da. Esto lo
consiguen utilizando tres tipos de cámaras: una cámara normal a color, una cámara de
infrarrojos y una cámara térmica. Con esta información lo que hacen es construir una
representación en tres dimensiones de la planta y con ello poder contar cuántos frutos va a
tener para poder optimizar al máximo la cadena de producción, poder saber la densidad de
hojas que hay en una planta para analizar su capacidad de fotosíntesis y saber cómo de
sana está la planta o detectar la enfermedad de Clorosis en los árboles. Con este sistema
dicen que podrían mejorar la producción un 10% y disminuir por ejemplo el agua que
necesita una planta en realidad un 25%.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTADO DE LA CUESTIÓN
24
3.2 MODELO DE IOTSIMPLE
La siguiente aportación la hace IoTSimple [13] que lo que propone es que la gestión de
cultivos en la agricultura inteligente implica consigo actividades de monitoreo,
herramientas de soporte para la toma de decisiones y la realización de acciones que
controlen automáticamente uno o varios sistemas como pueden ser el de riego, protección
de heladas, fertilización… Propone una solución basada en una serie de sensores,
dispositivos y una aplicación informática que permita obtener una información detallada
del cultivo, el suelo y de las variaciones climáticas.
El sistema que ofrecen dicen que está en permanente evolución y que presenta variables
propias permitiendo incorporar todas aquellas que el cliente requiera en base a sus
necesidades y las que sus asesores expertos le soliciten. Algunos de los beneficios
concretos que aporta este sistema son la reducción de costos, las mejoras en el proceso y en
el cuidado de los cultivos, la optimización en el empleo de recursos materiales y humanos,
el aumento del rendimiento por hectárea cultivada, la mayor calidad de producto final y la
disminución de descarte, el cumplimiento de exigencias nacionales e internacionales de
características de producción y producto…
Por ejemplo en la reducción de costos intervendría el monitoreo en línea de la temperatura
y la humedad del suelo para detectar si el entorno es propicio para la proliferación de
hongos y plagas en los cultivos y así poder aplicar los fertilizantes y funguicidas de forma
eficaz y precisa obteniendo una reducción de costos. Para el aumento de calidad de
producto: se realizarían mediciones en línea del tamaño del tallo y de la fruta o cultivo de
que se trate, el nivel de agua requerido para riego y el valor de la Radiación
Fotosintéticamente Activa para medir las condiciones de fotosíntesis. La información
recolectada la almacenan para poder realizar luego informes estadísticos, trazabilidad,
extraer datos para ejecutar acciones correctivas o preventivas, emitir alertas…
Adicionalmente, se pueden generar avisos o alertas en dispositivos móviles de
procesamiento de datos o teléfonos móviles.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTADO DE LA CUESTIÓN
25
3.3 MODELO DE SIEGA SYSTEM
Siega System [14] es un modelo de IoT en el campo de la viticultura que ha sido
desarrollado por el Grupo Austen en Pontevedra. El sistema es capaz de monitorizar
parámetros medioambientales como la temperatura y la humedad u otros parámetros
relacionados con la agricultura como la precipitación, el viento o la salud de las hojas. Los
investigadores del Grupo Austen han creado varios modelos estadísticos de predicción de
plagas para los viñedos. Con este sistema pueden predecir 3 tipos de plagas: mildiu, oídio y
botrytis. Por un lado el sistema permite monitorizar los viñedos en tiempo real para
predecir las posibles plagas que se puedan producir y así minimizar el impacto de éstas
antes de que se produzcan. Por otro lado el sistema permite monitorizar y controlar el
estado de la vid desde su plantación hasta su manufacturación. Para todo esto utilizan
los Waspmotes creados por la empresa Libelium. Un modelo muy parecido a este también
se ha implantado en Suiza y permite también la predicción de plagas en los viñedos [15].
3.4 DIFERENCIACIÓN
Como se puede observar estos ejemplos son parecidos pero cada uno tiene cosas que hacen
que sea diferente del otro. Lo que está claro es que todos tienen como objetivo mejorar la
producción para hacerla más eficiente utilizando la sensorización para procesar los datos
de una manera inteligente y útil.
Lo se busca con este proyecto de fin de grado en particular y que es por lo que éste se va a
diferenciar de los demás proyectos de este tipo es que se va a llegar a dar una solución
integral y escalable sin mucho esfuerzo, comparándolo a si no utilizáramos una Plataforma
IoT. Esto significa que no se van a desarrollar todos los campos específicos que se
necesitan en un proyecto IoT de Smart Agriculture, sino que se va a utilizar el servicio que
ofrece la plataforma de Bluemix para poder dar una solución a este problema. Además no
habrá que preocuparse de estudiar los tipos de sensores que existen en el mercado y que se
necesitarían para este proyecto en concreto, sino que se va a hacer el proceso a la inversa;
se utilizarán los sensores integrados dentro del SimpleLink SensorTag de Texas
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTADO DE LA CUESTIÓN
26
Instruments para ver cómo unos sensores de investigación universitaria se pueden adaptar
para dar una solución IoT con análisis de datos. Esto es porque lo que de verdad importa es
qué haces con los datos y cómo lo procesas, no importa tanto el tipo de sensor que se
utilice.
Desarrollando el sistema de esta manera y obteniendo los requisitos clave para el viticultor
se podrá reducir la complejidad de estos sistemas, reducir costes operativos y ofrecer un
producto y un servicio de calidad al viticultor con una interfaz gráfica apropiada para que
la modernización de los cultivos sea factible.
Modelo Utilización de una
Plataforma IoT
Coste Sensorización
Conferencia TedX No Alto Drones
IoT Simple No Medio Sensores
especializados en
agricultura
Siega System No Alto Sensores
especializados en
agricultura
Este proyecto Si Medio/Bajo Adaptado a todo
tipo de sensores
Tabla 1: Comparativa de sistemas de Smart Agriculture
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DEFINICIÓN DEL TRABAJO
27
Capítulo 4. DEFINICIÓN DEL TRABAJO
4.1 JUSTIFICACIÓN
Se ha decidido hacer un proyecto sobre IoT porque es un sector que está en auge y por
ejemplo como explica Miguel Labín, Managing Director de Accenture Strategy [16]
"Ahora mismo se abre una ventana de oportunidad para que las empresas más ágiles se
posicionen ante la explosión del Internet de las Cosas".
Según recuentes estudios, la Organización de las Naciones Unidas para la Agricultura y la
Alimentación ha revelado que si la población mundial crece hasta 9,1 billones en 2050, se
necesitará un incremento del 70% en la producción general de alimentos [17]. Debido a
este principal problema se debe encontrar una solución para hacer más efectivos nuestros
métodos de cultivo y así poder abastecer a la población mundial. Esta es una de las razones
por las que se ha elegido orientar el proyecto IoT al campo de la agricultura. En concreto
se ha decidido orientarlo al campo vinícola para que el proyecto se concentre en un solo
tipo de cultivo y luego poder aplicar las mismas técnicas pero con otros requisitos a otros
tipos de cultivo en un futuro.
Además, según estudios publicados en el periódico El País [18], los campos de cultivo son
uno de los sitios a los que más está tardando en llegar la automatización. España es el país
con más terreno dedicado al cultivo de la vid [19], es por ello que una gran cantidad de
inversores extranjeros (mexicanos, chinos y rusos principalmente) han puesto sus ojos en
los vinos españoles [20] . La informatización del proceso de cultivo y de los datos
registrados dentro de la bodega podrían dar a estos inversores información de su
producción de vino a miles de kilómetros de distancia en tiempo real.
El IoT tiene un potencial muy grande para poder incrementar la productividad en el sector
de la agricultura. Según un estudio realizado por ‘Beecham Research’ [21], empresa de
investigación, análisis y consultoría de tecnología puntera en el mercado, el IoT podría
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DEFINICIÓN DEL TRABAJO
28
incrementar la producción de comida en un 70% para abastecer a una población estimada
de 9.600 millones de personas en 2050. Por ejemplo, midiendo la humedad, la temperatura
y la luz es posible detectar posibles enfermedades que las plantas vayan a
desarrollar. Además, los sensores de la tierra podrían recoger información relativa al modo
en el que el agua fluye por el campo y así permitir controlar los distintos cambios de
humedad y temperatura (niveles de nitrógeno y carbón del suelo también pero con nuestros
sensores no podemos) que se puedan producir en un momento dado. De esta manera los
agricultores pueden usar esta información para cambiar los calendarios de riego y así evitar
dañar la delicada vid.
Esto no es una mera invención, ya con los sistemas tradicionales de monitorización con las
estaciones meteorológicas básicas sin ningún sistema IoT se pueden publicar noticias como
la siguiente: “La estación meteorológica del grupo bodeguero Matarromera ha detectado
un aumento de temperatura media en el suelo del viñedo y un índice de humedad más bajo
que 2014. Se prevé un estado fitosanitario óptimo de la vid con bajo riesgo de
enfermedades fúngicas de la planta. El ciclo vegetativo de los viñedos de Grupo
Matarromera se desarrolla a un ritmo adecuado e incluso ligeramente adelantado. [22]”
La capacidad que nos da el IoT supone una gran ventaja, pero no sólo requiere sensores y
conexión a internet de los dispositivos para poder desarrollar un servicio potente. Detrás de
toda esta infraestructura creada se necesita una base de datos que se encargue de recoger,
almacenar, procesar y gestionar una gran cantidad de datos para darle sentido a la
sensorización. En este último punto es donde más se va a centrar este proyecto.
No solo se ha decidido continuar adelante con este proyecto por la capacidad que tiene la
SmartAgriculture en el mundo del vino, sino porque en la universidad no se tiene
conocimiento sobre el tipo de plataformas que vamos a utilizar para la docencia ni sobre el
mundo IoT. Éste sería un muy buen ejemplo para poder desarrollar una tecnología puntera
en estos momentos y además investigar sobre como dar soluciones IoT de manera sencilla.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DEFINICIÓN DEL TRABAJO
29
4.2 OBJETIVOS
El proyecto se va a dividir en 2 partes y es por ello que va a tener 2 objetivos principales
con sub-objetivos dentro de ellos:
1. Estudio y análisis del servicio IoT de Bluemix.
1.1. Estudio del dispositivo que actuaría como sensor para la recolección de datos.
1.2. Investigación de las posibilidades que nos da la aplicación Node Red.
1.3. Identificación de los servicios que ofrece Bluemix para crear soluciones IoT
basadas en Node Red.
1.4. Estudio de la interconexión de las herramientas de visualización con un
desarrollo propio.
1.4.1. Estudio de la visualización de gráficos en tiempo real.
1.4.2. Estudio de la visualización de tablas de datos históricos para filtrar sus
resultados según una búsqueda.
2. Desarrollo de un sistema IoT de monitorización agrícola en el campo vinícola.
2.1. Estudio de los datos que vamos a utilizar de los sensores para la viticultura
mediante entrevistas e información de internet.
2.2. Análisis y estudio de los casos de uso para los datos recibidos de los sensores.
2.3. Desarrollo de los gráficos que sean los más adecuados para el agricultor para
mostrar información en tiempo real y datos históricos.
2.4. Análisis y desarrollo de cómo proporcionar al agricultor alertas de
determinados parámetros a la web y la publicación de datos en twitter o al
email.
4.3 METODOLOGÍA Y RECURSOS
El calendario que se observa en la Figura 7 es una aproximación ya que no se sabe
realmente cuánto tiempo puede durar la investigación inicial. A este calendario se le añade
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DEFINICIÓN DEL TRABAJO
30
una reunión semanal todos los martes con el director de proyecto para ver la evolución del
mismo e intentar utilizar una metodología Scrum. Además se tiene un viaje el 16 de abril a
La Rioja para entrevistar a una serie de enólogos y viticultores para poder definir los
requisitos del sistema de Smart Agriculture
Se ha planteado el siguiente calendario de trabajo:
4.3.1 SCRUM
La metodología Scrum es un proceso en el que se aplican de manera regular una serie de
buenas prácticas para trabajar en equipo y poder obtener el mejor resultado en un proyecto.
Esta es la nueva manera que se usa actualmente para trabajar en equipos altamente
productivos y, aunque el TFG sea un proyecto con una nota individual el equipo en este
caso está formado por el director de proyecto y el alumno.
En Scrum lo que se hace es que se realizan entregas parciales y regulares del producto final
priorizando el beneficio que aportan al proyecto; en este caso se van realizando entregas
Figura 7: Calendario de trabajo
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DEFINICIÓN DEL TRABAJO
31
progresivas semana a semana del proyecto. Por tanto, Scrum está indicado para proyectos
en los que se necesita obtener resultados pronto, donde los requisitos son cambiantes o
poco definidos, donde la innovación, la competitividad, la flexibilidad y la productividad
son fundamentales. Esta metodología también se usa para resolver situaciones en que no se
está entregando al cliente lo que necesita, cuando las entregas se alargan demasiado, los
costes se disparan o la calidad no es aceptable… Estas últimas características descritas se
producen en el desarrollo de este proyecto ya que este es un proyecto innovador en el que
los requisitos pueden cambiar, se tienen que cumplir una serie de entregas, el director de
proyecto puede querer modificar algo que no le gusta a medio camino… por tanto la
metodología que se usa es la adecuada [23].
4.3.2 RECURSOS
Como principales recursos se acudirá a una serie de páginas de ayuda a la programación y
a documentación específica de Bluemix. Se han consultado las siguientes páginas para
recibir ayuda de soporte del uso de la plataforma y obtener una visión general del conjunto
[24] :
Bluemix Developers Community - https://developer.ibm.com/bluemix/#overview
Stackoverflow - http://stackoverflow.com/questions/tagged/bluemix
dW Answers - https://developer.ibm.com/answers/smart-spaces/12/bluemix.html
IBM Bluemix on developerWorks -
http://www.ibm.com/developerworks/cloud/bluemix/index.html
IBM Bluemix Docs - https://www.ng.bluemix.net/docs/
Containers-
https://www.ng.bluemix.net/docs/containers/container_index.html#container_ov
DevOps - https://hub.jazz.net/docs
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DEFINICIÓN DEL TRABAJO
32
4.4 PLANIFICACIÓN Y ESTIMACIÓN ECONÓMICA
En este apartado se ha realizado una aproximación de los costes de los recursos humanos y
materiales necesarios para poder llevar a cabo este proyecto. En los recursos humanos el
coste se estimará según las horas trabajadas en el proyecto y el perfil de las personas que se
ha necesitado para desempeñar esta labor. En los recursos materiales se incluirán el precio
de la plataforma en el caso de que hubiéramos tenido que usar la plataforma de pago en
vez de la versión de prueba gratis para universidades, el precio del sensor con el que se ha
estado trabajando y el coste aproximado de los viajes de recolección de información para
definir los requisitos.
4.4.1 RECURSOS HUMANOS
En el caso de este proyecto, dado que tiene 2 fases principales diferenciadas, se va a añadir
una fase de investigación de la plataforma antes de la del desarrollo de un prototipo de
Smart Agriculture; ambas supondrán un coste para el proyecto. Por lo tanto las tareas que
se van a tener en cuenta para los costes son las siguientes [25]:
- Gestión del proyecto: Los objetivos más importantes son administrar, coordinar,
planificar, controlar y realizar un seguimiento de todas las actividades y los
recursos asignados para que la ejecución del proyecto se finalice correctamente y
en los tiempos establecidos [26].
- Estudio y análisis de la plataforma IoT Foundation de Bluemix: El principal
objetivo es identificar cómo funciona la plataforma y las posibilidades que ofrece
para desarrollar un prototipo de Smart Agriculture.
- Análisis de requisitos: En esta fase del proyecto lo que hay que hacer es encontrar
información acerca de las necesidades que pueden tener los viticultores en cuanto a
que información les sería útil obtener de sus campos a través de la monitorización
de éstos. Esta información se debe obtener mediante entrevistas a gente que trabaje
en este sector y/o mediante la búsqueda por internet.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DEFINICIÓN DEL TRABAJO
33
- Diseño: El diseño gráfico tanto de la web como arquitectónico para cubrir los
requisitos identificados.
- Implementación: Hacer posible que se cumplan los requisitos y el diseño
especificados mediante la programación del entorno web.
- Verificación: Verificar que todos los objetivos han sido cumplidos, que todo
funciona correctamente, hacer cambios si es necesario y documentar todo el
trabajo.
En la siguiente tabla podemos ver el número de horas por tarea que debe realizar cada
perfil de persona:
Tareas Jefe de
Proyecto
Analista
Funcional
Junior
Analista/
Programador
Programador
Junior
Consultor
Junior
Gestión de
Proyectos
90 20
Estudio y análisis
de la plataforma
IoT Foundation de
Bluemix
10 80 20 2
Análisis de
requisitos
5 30
Diseño 3 30
Implementación 2 100
Verificación 5 5
Horas trabajadas 115 110 50 100 27
Tabla 2: Horas trabajadas por tarea y perfil (Total: 402)
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DEFINICIÓN DEL TRABAJO
34
Según las tarifas actuales de coste por hora y perfil profesional proporcionadas por la
empresa Spinmedia [27] que podemos encontrar en el Anexo G, el coste de los recursos
humanos para realizar el proyecto ha sido el siguiente:
Perfil profesional Horas trabajadas Tarifa (PVP/h) Total (€)
Jefe de Proyecto 115 55 6.325
Analista Funcional
Junior
110 40 4.400
Analista/
Programador
50 33 1.650
Programador
Junior
100 23 2.300
Consultor Junior 27 40 1.080
Tabla 3: Coste de los recursos humanos (Total: 15.755€)
Por lo tanto, el coste de los recursos humanos de este proyecto ha sido de 15.755 €.
4.4.2 RECURSOS MATERIALES
Como se ha mencionado anteriormente, los costes materiales van a ser de 3 tipos:
4.4.2.1 Coste del Cloud Computing con Bluemix
En el caso de este desarrollo, se ha obtenido una licencia especial para universidades que
era gratis hasta cierto límite de memoria y de instancias, pero si no se hubiera obtenido
esto, el coste al mes hubiera sido lo siguiente según los cálculos hechos por el propio
Bluemix:
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DEFINICIÓN DEL TRABAJO
35
Figura 8: Estimación de costes de Bluemix [28]
Por lo tanto, como para realizar este proyecto se hubiera necesitado un permiso de 7 meses,
los costes del uso de la plataforma hubieran sido de 7 x 18,15 = 127,05 €.
4.4.2.2 Coste del sensor para las pruebas realizadas
Según la página web de Texas Instruments, el coste del sensor SensorTag 2.0 y sus
especificaciones son las siguientes:
Figura 9: Precio del SensorTag 2.0 [29]
Por lo tanto el coste del sensor en euros ha sido aproximadamente de 26 €.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DEFINICIÓN DEL TRABAJO
36
4.4.2.3 Coste del viaje de búsqueda de información a La Rioja
Se hizo un viaje a La Rioja en el mes de Abril para entrevistar a distintas personas expertas
en viticultura para poder definir unos requisitos realistas. El coste aproximado de ese viaje
de un fin de semana fue de unos 200€.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
37
Capítulo 5. ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
5.1 CONCEPTOS IOT FOUNDATION
La mayoría de los conceptos se han estudiado con la ayuda de la siguiente referencia: [30].
5.1.1 ORGANIZACIONES
Al registrarse en Internet of Things Foundation obtiene un ID de organización de 6
caracteres exclusivo para cada cuenta. Éste será útil por ejemplo en algunos procesos de
identificación de dispositivos. Los datos solo son accesibles desde sus dispositivos y
aplicaciones. Una vez registrados, los dispositivos y las claves de API se vinculan a una
sola organización. Es imposible por seguridad la comunicación entre organizaciones dentro
del ecosistema de Internet of Things Foundation.
5.1.2 DISPOSITIVOS
• Un dispositivo puede ser cualquier objeto que tenga conexión a internet y
proporcione datos.
• Un dispositivo no puede interactuar directamente con otros.
• Los dispositivos pueden aceptar mandatos de las aplicaciones.
• Los dispositivos se identifican de forma exclusiva a sí mismos en IoT Foundation
con una señal de autenticación que solo se aceptará para dicho dispositivo.
• Los dispositivos se deben registrar antes de poderse conectar a IoT Foundation.
5.1.3 APLICACIONES
Una aplicación es cualquier cosa con conexión a internet que desea interactuar con datos
de dispositivos y/o controlar el comportamiento de esos dispositivos de alguna manera. Las
aplicaciones se identifican a sí mismas en IoT Foundation con una clave de API y un ID de
aplicación exclusivo.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
38
5.1.4 SUCESOS
Los sucesos son el mecanismo mediante el cual los dispositivos publican datos en Internet
of Things Foundation. El dispositivo controla el contenido del suceso y asigna un nombre
para cada suceso que envía. Las aplicaciones pueden procesar en tiempo real los sucesos
de los dispositivos. Cuando una aplicación recibe un suceso, tiene visibilidad del origen del
suceso y de los datos contenidos en ese suceso. Las aplicaciones se pueden suscribir a
todos los sucesos de todos los dispositivos, a un subconjunto de sucesos, un subconjunto de
dispositivos o una combinación de estos sucesos.
5.1.5 MANDATOS
Los mandatos son el mecanismo mediante el cual las aplicaciones se pueden comunicar
con los dispositivos. Solo las aplicaciones pueden enviar mandatos, que se deben emitir en
dispositivos específicos.
5.1.6 DISPOSITIVOS GESTIONADOS Y NO GESTIONADOS
Los dispositivos gestionados son dispositivos que contienen un agente de gestión3. Los
dispositivos gestionados pueden realizar operaciones de gestión de dispositivos como
actualizaciones de ubicaciones, descarga y actualizaciones de firmware y rearranque y
restablecimiento de fábrica.
Un dispositivo no gestionado es un dispositivo sin agente de gestión. Los dispositivos no
gestionados se pueden conectar a Internet of Things Foundation y enviar y recibir eventos
y mandatos. No pueden enviar solicitudes de gestión de dispositivos o llevar a cabo
operaciones de gestión de dispositivos.
3 Conjunto de lógicas que permiten al dispositivo interactuar con el servicio de gestión de dispositivos de Internet of Things Foundation a través del protocolo de gestión de dispositivos.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
39
5.1.7 ALMACENAMIENTO DE SUCESOS HISTÓRICOS
El almacenamiento de sucesos históricos permite a los usuarios almacenar datos de los
dispositivos añadidos a su organización de Internet of Things Foundation. La actividad y la
duración del almacenamiento de sucesos históricos pueden controlarse desde el panel de
valores en el panel de control de Internet of Things Foundation.
El almacenamiento de sucesos históricos utiliza un nivel de calidad de servicio MQTT de 0
(entrega como máximo una vez), por lo que algunos datos pueden perderse. El
almacenamiento de sucesos históricos puede consultarse utilizando la API de Internet of
Things Foundation.
5.1.8 CREAR UNA APLICACIÓN IOT FOUNDATION
1. Registrase en Bluemix e ir al Panel de Control Central.
Figura 10: Crear una app IoT Foundation (paso 1)
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
40
2. Dar a “Internet of Things Platform Starter”.
Figura 11: Crear una app IoT Foundation (paso 2)
3. Rellenar los datos y dar a “Crear”, se aconseja no dejar espacios en blanco en el
nombre de la aplicación y de host.
Figura 12: Crear una app IoT Foundation (paso 3)
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
41
4. Saldrá el panel de ayuda, volver al panel de control y después abrir la app IoT-Trial
que se acaba de crear.
Figura 13: Crear una app IoT Foundation (paso 4a)
Figura 14: Crear una app IoT Foundation (paso 4b)
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
42
5.1.9 REGISTRAR EL SENSORTAG EN BLUEMIX
Para esta sección se ha tenido en cuenta los pasos de la siguiente referencia: [31].
1. Se necesita obtener unos datos primero para introducir en la aplicación del
smartphone. Se obtienen de la siguiente manera:
1.1. Ir a la nueva versión de Bluemix.
Figura 15: Obtener datos IoT Foundation para el sensor (paso 1)
1.2. Entrar en la sección de “Internet de las Cosas”.
Figura 16: Obtener datos IoT Foundation para el sensor (paso 2)
1.3. Abrir el vínculo señalado.
Figura 17: Obtener datos IoT Foundation para el sensor (paso 3)
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
43
1.4. Abrir el panel de control de los dispositivos.
Figura 18: Obtener datos IoT Foundation para el sensor (paso 4)
1.5. Darle a “Dispositivos” en el panel de la izquierda y luego a “Añadir
dispositivo”.
Figura 19: Obtener datos IoT Foundation para el sensor (paso 5)
1.6. Crear un tipo de dispositivo.
Figura 20: Obtener datos IoT Foundation para el sensor (paso 6)
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
44
1.7. Rellenar los campos y darle a “Siguiente”.
Figura 21: Obtener datos IoT Foundation para el sensor (paso 7)
1.8. Darle a “Siguiente” sin tocar nada en las siguientes pantallas.
Figura 22: Obtener datos IoT Foundation para el sensor (paso 8)
1.9. Seleccionar el tipo de dispositivo que acabamos de crear y darle a “Siguiente”.
Figura 23: Obtener datos IoT Foundation para el sensor (paso 9)
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
45
1.10. Introducir el ID del dispositivo que corresponde ID Device que encontramos
cómo buscarlo en el Anexo A Apartado A.1. Darle a “Siguiente”.
Figura 24: Obtener datos IoT Foundation para el sensor (paso 10)
1.11. Darle a “Siguiente”.
Figura 25: Obtener datos IoT Foundation para el sensor (paso 11)
1.12. Escribir y apuntar la señal escrita para más tarde recordarla.
Figura 26: Obtener datos IoT Foundation para el sensor (paso 12)
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
46
1.13. Darle a “Añadir”
Figura 27: Obtener datos IoT Foundation para el sensor (paso 13)
1.14. Guardar bien los datos que se muestran en la imagen y cerrar.
Figura 28: Obtener datos IoT Foundation para el sensor (paso 14)
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
47
2. Se necesita introducir los datos obtenido en la parte 1 a la aplicación del sensor. Para ello seguir en la aplicación del sensor
todos y cada uno de los pasos marcados en las imágenes en orden.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
48
Figura 29: Pasos para registrar un dispositivo
Esto es el panel de control de los dispositivos
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
49
El resultado de la vinculación obtenido es el siguiente:
Figura 30: Resultado del registro del dispositivo
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
50
5.2 NODE-RED
5.2.1 ¿QUÉ ES NODE-RED?
Node-RED se puede definir como una herramienta open-source que contiene un editor
visual para ‘cablear’ el sistema IoT producido de una forma intuitiva y sencilla. Permite al
desarrollador dejar de preocuparse del interfaz de código que va a tener que escribir y
centrase en el desarrollo del proyecto en conjunto [32].
El programa contiene una serie de ‘nodos’ en su menú que son unos simples iconos que
mediante un movimiento de ‘drag & drop’ los dejas en el panel central y los unes con unas
líneas para interconectar funcionalidades. Cada nodo ofrece una funcionalidad diferente y
éstos aparecen por defecto en el menú o se pueden personalizar programándolos con
JavaScript uno mismo o cogiéndolo de las librerías de la página web GitHub en el que se
pueden encontrar los nodos o flujos desarrollados por otras personas. En el repositorio se
pueden encontrar unos 225,000 módulos y es muy fácil añadir funcionalidad a un nodo.
Los flujos que se han mencionado anteriormente se guardan usando JSON4 y se importan a
la zona de trabajo de una manera muy fácil.
Los flujos creados se pueden compilar en el mismo runtime con un simple ‘click’. Además
el runtime que utiliza es muy ‘light’ ya que usa Node.js y toma ventaja del modelo de no-
bloqueo. Esto hace que Node-RED sea el programa ideal para utilizar en los bordes de la
red usando sensores low-cost y el servicio cloud [33].
4 Subconjunto de la notación literal de objetos de JavaScript y alternativa al XML [70]
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
51
5.2.2 ABRIR NODE-RED DESDE BLUEMIX IOT
1. Abrir el link seleccionado en la imagen. En ocasiones este vínculo puede ser
modificado entonces para entrar en Node-RED hay que poner la misma URL pero
con un /red detrás.5
Figura 31: Abrir Node-RED (paso 1)
2. Dar a “Go to your Node-RED flow editor”.
Figura 32: Abrir Node-RED (paso 2)
5 A veces hay que usar una conexión https para poder entrar si es que no te lo permite con http.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
52
5.2.3 DESCRIPCIÓN DEL ENTORNO
En la Figura 8 se pueden ver cuáles son las partes de las que se compone el entorno de la
herramienta.
Panel de trabajo (escritorio): Es el espacio en el cual se van a arrastrar los nodos
e interconectar para formar los flujos. Se pueden abrir varios escritorios con el
botón de ‘+’ para que se abran nuevas pestañas y crear otros flujos por separado
para ordenar el espacio de trabajo.
Barra lateral izquierda: Se encuentran los nodos por default de los que se hablará
más tarde y los creados por el desarrollador.
Barra lateral derecha: Se pueden distinguir 2 pestañas. La de ‘info’ contiene
información de para qué sirve el nodo o de cómo se usa y la de ‘debug’ es dónde se
encuentran los resultados de la ejecución de los flujos que aparecen en formato
JSON.
Botón de ‘Deploy’: Sirve para compilar y ejecutar el programa para ver los
resultados en la pestaña de ‘debug’.
Menú esquina superior derecha: Se puede ver el contenido de lo que ofrece en la
Figura 8. Se pueden hacer cosas como importar o exportar flujos, configurar los
nodos, obtener ayuda en la web o saber cuáles son los atajos que se pueden usar con
el teclado.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
53
Figura 33: Entorno de Node-RED
Figura 34: Menú Node-RED
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
54
5.2.4 NODOS DEFAULT
En el Node-RED se puede encontrar por defecto 4 tipos principales de nodos que son los
que se ven en la Figura 10:
Figura 35: Tipos de nodos
Se irá describiendo la utilidad de los distintos tipos de etiquetas más en profundidad y el
lenguaje utilizado en los nodos de función a medida que vayan saliendo nuevos nodos en
los casos ejemplo pero para hacerse una idea se puede ver su principal utilidad en las
tablas: Tabla 2, Tabla 3, Tabla 4, Tabla 5, Tabla 6, Tabla 7, Tabla 8, Tabla 9 [34] [35].
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
55
Nombre del Nodo Descripción
Inyecta un estímulo o un mensaje
configurado por el desarrollador. Se puede
inyectar manualmente pulsando sobre él o
configurando el nodo para un intervalo de
tiempo o momento preciso.
Captura errores lanzados por los nodos. Se
puede detallar el mensaje de error de
respuesta y saber el nodo en el que se está
produciendo el error.
Se subscribe a un ‘topic’ de un bróker
MQTT y devuelve los datos publicados
como mensajes nuevos. Soporta algunos
niveles de QoS.
Recibe HTTP requests permitiendo a Node-
RED actuar como servidor web básico. El
body del http se manda como mensaje de
salida conteniendo datos estándar URL o
JSON. También se manda una response.
Proporciona un endpoint para que el
navegador establezca una conexión
websocket con Node-RED.
Se usa para aceptar tcp requests que llegan
a determinado puerto o para conectarse a un
puerto remoto.
Se usa para aceptar paquetes udp o
multicast que lleguen a un puerto
específico.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
56
Lee de un puerto serial en el dispositivo
local. También puede ser configurado para
leer buffers en un periodo de tiempo
específico o esperar en determinados
instantes.
Informa del estado de los mensajes desde
otros nodos de la misma sección.
Proporciona un MQ Light receptor de
cliente. MQ Light sirve para organizar la
arquitectura interna de una app.
Es un nodo de input usado por IBM para el
IoT Foundation usado para recibir eventos
mandados desde dispositivos produciendo
un objeto llamado msg y declara un
msg.payload como un String que contiene
el contenido del mensaje.
Tabla 4: Nodos de Input
Nombre del Nodo Descripción
Sirve para activar o desactivar los mensajes
que aparecen en el panel de debug. Se
puede configurar para mostrar el mensaje
del objeto completo o seleccionar
determinados parámetros con el
msg.payload.[atributo].
Se subscribe a un bróker MQTT y publica
cualquier dato (msg.payload) que reciba de
los mensajes que lleguen sobre un ‘topic’.
Soporta QoS.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
57
Manda responses respondiendo a las http
requests del nodo de input http. La response
corresponde al msg.payload y puede tener
cabeceras y código de estado definido.
Manda msg.payload por el websocket
configurado. Se puede mandar a un cliente
específico o como broadcast a todos los
clientes conectados.
Responde a un puerto tcp configurado.
Manda mensajes udp al host y el puerto
configurado. Soporta broadcast.
Manda datos a un puerto serie definido.
Proporciona un MQ Light emisor de cliente.
MQ Light sirve para organizar la
arquitectura interna de una app.
Manda un sms usando el servicio de Twilo
Manda notificaciones push a smartphones
usando IBM Push notification para
Bluemix.
Es un nodo de salida que se usa junto con
IoT Foundation para mandar datos a un
dispositivo.
Tabla 5: Nodos de output
Nombre del Nodo Descripción
Es una función genérica programable
usando JavaScript. Se puede generar 1 o
varias vías de salida para las conexiones
con diferentes condiciones.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
58
Se usa para insertar texto para construir
mensajes, html, ficheros de
configuración…
Nodo genérico que retrasa los mensajes un
tiempo arbitrario o definido.
Crea 2 mensajes de salida separados
durante cierto intervalo de tiempo cuando
se recibe un mensaje.
Para insertar mensajes visuales al lado de
los nodos.
Te permite construir y mandar http
requests a una url específica. Los métodos,
cabeceras y payload son configurables.
Manda msg.payload a un puesto del
servidor tcp y espera una respuesta. Se
puede configurar para que espere a cierto
carácter especial o que mande
inmediatamente.
Enruta los mensajes basándose en ciertas
condiciones.
Se usa para especificar, cambiar o eliminar
propiedades de cierto mensaje entrante.
Sirve para escalar los distintos valores
numéricos que entren, redondeando,
truncando o cambiando los decimales de
los números.
Si el nodo recibe un String, devuelve un
objeto JavaScript y viceversa.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
59
Extrae elementos de un documento html y
los pone en formato msg.payload usando
un selector configurable.
Convierte un objeto JavaScript a un JSON
y viceversa.
Convierte un objeto JavaScript a un XML
y viceversa.
(Report By Exception) Genera un mensaje
solamente cando su entrada es diferente de
la entrada anterior, o si el mensaje de
entrada ha incrementado/disminuido por
cierto valor.
Tabla 6: Nodos de función
Nombre del Nodo Descripción
Lee los emails de un servidor IMAP
devolviendo el nuevo email según llegue. El
asunto lo identifica como msg.topic y el
texto de dentro como msg.payload.
Devuelve tweets de una cuenta como si
fueran mensajes. Se puede usar por ejemplo
para buscar ciertos mensajes en los que
aparezca algún término en concreto.
Manda mensajes en formato email via el
servidor de IMAP configurado.
Tuitea el msg.payload a la cuenta que se
configure.
Tabla 7: Nodos de social
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
60
Nombre del Nodo Descripción
Llama a la collection de MongoDB
basándose en el operador seleccionado.
Lee el archivo específico y manda el
contenido como msg.payload al hdfs de
IBM.
Escribe el msg.payload en el hdfs en el
archivo en concreto por ejemplo para crear
un log.
Es un nodo para buscar documentos en una
BBDD Cloudant.
Es un nodo SQLDB para ejecutar las
queries.
Es un nodo DashDB para ejecutar las
queries.
Es un nodo MongoDB de salida para
guardar, insertar, actualizar y eliminar
objetos de una collection.
Es un nodo Cloudant de salida que guarda el
msg en la BBDD.
Es un nodo SQLDB de salida que guarda el
msg.payload en el servicio.
Es un nodo DashDB de salida que guarda el
msg.payload en el servicio.
Tabla 8: Nodos de almacenamiento
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
61
Nombre del Nodo Descripción
Utiliza algoritmos de aprendizaje
para devolver las clases predefinidas
que más se parezcan a trozos de texto
cortos.
Analiza texto UTF-8 para detectar el
lenguaje usado en el texto y muestra
el código de lenguaje ISO.
Traduce de un idioma a otro.
Saca del texto la personalidad y la
característica social de una persona.
Busca la relación entre sustantivos,
verbos, sujetos… Puede sacar
eventos, organizaciones, personas …
de un texto desestructurado o
encontrar la relación entre estos
elementos.
Convierte la voz del ser humano en
texto.
Convierte el texto en voz del ser
humano, hablado por una máquina.
Ayuda a tomar mejores decisiones
cuando hay varios condicionantes o
posibilidades.
Analiza las imágenes para entender
su contenido.
Tabla 9: Nodos de IBM_Watson
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
62
Nombre del Nodo Descripción
Sentiment es un nodo que utiliza AFINN-
111 wordlist para analizar sentimientos
expresados en un trozo de texto.
Usa Alchemy APIs para analizar URLs
externas, archivos HTML o contenido en un
texto.
Usa Alchemy APIs para analizar imágenes,
detección de caras, tags o links.
Tabla 10: Nodos de Análisis
Nombre del Nodo Descripción
Monitoriza RSS/atom de las noticias que
salen nuevas.
Tabla 11: Nodos Avanzados
5.2.5 EJEMPLOS NODE-RED
Es esta sección se describirán algunos ejemplos de flujos de Node-RED para que se puedan
entender mejor las descripciones de los usos de los nodos más importantes. En la mayoría
de los casos se podrá ver la comparación entre el uso de un nodo node-RED específico y el
uso de un nodo de función programado a mano. Alguno de estos ejemplos o algunas ideas
de cómo usar los nodos se han tomado de la siguiente referencia bibliográfica: [36]
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
63
5.2.5.1 Ejemplo ‘Hola Mundo’
Figura 36: Ejemplo ‘Hola Mundo’
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
64
5.2.5.2 Ejemplo de uso de varios Inputs y Outputs
Figura 37: Ejemplo outputs/inputs
Solo sale ´high´ cuando se aprieta al input de high
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
65
5.2.5.3 Obtener datos de un sensor
Para obtener los datos de un sensor lo primero que tenemos que hacer es sabes cuál es el Device ID de nuestro dispositivo. En el
caso del SensorTag podemos encontrar en el ANEXO A Apartado A.1 cómo saber cuál es el que le
corresponde a nuestro sensor.
Figura 38: Ejemplo obtención datos de un sensor
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
66
5.2.5.4 Ejemplos de funciones, templates, switches y cambios
Figura 39: Ejemplos de funciones, templates, switches y cambios
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
67
5.2.5.5 Ejemplo cambio de variables
Figura 40: Ejemplo cambio variables
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
68
5.2.5.6 Ejemplos de triggers y delays
Figura 41: Ejemplos triggers y delays
‘context’ se usa para guardar el valor anterior medido por el sensor [73].
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
69
5.2.5.7 Ejemplos de redondeos, cambios y rbe
[71]
Figura 42: Ejemplos de redondeo, cambios y rbe
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
70
5.2.5.8 Ejemplos mandar tuit, email y cómo usar un nodo programado por otro
5.2.5.8.1 Cómo instalar un nodo de información sobre el tiempo externo
El nodo que se va a instalar en el node-RED va a sacar información del
tiempo de la siguiente página web: http://openweathermap.org/appid.
A) Para ello lo primero que hay que hacer es registrarse en el
servicio de la siguiente manera [37]:
1. Entramos en la página http://openweathermap.org/appid:
Figura 44: Página web openweather
2. Nos registramos dándole a ‘Sign up’
Figura 45: Crear account openweather
Figura 43: Nodo
openweather
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
71
3. Guardar la API Key, esta clave será muy importante porque la necesitaremos
introducir en el Node-RED:
Figura 46: API Key openweather
B) Luego tenemos que instalar el nodo para que salga en el menú izquierdo de node-
RED [38]:
1. Se va al panel de control de la aplicación que se creó en Bluemix y se le da
‘Añadir Git’.
Figura 47: Añadir un Git (paso 1)
2. Se le da a ‘Continuar’ y luego a ‘Cerrar’
Figura 48: Añadir un Git (paso 2)
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
72
3. Se pincha en la url del Git creado en la parte superior derecha del panel de
control de la app.
Figura 49: Configurar el Git (paso 1)
4. Darle a ‘Edit Code’
Figura 50: Configurar el Git (paso 2)
5. Ir a ‘package.json’ y añadir la línea subrayada en verde en el código. Se sabe
que hay que añadir ese nombre y esa versión yendo a la web de los nodos
‘costumizados’ de node-RED [39]. Finalmente darle a ‘play’ para que se
guarden los cambios. El nuevo nodo aparecerá en la aplicación Node-RED.
Figura 51: Configurar el Git (paso 3)
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
73
5.2.5.8.2 Crear el flujo para que nos avise de si los cielos están despejados
[72] Ir al ANEXO A Apartado A.2 para saber
cómo quitar la seguridad del email y mirar los
‘tips’ de la contraseña
Figura 52: Ejemplo nodo weather + tweet + email
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
74
5.2.5.9 Realizar la media de varios datos entrantes
5.2.5.9.1 Descargar el nodo “Smooth”
1. Se pincha en la url de Git en la parte superior derecha del panel de
control de la app.
Figura 53: Entrar en el repositorio Git
2. Ir a ‘package.json’ y añadir la línea subrayada en verde en el código. Se
sabe que hay que añadir ese nombre y esa versión yendo a la web de los
nodos ‘costumizados’ de node-RED [40]. Finalmente darle a ‘play’ para
que se guarden los cambios. El nuevo nodo aparecerá en la aplicación
Node-RED.
Figura 54: Instalación del nodo nuevo del repositorio
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
75
5.2.5.9.2 Crear el flujo para hacer la media
Figura 55: Flujo para hacer la media [Descargar en: Anexo C - Apartado C.1 ]
8 + 5 + 10 + 74
= 7,5
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
76
5.2.5.10 Usar la base de datos de Cloudant con Node-RED
5.2.5.10.1 Crear la Base de Datos y definir sus parámetros
1. Se abre el servicio de Cloudant que encontramos en el panel de control. En el caso
de no encontrarlo darle a “Añadir servicio o api” y agregar el servicio de Cloudant
del catálogo.
Figura 56: Crear una Base de datos Cloudant (paso 1)
2. Darle a “Launch”.
Figura 57: Crear una Base de datos Cloudant (paso 2)
3. Darle a “Create Database” y poner un nombre a la base de datos.
Figura 58: Crear una Base de datos Cloudant (paso 3)
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
77
4. En este ejemplo hemos creado una base de datos con el nombre de “nodered2”. Lo
que se hace ahora es definir los parámetros de búsqueda en la base de datos con el
“Search Index”. Para ello se le da al “+” en “Design Documents” y luego a “New
Search Index” [41].
Figura 59: Crear una Base de datos Cloudant (paso 4)
5. Se pone el nombre al documento y al index que se quiera y en el espacio para poner
el código de la función de búsqueda siempre se usa el siguiente formato [42]:
Index(“nombre que se va a usar para hacer la búsqueda”, dato que se va a buscar siguiendo la estructura del JSON guardado en al BBDD,{“store”:true});
Figura 60: Crear una Base de datos Cloudant (paso 5)
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
78
Nota: Si se requiere editar la función hacer lo siguiente:
Figura 61: Editar la función de búsqueda de Cloudant
5.2.5.10.2 Crear un flujo de ejemplo para guardar los datos del sensor en la base de
datos creada
Figura 62: Flujo para guardar datos en una BBDD [Descargar en: Anexo C - Apartado C.2]
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
79
5.2.5.10.3 Crear un flujo ejemplo para recoger los datos de una base de datos
Cloudant según una búsqueda
En este caso la búsqueda que se va a realizar va a ser según la temperatura que recoja el
sensor y que haya guardado en la base de datos “nodered2”. El parámetro de búsqueda se
introducirá por ejemplo mediante un formulario (podemos ver un ejemplo de ello en el
siguiente apartado) y se recogerá en una url con el dominio que estamos usando en la app
de Bluemix seguido de “/datos” (como se puede ver en el primer nodo http). Se sabrá el
dato al que queremos acceder porque la última parte de la url será “?temp=numero
introducido en el formulario”. Con lo cual, si se pone por ejemplo en la url
directamente:https://iot-pruebas.eu-gb.mybluemix.net/datos?temp=26.66 se recibirán en el
navegador muchos datos en formato JSON de todos los mensajes en los que la temperatura
sea 26.66.
Figura 63: Flujo para recoger los datos de una base de datos Cloudant según una búsqueda [Descargar en: Anexo C -
Apartado C.3)]
5.2.5.11 Usar un template para crear un formulario y mostrar los datos de la
búsqueda por Ajax o JSON
En este caso se va aprovechar la búsqueda que se quería realizar anteriormente en la base
de datos para poder introducir el dato a buscar a través de un formulario y mostrar los
datos uno a uno usando Ajax (los datos se mostrarán en formato JSON tal y como salen de
la BBDD) y JSON (solo se mostrarán los datos que nos interese mostrar).
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
80
5.2.5.11.1 Formulario + Ajax
Configurando el flujo de la siguiente manera y poniendo en la url: https://iot-pruebas.eu-
gb.mybluemix.net/formularioA obtenemos el siguiente resultado:
Figura 64: Formulario + Ajax [Descargar en: Anexo C - Apartado C.4]
Dentro del template de “Formulario Ajax” encontramos el siguiente código:
<!DOCTYPE html> <html> <body> <p>Realiza la busqueda por temperatura</p> <div class ="labelsFormulario"> Temperatura: <input id="temp" type="text"/> <br/><br/> </div> <div class ="botonFiltrar"> <input id="btnFltr" type="submit" value="Filtrar" onclick="javascript:return mostrarLista();" /> </div> <div id="contenidoFitr"></div> <div id="errorMensaje"></div> <script> function peticionAJAX(url, idDiv) { var xmlHttpReq = new XMLHttpRequest(); xmlHttpReq.onreadystatechange=function() { if (xmlHttpReq.readyState == 4 && xmlHttpReq.status==200) document.getElementById(idDiv).innerHTML = xmlHttpReq.responseText; } xmlHttpReq.open('GET', url, true); xmlHttpReq.send();
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
81
} function mostrarLista() { var temp= document.getElementById("temp").value; if(temp) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?temp=" + temp; peticionAJAX(url,'contenidoFitr'); return true; }else{ document.getElementById("contenidoFitr").style.display = 'none'; document.getElementById("errorMensaje").style.display = 'block'; document.getElementById("errorMensaje").innerHTML = "Debe introducir un mensaje"; return false; } } </script> </body> </html>
5.2.5.11.2 Formulario + JSON
Configurando el flujo de la siguiente manera y poniendo en la url: https://iot-pruebas.eu-
gb.mybluemix.net/formularioJ obtenemos el siguiente resultado:
Figura 65: Formulario + JSON [Descargar en: Anexo C - Apartado C.5 ]
Dentro del template de “Formulario JSON” encontramos el siguiente código:
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
82
<!DOCTYPE html> <html> <head> <style> .estilo{ width:200px; text-align:center; float:left; } </style> </head> <body> <script src="https://code.jquery.com/jquery-1.10.2.js"></script> <p>Realiza la busqueda por temperatura</p> <div class ="labelsFormulario"> Temperatura: <input id="temp" type="text"/> <br/><br/> </div> <div class ="botonFiltrar"> <input id="btnFltr" type="submit" value="Filtrar" onclick="javascript:return mostrarLista();" /> </div> <br/><br/> <div class="columna"> <div class="estilo"> ID Sensor </div> <div class="estilo"> Fecha </div> <div class="estilo"> Temperatura </div> <div class="estilo"> Humedad </div> <div class="estilo"> Luz </div> <br><br></div> <div class="inner"></div> <script> function peticionJSON(url) { var xmlHttpReq = new XMLHttpRequest(); xmlHttpReq.onreadystatechange=function() { if (xmlHttpReq.readyState == 4 && xmlHttpReq.status==200) { $( ".inner" ).empty(); var objetoJSON = eval("(" + xmlHttpReq.responseText + ")"); for(i = 0; i < objetoJSON.length; i++) { var id = objetoJSON[i].d.magX; var date = objetoJSON[i].d.objectTemp; var res = date.split("T"); var fecha = res[0]; var temp = objetoJSON[i].d.ambientTemp; var hum = objetoJSON[i].d.humidity;
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
83
var luz = objetoJSON[i].d.light; var apptext = "<div><div class='estilo'>" + id + "</div><div class='estilo'>" + fecha + "</div><div class='estilo'>" + temp + "</div><div class='estilo'>" + hum + "</div><div class='estilo'>" + luz + "</div></div><br/>"; $( ".inner" ).append(apptext); } } } xmlHttpReq.open('GET', url, true); xmlHttpReq.send(); } function mostrarLista() { var temp= document.getElementById("temp").value; if(temp) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?temp=" + temp; peticionJSON(url); return true; }else{ document.getElementById("contenidoFitr").style.display = 'none'; document.getElementById("errorMensaje").style.display = 'block'; document.getElementById("errorMensaje").innerHTML = "Debe introducir un mensaje"; return false; } } </script> </body> </html>
5.3 CREAR EL PRIMER SERVIDOR CON NODE.JS
Para algunas funcionalidades de algunas aplicaciones como por ejemplo la autenticación
de usuarios es necesaria la creación de un servidor. En este caso se creará con la ayuda de
Node.js. Hay que destacar que con la versión de prueba que se tiene contratada para este
proyecto no se puede montar 2 servidores (el de Node-RED más otro) en la misma
aplicación debido a que se está usando una versión de prueba y no se tiene suficiente
capacidad.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ESTUDIO Y ANÁLISIS DEL SERVICIO IOT DE BLUEMIX
84
Para montar la estructura básica de este servidor entonces y tener un “Hola Mundo”
predispuesto lo que se hace es ir a catálogo de Bluemix y seguir los siguientes pasos:
- Darle a “SDK for Node.js”
Figura 66: Montar un servidor con Node.js (paso 1)
- Rellenar los campos y darle a “Crear
Figura 67: Montar un servidor con Node.js (paso 2)
- Si vamos en el panel de control de la app al repositorio Git como se ha contado
anteriormente podemos ver toda la estructura del servidor y tener todas las
dependencias básicas instaladas en el package.json. Lo único que hay que hacer
ahora es buscar en la api de express.js [43] para conseguir hacer lo que se quiera
hacer con el servidor. En el prototipo se verá el código que se usará para realizar
una autenticación en una página web por ejemplo.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
85
Capítulo 6. DESARROLLO DE LA SOLUCIÓN IOT:
VINIOT
Como resultado de la investigación previa de la plataforma IoT Foundation de Bluemix en
este capítulo se van a mostrar los resultados de la construcción del prototipo de Smart
Agriculture para el campo vinícola.
6.1 REQUISITOS
Según los datos recogidos en las entrevistas hechas a las personas que entienden de
viticultura (ANEXO B) y a la búsqueda de información en internet [44] [45] [46], se han
definido los siguientes requisitos para el prototipo:
1. El usuario debe poder iniciar sesión con un nombre y una contraseña.
2. El usuario tiene que poder consultar 3 gráficas en tiempo real de los sensores de
temperatura, humedad y luz.
3. El usuario tiene que poder obtener una imagen en formato .png .jpg .pdf o vector de
los gráficos en tiempo real en cualquier instante.
4. El usuario tiene que poder comunicarse mediante un chat con otros usuarios que
tengan el mismo sistema contratado.
5. El usuario tiene que poder consultar el twitter mediante un widget. En éste se harán
publicaciones automáticas mostrando:
a. Si los cielos están despejados en la bodega y los viñedos para facilitar esa
información a los visitantes.
b. El 31 de Agosto si la cosecha de la añada ha sido buena o no. Esto se sabe si
cumplen las siguientes condiciones durante los meses de Julio y Agosto:
i. 25<Temperatura media<30
ii. 60<Humedad media<70
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
86
6. El usuario tiene que tener disponible un calendario para poder consultarlo del ciclo
de vida de los viñedos.
7. El usuario tiene que tener disponible un acceso directo a las consultas de las
previsiones del tiempo en su zona.
8. El usuario debe poder realizar búsquedas entre los datos históricos recogidos por
los sensores según ciertos parámetros de temperatura, humedad, luz y/o fecha para
que sean desplegados en una tabla responsiva.
9. El usuario debe poder tener acceso directo a su Gmail para poder consultar las
alertas en tiempo real que le han llegado.
10. El usuario debe recibir alertas en el Gmail y que sean guardadas en un histórico
para poder ser consultadas en los siguientes casos:
a. Cuando se vayan a producir heladas:
i. Temperatura < 1ºC
b. Cuando la tierra necesite regarse:
i. Humedad relativa < 40%
ii. Temperatura > 30ºC
c. Cuando haya riesgo de enfermedades fúngicas:
i. Humedad relativa > 80%
ii. 15ºC < Temperatura < 20ºC
iii. Luz < 100 lux
d. Cuando se deba retrasar la poda 10 días a mediados de Enero:
i. Media del 1-15 Enero de la temperatura < 4ºC
6.2 ARQUITECTURA CLIENTE-SERVIDOR
La arquitectura cliente-servidor es un modelo de distribución en el que las tareas se
reparten entre los servicios, llamados servidores, y los demandantes, llamados clientes.
Básicamente, un cliente realiza peticiones al servidor, y éste le responde [47].
En este proyecto se ha decidido crear 2 aplicaciones dentro de Bluemix una que se llamará
IoT Pruebas y otra NodeApp. La primera tendrá toda la lógica del proyecto dentro del
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
87
servidor de Node-RED, acceso a varias bases de datos Cloudant y todas las interfaces
menos la de login en la parte del cliente. La segunda aplicación servirá de autenticación
para el usuario utilizando un servidor Node.js configurado específicamente. En el esquema
general de la arquitectura de la siguiente página se puede apreciar la división explicada:
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
88
IoT Pruebas
NodeApp
Front-end
Back-end
(Servidor
Node.js)
Cloudant
BBDD
Front-end
Back-end
(Servidor
Node.js)
W-S
HTTP
REQ/
RESP
&
GMAIL
MQTT (IoT Default)
OPEN
WEATHR
MAP
EXPRESS
.JS
CFENV
Browser
GW
Sensor
viniothome24, tiempo, regadio,
historicos, heladas, corregirpoda,
calendario, botrytis
login
nodered2 poda botrytis
regadio heladas
CLOUDANT
Figura 68: Estructura general del proyecto
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
89
6.2.1 BACK-END
Se distinguirán 2 servidores: el de la aplicación IoT Pruebas, que usará el servidor de
Node-RED ya definido previamente al crear el proyecto de IoT Foundation, y el de la
aplicación NodeApp, que usará un servidor Node.js como el ya explicado en uno de los
apartados de la descripción de Bluemix anteriormente.
6.2.1.1 Servidor de NodeApp
Este servidor, el Node.js, se utilizará para dar validez a la autenticación del usuario y
permitirle pasar cuando introduzca un usuario y contraseña adecuados. Hay que
mencionar que este método que se está usando no es del todo seguro, pero lo que se quería
demostrar con esto no era la seguridad, sino el cómo montar un servidor Node.js en
Bluemix y alguna aplicación que podía tener. Básicamente consiste en configurar los
paquetes necesarios en el package.json y en escribir el siguiente código para acceder al
servidor y para comprobar los datos introducidos por el usuario:
var express = require('express'); var cfenv = require('cfenv'); // crea un servidor express.js var app = express(); app.use(express.static(__dirname + '/public')); //la llamada del action se recoge en esta parte y se ejecuta lo que haya dentro app.get('/auth', function (req, res) { var user = req.query.email; var psw = req.query.password; if(user == "VinIoT24" && psw == "111111") {
res.redirect('https://iot-pruebas.eu-gb.mybluemix.net/ VinIoT/pages/viniothome24.html');
}else{ res.redirect('http://nodeappprueba.eu-gb.mybluemix.net/'); } }); // get the app environment from Cloud Foundry var appEnv = cfenv.getAppEnv(); // start server on the specified port and binding host app.listen(appEnv.port, '0.0.0.0', function() { // print a message when the server starts listening console.log("server starting on " + appEnv.url); });
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
90
6.2.1.2 Servidor de IoT Pruebas
En este caso se usará Node-RED y su interfaz para configurar todas las funcionalidades
que se vayan a necesitar. Se dividirán las secciones en las siguientes:
6.2.1.2.1 Sección de los Gráficos en tiempo real
El siguiente flujo muestra cómo se cogen los datos que interesan del sensor para
posteriormente ser mandados utilizando un web socket. Para ver la configuración completa
de cada uno de los nodos se pueden descargar los flujos copiando y pegando el código
JSON que se encuentra en el Anexo E – Apartado E.1 en la sección de importar del Node-
RED.
Figura 69: Flujos para los gráficos en tiempo real
6.2.1.2.2 Sección de Alertas
En esta parte encontramos las alertas que se reciben tanto en tiempo real a través del email
como en la web a través de una petición a la base de datos. Las alertas son las de heladas,
falta de agua, enfermedades fúngicas y las de retrasar la poda. Estas alertas tienen la
estructura que se muestra en las siguientes imágenes. Principalmente, se reciben los datos
del sensor, se definen una serie de condiciones que se van a describir al lado de cada
imagen del flujo del tipo de alerta y se guardan las alertas en una base de datos de Cloudant
a la vez que se manda un email al viticultor. Para recoger los datos de la base de datos se
hace una petición http request a la base de datos y ésta respondo con un http response con
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
91
todos los datos solicitados. Para ver la configuración completa de cada uno de los nodos se
pueden descargar los flujos copiando y pegando el código JSON que se encuentra en el
Anexo E – Apartado E.2 en la sección de importar del Node-RED.
Alertas de heladas
Figura 70: Flujo de las alertas de heladas
La condición para que se dé la alerta es que la temperatura baje de 1ºC.
Alertas de activar el regadío
Figura 71: Flujo de alertas para activar el regadío
Las condiciones para activar el regadío son que la temperatura sea mayor que 30ºC y la
humedad menor que 40%rH.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
92
Alertas de la enfermedad de Botrytis
Figura 72: Flujo de alertas para avisar de una posible enfermedad (Botrytis)
Las condiciones para que salte esta alerta son que las temperaturas sean entre 15-20ºC, que
la humedad sea mayor que 80%rH y que la luz sea menor que 100lux.
Alertas de retrasar la poda
Figura 73: Flujo de las alertas de retrasar la poda a mediados de Enero
Las condición es que si la media de las temperaturas entre el 1 de enero y el 15 de Enero es
menor que 4ºC hay que retrasar la poda 10 días.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
93
6.2.1.2.3 Sección del Chat
Aquí se puede ver un flujo con una entrada y una salida usando un socket y un
establecimiento de la sesión entre medias. Para ver la configuración completa de cada uno
de los nodos se pueden descargar los flujos copiando y pegando el código JSON que se
encuentra en el Anexo E – Apartado E.3 en la sección de importar del Node-RED.
Figura 74: Flujo del chat
6.2.1.2.4 Sección de los datos históricos
Aquí se puede ver como cada 3 segundos se guardan en la base de datos de Cloudant
(nodered2) los datos recibidos del sensor. Previamente se manipulan esos datos para
añadirle a cada mensaje la fecha y la hora en la que se ha realizado esa medición y el id del
sensor desde dónde ha llegado la información. Después para recoger los datos se ha de
hacer una http request mandando los parámetros según los que buscar en la BBDD, hacer
una selección y mandar solo los solicitados mediante un http response. Para ver la
configuración completa de cada uno de los nodos se pueden descargar los flujos copiando
y pegando el código JSON que se encuentra en el Anexo E – Apartado E.4 en la sección de
importar del Node-RED.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
94
Figura 75: Flujo para guardar y mostrar los datos históricos
6.2.1.2.5 Sección de Tweets
Esta parte es un medio de comunicación automático que tendrá la empresa con los
consumidores. Para ver la configuración completa de cada uno de los nodos se pueden
descargar los flujos copiando y pegando el código JSON que se encuentra en el Anexo E –
Apartado E.5 en la sección de importar del Node-RED. Hay 2 tipos de avisos que se
pueden publicar en twitter:
1. Avisar de que los cielos están despejados a los clientes para informarles de que
pueden visitar la bodega y los viñedos sin problema. Esta información se recogerá
del nodo que conecta con OpenWeathermap.
Figura 76: Flujo para mandar un tweet informativo del estado del tiempo
2. Aviar de que la añada de las cosecha de ese año ha sido excelente. Este Tweet solo
se publicará el 31 de Agosto si se cumplen las condiciones de que durante los
meses de Julio y Agosto la temperatura media sea entre 25ºC y 30ºC y la humedad
esté entre el 60%rH y el 70%rH.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
95
Figura 77: Flujo para mandar un tweet sobre la calidad del vino de ese año
6.2.2 FRONT-END
Como plantilla para el diseño de la web se ha utilizado la siguiente referencia de Bootstrap:
[48]. Para explicar la parte de cliente se va a utilizar un diagrama de navegabilidad y las
partes más destacadas del código. Hay que destacar que en cada una de las páginas hay una
barra lateral que actúa como menú desde la que se puede acceder a cualquiera de las
páginas.
6.2.2.1 Panel de Control
En esta es la página principal del proyecto en la que está el panel de control o “dashboard”.
Si se quiere acceder a todo el código, se puede encontrar en el Anexo D - Apartado D.1. En
ella destacan los siguientes elementos:
Figura 78: Casos de uso panel de control
Consultar gráficos en tiempo real
Consultar tweets
Hablar por el chat
Acceso directo a Gmail y alertas
Guardar imagen gráfica
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
96
6.2.2.1.1 Un acceso rápido a cuatro páginas
El acceso rápido es a las páginas de Gmail y a las alertas de heladas, regadío y de la
enfermedad Botrytis. Lo que se ha utilizado para dar paso a estas páginas ha sido la
siguiente parte de código: <a href="https://mail.google.com/mail/u/0/#inbox" target="_blank"> <a href="regadio.html"> <a href="heladas.html"> <a href="botrytis.html">
6.2.2.1.2 Tres gráficos en tiempo real de los sensores
Hay 3 gráficos que reciben datos cada 3 segundos de los diferentes sensores de
temperatura, humedad y luz. Se representan de una manera responsiva y dinámica sobre el
‘eje x’ (hora) y ‘eje y’ ( temperatura(ºC) / humedad(%rH) / luz(lux) ). Además se puede
obtener una captura en formato .jpg, .png, .pdf o vector de un instante determinado del
gráfico. Estos gráficos se han hecho utilizando: [49] y la api de la librería correspondiente:
[50]. Los aspectos más importantes del código son los siguientes (solo se van a mostrar los
de uno de los gráficos porque la mecánica es igual para los 3):
- Referenciar dónde se va a situar el gráfico en el código html:
<div id="graficoLuzRT" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
- Meter el código JavaScript en un archive a parte para tener todo más organizado:
<script src="../bower_components/graficosRT/dist/graficoLuzRT.js"> </script>
- Cargar todas las librerias HighCharts:
<script src="../bower_components/highCharts/dist/HighCharts.js"></script> <script src="../bower_components/highCharts/dist/HighChartsExport.js"> </script>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
97
- Recibir los datos a través de un socket definido en node-RED:
var socketaddy = "wss://iot-pruebas.eu-gb.mybluemix.net/ws/luz"; sock = new WebSocket(socketaddy); var datos; sock.onmessage = function(evt) { console.log("Websocket message", evt); datos = parseFloat(evt.data); }
- Definir dónde, cómo y el intervalo de tiempo en el que se posicionarán los datos en
la gráfica:
events: { load: function () { // set up the updating of the chart each second var series = this.series[0]; setInterval(function () { var x = (new Date()).getTime(), // current time y = datos; series.addPoint([x, y], true, true); }, 3000); } }
- Activar el campo de exporting para que podamos descargar los gráficos:
exporting: { enabled: true },
6.2.2.1.3 Un Chat
Los viticultores podrán hablar mediante un chat en tiempo real con otros que tengan su
mismo sistema instalado para consultar cosas entre ellos. Esto se consigue usando web
sockets y un formulario. El flujo ejemplo de node-RED para poder crear el chat y la
estructura para recoger los datos del formulario se han cogido de: [51]. Los aspectos más
relevantes del código son:
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
98
- Crear el formulario: <form role="form"> <fieldset> <div class="form-group"> <input id="user" class="form-control" placeholder="Usuario" autofocus> </div> <div class="form-group"> <input id="message" class="form-control" placeholder="Mensaje"> </div> <a onclick="sendMessage()" class="btn btn-lg btn-success btn-block">Enviar</a> </fieldset> </form>
- Crear el objeto WebSocket y su referencia:
var wsUri = "wss://iot-pruebas.eu-gb.mybluemix.net/ws/chat"; var ws = new WebSocket(wsUri);
- Coger los datos del usuario y el mensaje y mandarlos:
function sendMessage() { var user = document.getElementById('user'); var message = document.getElementById('message'); var payload = { message: message.value, user: user.value, ts: (new Date()).getTime() }; ws.send(JSON.stringify(payload)); message.value = ""; };
6.2.2.1.4 Un widget para ver el perfil de twitter
Como ya se sabe, servidor de Node-RED será el encargado de publicar 2 tipos de tweets
según una serie de condiciones en la cuenta de Twitter @IoT24. Estos tweets podrán ser
vistos por el viticultor desde un widget creado en el panel de control de la web. Para crear
el código del widget hay que iniciar sesión a una cuenta de Twitter y entrar en la siguiente
url: https://twitter.com/settings/widgets. A partir de ahí dar los siguientes pasos:
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
99
1. Darle a “Crear Nuevo” “Perfil”
Figura 79: Crear un Widget de Twitter (paso 1)
2. Entramos el nombre del perfil que queremos tener en nuestra web.
Figura 80: Crear un Widget de Twitter (paso 2)
3. Seleccionar “Embedded Timeline”.
Figura 81: Crear un Widget de Twitter (paso 3)
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
100
4. Copiar el código que se ha generado.
Figura 82: Crear un Widget de Twitter (paso 4)
Por lo tanto el código que queda finalmente en el caso de este proyecto es:
<a class="twitter-timeline" data-lang="es" data-height="400" href="https://twitter.com/IoT24">Tweets by IoT24</a> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
6.2.2.2 El tiempo
En esta página el viticultor puede consultar la predicción del tiempo mediante un widget de
“The Weather Network”. Se obtiene el código rellenando el formulario de la siguiente
página: https://www.theweathernetwork.com/weather-widget . Se ha utilizado este widget
porque era el único que nos daba una seguridad de https que es la única que admite nuestro
proyecto. Si se quiere acceder a todo el código, se puede encontrar en el Anexo D -
Apartado D.2.
Figura 83: Casos de uso página del tiempo
Consultar el tiempo
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
101
El código resultante en el caso de este proyecto es:
<div id="plemx-root"></div> <a href="http://www.theweathernetwork.com">The Weather Network</a> <script type="text/javascript"> var _plm = _plm || []; _plm.push(['_btn', 34791]); _plm.push(['_loc','esmx0001']); _plm.push(['location', document.location.host ]); (function(d,e,i) { if (d.getElementById(i)) return; var px = d.createElement(e); px.type = 'text/javascript'; px.async = true; px.id = i; px.src = ('https:' == d.location.protocol ? 'https:' : 'http:') + '//widget.twnmm.com/js/btn/pelm.js?orig=en_ca'; var s = d.getElementsByTagName('script')[0]; var py = d.createElement('link'); py.rel = 'stylesheet' py.href = ('https:' == d.location.protocol ? 'https:' : 'http:') + '//widget.twnmm.com/styles/btn/styles.css' s.parentNode.insertBefore(px, s); s.parentNode.insertBefore(py, s); })(document, 'script', 'plmxbtn'); </script>
6.2.2.3 Calendario del cuidado de los viñedos
Esta es una página estática en la que se muestra una imagen creada específicamente para
este proyecto del calendario del ciclo de vida de los viñedos. Se ha sacado la información
de la siguiente referencia: [52]. Si se quiere acceder a todo el código, se puede encontrar en
el Anexo d - Apartado D.3.
Figura 84: Casos de uso página del calendario
Para insertar la imagen se ha usado el siguiente código:
<img src="../images/calendario.jpg" alt="img" style="width:100%;height:100%;">
Consultar el calendario
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
102
6.2.2.4 Búsqueda en el Histórico
En esta página el viticultor podrá consultar los datos de los registros de los sensores que
están guardados en la base de datos según unos parámetros introducidos. Si se quiere
acceder a todo el código, se puede encontrar en el Anexo D - Apartado D.4.
Figura 85: Casos de uso de la página del histórico
Por lo tanto las claves del código son las siguientes:
- El formulario por el que se recogen los datos:
<form role="form"> <fieldset> <div class="form-group"> <input id="date" class="form-control" placeholder="Fecha" autofocus> </div> <div class="form-group"> <input id="temp" class="form-control" placeholder="Temperatura"> </div> <div class="form-group"> <input id="hum" class="form-control" placeholder="Humedad"> </div> <div class="form-group"> <input id="light" class="form-control" placeholder="Luz"> </div> <a onclick="javascript:return mostrarLista();" class="btn btn-lg btn- success btn-block">Filtrar</a> </br><div id="errorMensaje"></div> </fieldset> </form>
Buscar en el histórico
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
103
- El espacio en el que se va a formar la tabla responsiva:
<div class="panel-body" id="inner1"> <div class="inner3"></div> </div>
- Activar para que la tabla sea responsiva:
<script> $(document).ready(function() { $('#dataTables-example').DataTable({ responsive: true }); }); </script>
- Crear una función en JavaScript para saber seleccionar la url que le vamos a
mandar a la peticiónJSON según los datos introducidos:
function mostrarLista() { var date= document.getElementById("date").value; var temp= document.getElementById("temp").value; var hum= document.getElementById("hum").value; var light= document.getElementById("light").value; if(date && temp && hum && light) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?date=" + date + "&temp=" + temp + "&hum=" + hum + "&light=" + light; peticionJSON(url); return true; }else if(date && temp && hum) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?date=" + date + "&temp=" + temp + "&hum=" + hum; peticionJSON(url); return true; }else if(date && temp && light) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?date=" + date + "&temp=" + temp + "&light=" + light; peticionJSON(url); return true; }else if(date && hum && light) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?date=" +
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
104
date + "&hum=" + hum + "&light=" + light; peticionJSON(url); return true; }else if(temp && hum && light) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?temp=" + temp + "&hum=" + hum + "&light=" + light; peticionJSON(url); return true; }else if(date && temp) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?date=" + date + "&temp=" + temp; peticionJSON(url); return true; }else if(date && hum) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?date=" + date + "&hum=" + hum; peticionJSON(url); return true; }else if(date && light) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?date=" + date + "&light=" + light; peticionJSON(url); return true; }else if(temp && hum) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?temp=" + temp + "&hum=" + hum; peticionJSON(url); return true; }else if(temp && light) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?temp=" + temp + "&light=" + light; peticionJSON(url); return true; }else if(hum && light) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?hum=" + hum + "&light=" + light; peticionJSON(url); return true; }else if(date) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?date=" + date; peticionJSON(url); return true; }else if(temp) {
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
105
url="https://iot-pruebas.eu-gb.mybluemix.net/datos?temp=" + temp; peticionJSON(url); return true; }else if(hum) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?hum=" + hum; peticionJSON(url); return true; }else if(light) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?light=" + light; peticionJSON(url); return true; }else{ document.getElementById("errorMensaje").style.display = 'block'; document.getElementById("errorMensaje").innerHTML = "Debe rellenar al menos uno de los campos"; return false; } }
- Crear una función JavaScript para hacer una petición JSON cada vez que se pulse
el botón de filtrar y cree una nueva tabla cada vez con sus correspondientes datos
en el sitio que se indique (esto último se hace usando el comando append de Jquery
[53]):
function peticionJSON(url) { document.getElementById("errorMensaje").style.display = 'none'; var xmlHttpReq = new XMLHttpRequest(); xmlHttpReq.onreadystatechange=function() { if (xmlHttpReq.readyState == 4 && xmlHttpReq.status==200) { $( "#inner1" ).empty(); $( ".inner2" ).empty(); $( ".inner3" ).empty(); var apptext1 ="<div class='dataTable_wrapper'><table class='table table-striped table-bordered table- hover' id='dataTables-example'><thead><tr><th>Id Sensor</th><th>Fecha</th><th>Temperatura</th> <th>Humedad</th><th>Luz</th></tr></thead> <tbody class='inner2'>"; $( "#inner1" ).append(apptext1);
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
106
var objetoJSON = eval("(" + xmlHttpReq.responseText + ")"); for(i = 0; i < objetoJSON.length; i++) { var id = objetoJSON[i].d.magX; var date = objetoJSON[i].d.objectTemp; var res = date.split("T"); var fecha = res[0]; var temp = objetoJSON[i].d.ambientTemp; var hum = objetoJSON[i].d.humidity; var luz = objetoJSON[i].d.light; var apptext2 = "<tr><td>" + id + "</td><td>" + fecha + "</td><td>" + temp + " </td><td class='center'> " + hum + "</td><td class='center'> " + luz + "</td></tr>"; $( ".inner2" ).append(apptext2); } var apptext3 = "</tbody></table></div>"; $( ".inner3" ).append(apptext3); $('#dataTables-example').DataTable({ responsive: true }); } } xmlHttpReq.open('GET', url, true); xmlHttpReq.send(); }
6.2.2.5 Alertas
En estas 4 páginas (alertas de heladas, regadío, enfermedades y retraso de poda) la
estructura es la misma y lo único que cambia es la referencia de la base de datos de la que
se cogen los datos, así que solo se explicará la parte del código correspondiente a
heladas.html. Si se quiere acceder a todo el código, se puede encontrar en el Anexo D –
Apartados: D.5 / D.6 / D.7 / D.8.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
107
Figura 86: Casos de uso de las alertas
Los aspectos más importantes del código son:
- El código HTML para que se establezcan las alertas en un sitio determinado de la
página:
<div class="row"> <div class="inner"></div> </div>
- El código HTML para que se carguen las alertas en la página haciendo referencia a
una petición JSON:
<body onload="peticionJSON()">
- El código JavaScript de la petición JSON, para cada uno de los objetos recibidos, se
recorre el array de objetos y se seleccionan los que nos interese mostrar en la tabla;
además la url hace referencia a la http request que se va a hacer en al Node-RED
para coger la response que se va a hacer después de pasar por la base de datos:
Consultar alertas de heladas
Consultar alertas de regadío
Consultar alertas de poda
Consultar alertas de botrytis
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
108
function peticionJSON() { var url="https://iot-pruebas.eu-gb.mybluemix.net/infoHeladas"; var xmlHttpReq = new XMLHttpRequest(); xmlHttpReq.onreadystatechange=function() { if (xmlHttpReq.readyState == 4 && xmlHttpReq.status==200) { $( ".inner" ).empty(); var objetoJSON = eval("(" + xmlHttpReq.responseText + ")"); for(i = 0; i < objetoJSON.length; i++) { var pl = objetoJSON[i].payload; var apptext = "<div class='col-lg-4'><div class='panel panel-info'><div class='panel-heading'>Alerta Helada</div><div class='panel-body'>" + pl + "</div></div></div>"; $( ".inner" ).append(apptext); } } } xmlHttpReq.open('GET', url, true); xmlHttpReq.send(); }
6.2.2.6 Autenticación
Esta parte del cliente estará en la aplicación NodeApp y servirá como interfaz para acceder
al servidor de autenticación previamente explicado. La parte más importante del código y
la esencial es la del formulario que veremos detallada a continuación.
Figura 87: Diagrama de secuencia Login
app.js viniothome24.html
auth(user,pws) OK - redirect accesoDenegado
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
109
Si se quiere acceder a todo el código, se puede encontrar en el Anexo D – Apartado D.9.
<form action="/auth" method="GET"> <fieldset> <div class="form-group"> <input type="text" name="email" class="form-control" placeholder="E-mail" autofocus> </div> <div class="form-group"> <input type="password" name="password" class="form-control" placeholder="Password"> </div> <input type="submit" value="Entrar" id="btnReg" class="btn btn-lg btn-success btn-block"/> </fieldset> </form>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
DESARROLLO DE LA SOLUCIÓN IOT: VINIOT
110
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANÁLISIS DE RESULTADOS
111
Capítulo 7. ANÁLISIS DE RESULTADOS
Puesto que en el capítulo anterior ya se ha mostrado todo el proceso del desarrollo del
prototipo realizado gracias a la investigación previa de la plataforma que se ha descrito en
el Capítulo 5, en éste capítulo se describirá a groso modo el resultado visual de las partes
más importantes de la web que son: el panel de control, la búsqueda en el histórico, la
consulta del tiempo y la consulta de alertas.
7.1 RESULTADO GRÁFICO DE LA PÁGINA DEL TIEMPO
Figura 88: Resultado gráfico de las consultas del tiempo
Esta página cubre uno de los requisitos que se describieron al principio del Capítulo 6 que
era el de tener acceso directo a las previsiones del tiempo. Con este widget de “The
Weather Network” se satisface esta necesidad.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANÁLISIS DE RESULTADOS
112
7.2 RESULTADO GRÁFICO DE LA PÁGINA DEL PANEL DE CONTROL
Figura 89: Resultado gráfico del panel de control
Como se ha podido ver anteriormente en los casos de uso del panel de control (Figura 78),
el viticultor tiene acceso a: ver los gráficos de la información que están recolectando los
sensores en tiempo real, descargarse las imágenes de los gráficos en cualquier instante
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANÁLISIS DE RESULTADOS
113
(formatos .jpg, .png, .pdf, vector), acceder al chat pata hablar con los viticultores que
también tengan este sistema contratado y acceder al acceso directo del Gmail y las alertas.
7.3 RESULTADO GRÁFICO DE LA PÁGINA DE LOS DATOS
HISTÓRICOS
Figura 90: Resultado gráfico de las búsquedas en el histórico
En esta sección el viticultor puede acceder rápidamente y de una manera muy cómoda y
ordenada a todos los datos recogidos por el sensor y filtrar los datos según los parámetros
que el elija.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANÁLISIS DE RESULTADOS
114
7.4 RESULTADO GRÁFICO DE UNA DE LAS PÁGINAS DE ALERTAS
Figura 91: Resultado gráfico de las alertas de heladas
Puesto que las páginas de alertas tienen la misma estructura solo se muestra una de ellas, la
de las heladas. En este caso se recuerda que la alerta de las heladas solo salta cuando la
temperatura es inferior a 1ºC. Estas alertas también se reciben en el Gmail en tiempo real,
pero este panel sirve para siempre tenerlas a mano como consulta en cualquier momento.
Se recuerdan aquí las condiciones para que salten las alertas:
1. Cuando se vayan a producir heladas:
a. Temperatura < 1ºC
2. Cuando la tierra necesite regarse:
a. Humedad relativa < 40%
b. Temperatura > 30ºC
3. Cuando haya riesgo de enfermedades fúngicas:
a. Humedad relativa > 80%
b. 15ºC < Temperatura < 20ºC
c. Luz < 100 lux
4. Cuando se deba retrasar la poda 10 días a mediados de Enero:
a) Media del 1-15 Enero de la temperatura < 4ºC
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
CONCLUSIONES Y TRABAJOS FUTUROS
115
Capítulo 8. CONCLUSIONES Y TRABAJOS FUTUROS
8.1 CONCLUSIONES
Como ya se dijo al comienzo de esta memoria, las Plataformas IoT están ahora mismo en
el “Innovation Trigger”. Están empezando a tener presencia en el mercado, todavía no
están del todo asentadas en el mundo empresarial. Esta noticia convierte al proyecto en
uno de los más innovadores que pueden encontrarse en este momento porque todavía no se
ha experimentado con todo el potencial que pueden llegar a dar las plataformas IoT.
Lo anterior se ha visto claramente reflejado cuando se trataba con la plataforma de
Bluemix; puesto que no todo han sido ventajas como se expresaba al principio antes de
haber tenido la oportunidad de desarrollar un proyecto IoT en la nube. Estas son algunas de
las apreciaciones que he podido observar durante la fase de investigación:
• Al principio trabajar en la nube puede ser algo confuso porque no se está
acostumbrado a este tipo de entornos. El entorno del repositorio que usa Bluemix,
GitHub personalizado, no es muy intuitivo y es muy lento a la hora de compilar el
código. Además, no te da acceso al servidor Node.js que usa Node-RED; solo
puedes hacer cambios mediante la ventana de comandos o con la interfaz gráfica
que tiene. Debido a esto, hacer una copia de seguridad de los flujos creados no se
puede a no ser de que lo hagas manualmente exportando los gráficos. Esto es
importante mencionar porque durante la fase de investigación se borraron todos los
flujos con los que se estaba trabajando de un día para otro y a partir de entonces ya
se empezaron a hacer copias de seguridad manuales exportando los flujos en
formato JSON.
• Como la tecnología tiene apenas unos años, la información que se puede recolectar
de internet acerca de la plataforma es escasa o está anticuada, porque ahora mismo
la plataforma evoluciona muy rápidamente. Por ejemplo, se pudo apreciar un
cambio en la interfaz gráfica de Bluemix a mitad del desarrollo. Cabe que destacar
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
CONCLUSIONES Y TRABAJOS FUTUROS
116
que los servicios técnicos y de consulta de IBM son muy cordiales, pero ni siquiera
ellos tienen muy claro cómo solucionar alguna de las preguntas que se plantearon o,
simplemente te decían que no se podía hacer (cuando luego sí que se consiguió
hacerlo gracias al gran trabajo de investigación realizado).
• Varias veces se tuvo que parar el desarrollo debido a que los servidores físicos en
Gran Bretaña estaban en reparación. Esto ocasionó un poco de retraso en el
proyecto en cierta fase, pero luego se recuperó el tiempo trabajando más horas.
• El entorno gráfico de desarrollo de Node-RED tiene un grandísimo potencial
gracias a la forma tan intuitiva que proporciona para poder programar y gracias a la
posibilidad de poder configurar otro tipo de nodos uno mismo para luego
integrarlos en la plataforma. Además, los nodos y flujos que se realizan pueden
subirse a su propio repositorio, por lo que se pueden encontrar varios casos ejemplo
que ayudan sobre todo al principio del estudio.
• Una de las cosas que se han echado en falta ha sido la posibilidad de poder migrar
toda la aplicación a la cuenta de Bluemix de mi director de proyecto para que todo
el proyecto completo, incluidos todos sus servicios perduraran en el tiempo. Al
final se ha tenido que hacer una copia individual de los flujos de Node-RED y
extraer la aplicación del repositorio de GitHub en un zip para meterlo en un drive
aparte.
• La cantidad de posibilidades que ofrece Bluemix a través de su catálogo sí que
proporciona una gran ventaja al desarrollador porque le facilita enormemente el
trabajo en alguno de los casos cuando se dominan los servicios correctamente.
Por último, hay que mencionar que todos los objetivos marcados en un principio se han
cumplido satisfactoriamente a pesar de alguna de las complicaciones previamente
mencionadas.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
CONCLUSIONES Y TRABAJOS FUTUROS
117
8.2 TRABAJOS FUTUROS
Este proyecto tiene una gran proyección a futuro y el prototipo desarrollado es la primera
versión a partir de la cual empezar a evolucionar el sistema. Este ha sido solo el primer
paso para poder construir una red de sensores distribuidos por todo el campo de viñedos.
Se ha desarrollado el prototipo usando un solo sensor, pero habría que ampliar esto para
una distribución uniforme de los sensores a distintos niveles para completar el desarrollo.
Además, se deberían de buscar otros sensores más específicos para la agricultura que
existen en el mercado porque el SensorTag solo ha servido para investigación.
También se podría ampliar la sección de alertas al viticultor y añadirle un servicio de
Twilo para que las alertas llegas en forma de sms en vez de al email. Este servicio no se
utilizó en este desarrollo porque el servicio de sms era de pago. No solo la sección de
alertas sino también se podría usar la base del desarrollo para ampliar el sistema a otro tipo
de cultivos que no sean solo los viñedos.
Otra posibilidad de ampliación del proyecto es la de crear una macro infraestructura de
regadío para que se gestione automáticamente en función de las predicciones del tiempo y
de los datos de los sensores de temperatura y humedad de los huertos. Con esto se podrán
prevenir por ejemplo las heladas o que los cultivos sufran por falta de agua, además el
ahorro de agua podría llegar a ser de hasta un 40% [54].
Por último, el uso de drones en la agricultura se está volviendo más y más popular estos
años. Con ellos se podría desarrollar un servicio de control de enfermedades avanzado,
implantándoles sensores RGB-D y ciertos algoritmos matemáticos. Además, los sensores
infrarrojos podrían escanear los viñedos y analizar la producción que va a haber por la
cantidad de hojas que tiene la planta y el nivel de fotosíntesis que va a poder llegar a
realizar.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
CONCLUSIONES Y TRABAJOS FUTUROS
118
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
BIBLIOGRAFÍA
119
Capítulo 9. BIBLIOGRAFÍA
[1] E. P. Díaz, «Tendencias en tecnologías y servicios alrededor de las
telecomunicaciones: Las smart cities como caso práctico,» de Definición IoT,
Madrid, 2016.
[2] R. da Silva, «Big Data & Analytics in IBM Bluuemix: Twitter, dashDB and DevOps
demo,» Agosto 2015. [En línea]. Available:
https://www.youtube.com/watch?v=DV4iHUBJx-U.
[3] H. Levy, «Understand where technologies sit in the cycle of maturity for their
relevance to your organization,» Gartner, 20 Obtubre 2015. [En línea]. Available:
http://www.gartner.com/smarterwithgartner/whats-new-in-gartners-hype-cycle-for-
emerging-technologies-2015/.
[4] A. Velosa, Y. V. Natis, M. Pezzini, B. J. Lheureux y E. Goodness, «Market Guide
for IoT Platforms,» Gartner, 2 Julio 2015. [En línea]. Available:
https://www.gartner.com/doc/3086918/market-guide-iot-platforms.
[5] «IBM Bluemix,» IBM, [En línea]. Available: https://console.ng.bluemix.net/.
[6] «SaaS, IaaS y PaaS: Las tres clases de Cloud Computing,» NubeBlog, Octubre
2008. [En línea]. Available: http://nubeblog.com/2008/10/15/saas-iaas-y-paas-las-
tres-clases-de-cloud-computing/.
[7] «IBM Internet of Things Foundation,» IBM, [En línea]. Available:
https://internetofthings.ibmcloud.com/?cm_mc_uid=15884981095314478854401&c
m_mc_sid_50200000=1448286895#/.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
BIBLIOGRAFÍA
120
[8] «Multi-standard SensorTag,» Texas Instruments, [En línea]. Available:
http://www.ti.com/ww/en/wireless_connectivity/sensortag2015/tearDown.html.
[9] Anónimo, «Bluetooth de baja energía,» Wikipedia, 2016. [En línea]. Available:
https://es.wikipedia.org/wiki/Bluetooth_de_baja_energ%C3%ADa.
[10] «Watson Internet of Things on Bluemix,» IBM, [En línea]. Available:
http://www.ibm.com/cloud-computing/bluemix/internet-of-things/.
[11] «MQTT,» TST, [En línea]. Available: http://www.tst-sistemas.es/mqtt/.
[12] V. Kuma, «The future of flying robots,» Conferencia TedsPenn, Junio 2015. [En
línea]. Available: https://www.youtube.com/watch?v=sj3Pn_pogXw.
[13] «Agricultura Inteligente,» IoTSimple, [En línea]. Available:
http://www.iotsimple.com/agricultura-inteligente/.
[14] A. Bielsa, «Smart Agriculture project in Galicia to monitor vineyards with
Waspmote,» Siega System del Grupo Austen & Libelium, Junio 2012. [En línea].
Available:
http://www.libelium.com/smart_agriculture_vineyard_sensors_waspmote/.
[15] «Sensores en las viñas de Suiza para predecir plagas,» Libelium, Octubre 2015. [En
línea]. Available: http://www.libelium.com/elmundo-es-sensores-en-las-vinas-de-
suiza-para-predecir-plagas/#!prettyPhoto.
[16] M. Labín, «A las puertas de la revolución del Internet de las Cosas,» Expansión,
Octubre 2015. [En línea]. Available: http://www.expansion.com/economia-
digital/innovacion/2015/10/29/563273c346163ff55c8b458e.html.
[17] Intel, «Enólogos catan los viñedos inteligentes del último programa piloto de IoT de
Intel,» [En línea]. Available: http://www.intel.es/content/www/es/es/it-
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
BIBLIOGRAFÍA
121
managers/intel-smart-vineyards.html.
[18] B. Guillén, «Seis aplicaciones robóticas que no conocías,» El País, Febrero 2016.
[En línea]. Available:
http://tecnologia.elpais.com/tecnologia/2016/01/29/actualidad/1454083353_665619.
html.
[19] A. Muñoz Moral, «España, país con más terreno dedicado al cultivo de la vid,»
Licores Reyes, Abril 2015. [En línea]. Available: http://licoresreyes.es/espana-pais-
con-mas-terreno-dedicado-al-cultivo-de-la-vid/.
[20] S. Gutiérrez, «Inversores extranjeros irrumpen con fuerza en las bodegas de Ribera
del Duero,» El Norte de Castilla, Obtubre 2014. [En línea]. Available:
http://www.elnortedecastilla.es/castillayleon/201410/13/inversores-extranjeros-
irrumpen-fuerza-20141012110731.html.
[21] K. Roberts, «IoT y BPM en la Agricultura Inteligente,» Aura Portal, Mayo 2015.
[En línea]. Available: http://blog.auraportal.com/es/iot-y-bpm-en-la-agricultura-
inteligente/.
[22] Vinetur, «La monitorización de viñedos provocará una producción de gran calidad
en 2015,» 21 Julio 2015. [En línea]. Available:
https://www.vinetur.com/2015072120304/la-monitorizacion-de-vinedos-provocara-
una-produccion-de-gran-calidad-en-2015.html.
[23] «Qué es Scrum,» Proyectos Ágiles, [En línea]. Available:
http://proyectosagiles.org/que-es-scrum/.
[24] IBM, «Email generado automáticamente por IBM en el que te muestran sus
servicios de ayuda,» Madrid, 2016.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
BIBLIOGRAFÍA
122
[25] Wikipedia, «Proceso para el desarrollo de software,» Julio 2016. [En línea].
Available:
https://es.wikipedia.org/wiki/Proceso_para_el_desarrollo_de_software#Planificaci.C
3.B3n.
[26] A. C. B. d. León, «Las Actividades de la Gestion de Proyectos,» Escuela de
Organización Industrial, 31 Enero 2012. [En línea]. Available:
http://www.eoi.es/blogs/awildacarolinaberiguete/2012/01/31/las-actividades-de-la-
gestion-de-proyectos/.
[27] «Spinmedia,» [En línea]. Available: http://spinmedia.es/.
[28] IBM, «Tarifas Bluemix,» [En línea]. Available: https://console.eu-
gb.bluemix.net/pricing/.
[29] T. Instruments, «IoT made easy,» [En línea]. Available:
http://www.ti.com/ww/en/wireless_connectivity/sensortag2015/?INTC=SensorTag
&HQS=sensortag.
[30] «Conceptos,» IBM Internet of Things Foundation, [En línea]. Available:
https://docs.internetofthings.ibmcloud.com/es/reference/concepts.html.
[31] rdmonk, «CC2650 SimpleLink™ Bluetooth® Smart BLE SensorTag,» Recipies -
IBM developerWorks, 9 Marzo 2015. [En línea]. Available:
https://developer.ibm.com/recipes/tutorials/connect-a-cc2650-sensortag-to-the-iot-
foundations-quickstart/.
[32] C. Mobberly, «What is Node-Red?,» Adafruit, [En línea]. Available:
https://learn.adafruit.com/raspberry-pi-hosting-node-red/what-is-node-red.
[33] «Node-RED,» Node-RED ORG, [En línea]. Available: http://nodered.org/.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
BIBLIOGRAFÍA
123
[34] Roberto, «Node RED Programming Guide - Lecture 4,» Octubre 2015. [En línea].
Available: http://noderedguide.com/index.php/2015/10/05/node-red-lecture-4-a-
tour-of-the-core-nodes/.
[35] «Inforación de Node-RED en la aplicación,» [En línea]. Available: http://iot-
pruebas.eu-gb.mybluemix.net/red/#.
[36] R. Lea y R. , «Node RED Programming Guide,» STS Developers, [En línea].
Available: http://noderedguide.com/.
[37] R. Lea, «A second flow: weather alerts,» STS Developers, 28 Octubre 2015. [En
línea]. Available: http://noderedguide.com/index.php/2015/10/28/node-red-lecture-
2-building-your-first-flows-15/.
[38] T. Pascoal, «Adding custom nodes to Node-RED in Bluemix,» YouTube, 26 Agosto
2014. [En línea]. Available: https://www.youtube.com/watch?v=HckTiCrEtsI.
[39] «node-red-node-openweathermap,» Node-RED, Octubre 2015. [En línea].
Available: http://flows.nodered.org/node/node-red-node-openweathermap.
[40] Node-RED, «node-red-node-smooth 0.0.8,» Junio 2016. [En línea]. Available:
http://flows.nodered.org/node/node-red-node-smooth.
[41] I. Cloudant, «Search Indexes,» [En línea]. Available: https://cloudant.com/for-
developers/search/.
[42] IBM, «IBM Cloudant Documentation,» [En línea]. Available:
https://docs.cloudant.com/creating_views.html#indexes.
[43] F. Node.js, «Express,» [En línea]. Available:
http://expressjs.com/es/guide/routing.html.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
BIBLIOGRAFÍA
124
[44] R. Interempresas, «Tecnologías inalámbricas para seguir el viñedo en tiempo real,»
15 Noviembre 2010. [En línea]. Available:
http://www.interempresas.net/Vitivinicola/Articulos/45028-Tecnologias-
inalambricas-para-seguir-el-vinedo-en-tiempo-real.html.
[45] P. B. Sáez, «Insolación, Pluviometría, Viento y Humedad Relativa en el Viñedo,»
11 Diciembre 2010. [En línea]. Available:
http://urbinavinos.blogspot.com.es/2010/12/insolacion-pluviometria-viento-y.html.
[46] P. B. Sáez, «Epocas de Poda en el Viñedo,» 27 Abril 2011. [En línea]. Available:
http://urbinavinos.blogspot.com.es/2011/04/epocas-de-poda-en-el-vinedo.html.
[47] Wikipedia, «Cliente-servidor,» 28 Junio 2016. [En línea]. Available:
https://es.wikipedia.org/wiki/Cliente-servidor.
[48] S. Bootstrap, «SB Admin 2,» [En línea]. Available:
http://startbootstrap.com/template-overviews/sb-admin-2/.
[49] HighCharts, «Highcharts Demos › Spline updating each second,» 2016. [En línea].
Available: http://www.highcharts.com/demo/dynamic-update.
[50] HighCharts, «CONFIGURATION OPTIONS,» 2016. [En línea]. Available:
http://api.highcharts.com/highcharts#Axis.
[51] L. Gustavo Ferraz y B. Steinfeld, «Build a real-time chat app with Node-RED in 5
minutes,» 8 Agosto 2014. [En línea]. Available:
http://www.ibm.com/developerworks/cloud/library/cl-rtchat-app/index.html.
[52] Victor, «De la cepa a la Botella,» Abril 2015. [En línea]. Available:
https://delacepaalabotella.wordpress.com/2015/04/01/calendario-de-trabajos-en-el-
campo-de-vina/.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
BIBLIOGRAFÍA
125
[53] W. Schools, «jQuery append() Method,» [En línea]. Available:
http://www.w3schools.com/jquery/html_append.asp.
[54] D. Loctier, «El riego inteligente ahorra un 40% de agua,» 14 Marzo 2012. [En
línea]. Available: http://es.euronews.com/2012/03/14/el-riego-inteligente-ahorra-un-
40-por-ciento-de-agua/.
[55] sbuser, «Error on sending e-mail by using e-mail node on Node-RED,» IBM
developerWorks, 27 Julio 2015. [En línea]. Available:
https://developer.ibm.com/answers/questions/176998/error-on-sending-e-mail-by-
using-e-mail-node-on-no.html.
[56] E. Sanz, «¿Qué es el "Internet de las cosas"?,» Muy Interesante, 2015. [En línea].
Available: http://www.muyinteresante.es/curiosidades/preguntas-respuestas/ique-es-
el-qinternet-de-las-cosasq.
[57] J. C. López López, «La moda del Big Data: ¿En qué consiste en realidad?,» El
Economista, 27 Febrero 2014. [En línea]. Available:
http://www.eleconomista.es/tecnologia/noticias/5578707/02/14/La-moda-del-Big-
Data-En-que-consiste-en-realidad.html.
[58] F. Alfaro, «Big Data y IoT,» Madrid, 2016.
[59] Anónimo, «Computación en la nube,» Wikipedia, [En línea]. Available:
https://es.wikipedia.org/wiki/Computaci%C3%B3n_en_la_nube.
[60] Á. Gutiérrez, «¿Qué es la nube?,» About en Español, Junio 2015. [En línea].
Available: http://windowsespanol.about.com/od/AccesoriosYProgramas/f/Qu-E-Es-
La-Computaci-On-En-La-Nube.htm.
[61] «¿Qué es PaaS?,» InterRoute, [En línea]. Available: http://www.interoute.es/what-
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
BIBLIOGRAFÍA
126
paas.
[62] L. M. García, «¿Qué es MQTT?,» Un poco de Java, 6 Diciembre 2012. [En línea].
Available: https://unpocodejava.wordpress.com/2012/12/06/que-es-mqtt/.
[63] «¿Qué es BlueMix de IBM?,» Sitio Enterprise, 12 Mayo 2015. [En línea].
Available: http://empresas.itsitio.com/que-es-bluemix-de-ibm/.
[64] Brayan_Rod, «Gateway (Comunicaciones & Redes),» BlogSpot, 5 Septiembre
2009. [En línea]. Available: http://dunamis17-gateway.blogspot.com.es/.
[65] J. Pérez Porto y A. Gardey, «Definición de HTML,» 2012. [En línea]. Available:
http://definicion.de/html/.
[66] W. Schools, «HTML(5) Tutorial,» [En línea]. Available:
http://www.w3schools.com/html/default.asp.
[67] U. d. Valencia, «JavaScript y Java,» [En línea]. Available:
https://www.uv.es/jac/guia/jscript/javascr01.htm.
[68] «JavaScript,» Wikipedia, 2016 Julio 2016. [En línea]. Available:
https://es.wikipedia.org/wiki/JavaScript.
[69] W3Schools, «JavaScript Tutorial,» [En línea]. Available:
http://www.w3schools.com/Js/.
[70] M. Abernethy, «¿Simplemente qué es Node.js?,» IBM, 14 Junio 2011. [En línea].
Available: https://www.ibm.com/developerworks/ssa/opensource/library/os-nodejs/.
[71] «JSON,» Wikipedia, 2016. [En línea]. Available:
https://es.wikipedia.org/wiki/JSON.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
BIBLIOGRAFÍA
127
[72] «JavaScript round() Method,» w3schools, [En línea]. Available:
http://www.w3schools.com/jsref/jsref_round.asp.
[73] «JavaScript Date Reference,» w3Schools, [En línea]. Available:
http://www.w3schools.com/jsref/jsref_obj_date.asp.
[74] N. O'Leary, «Make Context a more widely available concept,» GitHub, 16 Febrero
2015. [En línea]. Available: https://github.com/node-red/node-red/issues/567.
[75] B. Balfe, “Searching a Cloudant DB search index with Node-Red,” 23 Octubre
2015. [Online]. Available: https://blog.balfes.net/2015/10/23/searching-a-cloudant-
db-search-index-with-node-red/.
[76] D. Loctier, «El riego inteligente ahorra un 40% de agua,» EuroNews, 14 Marzo
2012. [En línea]. Available: http://es.euronews.com/2012/03/14/el-riego-inteligente-
ahorra-un-40-por-ciento-de-agua/.
[77] «El laboratorio del Big Data de Intel agiliza el desarrollo de las ciudades
inteligentes, la agricultura conectada y la asistencia sanitaria personalizada,» Intel,
[En línea]. Available: http://www.intel.es/content/www/es/es/it-managers/european-
big-data-lab.html.
[78] «ZigBee Alliance,» 2016. [En línea]. Available: http://www.zigbee.org.
[79] «Wi-Fi Alliance,» 2016. [En línea]. Available: http://www.wi-fi.org/.
[80] «Temas Tecnológicos,» [En línea]. Available:
http://www.temastecnologicos.com/redes-moviles.html.
[81] A. Savvas, «“Farming industry must embrace the Internet of Things to grow enough
food”,» Techworld, [En línea]. Available: http://www.techworld.com/news/big-
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
BIBLIOGRAFÍA
128
data/farming-industry-must-embrace-internet-of-things-3596905/.
[82] «Entendiendo la nube: el significado de SaaS, PaaS y IaaS,» Genbeta, 31 Agosto
2012. [En línea]. Available: http://www.genbetadev.com/programacion-en-la-
nube/entendiendo-la-nube-el-significado-de-saas-paas-y-iaas.
[83] «Cree, despliegue, gestione sus aplicaciones en cloud,» IBM, [En línea]. Available:
http://www.ibm.com/cloud-computing/bluemix/es-es/.
[84] «MQTT org,» [En línea]. Available: http://mqtt.org/.
[85] J. Y. T. M. I.-Y. A. S.-C. C. J. K. Minwoo Ryu, «Design and Implementation of a
Connected Farm for Smart Farming System,» IEEE 2015, 2015 Noviembre 1-4. [En
línea]. Available:
http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=7370624&tag=1.
[86] P. Tripicchio, «Towards Smart Farming and Sustainable Agriculture with Drones,»
IEEE 2015, 15-17 Julio 2015. [En línea]. Available:
http://ieeexplore.ieee.org/xpl/articleDetails.jsp?reload=true&arnumber=7194284&p
unumber%3D7194253%26filter%3DAND(p_IS_Number%3A7194254)%26pageNu
mber%3D2.
[87] M. P. V. W. Tejas Bhosale, «A smart farming alternative for small Pomegranate
farms of India,» IEEE 2015, 2-4 Abril 2015. [En línea]. Available:
http://ieeexplore.ieee.org/xpl/articleDetails.jsp?reload=true&arnumber=7322543.
[88] P. Herrero, «La importancia de la visión “end to end” en la empresa,» Sage
Experience, 13 Septiembre 2012. [En línea]. Available:
http://blog.sage.es/economia-empresa/la-importancia-de-la-vision-
%E2%80%9Cend-to-end%E2%80%9D-en-la-empresa/.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
BIBLIOGRAFÍA
129
[89] F. M. G. J. A. M. L. C. P. C. B. Diego Fabian Pajarito Grajales, «Crop-planning,
making smarter agriculture with climate data,» IEEE 2015, 20.24 Julio 2015. [En
línea]. Available:
http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=7248124&tag=1.
[90] «eBee,» senseFly, [En línea]. Available:
https://www.sensefly.com/drones/ebee.html.
[91] R. B. S. P. N. V. G. B. T. G. Sudhir Rao Rupanagudi, «A Novel Cloud Computing
based Smart Farming System for Early Detection of Borer Insects in Tomatoes,» 15-
17 Enero 2015. [En línea]. Available:
http://ieeexplore.ieee.org/xpl/articleDetails.jsp?tp=&arnumber=7045722.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
BIBLIOGRAFÍA
130
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO A
131
ANEXO A
APARTADO A.1 - CONECTAR EL SENSORTAG A LA NUBE
1. Se conecta el Bluetooth del Smartphone, se abre la aplicación, se enciende el sensor
y se le da a “IoT_Sensor_ICAI(SensorTag 2.0)”.
Figura 92: Conectar el SensorTag a la Nube (paso 1)
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO A
132
2. Se le da a “Sensor View”
3. Se activa el “Push to cloud”. Para ver el Device ID se le da a “Cloud View”,
después se pueden ver los datos configurados del sensor.
Figura 94: Conectar el SensorTag a la Nube (paso 3)
Figura 93: Conectar el SensorTag a la Nube (paso 2)
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO A
133
APARTADO A.2 – COSAS QUE HACER PARA QUE SE PUEDAN RECIBIR
EMAILS DEL SISTEMA IOT
1. La contraseña del Gmail debe ser de 8 caracteres [54].
2. El servidor y el puerto deben ser los siguientes para conectar con Gmail [54]:
Servidor: smtp.gmail.com
Puerto: 465
3. Activar el “Acceso de aplicaciones menos seguras” siguiendo los siguientes pasos:
3.1. Entrar en el Gmail y darle a “Mi Cuenta”.
3.2. Darle a “Aplicaciones y sitios conectados a tu cuenta”.
Figura 96: Activar el “Acceso de aplicaciones menos seguras (paso 2)”
3.3. Activar el “Permitir el acceso de aplicaciones menos seguras”.
Figura 95: Activar el “Acceso de aplicaciones menos seguras (paso 1)”
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO A
134
Figura 97: Activar el “Acceso de aplicaciones menos seguras (paso 3)”
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO B
135
ANEXO B
APARTADO B.1 - ENTREVISTAS
Esta misma pregunta:
• ¿Qué información es interesante para el viticultor con sensores de humedad,
temperatura y luz principalmente?
Se ha realizado a las siguientes personas:
Rubén Delgado Treviño – Encargado de Finca Constancia
Petra Calleja Ugarte – Contacto en Bodegas Beronia
Chema Ryan Murua – Enólogo Bodegas Muriel
Jesús Izquierdo – Distribuidor en La Rioja
Alvaro Comenge – Director Comercial de Bodegas Comenge
Rubén Fontecha – Cooperativa Garu
Cristina Hernando – Departamento de Enoturismo Bodega Conde de los Andes
Obteniendo de ellas las siguientes conclusiones:
Las decisiones en campo son al final la resultante de un cúmulo de necesidades e
intereses. Por tanto hay que enfocar todo esto como herramientas de ayuda nunca
como elementos de decisión, al final lo que más se tiene en cuenta es el
conocimiento de la viña, su entorno y lo más importante el histórico y su evolución
que ya de por si en este negocio como depende del clima siempre es diferente.
Los datos en tiempo real de los sensores de temperatura, luz y humedad son de
utilidad para el análisis instantáneo.
Los datos históricos se deberían poder buscar según una serie de parámetros
insertados.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO B
136
Es bueno tener un recordatorio del ciclo de vida de los viñedos clásico para los
viticultores.
Tener predicciones del tiempo fiables disponibles.
Poder tener un medio de comunicación fácil entre otros viticultores para consultar
sus opiniones ya que los viticultores se consultan mucho entre sí.
Un registro de las alertas recibidas así como recibirlas en el móvil en tiempo real.
Para el control de riesgo de heladas se pueden usar sensores de temperatura; si la
temperatura baja de 1ºC se activan los sistemas anti helada como por ejemplo un
tipo de riego especial.
Para el control de aparición de enfermedades de tipo fúngico, niveles altos de
humedad favorecen la aparición de Oidio, Mildiu o Botrytis es por ello que
humedades relativas superiores al 80% son peligrosas para el desarrollo de estas
enfermedades. Si además le sumamos una temperatura de entre 15ºC-20ºC y que
haya una luz tenue de menos de 100lux, las probabilidades aumentan.
Para evaluar la necesidad de aplicar riego hay que instalar sensores de humedad en
la tierra a 1,5m y si la humedad relativa de la tierra baja del 40% hay riesgo de
sequía y hay que regar inmediatamente.
A la hora de aplicar distintitos tratamientos es malo que haya mucho viento.
Por medio de infrarrojos se evalúa el grado de madurez de las uvas de cara a
establecer fecha de vendimia.
Si las temperaturas hasta mediados de enero están siendo inferiores a 4ºC de media
se recomienda retrasar la poda 10 días.
Informar de una buena añada de la cosecha cuando se den en Julio y Agosto las
condiciones de 25ºC-30ºC de media y una humedad relativa entre 60%-70%.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO C
137
ANEXO C
APARTADO C.1 - FLUJO DE LA MEDIA
[{"id":"90e786e3.a00a68","type":"comment","z":"a5baa413.0f5358","name":"Hacer la media de 4 números","info":"","x":143.5,"y":758.6666641235352,"wires":[]},{"id":"b6d04055.d06f5","type":"smooth","z":"a5baa413.0f5358","name":"Media temp","action":"mean","count":"4","round":"5","x":333.6665954589844,"y":939.6666870117188,"wires":[["d6bf0431.842e78"]]},{"id":"d6bf0431.842e78","type":"debug","z":"a5baa413.0f5358","name":"","active":true,"console":"false","complete":"false","x":520.4999389648438,"y":940.3333740234375,"wires":[]},{"id":"3e108540.226c9a","type":"inject","z":"a5baa413.0f5358","name":"","topic":"","payload":"8","payloadType":"num","repeat":"","crontab":"","once":false,"x":84.5,"y":812.0000178019206,"wires":[["b6d04055.d06f5"]]},{"id":"7aa5a5de.3bc07c","type":"inject","z":"a5baa413.0f5358","name":"","topic":"","payload":"5","payloadType":"num","repeat":"","crontab":"","once":false,"x":86.5,"y":897.0000305175781,"wires":[["b6d04055.d06f5"]]},{"id":"7abb5a2.dfbc1a4","type":"inject","z":"a5baa413.0f5358","name":"","topic":"","payload":"10","payloadType":"num","repeat":"","crontab":"","once":false,"x":84.5,"y":980,"wires":[["b6d04055.d06f5"]]},{"id":"2556a6f2.e86a5a","type":"inject","z":"a5baa413.0f5358","name":"","topic":"","payload":"7","payloadType":"num","repeat":"","crontab":"","once":false,"x":86.5,"y":1069,"wires":[["b6d04055.d06f5"]]}]
APARTADO C.2 - FLUJO PARA GUARDAR DATOS EN CLOUDANT
[{"id":"fc9e6ecd.0696a","type":"ibmiot in","z":"a5baa413.0f5358","authentication":"boundService","apiKey":"","inputType":"evt","deviceId":"b0b448d02787","applicationId":"","deviceType":"SensorTag-2.0","eventType":"+","commandType":"","format":"json","name":"b0b448d02787","service":"registered","allDevices":false,"allApplications":false,"allDeviceTypes":false,"allEvents":true,"allCommands":false,"allFormats":true,"x":101.66665649414062,"y":407.6666564941406,"wires":[["da19088.017a8f8"]]},{"id":"31c29be3.856164","type":"cloudant out","z":"a5baa413.0f5358","name":"Guardar en nodered2","cloudant":"","database":"nodered2","service":"IoT Pruebas-cloudantNoSQLDB","payonly":true,"operation":"insert","x":541.380859375,"y":407.5714416503906,"wires":[]},{"id":"da19088.017a8f8","type":"delay","z":"a5baa413.0f5358","name":"1 dato cada 2h","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"12","rateUnits":"day","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":308.5000305175781,"y":408.00006103515625,"wires":[["31c29be3.856164"]]},{"id":"6f8fa1ab.b1b","type":"comment","z":"a5baa413.0f5358","name":"Ejemplo para recoger datos para almacenar en Cloudant","info":"","x":226.125,"y":296.916708946228,"wires":[]}]
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO C
138
APARTADO C.3 - FLUJO PARA SACAR DATOS DE CLOUDANT
[{"id":"8eb356fe.554ac8","type":"http in","z":"a5baa413.0f5358","name":"","url":"/datos","method":"get","swaggerDoc":"","x":86.5,"y":635.3333740234375,"wires":[["eb1a6d20.3a3d6"]]},{"id":"dc209ef8.7d596","type":"http response","z":"a5baa413.0f5358","name":"","x":838.2499847412109,"y":632.5000610351562,"wires":[]},{"id":"1b799759.c37c79","type":"cloudant in","z":"a5baa413.0f5358","name":"","cloudant":"","database":"nodered2","service":"IoT Pruebas-cloudantNoSQLDB","search":"_idx_","design":"tempsearch","index":"filtroTemp","x":622.4166412353516,"y":632.416748046875,"wires":[["dc209ef8.7d596"]]},{"id":"eb1a6d20.3a3d6","type":"function","z":"a5baa413.0f5358","name":"Selección temperatura","func":"if(msg.payload.temp)\n{\n msg.payload = \"temperatura:'\"+ msg.payload.temp +\"'\";\n}\nreturn msg;","outputs":1,"noerr":0,"x":351.24998474121094,"y":634.3334350585938,"wires":[["1b799759.c37c79"]]}]
APARTADO C.4 - FLUJO PARA CREAR UN FORMULARIO DE
RECOGIDA DE DATOS Y MOSTRAR USANDO AJAX
[{"id":"c9d97dbb.9f0a7","type":"http in","z":"a5baa413.0f5358","name":"","url":"/formularioA","method":"get","swaggerDoc":"","x":95.56546783447266,"y":973.1746215820312,"wires":[["8ab2b64e.2e4328"]]},{"id":"32bc2267.1586be","type":"http response","z":"a5baa413.0f5358","name":"","x":477.2797164916992,"y":974.1747007369995,"wires":[]},{"id":"8ab2b64e.2e4328","type":"template","z":"a5baa413.0f5358","name":"Formulario Ajax","field":"","fieldType":"msg","syntax":"mustache","template":"<!DOCTYPE html>\n<html>\n<body>\n\n<p>Realiza la busqueda por temperatura</p>\n\n<div class =\"labelsFormulario\">\n Temperatura: <input id=\"temp\" type=\"text\"/>\n <br/><br/>\n</div>\n<div class =\"botonFiltrar\">\n <input id=\"btnFltr\" type=\"submit\" value=\"Filtrar\" onclick=\"javascript:return mostrarLista();\" />\n</div>\n\n<div id=\"contenidoFitr\"></div>\n<div id=\"errorMensaje\"></div>\n\n<script>\n\nfunction peticionAJAX(url, idDiv)\n{\n var xmlHttpReq = new XMLHttpRequest();\n xmlHttpReq.onreadystatechange=function()\n {\n if (xmlHttpReq.readyState == 4 && xmlHttpReq.status==200)\n document.getElementById(idDiv).innerHTML = xmlHttpReq.responseText;\n }\n\n xmlHttpReq.open('GET', url, true); \n xmlHttpReq.send();\n}\n\nfunction mostrarLista()\n{\n var temp= document.getElementById(\"temp\").value;\n if(temp)\n\t{\n url=\"https://iot-pruebas.eu-gb.mybluemix.net/datos?temp=\" + temp;\n
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO C
139
peticionAJAX(url,'contenidoFitr');\n return true;\n\t}else{\n\t\tdocument.getElementById(\"contenidoFitr\").style.display = 'none';\n document.getElementById(\"errorMensaje\").style.display = 'block';\n document.getElementById(\"errorMensaje\").innerHTML = \"Debe introducir un mensaje\";\n return false;\n }\n}\n</script>\n\n</body>\n</html>","x":304.3035430908203,"y":972.9366111755371,"wires":[["32bc2267.1586be"]]}]
APARTADO C.5 - FLUJO PARA CREAR UN FORMULARIO DE
RECOGIDA DE DATOS Y MOSTRAR USANDO JSON
[{"id":"fb9920b0.4c245","type":"http in","z":"a5baa413.0f5358","name":"","url":"/formularioJ","method":"get","swaggerDoc":"","x":91.23212432861328,"y":1091.841275215149,"wires":[["8f36aa40.0cc128"]]},{"id":"2bb15a79.2fc2d6","type":"http response","z":"a5baa413.0f5358","name":"","x":483.2320671081543,"y":1091.4127006530762,"wires":[]},{"id":"8f36aa40.0cc128","type":"template","z":"a5baa413.0f5358","name":"Formulario JSON","field":"","fieldType":"msg","syntax":"mustache","template":"<!DOCTYPE html>\n<html>\n<head>\n <style>\n .estilo{\n width:200px;\n text-align:center;\n float:left;\n }\n </style>\n</head>\n<body>\n<script src=\"https://code.jquery.com/jquery-1.10.2.js\"></script>\n<p>Realiza la busqueda por temperatura</p>\n\n\n<div class =\"labelsFormulario\">\n Temperatura: <input id=\"temp\" type=\"text\"/>\n <br/><br/>\n</div>\n<div class =\"botonFiltrar\">\n <input id=\"btnFltr\" type=\"submit\" value=\"Filtrar\" onclick=\"javascript:return mostrarLista();\" />\n</div>\n<br/><br/>\n<div class=\"columna\">\n<div class=\"estilo\"> ID Sensor </div>\n<div class=\"estilo\"> Fecha </div>\n<div class=\"estilo\"> Temperatura </div>\n<div class=\"estilo\"> Humedad </div>\n<div class=\"estilo\"> Luz </div>\n<br><br></div>\n<div class=\"inner\"></div>\n\n<script>\n\nfunction peticionJSON(url)\n{\n var xmlHttpReq = new XMLHttpRequest();\n xmlHttpReq.onreadystatechange=function()\n {\n if (xmlHttpReq.readyState == 4 && xmlHttpReq.status==200)\n {\n $( \".inner\" ).empty();\n var objetoJSON = eval(\"(\" + xmlHttpReq.responseText + \")\"); \n for(i = 0; i < objetoJSON.length; i++)\n {\n var id = objetoJSON[i].d.magX;\n var date = objetoJSON[i].d.objectTemp;\n var res = date.split(\"T\");\n var fecha = res[0];\n var temp = objetoJSON[i].d.ambientTemp;\n var hum = objetoJSON[i].d.humidity;\n var luz = objetoJSON[i].d.light;\n var apptext = \"<div><div class='estilo'>\" + id + \"</div><div class='estilo'>\" + fecha + \"</div><div class='estilo'>\" + temp + \"</div><div class='estilo'>\" + hum + \"</div><div class='estilo'>\" + luz + \"</div></div><br/>\";\n $( \".inner\" ).append(apptext);\n }\n }\n }\n\n xmlHttpReq.open('GET', url, true); \n xmlHttpReq.send();\n}\n\nfunction mostrarLista()\n{\n var temp= document.getElementById(\"temp\").value;\n if(temp)\n {\n url=\"https://iot-pruebas.eu-gb.mybluemix.net/datos?temp=\" + temp;\n peticionJSON(url);\n return true;\n }else{\n
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO C
140
document.getElementById(\"contenidoFitr\").style.display = 'none';\n document.getElementById(\"errorMensaje\").style.display = 'block';\n document.getElementById(\"errorMensaje\").innerHTML = \"Debe introducir un mensaje\";\n return false;\n }\n}\n</script>\n\n</body>\n</html>","x":308.9702033996582,"y":1092.1747341156006,"wires":[["2bb15a79.2fc2d6"]]}]
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
141
ANEXO D
APARTADO D.1 - VINIOTHOME24.HTML
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="VinIoT"> <meta name="author" content="Amaya Manzano"> <title>VinIoT</title> <!-- Bootstrap Core CSS --> <link href="../bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> <!-- MetisMenu CSS --> <link href="../bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> <!-- Custom CSS --> <link href="../dist/css/sb-admin-2.css" rel="stylesheet"> <!-- Custom Fonts --> <link href="../bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <!-- jQuery --> <script src="../bower_components/jquery/dist/jquery.min.js"></script> <!-- HighCharts --> <script src="../bower_components/highCharts/dist/HighCharts.js"></script> <script src="../bower_components/highCharts/dist/HighChartsExport.js"></script> <!-- Bootstrap Core JavaScript --> <script src="../bower_components/bootstrap/dist/js/bootstrap.min.js"></script> <!-- Metis Menu Plugin JavaScript --> <script src="../bower_components/metisMenu/dist/metisMenu.min.js"></script> <!-- Custom Theme JavaScript --> <script src="../dist/js/sb-admin-2.js"></script> <!-- Graficos HighCharts Real Time -->
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
142
<script src="../bower_components/graficosRT/dist/graficoLuzRT.js"> </script> <script src="../bower_components/graficosRT/dist/graficoTempRT.js"> </script> <script src="../bower_components/graficosRT/dist/graficoHumRT.js"> </script> <script src="../bower_components/chat/dist/chat.js"> </script> </head> <body> <div id="wrapper"> <!-- Navigation --> <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="viniothome24.html">VinIoT</a> </div> <!-- /.navbar-header --> <ul class="nav navbar-top-links navbar-right"> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"> <i class="fa fa-user fa-fw"></i> <i class="fa fa-caret-down"></i> </a> <ul class="dropdown-menu dropdown-user"> <li><a href="http://nodeappprueba.eu-gb.mybluemix.net/"><i class="fa fa-sign-out fa-fw"></i> Cerrar Sesión</a> </li> </ul> <!-- /.dropdown-user --> </li> <!-- /.dropdown --> </ul> <!-- /.navbar-top-links --> <div class="navbar-default sidebar" role="navigation"> <div class="sidebar-nav navbar-collapse"> <ul class="nav" id="side-menu"> </br></br> <li> <a href="viniothome24.html"><i class="fa fa-dashboard fa-fw"></i> Panel de Control</a> </li> <li> <a href="#"><i class="fa fa-table fa-fw"></i> Consultas<span class="fa arrow"></span></a>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
143
<ul class="nav nav-second-level"> <li> <a href="tiempo.html">El Tiempo</a> </li> <li> <a href="calendario.html">Calendario</a> </li> </ul> <!-- /.nav-second-level --> </li> <li> <a href="historicos.html"><i class="fa fa-bar-chart-o fa-fw"></i> Datos Históricos</a> </li> <li> <a href="#"><i class="fa fa-bell"></i> Alerts<span class="fa arrow"></span></a> <ul class="nav nav-second-level"> <li> <a href="heladas.html">Heladas</a> </li> <li> <a href="regadio.html">Regadío</a> </li> <li> <a href="botrytis.html">Botrytis</a> </li> <li> <a href="corregirpoda.html">Corregir poda</a> </li> </ul> <!-- /.nav-second-level --> </li> </ul> </div> <!-- /.sidebar-collapse --> </div> <!-- /.navbar-static-side --> </nav> <div id="page-wrapper"> <div class="row"> <div class="col-lg-12"> <h1 class="page-header">Panel de Control</h1> </div> <!-- /.col-lg-12 --> </div> <!-- /.row --> <div class="row"> <div class="col-lg-3 col-md-6"> <div class="panel panel-yellow"> <div class="panel-heading"> <div class="row">
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
144
<div class="col-xs-3"> <i class="fa fa-envelope fa-5x"></i> </div> <div class="col-xs-9 text-right"> <div class="huge">Gmail</div> </div> </div> </div> <a href="https://mail.google.com/mail/u/0/#inbox" target="_blank"> <div class="panel-footer"> <span class="pull-left">Ir</span> <span class="pull-right"><i class="fa fa-arrow-circle-right"></i></span> <div class="clearfix"></div> </div> </a> </div> </div> <div class="col-lg-3 col-md-6"> <div class="panel panel-green"> <div class="panel-heading"> <div class="row"> <div class="col-xs-3"> <i class="fa fa-tint fa-5x"></i> </div> <div class="col-xs-9 text-right"> <div class="huge">Regadío</div> </div> </div> </div> <a href="regadio.html"> <div class="panel-footer"> <span class="pull-left">Ir</span> <span class="pull-right"><i class="fa fa-arrow-circle-right"></i></span> <div class="clearfix"></div> </div> </a> </div> </div> <div class="col-lg-3 col-md-6"> <div class="panel panel-primary"> <div class="panel-heading"> <div class="row"> <div class="col-xs-3"> <i class="fa fa-certificate fa-5x"></i> </div> <div class="col-xs-9 text-right"> <div class="huge">Heladas</div> </div> </div> </div>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
145
<a href="heladas.html"> <div class="panel-footer"> <span class="pull-left">Ir</span> <span class="pull-right"><i class="fa fa-arrow-circle-right"></i></span> <div class="clearfix"></div> </div> </a> </div> </div> <div class="col-lg-3 col-md-6"> <div class="panel panel-red"> <div class="panel-heading"> <div class="row"> <div class="col-xs-3"> <i class="fa fa-bullhorn fa-5x"></i> </div> <div class="col-xs-9 text-right"> <div class="huge">Botrytis</div> </div> </div> </div> <a href="botrytis.html"> <div class="panel-footer"> <span class="pull-left">Ir</span> <span class="pull-right"><i class="fa fa-arrow-circle-right"></i></span> <div class="clearfix"></div> </div> </a> </div> </div> </div> <!-- /.row --> <div class="row"> <div class="col-lg-8"> <div class="panel panel-default"> <div class="panel-heading"> <i class="fa fa-bar-chart-o fa-fw"></i> Gráfico de la luz en tiempo real </div> <!-- /.panel-heading --> <div class="panel-body"> <div id="graficoLuzRT" style="min-width: 310px; height: 400px; margin: 0 auto"></div> </div> <!-- /.panel-body --> </div> <!-- /.panel --> <div class="panel panel-default"> <div class="panel-heading"> <i class="fa fa-bar-chart-o fa-fw"></i> Gráfico de la temperatura en tiempo real
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
146
</div> <!-- /.panel-heading --> <div class="panel-body"> <div id="graficoTempRT" style="min-width: 310px; height: 400px; margin: 0 auto"></div> </div> <!-- /.panel-body --> </div> <!-- /.panel --> <div class="panel panel-default"> <div class="panel-heading"> <i class="fa fa-bar-chart-o fa-fw"></i> Gráfico de la humedad en tiempo real </div> <!-- /.panel-heading --> <div class="panel-body"> <div id="graficoHumRT" style="min-width: 310px; height: 400px; margin: 0 auto"></div> </div> <!-- /.panel-body --> </div> <!-- /.panel --> </div> <!-- /.col-lg-8 --> <div class="col-lg-4"> <div class="panel panel-default"> <div class="panel-heading"> <i class="fa fa-bell fa-fw"></i> Notificaciones de Twitter </div> <!-- /.panel-heading --> <div class="panel-body"> <!-- Twitter Widget --> <a class="twitter-timeline" data-lang="es" data-height="400" href="https://twitter.com/IoT24">Tweets by IoT24</a> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> </div> <!-- /.panel-body --> </div> <!-- /.panel --> <div class="chat-panel panel panel-default"> <div class="panel-heading"> <i class="fa fa-comments fa-fw"></i> Chat </div> <!-- /.panel-heading --> <div id="chat_box" class="panel-body"> </div> <!-- /.panel-body --> <div id="footer" class="panel-footer"> <form role="form"> <fieldset>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
147
<div class="form-group"> <input id="user" class="form-control" placeholder="Usuario" autofocus> </div> <div class="form-group"> <input id="message" class="form-control" placeholder="Mensaje"> </div> <a onclick="sendMessage()" class="btn btn-lg btn-success btn-block">Enviar</a> </fieldset> </form> </div> <!-- /.panel-footer --> </div> <!-- /.panel .chat-panel --> </div> <!-- /.col-lg-4 --> </div> <!-- /.row --> </div> <!-- /#page-wrapper --> </div> </body> </html>
chat.js
var wsUri = "wss://iot-pruebas.eu-gb.mybluemix.net/ws/chat"; var ws = new WebSocket(wsUri); function createSystemMessage(message) { var message = document.createTextNode(message); var messageBox = document.createElement('p'); messageBox.className = 'system'; messageBox.appendChild(message); var chat = document.getElementById('chat_box'); chat.appendChild(messageBox); } function createUserMessage(user, message) { var user = document.createTextNode(user + ': '); var userBox = document.createElement('span');
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
148
userBox.className = 'username'; userBox.appendChild(user); var message = document.createTextNode(message); var messageBox = document.createElement('p'); messageBox.appendChild(userBox); messageBox.appendChild(message); var chat = document.getElementById('chat_box'); chat.appendChild(messageBox); } ws.onopen = function(ev) { createSystemMessage('[Connected]'); }; ws.onclose = function(ev) { createSystemMessage('[Disconnected]'); } ws.onmessage = function(ev) { var payload = JSON.parse(ev.data); createUserMessage(payload.user, payload.message); var chat = document.getElementById('chat_box'); chat.scrollTop = chat.scrollHeight; } function sendMessage() { var user = document.getElementById('user'); var message = document.getElementById('message'); var payload = { message: message.value, user: user.value, ts: (new Date()).getTime() }; ws.send(JSON.stringify(payload)); message.value = ""; };
graficoHumRT.js
$(function () { $(document).ready(function () { Highcharts.setOptions(
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
149
{ global: { useUTC: false } }); var socketaddy = "wss://iot-pruebas.eu-gb.mybluemix.net/ws/hum"; sock = new WebSocket(socketaddy); var datos; sock.onmessage = function(evt) { console.log("Websocket message", evt); datos = parseFloat(evt.data); } $('#graficoHumRT').highcharts( { chart: { type: 'spline', animation: Highcharts.svg, // don't animate in old IE marginRight: 10, events: { load: function () { // set up the updating of the chart each second var series = this.series[0]; setInterval(function () { //alert(datos); var x = (new Date()).getTime(), // current time y = datos; series.addPoint([x, y], true, true); }, 3000); } } }, title: { text: 'Humedad en el ambiente' }, xAxis: { title: { text: 'Hora' }, type: 'datetime', tickPixelInterval: 150 }, yAxis: { title: { text: 'Humedad (%rH)' }, plotLines: [{ value: 0, width: 1, color: '#808080'
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
150
}] }, tooltip: { formatter: function () { return '<b>' + this.series.name + '</b><br/>' + Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' + Highcharts.numberFormat(this.y, 2); } }, legend: { enabled: false }, exporting: { enabled: true }, series: [{ name: 'Datos:', data: (function () { // generate an array of random data var data = [], time = (new Date()).getTime(), i; for (i = -19; i <= 0; i += 1) { data.push({ x: time + i * 1000, y: 0 }); } return data; }()) }] }); }); });
graficoLuzRT.js
$(function () { $(document).ready(function () { Highcharts.setOptions( { global: { useUTC: false } }); var socketaddy = "wss://iot-pruebas.eu-gb.mybluemix.net/ws/luz";
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
151
sock = new WebSocket(socketaddy); var datos; sock.onmessage = function(evt) { console.log("Websocket message", evt); datos = parseFloat(evt.data); } $('#graficoLuzRT').highcharts( { chart: { type: 'spline', animation: Highcharts.svg, // don't animate in old IE marginRight: 10, events: { load: function () { // set up the updating of the chart each second var series = this.series[0]; setInterval(function () { //alert(datos); var x = (new Date()).getTime(), // current time y = datos; series.addPoint([x, y], true, true); }, 3000); } } }, title: { text: 'Luz en el ambiente' }, xAxis: { title: { text: 'Hora' }, type: 'datetime', tickPixelInterval: 150 }, yAxis: { title: { text: 'Lux (lux)' }, plotLines: [{ value: 0, width: 1, color: '#808080' }] }, tooltip: { formatter: function () { return '<b>' + this.series.name + '</b><br/>' +
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
152
Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' + Highcharts.numberFormat(this.y, 2); } }, legend: { enabled: false }, exporting: { enabled: true }, series: [{ name: 'Datos:', data: (function () { // generate an array of random data var data = [], time = (new Date()).getTime(), i; for (i = -19; i <= 0; i += 1) { data.push({ x: time + i * 1000, y: 0 }); } return data; }()) }] }); }); });
graficoTempRT.js
$(function () { $(document).ready(function () { Highcharts.setOptions( { global: { useUTC: false } }); var socketaddy = "wss://iot-pruebas.eu-gb.mybluemix.net/ws/temp"; sock = new WebSocket(socketaddy); var datos; sock.onmessage = function(evt) { console.log("Websocket message", evt);
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
153
datos = parseFloat(evt.data); } $('#graficoTempRT').highcharts( { chart: { type: 'spline', animation: Highcharts.svg, // don't animate in old IE marginRight: 10, events: { load: function () { // set up the updating of the chart each second var series = this.series[0]; setInterval(function () { //alert(datos); var x = (new Date()).getTime(), // current time y = datos; series.addPoint([x, y], true, true); }, 3000); } } }, title: { text: 'Temperatura en el ambiente' }, xAxis: { title: { text: 'Hora' }, type: 'datetime', tickPixelInterval: 150 }, yAxis: { title: { text: 'Temperatura (ºC)' }, plotLines: [{ value: 0, width: 1, color: '#808080' }] }, tooltip: { formatter: function () { return '<b>' + this.series.name + '</b><br/>' + Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' + Highcharts.numberFormat(this.y, 2); } }, legend: {
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
154
enabled: false }, exporting: { enabled: true }, series: [{ name: 'Datos:', data: (function () { // generate an array of random data var data = [], time = (new Date()).getTime(), i; for (i = -19; i <= 0; i += 1) { data.push({ x: time + i * 1000, y: 0 }); } return data; }()) }] }); }); });
APARTADO D.2 - TIEMPO.HTML
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="VinIoT"> <meta name="author" content="Amaya Manzano"> <title>VinIoT</title> <!-- Bootstrap Core CSS --> <link href="../bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> <!-- MetisMenu CSS --> <link href="../bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> <!-- Custom CSS --> <link href="../dist/css/sb-admin-2.css" rel="stylesheet">
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
155
<!-- Morris Charts CSS --> <link href="../bower_components/morrisjs/morris.css" rel="stylesheet"> <!-- Custom Fonts --> <link href="../bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <!-- jQuery --> <script src="../bower_components/jquery/dist/jquery.min.js"></script> <!-- Bootstrap Core JavaScript --> <script src="../bower_components/bootstrap/dist/js/bootstrap.min.js"></script> <!-- Metis Menu Plugin JavaScript --> <script src="../bower_components/metisMenu/dist/metisMenu.min.js"></script> <!-- Flot Charts JavaScript --> <script src="../bower_components/flot/excanvas.min.js"></script> <script src="../bower_components/flot/jquery.flot.js"></script> <script src="../bower_components/flot/jquery.flot.pie.js"></script> <script src="../bower_components/flot/jquery.flot.resize.js"></script> <script src="../bower_components/flot/jquery.flot.time.js"></script> <script src="../bower_components/flot.tooltip/js/jquery.flot.tooltip.min.js"></script> <script src="../js/flot-data.js"></script> <!-- Custom Theme JavaScript --> <script src="../dist/js/sb-admin-2.js"></script> </head> <body> <div id="wrapper"> <!-- Navigation --> <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="viniothome24.html">VinIoT</a> </div> <!-- /.navbar-header --> <ul class="nav navbar-top-links navbar-right">
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
156
<li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"> <i class="fa fa-user fa-fw"></i> <i class="fa fa-caret-down"></i> </a> <ul class="dropdown-menu dropdown-user"> <li><a href="http://nodeappprueba.eu-gb.mybluemix.net/"><i class="fa fa-sign-out fa-fw"></i> Cerrar Sesiónt</a> </li> </ul> <!-- /.dropdown-user --> </li> <!-- /.dropdown --> </ul> <!-- /.navbar-top-links --> <div class="navbar-default sidebar" role="navigation"> <div class="sidebar-nav navbar-collapse"> <ul class="nav" id="side-menu"> </br></br> <li> <a href="viniothome24.html"><i class="fa fa-dashboard fa-fw"></i> Panel de Control</a> </li> <li> <a href="#"><i class="fa fa-table fa-fw"></i> Consultas<span class="fa arrow"></span></a> <ul class="nav nav-second-level"> <li> <a href="tiempo.html">El Tiempo</a> </li> <li> <a href="calendario.html">Calendario</a> </li> </ul> <!-- /.nav-second-level --> </li> <li> <a href="historicos.html"><i class="fa fa-bar-chart-o fa-fw"></i> Datos Históricos</a> </li> <li> <a href="#"><i class="fa fa-bell"></i> Alerts<span class="fa arrow"></span></a> <ul class="nav nav-second-level"> <li> <a href="heladas.html">Heladas</a> </li> <li> <a href="regadio.html">Regadío</a> </li> <li> <a href="botrytis.html">Botrytis</a>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
157
</li> <li> <a href="corregirpoda.html">Corregir poda</a> </li> </ul> <!-- /.nav-second-level --> </li> </ul> </div> <!-- /.sidebar-collapse --> </div> <!-- /.navbar-static-side --> </nav> <div id="page-wrapper"> <div class="row"> <div class="col-lg-12"> <h1 class="page-header">El Tiempo</h1> </div> <!-- /.col-lg-12 --> </div> <!-- /.row --> <div class="row"> <div class="col-lg-4"> <div class="panel panel-default"> <div class="panel-heading"> El Tiempo en Madrid </div> <!-- /.panel-heading --> <div class="panel-body"> <div id="plemx-root"></div> <a href="http://www.theweathernetwork.com">The Weather Network</a> <script type="text/javascript"> var _plm = _plm || []; _plm.push(['_btn', 34791]); _plm.push(['_loc','esmx0001']); _plm.push(['location', document.location.host ]); (function(d,e,i) { if (d.getElementById(i)) return; var px = d.createElement(e); px.type = 'text/javascript'; px.async = true; px.id = i;
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
158
px.src = ('https:' == d.location.protocol ? 'https:' : 'http:') + '//widget.twnmm.com/js/btn/pelm.js?orig=en_ca'; var s = d.getElementsByTagName('script')[0]; var py = d.createElement('link'); py.rel = 'stylesheet' py.href = ('https:' == d.location.protocol ? 'https:' : 'http:') + '//widget.twnmm.com/styles/btn/styles.css' s.parentNode.insertBefore(px, s); s.parentNode.insertBefore(py, s); })(document, 'script', 'plmxbtn'); </script> </div> <!-- /.panel-body --> </div> <!-- /.panel --> </div> </div> <!-- /.row --> </div> <!-- /#page-wrapper --> </div> <!-- /#wrapper --> </body> </html>
APARTADO D.3 - CALENDARIO.HTML
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="VinIoT"> <meta name="author" content="Amaya Manzano">
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
159
<title>VinIoT</title> <!-- Bootstrap Core CSS --> <link href="../bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> <!-- MetisMenu CSS --> <link href="../bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> <!-- Timeline CSS --> <link href="../css/timeline.css" rel="stylesheet"> <!-- Custom CSS --> <link href="../dist/css/sb-admin-2.css" rel="stylesheet"> <!-- Morris Charts CSS --> <link href="../bower_components/morrisjs/morris.css" rel="stylesheet"> <!-- Custom Fonts --> <link href="../bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> </head> <body> <div id="wrapper"> <!-- Navigation --> <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="viniothome24.html">VinIoT</a> </div> <!-- /.navbar-header --> <ul class="nav navbar-top-links navbar-right"> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"> <i class="fa fa-user fa-fw"></i> <i class="fa fa-caret-down"></i> </a> <ul class="dropdown-menu dropdown-user"> <li><a href="http://nodeappprueba.eu-gb.mybluemix.net/"><i class="fa fa-sign-out fa-fw"></i> Cerrar Sesión</a>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
160
</li> </ul> <!-- /.dropdown-user --> </li> <!-- /.dropdown --> </ul> <!-- /.navbar-top-links --> <div class="navbar-default sidebar" role="navigation"> <div class="sidebar-nav navbar-collapse"> <ul class="nav" id="side-menu"> </br></br> <li> <a href="viniothome24.html"><i class="fa fa-dashboard fa-fw"></i> Panel de Control</a> </li> <li> <a href="#"><i class="fa fa-table fa-fw"></i> Consultas<span class="fa arrow"></span></a> <ul class="nav nav-second-level"> <li> <a href="tiempo.html">El Tiempo</a> </li> <li> <a href="calendario.html">Calendario</a> </li> </ul> <!-- /.nav-second-level --> </li> <li> <a href="historicos.html"><i class="fa fa-bar-chart-o fa-fw"></i> Datos Históricos</a> </li> <li> <a href="#"><i class="fa fa-bell"></i> Alerts<span class="fa arrow"></span></a> <ul class="nav nav-second-level"> <li> <a href="heladas.html">Heladas</a> </li> <li> <a href="regadio.html">Regadío</a> </li> <li> <a href="botrytis.html">Botrytis</a> </li> <li> <a href="corregirpoda.html">Corregir poda</a> </li> </ul> <!-- /.nav-second-level --> </li> </ul>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
161
</div> <!-- /.sidebar-collapse --> </div> <!-- /.navbar-static-side --> </nav> <div id="page-wrapper"> <div class="row"> <div class="col-lg-12"> <h1 class="page-header">Calendario</h1> </div> <!-- /.col-lg-12 --> </div> <!-- /.row --> <div class="row"> <div class="col-lg-12"> <div class="panel panel-default"> <div class="panel-heading"> Ciclo de vida de la vid </div> <!-- /.panel-heading --> <div class="panel-body"> <img src="../images/calendario.jpg" alt="img" style="width:100%;height:100%;"> </div> <!-- /.panel-body --> </div> <!-- /.panel --> </div> </div> <!-- /.row --> </div> <!-- /#page-wrapper --> </div> <!-- /#wrapper --> <!-- jQuery --> <script src="../bower_components/jquery/dist/jquery.min.js"></script> <!-- Bootstrap Core JavaScript --> <script src="../bower_components/bootstrap/dist/js/bootstrap.min.js"></script> <!-- Metis Menu Plugin JavaScript --> <script src="../bower_components/metisMenu/dist/metisMenu.min.js"></script> <!-- Flot Charts JavaScript --> <script src="../bower_components/flot/excanvas.min.js"></script> <script src="../bower_components/flot/jquery.flot.js"></script> <script src="../bower_components/flot/jquery.flot.pie.js"></script> <script src="../bower_components/flot/jquery.flot.resize.js"></script> <script src="../bower_components/flot/jquery.flot.time.js"></script>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
162
<script src="../bower_components/flot.tooltip/js/jquery.flot.tooltip.min.js"></script> <script src="../js/flot-data.js"></script> <!-- Custom Theme JavaScript --> <script src="../dist/js/sb-admin-2.js"></script> </body> </html>
APARTADO D.4 - HISTORICO.HTML
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="VinIoT"> <meta name="author" content="Amaya Manzano"> <title>VinIoT</title> <!-- Bootstrap Core CSS --> <link href="../bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> <!-- MetisMenu CSS --> <link href="../bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> <!-- DataTables CSS --> <link href="../bower_components/datatables-plugins/integration/bootstrap/3/dataTables.bootstrap.css" rel="stylesheet"> <!-- DataTables Responsive CSS --> <link href="../bower_components/datatables-responsive/css/dataTables.responsive.css" rel="stylesheet"> <!-- Custom CSS --> <link href="../dist/css/sb-admin-2.css" rel="stylesheet"> <!-- Custom Fonts --> <link href="../bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
163
<!-- jQuery --> <script src="../bower_components/jquery/dist/jquery.min.js"></script> <!-- Bootstrap Core JavaScript --> <script src="../bower_components/bootstrap/dist/js/bootstrap.min.js"></script> <!-- Metis Menu Plugin JavaScript --> <script src="../bower_components/metisMenu/dist/metisMenu.min.js"></script> <!-- DataTables JavaScript --> <script src="../bower_components/datatables/media/js/jquery.dataTables.min.js"></script> <script src="../bower_components/datatables-plugins/integration/bootstrap/3/dataTables.bootstrap.min.js"></script> <!-- Custom Theme JavaScript --> <script src="../dist/js/sb-admin-2.js"></script> <script> $(document).ready(function() { $('#dataTables-example').DataTable({ responsive: true }); }); </script> <script src="../bower_components/historicodin/dist/historicodin.js"> </script> </head> <body> <div id="wrapper"> <!-- Navigation --> <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="viniothome24.html">VinIoT</a> </div> <!-- /.navbar-header --> <ul class="nav navbar-top-links navbar-right"> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
164
<i class="fa fa-user fa-fw"></i> <i class="fa fa-caret-down"></i> </a> <ul class="dropdown-menu dropdown-user"> <li><a href="http://nodeappprueba.eu-gb.mybluemix.net/"><i class="fa fa-sign-out fa-fw"></i> Cerrar Sesión</a> </li> </ul> <!-- /.dropdown-user --> </li> <!-- /.dropdown --> </ul> <!-- /.navbar-top-links --> <div class="navbar-default sidebar" role="navigation"> <div class="sidebar-nav navbar-collapse"> <ul class="nav" id="side-menu"> </br></br> <li> <a href="viniothome24.html"><i class="fa fa-dashboard fa-fw"></i> Panel de Control</a> </li> <li> <a href="#"><i class="fa fa-table fa-fw"></i> Consultas<span class="fa arrow"></span></a> <ul class="nav nav-second-level"> <li> <a href="tiempo.html">El Tiempo</a> </li> <li> <a href="calendario.html">Calendario</a> </li> </ul> <!-- /.nav-second-level --> </li> <li> <a href="historicos.html"><i class="fa fa-bar-chart-o fa-fw"></i> Datos Históricos</a> </li> <li> <a href="#"><i class="fa fa-bell"></i> Alerts<span class="fa arrow"></span></a> <ul class="nav nav-second-level"> <li> <a href="heladas.html">Heladas</a> </li> <li> <a href="regadio.html">Regadío</a> </li> <li> <a href="botrytis.html">Botrytis</a> </li> <li>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
165
<a href="corregirpoda.html">Corregir poda</a> </li> </ul> <!-- /.nav-second-level --> </li> </ul> </div> <!-- /.sidebar-collapse --> </div> <!-- /.navbar-static-side --> </nav> <div id="page-wrapper"> <div class="row"> <div class="col-lg-12"> <h1 class="page-header">Datos Históricos</h1> </div> <!-- /.col-lg-12 --> </div> <div class="row"> <div class="col-lg-4"> <div class="panel panel-default"> <div class="panel-heading"> Formulario </div> <!-- /.panel-heading --> <div class="panel-body"> <form role="form"> <fieldset> <div class="form-group"> <input id="date" class="form-control" placeholder="Fecha" autofocus> </div> <div class="form-group"> <input id="temp" class="form-control" placeholder="Temperatura"> </div> <div class="form-group"> <input id="hum" class="form-control" placeholder="Humedad"> </div> <div class="form-group"> <input id="light" class="form-control" placeholder="Luz"> </div> <a onclick="javascript:return mostrarLista();" class="btn btn-lg btn-success btn-block">Filtrar</a> </br><div id="errorMensaje"></div> </fieldset> </form> </div> <!-- /.panel-body --> </div>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
166
<!-- /.panel --> </div> <!-- /.col-lg-12 --> </div> <!-- /.row --> <div class="row"> <div class="col-lg-12"> <div class="panel panel-default"> <div class="panel-heading"> Tabla de Búsqueda </div> <!-- /.panel-heading --> <div class="panel-body" id="inner1"> <div class="inner3"></div> </div> <!-- /.panel-body --> </div> <!-- /.panel --> </div> <!-- /.col-lg-12 --> </div> <!-- /.row --> </div> <!-- /#page-wrapper --> </div> <!-- /#wrapper --> </body> </html>
historicodin.js
function mostrarLista() { var date= document.getElementById("date").value; var temp= document.getElementById("temp").value; var hum= document.getElementById("hum").value; var light= document.getElementById("light").value; if(date && temp && hum && light) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?date=" + date + "&temp=" + temp + "&hum=" + hum + "&light=" + light; peticionJSON(url); return true; }else if(date && temp && hum) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?date=" + date + "&temp=" + temp + "&hum=" + hum;
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
167
peticionJSON(url); return true; }else if(date && temp && light) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?date=" + date + "&temp=" + temp + "&light=" + light; peticionJSON(url); return true; }else if(date && hum && light) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?date=" + date + "&hum=" + hum + "&light=" + light; peticionJSON(url); return true; }else if(temp && hum && light) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?temp=" + temp + "&hum=" + hum + "&light=" + light; peticionJSON(url); return true; }else if(date && temp) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?date=" + date + "&temp=" + temp; peticionJSON(url); return true; }else if(date && hum) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?date=" + date + "&hum=" + hum; peticionJSON(url); return true; }else if(date && light) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?date=" + date + "&light=" + light; peticionJSON(url); return true; }else if(temp && hum) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?temp=" + temp + "&hum=" + hum; peticionJSON(url); return true; }else if(temp && light) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?temp=" + temp + "&light=" + light; peticionJSON(url); return true; }else if(hum && light) {
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
168
url="https://iot-pruebas.eu-gb.mybluemix.net/datos?hum=" + hum + "&light=" + light; peticionJSON(url); return true; }else if(date) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?date=" + date; peticionJSON(url); return true; }else if(temp) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?temp=" + temp; peticionJSON(url); return true; }else if(hum) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?hum=" + hum; peticionJSON(url); return true; }else if(light) { url="https://iot-pruebas.eu-gb.mybluemix.net/datos?light=" + light; peticionJSON(url); return true; }else{ document.getElementById("errorMensaje").style.display = 'block'; document.getElementById("errorMensaje").innerHTML = "Debe rellenar al menos uno de los campos"; return false; } } function peticionJSON(url) { document.getElementById("errorMensaje").style.display = 'none'; var xmlHttpReq = new XMLHttpRequest(); xmlHttpReq.onreadystatechange=function() { if (xmlHttpReq.readyState == 4 && xmlHttpReq.status==200) { $( "#inner1" ).empty(); $( ".inner2" ).empty(); $( ".inner3" ).empty(); var apptext1 ="<div class='dataTable_wrapper'><table class='table table-striped table-bordered table-hover' id='dataTables-example'><thead><tr><th>Id
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
169
Sensor</th><th>Fecha</th><th>Temperatura</th><th>Humedad</th><th>Luz</th></tr></thead><tbody class='inner2'>"; $( "#inner1" ).append(apptext1); var objetoJSON = eval("(" + xmlHttpReq.responseText + ")"); for(i = 0; i < objetoJSON.length; i++) { var id = objetoJSON[i].d.magX; var date = objetoJSON[i].d.objectTemp; var res = date.split("T"); var fecha = res[0]; var temp = objetoJSON[i].d.ambientTemp; var hum = objetoJSON[i].d.humidity; var luz = objetoJSON[i].d.light; var apptext2 = "<tr><td>" + id + "</td><td>" + fecha + "</td><td>" + temp + " </td><td class='center'> " + hum + "</td><td class='center'> " + luz + "</td></tr>"; $( ".inner2" ).append(apptext2); } var apptext3 = "</tbody></table></div>"; $( ".inner3" ).append(apptext3); $('#dataTables-example').DataTable({ responsive: true }); } } xmlHttpReq.open('GET', url, true); xmlHttpReq.send(); }
APARTADO D.5 - HELADAS.HTML
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="VinIoT"> <meta name="author" content="Amaya Manzano"> <title>VinIoT</title>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
170
<!-- Bootstrap Core CSS --> <link href="../bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> <!-- MetisMenu CSS --> <link href="../bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> <!-- Custom CSS --> <link href="../dist/css/sb-admin-2.css" rel="stylesheet"> <!-- Custom Fonts --> <link href="../bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <!-- jQuery --> <script src="../bower_components/jquery/dist/jquery.min.js"></script> <!-- Bootstrap Core JavaScript --> <script src="../bower_components/bootstrap/dist/js/bootstrap.min.js"></script> <!-- Metis Menu Plugin JavaScript --> <script src="../bower_components/metisMenu/dist/metisMenu.min.js"></script> <!-- Custom Theme JavaScript --> <script src="../dist/js/sb-admin-2.js"></script> <script> function peticionJSON() { var url="https://iot-pruebas.eu-gb.mybluemix.net/infoHeladas"; var xmlHttpReq = new XMLHttpRequest(); xmlHttpReq.onreadystatechange=function() { if (xmlHttpReq.readyState == 4 && xmlHttpReq.status==200) { $( ".inner" ).empty(); var objetoJSON = eval("(" + xmlHttpReq.responseText + ")"); for(i = 0; i < objetoJSON.length; i++) { var pl = objetoJSON[i].payload; var apptext = "<div class='col-lg-4'><div class='panel panel-info'><div class='panel-heading'>Alerta Helada</div><div class='panel-body'>" + pl + "</div></div></div>"; $( ".inner" ).append(apptext); } } } xmlHttpReq.open('GET', url, true);
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
171
xmlHttpReq.send(); } </script> </head> <body onload="peticionJSON()"> <div id="wrapper"> <!-- Navigation --> <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="viniothome24.html">VinIoT</a> </div> <!-- /.navbar-header --> <ul class="nav navbar-top-links navbar-right"> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"> <i class="fa fa-user fa-fw"></i> <i class="fa fa-caret-down"></i> </a> <ul class="dropdown-menu dropdown-user"> <li><a href="http://nodeappprueba.eu-gb.mybluemix.net/"><i class="fa fa-sign-out fa-fw"></i> Cerrar Sesión</a> </li> </ul> <!-- /.dropdown-user --> </li> <!-- /.dropdown --> </ul> <!-- /.navbar-top-links --> <div class="navbar-default sidebar" role="navigation"> <div class="sidebar-nav navbar-collapse"> <ul class="nav" id="side-menu"> </br></br> <li> <a href="viniothome24.html"><i class="fa fa-dashboard fa-fw"></i> Panel de Control</a> </li> <li> <a href="#"><i class="fa fa-table fa-fw"></i> Consultas<span class="fa arrow"></span></a>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
172
<ul class="nav nav-second-level"> <li> <a href="tiempo.html">El Tiempo</a> </li> <li> <a href="calendario.html">Calendario</a> </li> </ul> <!-- /.nav-second-level --> </li> <li> <a href="historicos.html"><i class="fa fa-bar-chart-o fa-fw"></i> Datos Históricos</a> </li> <li> <a href="#"><i class="fa fa-bell"></i> Alerts<span class="fa arrow"></span></a> <ul class="nav nav-second-level"> <li> <a href="heladas.html">Heladas</a> </li> <li> <a href="regadio.html">Regadío</a> </li> <li> <a href="botrytis.html">Botrytis</a> </li> <li> <a href="corregirpoda.html">Corregir poda</a> </li> </ul> <!-- /.nav-second-level --> </li> </ul> </div> <!-- /.sidebar-collapse --> </div> <!-- /.navbar-static-side --> </nav> <div id="page-wrapper"> <div class="row"> <div class="col-lg-12"> <h1 class="page-header">Alertas Heladas</h1> </div> <!-- /.col-lg-12 --> </div> <!-- /.row --> <div class="row"> <div class="inner"></div> </div> <!-- /.row --> </div>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
173
<!-- /#page-wrapper --> </div> <!-- /#wrapper --> </body> </html>
APARTADO D.6 - REGADIO.HTML
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="VinIoT"> <meta name="author" content="Amaya Manzano"> <title>VinIoT</title> <!-- Bootstrap Core CSS --> <link href="../bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> <!-- MetisMenu CSS --> <link href="../bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> <!-- Custom CSS --> <link href="../dist/css/sb-admin-2.css" rel="stylesheet"> <!-- Custom Fonts --> <link href="../bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <!-- jQuery --> <script src="../bower_components/jquery/dist/jquery.min.js"></script> <!-- Bootstrap Core JavaScript --> <script src="../bower_components/bootstrap/dist/js/bootstrap.min.js"></script> <!-- Metis Menu Plugin JavaScript --> <script src="../bower_components/metisMenu/dist/metisMenu.min.js"></script> <!-- Custom Theme JavaScript --> <script src="../dist/js/sb-admin-2.js"></script>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
174
<script> function peticionJSON() { var url="https://iot-pruebas.eu-gb.mybluemix.net/infoRegadio"; var xmlHttpReq = new XMLHttpRequest(); xmlHttpReq.onreadystatechange=function() { if (xmlHttpReq.readyState == 4 && xmlHttpReq.status==200) { $( ".inner" ).empty(); var objetoJSON = eval("(" + xmlHttpReq.responseText + ")"); for(i = 0; i < objetoJSON.length; i++) { var pl = objetoJSON[i].payload; var apptext = "<div class='col-lg-4'><div class='panel panel-green'><div class='panel-heading'>Alerta Regadío</div><div class='panel-body'>" + pl + "</div></div></div>"; $( ".inner" ).append(apptext); } } } xmlHttpReq.open('GET', url, true); xmlHttpReq.send(); } </script> </head> <body onload="peticionJSON()"> <div id="wrapper"> <!-- Navigation --> <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="viniothome24.html">VinIoT</a> </div> <!-- /.navbar-header --> <ul class="nav navbar-top-links navbar-right"> <li class="dropdown">
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
175
<a class="dropdown-toggle" data-toggle="dropdown" href="#"> <i class="fa fa-user fa-fw"></i> <i class="fa fa-caret-down"></i> </a> <ul class="dropdown-menu dropdown-user"> <li><a href="http://nodeappprueba.eu-gb.mybluemix.net/"><i class="fa fa-sign-out fa-fw"></i> Cerrar Sesión</a> </li> </ul> <!-- /.dropdown-user --> </li> <!-- /.dropdown --> </ul> <!-- /.navbar-top-links --> <div class="navbar-default sidebar" role="navigation"> <div class="sidebar-nav navbar-collapse"> <ul class="nav" id="side-menu"> </br></br> <li> <a href="viniothome24.html"><i class="fa fa-dashboard fa-fw"></i> Panel de Control</a> </li> <li> <a href="#"><i class="fa fa-table fa-fw"></i> Consultas<span class="fa arrow"></span></a> <ul class="nav nav-second-level"> <li> <a href="tiempo.html">El Tiempo</a> </li> <li> <a href="calendario.html">Calendario</a> </li> </ul> <!-- /.nav-second-level --> </li> <li> <a href="historicos.html"><i class="fa fa-bar-chart-o fa-fw"></i> Datos Históricos</a> </li> <li> <a href="#"><i class="fa fa-bell"></i> Alerts<span class="fa arrow"></span></a> <ul class="nav nav-second-level"> <li> <a href="heladas.html">Heladas</a> </li> <li> <a href="regadio.html">Regadío</a> </li> <li> <a href="botrytis.html">Botrytis</a> </li>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
176
<li> <a href="corregirpoda.html">Corregir poda</a> </li> </ul> <!-- /.nav-second-level --> </li> </ul> </div> <!-- /.sidebar-collapse --> </div> <!-- /.navbar-static-side --> </nav> <div id="page-wrapper"> <div class="row"> <div class="col-lg-12"> <h1 class="page-header">Alertas para Regar</h1> </div> <!-- /.col-lg-12 --> </div> <!-- /.row --> <div class="row"> <div class="inner"></div> </div> <!-- /.row --> </div> <!-- /#page-wrapper --> </div> <!-- /#wrapper --> </body> </html>
APARTADO D.7 - BOTRYTIS.HTML
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="VinIoT"> <meta name="author" content="Amaya Manzano"> <title>VinIoT</title> <!-- Bootstrap Core CSS -->
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
177
<link href="../bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> <!-- MetisMenu CSS --> <link href="../bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> <!-- Custom CSS --> <link href="../dist/css/sb-admin-2.css" rel="stylesheet"> <!-- Custom Fonts --> <link href="../bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <!-- jQuery --> <script src="../bower_components/jquery/dist/jquery.min.js"></script> <!-- Bootstrap Core JavaScript --> <script src="../bower_components/bootstrap/dist/js/bootstrap.min.js"></script> <!-- Metis Menu Plugin JavaScript --> <script src="../bower_components/metisMenu/dist/metisMenu.min.js"></script> <!-- Custom Theme JavaScript --> <script src="../dist/js/sb-admin-2.js"></script> <script> function peticionJSON() { var url="https://iot-pruebas.eu-gb.mybluemix.net/infoBotrytis"; var xmlHttpReq = new XMLHttpRequest(); xmlHttpReq.onreadystatechange=function() { if (xmlHttpReq.readyState == 4 && xmlHttpReq.status==200) { $( ".inner" ).empty(); var objetoJSON = eval("(" + xmlHttpReq.responseText + ")"); for(i = 0; i < objetoJSON.length; i++) { var pl = objetoJSON[i].payload; var apptext = "<div class='col-lg-4'><div class='panel panel-red'><div class='panel-heading'>Alerta Botrytis</div><div class='panel-body'>" + pl + "</div></div></div>"; $( ".inner" ).append(apptext); } } } xmlHttpReq.open('GET', url, true); xmlHttpReq.send();
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
178
} </script> </head> <body onload="peticionJSON()"> <div id="wrapper"> <!-- Navigation --> <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="viniothome24.html">VinIoT</a> </div> <!-- /.navbar-header --> <ul class="nav navbar-top-links navbar-right"> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"> <i class="fa fa-user fa-fw"></i> <i class="fa fa-caret-down"></i> </a> <ul class="dropdown-menu dropdown-user"> <li><a href="http://nodeappprueba.eu-gb.mybluemix.net/l"><i class="fa fa-sign-out fa-fw"></i> Carrar Sesión</a> </li> </ul> <!-- /.dropdown-user --> </li> <!-- /.dropdown --> </ul> <!-- /.navbar-top-links --> <div class="navbar-default sidebar" role="navigation"> <div class="sidebar-nav navbar-collapse"> <ul class="nav" id="side-menu"> </br></br> <li> <a href="viniothome24.html"><i class="fa fa-dashboard fa-fw"></i> Panel de Control</a> </li> <li> <a href="#"><i class="fa fa-table fa-fw"></i> Consultas<span class="fa arrow"></span></a> <ul class="nav nav-second-level">
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
179
<li> <a href="tiempo.html">El Tiempo</a> </li> <li> <a href="calendario.html">Calendario</a> </li> </ul> <!-- /.nav-second-level --> </li> <li> <a href="historicos.html"><i class="fa fa-bar-chart-o fa-fw"></i> Datos Históricos</a> </li> <li> <a href="#"><i class="fa fa-bell"></i> Alerts<span class="fa arrow"></span></a> <ul class="nav nav-second-level"> <li> <a href="heladas.html">Heladas</a> </li> <li> <a href="regadio.html">Regadío</a> </li> <li> <a href="botrytis.html">Botrytis</a> </li> <li> <a href="corregirpoda.html">Corregir poda</a> </li> </ul> <!-- /.nav-second-level --> </li> </ul> </div> <!-- /.sidebar-collapse --> </div> <!-- /.navbar-static-side --> </nav> <div id="page-wrapper"> <div class="row"> <div class="col-lg-12"> <h1 class="page-header">Alertas enfermedad de Botrytis</h1> </div> <!-- /.col-lg-12 --> </div> <!-- /.row --> <div class="row"> <div class="inner"></div> </div> <!-- /.row --> </div> <!-- /#page-wrapper -->
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
180
</div> <!-- /#wrapper --> </body> </html>
APARTADO D.8 - CORREGIRPODA.HTML
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="VinIoT"> <meta name="author" content="Amaya Manzano"> <title>VinIoT</title> <!-- Bootstrap Core CSS --> <link href="../bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> <!-- MetisMenu CSS --> <link href="../bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> <!-- Custom CSS --> <link href="../dist/css/sb-admin-2.css" rel="stylesheet"> <!-- Custom Fonts --> <link href="../bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <!-- jQuery --> <script src="../bower_components/jquery/dist/jquery.min.js"></script> <!-- Bootstrap Core JavaScript --> <script src="../bower_components/bootstrap/dist/js/bootstrap.min.js"></script> <!-- Metis Menu Plugin JavaScript --> <script src="../bower_components/metisMenu/dist/metisMenu.min.js"></script> <!-- Custom Theme JavaScript --> <script src="../dist/js/sb-admin-2.js"></script>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
181
<script> function peticionJSON() { var url="https://iot-pruebas.eu-gb.mybluemix.net/infoPoda"; var xmlHttpReq = new XMLHttpRequest(); xmlHttpReq.onreadystatechange=function() { if (xmlHttpReq.readyState == 4 && xmlHttpReq.status==200) { $( ".inner" ).empty(); var objetoJSON = eval("(" + xmlHttpReq.responseText + ")"); for(i = 0; i < objetoJSON.length; i++) { var pl = objetoJSON[i].payload; var apptext = "<div class='col-lg-4'><div class='panel panel-yellow'><div class='panel-heading'>Alerta retrasar Poda</div><div class='panel-body'>" + pl + "</div></div></div>"; $( ".inner" ).append(apptext); } } } xmlHttpReq.open('GET', url, true); xmlHttpReq.send(); } </script> </head> <body onload="peticionJSON()"> <div id="wrapper"> <!-- Navigation --> <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="viniothome24.html">VinIoT</a> </div> <!-- /.navbar-header --> <ul class="nav navbar-top-links navbar-right"> <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#">
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
182
<i class="fa fa-user fa-fw"></i> <i class="fa fa-caret-down"></i> </a> <ul class="dropdown-menu dropdown-user"> <li><a href="http://nodeappprueba.eu-gb.mybluemix.net/"><i class="fa fa-sign-out fa-fw"></i> Cerrar Sesión</a> </li> </ul> <!-- /.dropdown-user --> </li> <!-- /.dropdown --> </ul> <!-- /.navbar-top-links --> <div class="navbar-default sidebar" role="navigation"> <div class="sidebar-nav navbar-collapse"> <ul class="nav" id="side-menu"> </br></br> <li> <a href="viniothome24.html"><i class="fa fa-dashboard fa-fw"></i> Panel de Control</a> </li> <li> <a href="#"><i class="fa fa-table fa-fw"></i> Consultas<span class="fa arrow"></span></a> <ul class="nav nav-second-level"> <li> <a href="tiempo.html">El Tiempo</a> </li> <li> <a href="calendario.html">Calendario</a> </li> </ul> <!-- /.nav-second-level --> </li> <li> <a href="historicos.html"><i class="fa fa-bar-chart-o fa-fw"></i> Datos Históricos</a> </li> <li> <a href="#"><i class="fa fa-bell"></i> Alerts<span class="fa arrow"></span></a> <ul class="nav nav-second-level"> <li> <a href="heladas.html">Heladas</a> </li> <li> <a href="regadio.html">Regadío</a> </li> <li> <a href="botrytis.html">Botrytis</a> </li> <li>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
183
<a href="corregirpoda.html">Corregir poda</a> </li> </ul> <!-- /.nav-second-level --> </li> </ul> </div> <!-- /.sidebar-collapse --> </div> <!-- /.navbar-static-side --> </nav> <div id="page-wrapper"> <div class="row"> <div class="col-lg-12"> <h1 class="page-header">Alertas adelantar Poda</h1> </div> <!-- /.col-lg-12 --> </div> <!-- /.row --> <div class="row"> <div class="inner"></div> </div> <!-- /.row --> </div> <!-- /#page-wrapper --> </div> <!-- /#wrapper --> </body> </html>
APARTADO D.9 - LOGIN.HTML
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="VinIoT - Login"> <meta name="author" content="Amaya Manzano"> <title>VinIoT - Login</title>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
184
<!-- Bootstrap Core CSS --> <link href="../bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> <!-- MetisMenu CSS --> <link href="../bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> <!-- Custom CSS --> <link href="../dist/css/sb-admin-2.css" rel="stylesheet"> <!-- Custom Fonts --> <link href="../bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <!-- jQuery --> <script src="../bower_components/jquery/dist/jquery.min.js"></script> <!-- Bootstrap Core JavaScript --> <script src="../bower_components/bootstrap/dist/js/bootstrap.min.js"></script> <!-- Metis Menu Plugin JavaScript --> <script src="../bower_components/metisMenu/dist/metisMenu.min.js"></script> <!-- Custom Theme JavaScript --> <script src="../dist/js/sb-admin-2.js"></script> </head> <body> <div class="container"> <div class="row"> <div class="col-md-4 col-md-offset-4"> <div class="login-panel panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">Entre en su plataforma VinIoT</h3> </div> <div class="panel-body"> <form action="/auth" method="GET"> <fieldset> <div class="form-group"> <input type="text" name="email" class="form-control" placeholder="E-mail" autofocus> </div> <div class="form-group"> <input type="password" name="password" class="form-control" placeholder="Password"> </div> <input type="submit" value="Entrar" id="btnReg" class="btn btn-lg btn-success btn-block"/>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
185
</fieldset> </form> </div> </div> </div> </div> </div> </body> </html>
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO D
186
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO E
187
ANEXO E
APARTADO E.1 - FLUJOS NODE-RED. SECCIÓN DE GRÁFICOS EN
TIEMPO REAL
[{"id":"601f4565.1b459c","type":"function","z":"8155681e.55d758","name":"Filtra rLuz","func":"if(msg.payload.d!==undefined){\n msg.payload = msg.payload.d.light;\n return msg;\n}\n\n \n\n","outputs":1,"noerr":0,"x":281.58327865600586,"y":124.74996948242188,"wires":[["b1afb25a.f6e89"]]},{"id":"bc26de8e.6eaa1","type":"ibmiot in","z":"8155681e.55d758","authentication":"boundService","apiKey":"","inputType":"evt","deviceId":"b0b448d02787","applicationId":"","deviceType":"SensorTag-2.0","eventType":"+","commandType":"","format":"json","name":"b0b448d02787","service":"registered","allDevices":"","allApplications":"","allDeviceTypes":"","allEvents":true,"allCommands":"","allFormats":true,"x":92.83329010009766,"y":177.74996948242188,"wires":[["601f4565.1b459c","cd951156.fe99","241844e6.061c2c"]]},{"id":"ee38b001.9b852","type":"websocket out","z":"8155681e.55d758","name":"","server":"b983c58a.bc66f8","client":"","x":541.9165687561035,"y":179.4166603088379,"wires":[]},{"id":"cd951156.fe99","type":"function","z":"8155681e.55d758","name":"Filtrar Temperatura","func":"if(msg.payload.d!==undefined){\n msg.payload = msg.payload.d.ambientTemp;\n return msg;\n}\n\n \n\n","outputs":1,"noerr":0,"x":310.075740814209,"y":178.93936157226562,"wires":[["ee38b001.9b852"]]},{"id":"9ef18d7c.c49a6","type":"websocket out","z":"8155681e.55d758","name":"","server":"62149442.5c4b8c","client":"","x":536.9165992736816,"y":239.4166603088379,"wires":[]},{"id":"241844e6.061c2c","type":"function","z":"8155681e.55d758","name":"Filtrar Humedad","func":"if(msg.payload.d!==undefined){\n msg.payload = msg.payload.d.humidity;\n return msg;\n}\n\n \n\n","outputs":1,"noerr":0,"x":298.075740814209,"y":239.93936347961426,"wires":[["9ef18d7c.c49a6"]]},{"id":"b1afb25a.f6e89","type":"websocket out","z":"8155681e.55d758","name":"","server":"388b6be1.670d94","client":"","x":531.4999694824219,"y":124.8333511352539,"wires":[]},{"id":"4d90333b.b4abfc","type":"comment","z":"8155681e.55d758","name":"Datos para los gráficos en tiempo real","info":"","x":188.125,"y":45.416669845581055,"wires":[]},{"id":"b983c58a.bc66f8","type":"websocket-listener","z":"8155681e.55d758","path":"/ws/temp","wholemsg":"false"},{"id":"62149442.5c4b8c","type":"websocket-listener","z":"8155681e.55d758","path":"/ws/hum","wholemsg":"false"},{"id":"388b6be1.670d94","type":"websocket-listener","z":"8155681e.55d758","path":"/ws/luz","wholemsg":"false"}]
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO E
188
APARTADO E.2 - FLUJOS NODE-RED. SECCIÓN DE ALERTAS
[{"id":"d80ee08d.24509","type":"ibmiot in","z":"9c303daf.ab164","authentication":"boundService","apiKey":"","inputType":"evt","deviceId":"b0b448d02787","applicationId":"","deviceType":"SensorTag-2.0","eventType":"+","commandType":"","format":"json","name":"b0b448d02787","service":"registered","allDevices":false,"allApplications":false,"allDeviceTypes":false,"allEvents":true,"allCommands":false,"allFormats":true,"x":128.74999237060547,"y":177.91664791107178,"wires":[["5ace500b.45ae1"]]},{"id":"f70f2101.97b18","type":"function","z":"9c303daf.ab164","name":"Alerta heladas","func":"var nombreMes = [\"Enero\",\"Febrero\", \"Marzo\",\"Abril\",\"Mayo\",\"Junio\",\"Julio\",\"Agosto\",\"Septiembre\",\"Octubre\",\"Noviembre\",\"Diciembre\"];\nvar fecha= new Date();\nfecha.setHours(fecha.getHours()+2);\nvar dia=fecha.getDate();\nvar numeroMes=fecha.getMonth();\nvar anho=fecha.getFullYear();\nvar hora=fecha.getHours();\nvar minuto=fecha.getMinutes();\nvar segundo=fecha.getSeconds();\nvar fechaCompleta= dia + \" de \" + nombreMes[numeroMes] + \" \" + anho + \" a las \" + hora + \":\" + minuto + \":\" + segundo;\n\nvar temp=msg.payload.d.ambientTemp;\nif(temp<1)\n{\n msg.payload=\"El \" + fechaCompleta + \" hay riesgo de helada. Se recomienda encender el riego para prevenir. \";\n return msg;\n}\n\nreturn null;","outputs":1,"noerr":0,"x":537.7973861694336,"y":176.60704708099365,"wires":[["debd195.34b9de8","199efed5.035ce1"]]},{"id":"199efed5.035ce1","type":"e-mail","z":"9c303daf.ab164","server":"smtp.gmail.com","port":"465","name":"[email protected]","dname":"","x":784.7499389648438,"y":120.58332824707031,"wires":[]},{"id":"debd195.34b9de8","type":"cloudant out","z":"9c303daf.ab164","name":"Guardar en heladas","cloudant":"","database":"heladas","service":"IoT Pruebas-cloudantNoSQLDB","payonly":true,"operation":"insert","x":768.6665649414062,"y":235.6666431427002,"wires":[]},{"id":"f29de0bc.6ffde","type":"http in","z":"9c303daf.ab164","name":"","url":"/infoHeladas","method":"get","swaggerDoc":"","x":228.74999237060547,"y":325.9166784286499,"wires":[["bd253a0e.e5d778"]]},{"id":"a9a55874.2557a8","type":"http response","z":"9c303daf.ab164","name":"","x":577.416618347168,"y":324.5833730697632,"wires":[]},{"id":"bd253a0e.e5d778","type":"cloudant in","z":"9c303daf.ab164","name":"","cloudant":"","database":"heladas","service":"IoT Pruebas-cloudantNoSQLDB","search":"_all_","design":"tempsearch","index":"filtroTemp","x":409.08333587646484,"y":326.25030422210693,"wires":[["a9a55874.2557a8"]]},{"id":"cf5f914a.1fa8d","type":"comment","z":"9c303daf.ab164","name":"Alerta Heladas guardar BBDD y email","info":"","x":198.74999237060547,"y":106.33333015441895,"wires":[]},{"id":"b1ee909f.a7b7c","type":"comment","z":"9c303daf.ab164","name":"Mandar a web alerta heladas lo de la BBDD","info":"","x":218.74999237060547,"y":261.4999895095825,"wires":[]},{"id":"c00d33de.06bdf","type":"ibmiot in","z":"9c303daf.ab164","authentication":"boundService","apiKey":"","inputType":"evt","deviceId":"b0b448d02787","applicationId":"","deviceType":"SensorTag-2.0","eventType":"+","commandType":"","format":"json","name":"b0b448d02787","service":"registered","allDevices":false,"allApplications":false,"allDeviceTypes":false,"allEvents":true,"allCommands":false,"allFormats":true,"x":121.41665649414062,"y":554.4166917800903,"wires":[["2e82c867.d835b8"]]},{"id":"58e17186.09659","type
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO E
189
":"function","z":"9c303daf.ab164","name":"Alerta regadio","func":"var nombreMes = [\"Enero\",\"Febrero\", \"Marzo\",\"Abril\",\"Mayo\",\"Junio\",\"Julio\",\"Agosto\",\"Septiembre\",\"Octubre\",\"Noviembre\",\"Diciembre\"];\nvar fecha= new Date();\nfecha.setHours(fecha.getHours()+2);\nvar dia=fecha.getDate();\nvar numeroMes=fecha.getMonth();\nvar anho=fecha.getFullYear();\nvar hora=fecha.getHours();\nvar minuto=fecha.getMinutes();\nvar segundo=fecha.getSeconds();\nvar fechaCompleta= dia + \" de \" + nombreMes[numeroMes] + \" \" + anho + \" a las \" + hora + \":\" + minuto + \":\" + segundo;\n\nvar temp=msg.payload.d.ambientTemp;\nvar hum=msg.payload.d.humidity;\n\nif(temp>30 && hum<40)\n{\n msg.payload=\"El \" + fechaCompleta + \" se recomienda regar porque el suelo esta seco \";\n return msg;\n}\n\nreturn null;","outputs":1,"noerr":0,"x":532.7973937988281,"y":553.1071825027466,"wires":[["1e91c9f2.e76326","cf538a81.334868"]]},{"id":"1e91c9f2.e76326","type":"e-mail","z":"9c303daf.ab164","server":"smtp.gmail.com","port":"465","name":"[email protected]","dname":"","x":781.25,"y":489.3334255218506,"wires":[]},{"id":"cf538a81.334868","type":"cloudant out","z":"9c303daf.ab164","name":"Guardar en regadio","cloudant":"","database":"regadio","service":"IoT Pruebas-cloudantNoSQLDB","payonly":true,"operation":"insert","x":760.1666259765625,"y":608.9167404174805,"wires":[]},{"id":"f77abe6c.a2c03","type":"http in","z":"9c303daf.ab164","name":"","url":"/infoRegadio","method":"get","swaggerDoc":"","x":224.41665649414062,"y":700.4166994094849,"wires":[["99a934fb.bcf538"]]},{"id":"d849dd5f.0d2ae","type":"http response","z":"9c303daf.ab164","name":"","x":576.4166259765625,"y":700.0833864212036,"wires":[]},{"id":"99a934fb.bcf538","type":"cloudant in","z":"9c303daf.ab164","name":"","cloudant":"","database":"regadio","service":"IoT Pruebas-cloudantNoSQLDB","search":"_all_","design":"tempsearch","index":"filtroTemp","x":408.0833435058594,"y":701.7503175735474,"wires":[["d849dd5f.0d2ae"]]},{"id":"d115c429.46d228","type":"comment","z":"9c303daf.ab164","name":"Alerta Regadio guardar BBDD y email","info":"","x":195.25001525878906,"y":474.83348846435547,"wires":[]},{"id":"84185473.870998","type":"comment","z":"9c303daf.ab164","name":"Mandar a web alerta regadio lo de la BBDD","info":"","x":212.6666259765625,"y":650.7500562667847,"wires":[]},{"id":"67614e8e.6e91e","type":"ibmiot in","z":"9c303daf.ab164","authentication":"boundService","apiKey":"","inputType":"evt","deviceId":"b0b448d02787","applicationId":"","deviceType":"SensorTag-2.0","eventType":"+","commandType":"","format":"json","name":"b0b448d02787","service":"registered","allDevices":false,"allApplications":false,"allDeviceTypes":false,"allEvents":true,"allCommands":false,"allFormats":true,"x":116.91665649414062,"y":933.9167528152466,"wires":[["85a100d0.353ea"]]},{"id":"5afe31.f7b051d","type":"function","z":"9c303daf.ab164","name":"Alerta botrytis","func":"var nombreMes = [\"Enero\",\"Febrero\", \"Marzo\",\"Abril\",\"Mayo\",\"Junio\",\"Julio\",\"Agosto\",\"Septiembre\",\"Octubre\",\"Noviembre\",\"Diciembre\"];\nvar fecha= new Date();\nfecha.setHours(fecha.getHours()+2);\nvar dia=fecha.getDate();\nvar numeroMes=fecha.getMonth();\nvar anho=fecha.getFullYear();\nvar hora=fecha.getHours();\nvar minuto=fecha.getMinutes();\nvar segundo=fecha.getSeconds();\nvar fechaCompleta= dia + \" de \" + nombreMes[numeroMes] + \" \" + anho + \" a las \" + hora + \":\" + minuto + \":\" + segundo;\n\nvar temp=msg.payload.d.ambientTemp;\nvar
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO E
190
luz=msg.payload.d.light;\nvar hum=msg.payload.d.humidity;\n\nif(hum>80 && temp>15 && temp<20 && luz<100)\n{\n msg.payload=\"El \" + fechaCompleta + \" hay riesgo de enfermedad de botrytis u otras enfermedades fúngicas. Se recomienda revisar los viñedos. \";\n return msg;\n}\n\nreturn null;","outputs":1,"noerr":0,"x":498.2973937988281,"y":932.6071825027466,"wires":[["5d81e66.58a5118","451efbf1.975084"]]},{"id":"5d81e66.58a5118","type":"e-mail","z":"9c303daf.ab164","server":"smtp.gmail.com","port":"465","name":"[email protected]","dname":"","x":742.75,"y":850.5835247039795,"wires":[]},{"id":"451efbf1.975084","type":"cloudant out","z":"9c303daf.ab164","name":"Guardar en botrytis","cloudant":"","database":"botrytis","service":"IoT Pruebas-cloudantNoSQLDB","payonly":true,"operation":"insert","x":724.4166259765625,"y":1014.9168395996094,"wires":[]},{"id":"73a927dd.280eb8","type":"http in","z":"9c303daf.ab164","name":"","url":"/infoBotrytis","method":"get","swaggerDoc":"","x":238.91665649414062,"y":1084.9167833328247,"wires":[["7f62ffb4.66a26"]]},{"id":"dd52835a.00752","type":"http response","z":"9c303daf.ab164","name":"","x":590.9166259765625,"y":1084.5834703445435,"wires":[]},{"id":"7f62ffb4.66a26","type":"cloudant in","z":"9c303daf.ab164","name":"","cloudant":"","database":"botrytis","service":"IoT Pruebas-cloudantNoSQLDB","search":"_all_","design":"tempsearch","index":"filtroTemp","x":422.5833435058594,"y":1086.2504014968872,"wires":[["dd52835a.00752"]]},{"id":"d21d5da0.4cb34","type":"comment","z":"9c303daf.ab164","name":"Alerta Botrytis guardar BBDD y email","info":"","x":188.50001525878906,"y":825.8335151672363,"wires":[]},{"id":"76f2983a.b96358","type":"comment","z":"9c303daf.ab164","name":"Mandar a web alerta botrytis lo de la BBDD","info":"","x":196.25,"y":1032.7501459121704,"wires":[]},{"id":"e31ec0c9.9c226","type":"e-mail","z":"9c303daf.ab164","server":"smtp.gmail.com","port":"465","name":"[email protected]","dname":"","x":1067.4998397827148,"y":1203.0001754760742,"wires":[]},{"id":"78e02349.0e483c","type":"cloudant out","z":"9c303daf.ab164","name":"Guardar en poda","cloudant":"","database":"poda","service":"IoT Pruebas-cloudantNoSQLDB","payonly":true,"operation":"insert","x":1047.666404724121,"y":1335.3334274291992,"wires":[]},{"id":"df1ea5a8.9d3108","type":"http in","z":"9c303daf.ab164","name":"","url":"/infoPoda","method":"get","swaggerDoc":"","x":129.6666488647461,"y":1548.3335494995117,"wires":[["b74aa2e6.c4a0c"]]},{"id":"dab158.58949ea8","type":"http response","z":"9c303daf.ab164","name":"","x":481.66661834716797,"y":1548.0002365112305,"wires":[]},{"id":"b74aa2e6.c4a0c","type":"cloudant in","z":"9c303daf.ab164","name":"","cloudant":"","database":"poda","service":"IoT Pruebas-cloudantNoSQLDB","search":"_all_","design":"tempsearch","index":"filtroTemp","x":303.33333587646484,"y":1549.6671676635742,"wires":[["dab158.58949ea8"]]},{"id":"5b106bf6.d6b704","type":"comment","z":"9c303daf.ab164","name":"Alerta Poda BBDD y email","info":"","x":149.49999237060547,"y":1211.0001754760742,"wires":[]},{"id":"5d9c64b7.e2643c","type":"comment","z":"9c303daf.ab164","name":"Mandar a web alerta poda lo de la BBDD","info":"","x":202.66661834716797,"y":1478.6668014526367,"wires":[]},{"id":"5ace500b.45ae1","type":"delay","z":"9c303daf.ab164","name":"1 dato cada 2h","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"12","rateUnits":"day","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":339.24999237060547,"y":177.58333492279053,"wires":[["f70f2101.97b18"]]},{"id
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO E
191
":"2e82c867.d835b8","type":"delay","z":"9c303daf.ab164","name":"1 dato cada 2h","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"12","rateUnits":"day","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":331.4166564941406,"y":553.0833787918091,"wires":[["58e17186.09659"]]},{"id":"9e4ff75a.720eb8","type":"smooth","z":"9c303daf.ab164","name":"Media temp","action":"mean","count":"180","round":"3","x":696.4999618530273,"y":1363.3334274291992,"wires":[["a59f813f.f32c6"]]},{"id":"a59f813f.f32c6","type":"function","z":"9c303daf.ab164","name":"Alerta poda","func":"var nombreMes = [\"Enero\",\"Febrero\", \"Marzo\",\"Abril\",\"Mayo\",\"Junio\",\"Julio\",\"Agosto\",\"Septiembre\",\"Octubre\",\"Noviembre\",\"Diciembre\"];\nvar fecha= new Date();\nfecha.setHours(fecha.getHours()+2);\nvar dia=fecha.getDate();\nvar numeroMes=fecha.getMonth();\nvar anho=fecha.getFullYear();\nvar hora=fecha.getHours();\nvar minuto=fecha.getMinutes();\nvar segundo=fecha.getSeconds();\nvar fechaCompleta= dia + \" de \" + nombreMes[numeroMes] + \" \" + anho + \" a las \" + hora + \":\" + minuto + \":\" + segundo;\n\n\nif(dia==15 && numeroMes==0 && hora==12 && msg.payload<4)\n{\n msg.payload=\"El \" + fechaCompleta + \" hay riesgo de heladas. Se recomienda retrasar la poda 15 dias. \";\n return msg;\n}\n\nreturn null;","outputs":1,"noerr":0,"x":855.8332138061523,"y":1268.5476608276367,"wires":[["e31ec0c9.9c226","78e02349.0e483c"]]},{"id":"6f642923.951528","type":"ibmiot in","z":"9c303daf.ab164","authentication":"boundService","apiKey":"","inputType":"evt","deviceId":"b0b448d02787","applicationId":"","deviceType":"SensorTag-2.0","eventType":"+","commandType":"","format":"json","name":"b0b448d02787","service":"registered","allDevices":false,"allApplications":false,"allDeviceTypes":false,"allEvents":true,"allCommands":false,"allFormats":true,"x":120.99999237060547,"y":1291.8571090698242,"wires":[["a3c5003f.84a4b"]]},{"id":"a3c5003f.84a4b","type":"function","z":"9c303daf.ab164","name":"Coger temp enero dias 1-15","func":"var fecha= new Date();\nvar dia=fecha.getDate();\nvar numeroMes=fecha.getMonth();\nif(numeroMes==0 && dia>1 && dia <15)\n{\n msg.payload=msg.payload.d.ambientTemp;\n return msg;\n}\nreturn null;","outputs":1,"noerr":0,"x":320.49999237060547,"y":1371.6666793823242,"wires":[["ff5224c.1d898d8"]]},{"id":"ff5224c.1d898d8","type":"delay","z":"9c303daf.ab164","name":"1 dato cada 2h","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"12","rateUnits":"day","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":527.4999008178711,"y":1271.0000534057617,"wires":[["9e4ff75a.720eb8"]]},{"id":"85a100d0.353ea","type":"delay","z":"9c303daf.ab164","name":"1 dato cada 2h","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"12","rateUnits":"day","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":316.9166564941406,"y":934.5833787918091,"wires":[["5afe31.f7b051d"]]}]
APARTADO E.3 - FLUJOS NODE-RED. SECCIÓN DE CHAT
[{"id":"223bc03e.07a4b","type":"websocket in","z":"a718e21a.5d21b","name":"","server":"f3e52626.1b7c98","client":"","x":121.41668319702148,"y":127.66665458679199,"wires":[["d97141df.d0129"]]},{"id":"d97141df.d0129","type":"function","z":"a718e21a.5d21b","name":"Session","func":"delete msg._session;\nreturn
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO E
192
msg;\n\n","outputs":1,"noerr":0,"x":296.6666831970215,"y":127.66665458679199,"wires":[["596e6eae.d91ef"]]},{"id":"596e6eae.d91ef","type":"websocket out","z":"a718e21a.5d21b","name":"","server":"f3e52626.1b7c98","client":"","x":472.16668701171875,"y":127.66664695739746,"wires":[]},{"id":"ad714e8b.6d3ae","type":"comment","z":"a718e21a.5d21b","name":"Chat para los agricultores en el panel de control","info":"","x":230.625,"y":64.1666669845581,"wires":[]},{"id":"f3e52626.1b7c98","type":"websocket-listener","z":"","path":"/ws/chat","wholemsg":"false"}]
APARTADO E.4 - FLUJOS NODE-RED. SECCIÓN DEL HISTÓRICO
[{"id":"19afcef1.386781","type":"ibmiot in","z":"99b5bfd1.008e7","authentication":"boundService","apiKey":"","inputType":"evt","deviceId":"b0b448d02787","applicationId":"","deviceType":"SensorTag-2.0","eventType":"+","commandType":"","format":"json","name":"b0b448d02787","service":"registered","allDevices":false,"allApplications":false,"allDeviceTypes":false,"allEvents":true,"allCommands":false,"allFormats":true,"x":163.66665649414062,"y":183.66661834716797,"wires":[["5521d886.ead728"]]},{"id":"d5e0c3e8.87f35","type":"function","z":"99b5bfd1.008e7","name":"Añadir fecha y hora","func":"var fecha = new Date();\nvar fechaString= new Date();\nfechaString.setHours(fechaString.getHours()+2);\nvar fech=fechaString.toJSON();\nvar id= \"b0b448d02787\";\n\nmsg.payload.d.objectTemp = fech;\nmsg.payload.d.magX = id;\nreturn msg;","outputs":1,"noerr":0,"x":596.0474090576172,"y":182.35706520080566,"wires":[["1d2bb092.cd095f"]]},{"id":"1d2bb092.cd095f","type":"cloudant out","z":"99b5bfd1.008e7","name":"Guardar en Cloudant","cloudant":"","database":"nodered2","service":"IoT Pruebas-cloudantNoSQLDB","payonly":true,"operation":"insert","x":832.3808670043945,"y":181.57139778137207,"wires":[]},{"id":"4e483c15.18caf4","type":"http in","z":"99b5bfd1.008e7","name":"","url":"/datos","method":"get","swaggerDoc":"","x":146.50000190734863,"y":412.3333625793457,"wires":[["792cf425.1e5b6c"]]},{"id":"6694cb53.7eb1e4","type":"http response","z":"99b5bfd1.008e7","name":"","x":643.2500038146973,"y":413.50002098083496,"wires":[]},{"id":"94f838ec.99bee8","type":"cloudant in","z":"99b5bfd1.008e7","name":"","cloudant":"","database":"nodered2","service":"IoT Pruebas-cloudantNoSQLDB","search":"_idx_","design":"tempsearch","index":"filtroTemp","x":479.41668701171875,"y":412.4167060852051,"wires":[["6694cb53.7eb1e4"]]},{"id":"792cf425.1e5b6c","type":"function","z":"99b5bfd1.008e7","name":"Selección","func":"if(msg.payload.date && msg.payload.temp && msg.payload.hum && msg.payload.light)\n{\n msg.payload = \"fecha:\\\"\"+ msg.payload.date +\"\\\"\"+ \" AND \" + \"temperatura:'\"+ msg.payload.temp+\"'\"+ \" AND \" + \"humedad:'\"+ msg.payload.hum+\"'\"+ \" AND \" + \"luz:'\"+ msg.payload.light+\"'\";\n}\nif(msg.payload.date && msg.payload.temp && msg.payload.hum)\n{\n msg.payload = \"fecha:\\\"\"+ msg.payload.date +\"\\\"\"+ \" AND \" + \"temperatura:'\"+ msg.payload.temp+\"'\"+ \" AND \" + \"humedad:'\"+ msg.payload.hum+\"'\";\n}\nif(msg.payload.date && msg.payload.temp && msg.payload.light)\n{\n msg.payload = \"fecha:\\\"\"+ msg.payload.date +\"\\\"\"+ \" AND \" + \"temperatura:'\"+ msg.payload.temp+\"'\"+ \" AND \" + \"luz:'\"+ msg.payload.light+\"'\";\n}\nif(msg.payload.date && msg.payload.hum &&
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO E
193
msg.payload.light)\n{\n msg.payload = \"fecha:\\\"\"+ msg.payload.date +\"\\\"\"+ \" AND \" + \"humedad:'\"+ msg.payload.hum+\"'\"+ \" AND \" + \"luz:'\"+ msg.payload.light+\"'\";\n}\nif(msg.payload.temp && msg.payload.hum && msg.payload.light)\n{\n msg.payload = \"temperatura:'\"+ msg.payload.temp+\"'\"+ \" AND \" + \"humedad:'\"+ msg.payload.hum+\"'\"+ \" AND \" + \"luz:'\"+ msg.payload.light+\"'\";\n}\nif(msg.payload.date && msg.payload.temp)\n{\n msg.payload = \"fecha:\\\"\"+ msg.payload.date +\"\\\"\"+ \" AND \" + \"temperatura:'\"+ msg.payload.temp+\"'\";\n}\nif(msg.payload.date && msg.payload.hum)\n{\n msg.payload = \"fecha:\\\"\"+ msg.payload.date +\"\\\"\"+ \" AND \" + \"humedad:'\"+ msg.payload.hum+\"'\";\n}\nif(msg.payload.date && msg.payload.light)\n{\n msg.payload = \"fecha:\\\"\"+ msg.payload.date +\"\\\"\"+ \" AND \" + \"luz:'\"+ msg.payload.light+\"'\";\n}\nif(msg.payload.temp && msg.payload.hum)\n{\n msg.payload = \"temperatura:'\"+ msg.payload.temp +\"'\"+ \" AND \" + \"humedad:'\"+ msg.payload.hum+\"'\";\n}\nif(msg.payload.temp && msg.payload.light)\n{\n msg.payload = \"temperatura:'\"+ msg.payload.temp +\"'\"+ \" AND \" + \"luz:'\"+ msg.payload.light+\"'\";\n}\nif(msg.payload.hum && msg.payload.light)\n{\n msg.payload = \"humedad:'\"+ msg.payload.hum +\"'\"+ \" AND \" + \"luz:'\"+ msg.payload.light+\"'\";\n}\nif(msg.payload.date)\n{\n msg.payload = \"fecha:\\\"\"+ msg.payload.date +\"\\\"\";\n}\nif(msg.payload.temp)\n{\n msg.payload = \"temperatura:'\"+ msg.payload.temp +\"'\";\n}\nif(msg.payload.hum)\n{\n msg.payload = \"humedad:'\"+ msg.payload.hum +\"'\";\n}\nif(msg.payload.light)\n{\n msg.payload = \"luz:'\"+ msg.payload.light +\"'\";\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":312.24999618530273,"y":413.3333930969238,"wires":[["94f838ec.99bee8"]]},{"id":"5521d886.ead728","type":"delay","z":"99b5bfd1.008e7","name":"1 dato cada 2h","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"12","rateUnits":"day","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":384.5000305175781,"y":184.00000762939453,"wires":[["d5e0c3e8.87f35"]]},{"id":"e997cf09.102fd","type":"comment","z":"99b5bfd1.008e7","name":"Recoger datos para la tabla de históricos","info":"","x":238.125,"y":72.91667079925537,"wires":[]},{"id":"f406fe79.8b145","type":"comment","z":"99b5bfd1.008e7","name":"Coger los datos de la BBDD para mostrarlos en la tabla según lo seleccionado","info":"","x":351.875,"y":299.1666736602783,"wires":[]}]
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO E
194
APARTADO E.5 - SECCIÓN DEL TWEETS
[{"id":"202113c8.11c16c","type":"smooth","z":"3b21aeb8.6fe962","name":"Media temp","action":"mean","count":"1488","round":"3","x":748.0832290649414,"y":91.91670227050781,"wires":[["a9d63b.286a39c8"]]},{"id":"9f8f9a86.915a48","type":"function","z":"3b21aeb8.6fe962","name":"Alerta ","func":"var nombreMes = [\"Enero\",\"Febrero\", \"Marzo\",\"Abril\",\"Mayo\",\"Junio\",\"Julio\",\"Agosto\",\"Septiembre\",\"Octubre\",\"Noviembre\",\"Diciembre\"];\nvar fecha= new Date();\nfecha.setHours(fecha.getHours()+2);\nvar dia=fecha.getDate();\nvar numeroMes=fecha.getMonth();\nvar anho=fecha.getFullYear();\nvar hora=fecha.getHours();\nvar minuto=fecha.getMinutes();\nvar segundo=fecha.getSeconds();\nvar fechaCompleta= dia + \" de \" + nombreMes[numeroMes] + \" \" + anho + \" a las \" + hora + \":\" + minuto + \":\" + segundo;\nvar currentTime=new Date().getTime();\n\nif(dia==31 && numeroMes==7 && hora==23)\n{\n if(!context.lastTime)\n {\n context.lastTime=currentTime;\n if(msg.topic==\"temp\")\n {\n context.temp=\"temp\";\n return null;\n }\n if(msg.topic==\"hum\")\n {\n context.hum=\"temp\";\n return null;\n }\n }\n if(currentTime-context.lastTime>5000)\n {\n context.lastTime=currentTime;\n if(msg.topic==\"temp\")\n {\n context.temp=\"temp\";\n context.hum=null;\n return null;\n }\n if(msg.topic==\"hum\")\n {\n context.hum=\"hum\";\n context.temp=null;\n return null;\n }\n }else{\n context.lastTime=currentTime;\n if(msg.topic==\"temp\" && context.hum==\"hum\")\n {\n msg.payload=\"El \" + fechaCompleta + \" se confirma que la añada será excelente. \";\n return msg;\n }\n if(msg.topic==\"hum\" && context.temp==\"temp\")\n {\n msg.payload=\"El \" + fechaCompleta + \" se confirma que la añada será excelente. \";\n return msg;\n }\n }\n}\n \nreturn null;","outputs":1,"noerr":0,"x":1084.4165420532227,"y":196.1309356689453,"wires":[["248e69b6.f3d086"]]},{"id":"afaeb39d.4ab3d","type":"ibmiot in","z":"3b21aeb8.6fe962","authentication":"boundService","apiKey":"","inputType":"evt","deviceId":"b0b448d02787","applicationId":"","deviceType":"SensorTag-2.0","eventType":"+","commandType":"","format":"json","name":"b0b448d02787","service":"registered","allDevices":false,"allApplications":false,"allDeviceTypes":false,"allEvents":true,"allCommands":false,"allFormats":true,"x":102.41666412353516,"y":195.4402618408203,"wires":[["63ebc24f.e1f29c"]]},{"id":"63ebc24f.e1f29c","type":"function","z":"3b21aeb8.6fe962","name":"Coger datos julio y agosto","func":"var fecha= new Date();\nvar dia=fecha.getDate();\nvar numeroMes=fecha.getMonth();\nif(numeroMes==6 && numeroMes==7)\n{\n return msg;\n}\nreturn null;","outputs":1,"noerr":0,"x":338.0833206176758,"y":196.2498321533203,"wires":[["dfe547d4.1df5c8"]]},{"id":"dfe547d4.1df5c8","type":"delay","z":"3b21aeb8.6fe962","name":"1 dato por hora","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"24","rateUnits":"day","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":563.0831680297852,"y":196.5833282470703,"wires":[["2b21ba28.64b6a6","581b3522.9fe95c"]]},{"id":"248e69b6.f3d086","type":"twitter out","z":"3b21aeb8.6fe962","twitter":"","name":"Tweet","x":1267.249828338623,"y":196.66682624816895,"wires":[]},{"id":"39468bad.511ac4","type":"comment","z":"3b21
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO E
195
aeb8.6fe962","name":"Tweet añada excelente","info":"","x":120.08325958251953,"y":58.16684150695801,"wires":[]},{"id":"581b3522.9fe95c","type":"function","z":"3b21aeb8.6fe962","name":"Selección Temp","func":"msg.payload=msg.payload.d.ambientTemp;\nreturn msg;","outputs":1,"noerr":0,"x":567.9166030883789,"y":92.24983215332031,"wires":[["202113c8.11c16c"]]},{"id":"2b21ba28.64b6a6","type":"function","z":"3b21aeb8.6fe962","name":"Selección Hum","func":"msg.payload=msg.payload.d.humidity;\nreturn msg;","outputs":1,"noerr":0,"x":558.9166030883789,"y":291.2500762939453,"wires":[["c37e458.f8c1eb8"]]},{"id":"c37e458.f8c1eb8","type":"smooth","z":"3b21aeb8.6fe962","name":"Media hum","action":"mean","count":"1488","round":"3","x":737.0832290649414,"y":291.9168243408203,"wires":[["e4e71c1d.4cac9"]]},{"id":"a9d63b.286a39c8","type":"function","z":"3b21aeb8.6fe962","name":"25<temp<30","func":"if(msg.payload>24 && msg.payload<31)\n{\n msg.topic=\"temp\";\n return msg;\n}\nreturn null;","outputs":1,"noerr":0,"x":917.9166641235352,"y":92.91658020019531,"wires":[["9f8f9a86.915a48"]]},{"id":"e4e71c1d.4cac9","type":"function","z":"3b21aeb8.6fe962","name":"60<hum<70","func":"if(msg.payload>59 && msg.payload<71)\n{\n msg.topic=\"hum\";\n return msg;\n}\n\nreturn null;","outputs":1,"noerr":0,"x":905.0832901000977,"y":290.5833282470703,"wires":[["9f8f9a86.915a48"]]}]
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO E
196
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO F
197
ANEXO F
APARTADO F.1 - DEFINICIONES
Internet de las Cosas: Internet de las cosas o IoT, por sus siglas en inglés, es un concepto
que nació en el Instituto de Tecnología de Massachusetts. Se trata de una revolución en las
relaciones entre los objetos y las personas, o incluso entre los objetos directamente; que se
conectaran entre ellos y con la Red para ofrecer datos en tiempo real. Se podría decir que
es la digitalización del mundo físico [55].
Big Data: Según la definición del periódico El Economista, “Denominamos Big Data a la
gestión y análisis de enormes volúmenes de datos que no pueden ser tratados de manera
convencional, ya que superan los límites y capacidades de las herramientas de software
habitualmente utilizadas para la captura, gestión y procesamiento de datos. Dicho concepto
engloba infraestructuras, tecnologías y servicios que han sido creados para dar solución al
procesamiento de enormes conjuntos de datos estructurados, no estructurados o semi-
estructurados (mensajes en redes sociales, señales de móvil, archivos de audio, sensores,
imágenes digitales, datos de formularios, emails, datos de encuestas…) que pueden
provenir de sensores, micrófonos, cámaras, escáneres médicos, imágenes… El objetivo de
Big Data, al igual que los sistemas analíticos convencionales, es convertir el Dato en
información que facilita la toma de decisiones, incluso en tiempo real” [56].
Una definición más sencilla según Fernando Alfaro, co-fundador y socio en APR Aprende
a Pensar Al Revés, es que el Big Data es “La nueva forma de hacer contabilidad” [57].
Esto es porque el Big Data no trata de mostrar cientos de información recogida en las bases
de datos sin sentido; sino que consiste en pensar qué se puede hacer con esa información
para darle una utilidad que a nadie antes se le había ocurrido y con ello por ejemplo poder
ganar dinero, adelantarse a posibles sucesos o poder saber antes de que se entreguen las
cuentas anuales de una empresa si van a ser favorables o no gracias a la obtención de datos
en tiempo real.
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO F
198
Cloud Computing: La computación en la nube, es un paradigma que permite ofrecer
servicios de computación a través de la red [58].
La nube: “Es un nuevo modelo de uso de los equipos informáticos. Lo que normalmente
estaría en tu PC (tus programas o tus archivos, por ejemplo) pasa a estar en un conjunto de
servidores a los que puedes acceder a través de Internet y que forman la tal nube” [59].
PaaS: Una Plataforma como Servicio es un tipo de servicio cloud que proporciona una
plataforma y un entorno que permite a los desarrolladores crear aplicaciones y servicios
que funcionen a través de la red. Esto servicios se encuentran en la nube, y los usuarios
pueden acceder a ellos con su navegador web. Permite a los usuarios crear aplicaciones de
software utilizando herramientas suministradas por el proveedor [60].
MQTT: Message Queue Telemetry Transport es un protocolo de conectividad abierto
Cliente/Servidor que permite enviar mensajes a través de redes de alta latencia o con
restricciones. Fue diseñado para ser una mensajería Publish-Suscribe muy ligera y es muy
útil para conexiones en las que es importante no consumir mucho ancho de banda [61].
Bluemix: Es un entorno PaaS basado en open standards donde se pueden crear
aplicaciones directamente desde el sitio web en diferentes lenguajes de programación.
Además contiene un amplio catálogo de servicios en el que se pueden consumir servicios
tecnológicos de bases de datos relacionales, bases de datos noSQL, analítica de negocio,
servicios para aplicaciones de móviles, IoT… y no tan tecnológicos como por ejemplo un
localizador de código postal basado en una dirección [62]. Esta es la herramienta que se a
utilizar en este proyecto.
Gateway (GW): Es una puerta de enlace que permite conectar redes con protocolos y
arquitecturas diferentes a todos los niveles de comunicación [63].
HTML: Es un lenguaje de programación que se utiliza para el desarrollo de páginas web
en la parte de cliente. Sus siglas corresponden a HyperText Markup Language [64].
HTML5 es su última versión que añade nuevas funcionalidades. Para consultar más sobre
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO F
199
la semántica de este lenguaje se ha consultado en la página con la siguiente referencia:
[65].
JavaScript: Es un lenguaje de programación interpretado que apareció para ampliar las
posibilidades del HTML, ya que éste presentaba algunas limitaciones (como por ejemplo
mandar un mensaje de aviso) [66]. Es interpretado por todos los navegadores y
actualmente es utilizado sobre todo para enviar y recibir información del servidor con
ayuda de otras tecnologías como Ajax [67]. Para consultar más sobre la semántica de este
lenguaje se ha consultado en la página con la siguiente referencia: [68]. No solo se usa para
el lado del cliente, sino también del servidor con la ayuda de Node.js.
Node.js: Node interpreta JavaScript en el lado del servidor y se caracteriza principalmente
por cambiar la noción de cómo se trabaja con un servidor. Su principal ventaja es que
permite construir aplicaciones muy escalables y escribir relativamente poco código para
todas las decenas de conexiones simultáneas que tiene que hacer en una sólo una máquina
física [69].
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO F
200
UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
GRADO EN INGENIERÍA TELEMÁTICA
ANEXO G
201
ANEXO G
APARTADO G.1 – TARIFAS DE PRECIO/HORA TRABAJADA SEGÚN EL
PERFIL PROFESIONAL
Categoría PVP/hora PVP/jornada
Jefe de Proyecto 55 440
Analista Funcional Senior 45 360
Analista Funcional Junior 40 320
Analista Orgánico 35 280
Analista/Programador 33 264
Programador Senior 30 240
Programador Junior 23 184
Experiencia <=5 años
Consultor Junior 40 320
Consultor Senior 45 360
Tabla 12: Tarifas actuales del mercado según el perfil profesional
Nota: Las tarifas para proyectos a riesgo (quiere decir que se hace una oferta a precio
cerrado y se asume el riesgo de posibles desviaciones), se suelen incrementar en un
20/25%.