Sunteți pe pagina 1din 22

Manual de usuario y programador de la muestra de datos del sensor

de temperatura y humedad relativa del lab. de metrología, Facultad


de Ingeniería, Universidad de San Carlos de Guatemala

Carlos Raúl Estrada Alburez (alburez@openmailbox.org)


https://www.facebook.com/CarlosEstrada1996

20 de Febrero, 2018

Resumen

El presente documento explicará de la manera más detallada po-


sible el uso adecuado del sistema de medición de temperatura y
humedad relativa del laboratorio de Metrología, de la Facultad
de Ingeniería de la Universidad de San Carlos. Así como tam-
bién explicará de manera más extensa las funciones y código
que ha sido utilizado en este sistema de medición y represen-
tación de los datos. Para ello es necesario que el programador
tenga instalado alguna versión de Python 2.7.x1 .

Índice

1. Manual de Usuario 3
1.1. Recomendaciones Antes de Comenzar . . . . . . . . . 3
1.2. Síntesis del Programa . . . . . . . . . . . . . . . . . . 3
1.3. Secciones del Laboratorio . . . . . . . . . . . . . . . . 4
1.4. Utilizar Página Web . . . . . . . . . . . . . . . . . . . 4
1.4.1. Gráficas . . . . . . . . . . . . . . . . . . . . . . 4
1.4.2. Datos de Gráficas . . . . . . . . . . . . . . . . 6
1.4.3. Datos Instantáneos . . . . . . . . . . . . . . . . 7
1.5. Problemas en la muestra de datos y gráficas . . . . . . 7
1.5.1. Error en la muestra de datos instantáneos . . . 7
1.5.2. Las gráficas muestran un mensaje: “Datos In-
válidos” . . . . . . . . . . . . . . . . . . . . . . 8
1.5.3. Las gráficas no se actualizan de forma correcta 8
1
Para descargar python: https://www.python.org/downloads/
1.5.4. Otros Problemas . . . . . . . . . . . . . . . . . 8

2. Manual del Programador 9


2.1. Recomendaciones Antes de Comenzar . . . . . . . . . 9
2.2. Conexión del Sensor a Raspberry Pi . . . . . . . . . . 9
2.2.1. Credenciales de la Raspberry Pi . . . . . . . . . 11
2.3. Correr programas de obtención de datos . . . . . . . . 11
2.3.1. Ejecución de los programa. . . . . . . . . . . . 12
2.4. Diagrama de Flujo del Programa . . . . . . . . . . . . 14
2.5. Orden de Directorios y Archivos de datos . . . . . . . 15
2.6. Módulo DataObtainer . . . . . . . . . . . . . . . . . . 16
2.6.1. Función MinuteAv . . . . . . . . . . . . . . . . 17
2.6.2. Función GetTime . . . . . . . . . . . . . . . . 18
2.6.3. Función GetDir . . . . . . . . . . . . . . . . . 18
2.6.4. Función GetAverage . . . . . . . . . . . . . . . 18
2.6.5. Función InstantData . . . . . . . . . . . . . . . 19
2.7. Módulo Graphi . . . . . . . . . . . . . . . . . . . . . . 19
2.7.1. Función GetData . . . . . . . . . . . . . . . . 19
2.7.2. Función Average . . . . . . . . . . . . . . . . . 19
2.7.3. Función DoGraph . . . . . . . . . . . . . . . . 20
2.7.4. Función SelectGraph . . . . . . . . . . . . . . 20
2.8. Módulo DoGraph . . . . . . . . . . . . . . . . . . . . 20
2.9. Módulo ArchiveOrder . . . . . . . . . . . . . . . . . . 20
2.10. Página Web Local . . . . . . . . . . . . . . . . . . . . 20
2.10.1. Servidor Raspberry . . . . . . . . . . . . . . . 21
2.10.2. IP Raspberry Pi . . . . . . . . . . . . . . . . . 21
2.11. Descarga del Código . . . . . . . . . . . . . . . . . . . 22

2
1. Manual de Usuario
A continuación se explicará la forma adecuada para el uso del medidor
de temperatura y humedad relativa del laboratorio de Metrología. Así
como posibles errores que se pueden presentar a la hora de realizar las
gráficas.
La sección del manual de usuario es necesario que sea leído tanto por
el usuario final como el programador para entender directamente cual
es el uso pretendido de esta página web.

1.1. Recomendaciones Antes de Comenzar

• El dispositivo a utilizar debe estar conectado en la misma red que el


servidor (Router del Laboratorio de Metrología), por lo que debe
pedir la clave de la red a la persona correspondiente.
• La página está optimizada para su uso en el navegador Google Chro-
me2 , tanto para dispositivos móviles (Android e iOS), como para or-
denadores con distintos sistemas operativos (Windows, MacOSX y
Linux).
• Para poder acceder a la Raspberry Pi, ingresar esta dirección al na-
vegador: http://192.168.2.50/

1.2. Síntesis del Programa

Básicamente el programa le dará al usuario la facilitación de ver las


gráficas del cambio de temperatura y humedad relativa en distintos
intervalos de tiempo. De igual forma podrá acceder a ver la tempera-
tura y humedad relativa actual en los distintos salones del Laboratorio.

El usuario entra a la página

Usuario ingresa los valores


correspondientes para
muestra de las gráficas

Gráficas son mostradas al Usuario

Figura 1: Diagrama de Flujo del funcionamiento básico para muestra


de las gráficas.
Fuente: Elaboración Propia

2
Para descargar Google Chrome: https://www.google.com.gt/intl/es/chrome/

3
1.3. Secciones del Laboratorio

El diseño de la página web está orientado para poder obtener los datos
de tres distintos salones del laboratorio de Metrología. Actualmente
solo se cuenta con un sensor (Laboratorio de Presión), por lo que úni-
camente estará habilitada esa parte de la página.
Como plan a futuro se tiene pensado añadir sensores en la sección de
Metrología Eléctrica y la sección de Desarrollo tecnológico.

1.4. Utilizar Página Web

Primero el usuario debe ingresar a la dirección http://192.168.2.


50/ con el navegador Google Chrome, luego, dependiendo que desea
hacer/saber hará lo siguiente:

Figura 2: Al ingresar a la dirección web de la página el usuario verá la


siguiente página de inicio, en ella podrá descargar en su dispositivo el
manual de usuario.
Fuente: Elaboración Propia

1.4.1. Gráficas

Para visualización de las gráficas, el usuario debe redirigirse al salón


que desea analizar. Actualmente solo está disponible el Sensor 1 (Salón
de Presión). Los demás sensores no estarán activados.

4
Figura 3: Área de sensor 1, en los cuadros de texto el usuario puede
ingresar la fecha que quiere realizar el análisis de las gráficas.
Fuente: Elaboración Propia

Si el usuario desea ver, por ejemplo, la gráfica de temperatura del día


28/02/2018 de 01:00-02:00 AM. Se tendría que ingresar de la siguiente
forma:

5
Figura 4: Forma correcta de ingresar los datos, si se ingresa una fecha
con un solo dígito no es necesario colocar el cero, el programa lo
reconocerá de igual forma
Fuente: Elaboración Propia

Luego debe presionar el botón VER GRÁFICAS y podrá ver las grá-
ficas correspondientes a la fecha.

Figura 5: Muestra de la toma de datos de 01:00-02:00 AM del 28 de


Febrero del 2018
Fuente: Elaboración Propia

1.4.2. Datos de Gráficas

Para ver los datos promedio obtenidos a lo largo de un período de


tiempo, el usuario lo puede hacer mediante el botón DATOS. En esa
dirección el usuario podrá acceder a la base de datos en la que se guar-

6
dan tosos los datos de temperatura y humedad relativa desde que em-
pezó a funcionar.

Figura 6: El Usuario podrá revisar los datos accediendo mediante el


boton DATOS.
Fuente: Elaboración Propia

1.4.3. Datos Instantáneos

Si el usuario desea analizar los datos actualizados, en ese momento,


de temperatura y humedad relativa, lo podrá hacer accediendo en el
botón MEDIDAS ACTUALES, a lo cuál se le mostrará una página
similar a la siguiente:

Figura 7: Muestra de datos instantáneos.


Fuente: Elaboración Propia

1.5. Problemas en la muestra de datos y gráficas

1.5.1. Error en la muestra de datos instantáneos

Si en algún momento los datos instantáneos no son mostrados o ac-


tualizados de manera correcta es necesario revisar las conexiones del
sensor. Para ello ver las Figuras 9, 10 y 11, de la sección Manual del
Programador.

7
1.5.2. Las gráficas muestran un mensaje: “Datos Inválidos”

Si las figuras analizadas muestran un error de Datos Inválidos, signi-


fica que el usuario ha ingresado fechas fueras de lugar o el usuario ha
ingresado letras en lugar de números en los espacios correspondientes.

Figura 8: Error de Datos Inválidos.


Fuente: Elaboración Propia

1.5.3. Las gráficas no se actualizan de forma correcta

Si en dado caso las gráficas no son actualizadas, el usuario tendrá que


borrar la caché de su navegador o presionar las teclas Ctrl + F 5 para
poder actualizar sin caché, de nuevo, las gráficas.

1.5.4. Otros Problemas

Si en dado caso el usuario tiene problemas con el despliegue de algo


en la página. Debe comunicarse con el técnico correspondiente de
laboratorio o directamente a mi persona.
Mi forma de contacto lo podrá ver en la primera página del documento
(Vía Facebook o Correo Electrónico).

8
2. Manual del Programador
En el siguiente bloque se explicará todos los módulos y funciones que
se utilizaron para la adquisición de datos y muestra de los mismos. Si el
programador encargado desea probarlos es necesario tener en cuenta
algunos aspectos:

2.1. Recomendaciones Antes de Comenzar

• Todos los módulos hechos para la adquisición de datos fueron he-


chos en Python 2.7.9. Ya que la librería para el sensor únicamente
existe en Python 2 (hasta febrero del año 2018).
• Si se desea probar adecuadamente el funcionamiento de los pro-
gramas se recomienda que se utilice una Raspberry modelo 3B o
superior.
• La página web se optimizó para su uso en el navegador Google
Chrome, en cualquier sistema operativo (Incluyendo Android e iOS).
El uso de cualquier otro navegador puede causar algunos errores en
el despliegue de los gráficos y texto de la página.
• El código de los programas está comentado, explicando cada una de
las líneas lo más detallado posible. Cabe mencionar que los comen-
tarios se encuentran en inglés, esto para que el programador tenga
facilidad a la hora de leer el código del programa y los comentarios.
• A la hora de explicar alguna función o módulo se asumirá que el
programador tiene abierto en alguna parte el código que se está
explicando, para que se pueda ir analizando paso a paso. Los links
de descarga del programa y página web se encontrarán al final de
este documento.
• Se le recomienda a la persona encargada de editar el código que
haga una copia de todo antes de realizar cualquier cambio, de igual
forma al final de este documento encontrará un link con redirección
a MEGA para descargar la última versión del programa hecha por
mi persona.

2.2. Conexión del Sensor a Raspberry Pi

La raspberry que se está utilizando es el modelo 00De, siendo el nú-


mero de pines el representado en la figura 9.

9
Figura 9: Pines de Conexión de Raspberry Pi 2 modelo 00De
Fuente: http://www.smartsustainability.org/CIS508/?page_id=1585

Los pines utilizados son el GPIO4 para la conexión SDA, el primer


pin de +3V y cualquier pien de nivel de referencia (GND). Estos pines
pueden ser consultados en la Figura 9, de igual forma en las figuras
10 y 11 se puede observar la forma en la que se conectó el sensor a la
Raspberry del laboratorio.

Figura 10: Sensor conectado a Raspberry Pi. Vista Frontal


Fuente: Elaboración Propia

10
Figura 11: Sensor conectado a Raspberry Pi. Vista Periférica
Fuente: Elaboración Propia

Para mayor información del uso, conexión y manejo del sensor con la
Raspberry Pi, puede dirigirse a la siguiente página:
https://www.modmypi.com/blog/am2302-temphumidity-sensor
(La página se encuentra en inglés)

2.2.1. Credenciales de la Raspberry Pi

Credenciales de la Raspberry Pi del laboratorio de Metrología. Para


que el programador pueda acceder a ella y realizar los cambios perti-
nentes.

Usuario: pi

Contraseña: labmetro2018

2.3. Correr programas de obtención de datos

Para poder ejecutar los archivos de obtención de datos (esto en dado


caso el programador haya tenido que apagar la Raspberry Pi o se haya
sucitado algún problema) es necesario que el programador conozca el
directorio donde estos archivos se encuentran y la forma correcta de
ejecutarlos.
Utilizando la terminal de linux (cualquier distribución puede servir),
el programador utilizará ssh para realizar la conexión de la siguiente
forma.
$ ssh pi@192.168.2.50
Este comando puede cambiar si en dado caso el programador haya
reasignado una ip estática distinta, en dado caso debe ingresar la ip
que se reasignó.

11
Luego se ingresa la contraseña dada en la sección 2.2.1
Ahora el programador ingresará la dirección en donde se encuentran
los programas.
$ cd /var/www/html/ObtencionDeDatos
Ahora el programador puede visualizar los distintos programas hechos
en Python con el comando:
$ ls
Luego el programador puede editar el programa que quiera con el
editor de preferencia (nano, vi/vim, emacs, etc..) de no estar instalado,
el programador puede buscar como instalarlo.
Todos los programas se deben editar con permisos de root. Por ejem-
plo si el programador desea editar el programa ArchiveOrder.py la
forma de hacerlo es la siguiente:

$ sudo nano ArchiveOrder.py

2.3.1. Ejecución de los programa.

En dado caso se quiera ejecutar ese archivo debe crear terminales vir-
tuales con el programa screen3 , con el fin de poder ejecutar simultá-
neamente varios programas. Esto también se debe a que el programa,
como se explicará más adelante, trabaja de dos formas. Una parte que
se encarga de recopilar los datos (ArchiveOrder.py) y la otra que se en-
carga de enviar los datos y las gráficas al servidor web (DoGraph.py).
Por lo tanto para poder ejecutar todo lo necesario para la utilización
de la página se debe hacer lo siguiente:
Se ingresa a screen (no es necesario ser root, ya que únicamente es-
tamos virtualizando consolas, los permisos se darán conforme se vaya
trabajando en las consolas).

$ screen

Presiona enter y se creará una nueva terminal virtualizada para ello


presiona Ctrl + A + C. Se inicializará el primer programa:

$ sudo python ArchiveOrder.py

Ahora el programador creará una nueva ventana virtual con Ctrl +


A + C e inicializamos el segundo programa (DoGraph)

$ sudo python DoGraph.py

Cuando se haya finalizado de ejecutar los programas el programador


puede cambiar entre ventanas presionando Ctrl+A+N . Si el progra-
mador desea salir de la sesión SSH sin matar los procesos que ha dejado
3
Para mayor información visitar la siguiente página: https://www.rackaid.com/
blog/linux-screen-tutorial-and-how-to/

12
en funcionamiento lo puede hacer con las teclas Ctrl+A+D y salir de
la sesión con Ctrl + D. Para que el programador pueda regresar a ver
los procesos que dejó en funcionamiento lo puede hacer volviendose
a logear como se explicó anteriormente y utilizar el comando:

$ screen -rx

Con ello el programador podrá navegar de igual forma como se ex-


plicó anteriormente.
Se recomienda que se trabaje en todo momento en modo consola, con
el fin de poder aprovechar al máximo los recursos de la Raspberry. Si
el programador desea utilizar la interfaz gráfica la puede activar con
el siguiente comando:

$ sudo raspi-config

Seleccione Boot options ->Desktop/CLI ->Desktop Autologin. Se re-


inicia y listo, al siguiente arranque podrá trabajar en modo gráfico.
Para ello se recomienda el programa VNC Viewer 4 o utilizar un mo-
nitor con entrada HDMI.
4
Para mayor información: https://www.realvnc.com/docs/raspberry-pi.html

13
2.4. Diagrama de Flujo del Programa

Inicio del Programa

Creación de
Directorios/Archivos
para datos nuevos
(Archive Order).

Toma de Da-
tos por minuto
(Data Obtainer).

¿Datos Obtenidos No Los Datos no son


Sí, vuelve a Correctamente? tomados en cuenta.
iniciar la toma
de datos.


Usuario ingresa gráfica
a realizar y pide datos
instantáneos (DoGraph).

Los datos solicitados


por el usuario
son graficados
y envíados para
muestra (Graphi).

Lo requerido por el usuario es mostrado en página web

Figura 12: Diagrama de Flujo de la toma de datos del programa


Fuente: Elaboración Propia

A grandes rasgos esto es lo que hace el programa en sí, haciendo que


el mismo sea independiente de que sea manejado por una persona,
la única intervención hecha por un usuario será cuando este solicite
alguna gráfica o dato de valor instantáneo de temperatura o humedad
relativa.

14
Si se analiza el diagrama de flujo, se puede entender que el programa
está tomando datos en todo momento. Por lo que el usuario podrá ver
cualquier toma de datos, desde que el programa fue iniciado.

2.5. Orden de Directorios y Archivos de datos

El servidor está montado en el directorio /var/www/html/ de la Rasp-


berry Pi. El dueño y grupo del directorio es exclusivo de root. Por lo
que cualquier cambio debe hacerse utilizando permisos de super usua-
rio o cambiando el dueño y grupo del directorio. Todo el programa de
Python está ubicado en la carpeta ObtenciónDeDatos ubicada dentro
del directorio mencionado anteriormente.
Antes de empezar con la explicación de las funciones, es importante
que el programador entienda la forma en la que se almacena toda la
información. Todos los datos obtenidos son guardados en una carpeta
oculta en la dirección donde está guardada la página web. Original-
mente la dirección de esa carpeta es: /var/www/html/ObtencionDe-
Datos/.DATA, si en algún momento el programador cambia esta ruta
por favor tenerlo en cuenta para los siguientes módulos.

Obtención de Datos Debido a que el sensor no toma una cantidad


periódica de datos a lo largo de un minuto, a los datos obtenidos a en
ese minuto se les tomará el promedio. Esto quiere decir que si en un
minuto el sensor tomó 48 muestras de temperatura y humedad, el dato
que será tomado en cuenta es la media de esos 48 datos.

¿Cómo se guardan los datos de temperatura y humedad relativa?


Como se explicó anteriormente los datos se obtienen por minuto. Por
lo que a lo largo de una hora se contará con 60 datos. Esos datos se
guardarán en un archivo lamado hhTemp y hhHUM donde hh re-
presenta la hora a la cual fueron tomados.

Creación de los directorios Cada día, mes y año cuenta con su pro-
pio directorio. La raíz de todos los datos es el directorio .DATA en este
es creado primero los directorios de los años en los que el sensor ha
tomado los datos, luego de haber creado el directorio del año actual
crea el directorio del mes en el que se encuentra ejecutando el progra-
ma en ese momento. Por último crea el directorio del día en el que se
encuentra, en este directorio guardará todos los datos promedio por
minuto conforme pasen las horas.
Para explicar de una mejor manera la forma en la que se crean los di-
rectorios se procederá con un ejemplo. Suponga que el día 23/02/2018
se ha empezado con la toma de los datos, por lo que el directorio .DA-
TA no tiene directorios o archivos guardados por el momento. Por
consiguiente el programa creará automáticamente la carpeta 2018, en
ella creará la carpeta 02 y por último dentro de 02 creará la carpeta 23
que será donde guardará todos los datos de las horas del día 23. Ahora

15
bien cuando sea el siguiente día, el programa ya no creará las carpetas
2018 y 02 ya que estas ya existen. Únicamente creará la carpeta 24 y
empezará a guardar los datos en el directorio .DATA/2018/02/24. Un
comportamiento similar sucederá cuando sea un nuevo mes o año.

.DATA

Año 1 Año 2

Mes 1 Mes Final Mes 1 Mes Final

Día 1 Día Final Día 1 Día Final Día 1 Día Final Día 1 Día Final

Horas Horas Horas Horas Horas Horas Horas Horas

Figura 13: Diagrama de la creación de Directorios, en la misma jerar-


quía de cada directorio se encuentra un archivo con los datos prome-
dios de ese tiempo.
Fuente: Elaboración Propia

Datos Promedio Estos datos sirven cuando el usuario desee realizar


una gráfica en un período de tiempo superior al de una hora, pudién-
dolo hacer por día, mes o año, como se explicará mas adelante (en la
función 2.6.4 GetAverage). Estos archivos son creados en el mismo di-
rectorio donde se almacena su carpeta de datos. Esto quiere decir que
si se quiere ver o analizar los datos promedio a lo largo de un día. Estos
datos se encontrarán en los archivos .DATA/(Año)/(Mes)/diaTEMP y
.DATA/(Año)/(Mes)/diaHUM.

2.6. Módulo DataObtainer

Este módulo representa la columna vertebral del programa ya que con


este se toman los datos y luego son guardados en los directorios creados
por la función ArchiveOrder. Este módulo cuenta con 5 funciones, las
cuales serán explicadas a continuación.

16
2.6.1. Función MinuteAv

Esta función es la que se encarga de tomar los datos instantáneos que


el sensor envía. La duración de esta función se da a lo largo de una ho-
ra, después de finalizada la hora la función terminará de tomar datos.
Básicamente se obtienen n cantidad de datos a lo largo de un minuto,
se calcula su promedio y es mandado a un archivo de texto de la hora
actual de la toma de datos ubicado en la fecha de ese día. Por ejemplo si
se está obteniendo la temperatura de las 11:29 AM del día 23/02/2018
se obtiene la n cantidad de datos de temperatura y humedad a lo lar-
go de ese minuto, se calcula el promedio y este dato es enviado a un
archivo de las 11 AM de temperatura y humedad respectivamente.
Denominado 11TEMP y 11HUM que está ubicado en el directorio
/.DATA/2018/02/23.

Explicación del Código: Esta función recibe 3 parámetros, archi-


veT: la dirección del archivo donde se guardarán los datos de tempe-
ratura, archiveH: la dirección del archivo donde se guardarán los datos
de humedad relativa, sensor: el tipo de sensor con el que se trabajará
según la librería, y pin: el pin en donde se tiene conectado el sensor en
la raspberry. Estos dos últimos se asumirán los valores de 22 y 4 res-
pectivamente. (Para mayor información del sensor verificar la librería
Adaf ruit_DHT ).
El primer paso es crear los archivos que se utilizarán para guardar los
datos de la hora actual, luego se toma la hora a la que se está para tomar
datos únicamente a lo largo de esa hora. Eso significa que si la toma de
datos ha empezado a las 11:29 AM finalizará cuando ya no sean más
las 11 AM osea las 12:00 PM
Ahora se inicializan las variables en donde se sumarán los datos de
temperatura y humedad a lo largo de un minuto, también se obtie-
ne el minuto en el que se encuentra el programa actualmente, ya que
el promedio de los datos únicamente se realizará por minuto. Pasado
ese tiempo, se obtendrán los valores del siguiente minuto y así suce-
sivamente. Ahora bien, luego de verificar si el programa se encuentra
en el minuto actual se lee los datos que el sensor está mandando y se
van sumando en las variables Sum_Temperature para la temperatura y
Sum_Humidity para la humedad relativa. Los datos instantáneos que
devuelve el sensor también son impresos en un archivo de texto, este
servirá para cuando el usuario desee ver los valores instantáneos.
Pasado ese minuto python verificará si el sensor tomó datos, si no ha
tomado datos, el programa no hará nada. En caso contrario la lectu-
ra haya sido exitosa y haya obtenido al menos un dato a lo largo de
un minuto, se obtendrá el promedio de los datos encontrados y es-
tos se escribirán en los archivos de temperatura y humedad de la hora
correspondiente.

17
2.6.2. Función GetTime

Esta función sirve únicamente para obtener el último lapso de tiem-


po con el que se está trabajando, esto quiere decir que se obtendrá el
último número del directorio a trabajar. Por ejemplo si se ingresa el
string: .DATA/2018/02/23/ el retorno de la función será 23.

Explicación del Código: La primera condicional sirve para veri-


ficar si el último caracter del string ingresado es una diagonal, esto
para saber en que momento se está leyendo la fecha deseada y cuando
todavía no ha leído la fecha deseada. Luego se voltea el string para ob-
tener solo las últimas 2 cifras del directorio. Habiendo obtenido esto
el nuevo string vuelve a su forma original (ya no estará volteado).

2.6.3. Función GetDir

Esta función sirve para encontrar el directorio donde se guardarán


los datos promedio que se realizan después de la toma de datos. Por
ejemplo si se ingresa el directorio /.DATA/2018/02/23, los archivos
promedio se guardarán en el directorio /.DATA/2018/02 (OJO: esta
función solo devuelve el nombre del directorio donde se deben guar-
dar los archivos promedio, la acción de guardar se realiza en la función
2.6.4GetAverage).
Para esta función no se realizará explicación ya que solo consiste en
manipulación de strings, que puede ser entendida fácilmente por el
programador.

2.6.4. Función GetAverage

Esta función sirve para obtener el valor promedio de alguno de los


datos en los que se quiera trabajar. Esta función realiza básicamente
un promedio del día, mes o año en el que se esté trabajando. Este
promedio es obtenido siempre que se ha terminado de tomar los datos
a lo largo de una hora. Por lo que el usuario puede obtener la gráfica
mas actualizada del día, mes y año actual.
Por ejemplo: Si el directorio del cual se quiere obtener el promedio es
el .DATA/2018/02/23/ por ende el tiempo en el que se trabajará será
el del día 23 de febrero del 2018. Esto obtendrá los tiempos promedios
de las 23 horas del día (obteniendo un dato por hora). Escribiéndo-
los en un archivo ubicado en el directorio .DATA/2018/02/ llamado
23TEMP y 23HUM.

Explicación del Código: Los parámetros de la función son la di-


rección del lugar en donde se quiera realizar el promedio y el tipo de
tiempo del cual se obtendrá el promedio (día, mes o año). Primero la
función verifica si el directorio de lo que se quiere promediar real-
mente existe, en caso de existir prosigue a realizar el promedio de los
datos. En caso de existir y que haya sido ingresado de forma correcta

18
el tiempo en el cual se tomarán los promedios. La función se encarga
de crear los archivos donde se escribirán los datos promedios de cada
período de tiempo que se encuentra en ese directorio.
EL ciclo se encarga de ir viendo si el archivo del cual se quiere obtener
el promedio existe, si no existe no hará nada. Si en dado caso existe
obtendrá los datos promedios del archivo pertinente. Para entender
mejor esta función se recomienda leer las funciones 2.7.1GetData y
2.7.2Average del módulo Graphi.

2.6.5. Función InstantData

El trabajo de esta función es obtener la temperatura y humedad ins-


tantánea. Esta función no fue aplicada en el programa actual, pero fue
dejada por si en algún futuro se quiere utilizar.

2.7. Módulo Graphi

Este módulo tiene dos funciones principales. Obtener los datos de los
archivos guardados y graficar los datos que el usuario necesite. Este
módulo es importado en DataObtainer, esto por las funciones Get-
Data y Average. La primera nsirve para obtener los datos y guardarlos
en una lista de datos flotantes, mientras que la funcionalidad de Ave-
rage es obtener el promedio de una lista flotante. Siendo fundamental
en la forma que se guardan los datos.

2.7.1. Función GetData

Esta función sirve para obtener los datos de un archivo, transformarlos


a datos tipo flotante y ser guardados en una lista.

Explicación del Código: Primero la función lee la primera línea


del archivo, se inicializa la variable temporal (que ayudará para poder
transformar los datos de string a flotantes), y de igual forma se iniciali-
za la lista donde serán guardados los datos. Luego de haber inicializado
lo necesario para realizar el trabajo, se leerá el archivo hasta la última
línea. Como los datos son separados por un enter (\n) este caracter
debe ser eliminado en cada uno de los datos. Por último se añade a la
lista donde se guardan los datos, se limpia la variable temporal y vuelve
a iniciar el ciclo.
Al terminar de leer el archivo, la función devolverá todos los datos en
una lista, listos para manipular.

2.7.2. Función Average

Esta función realiza el promedio de una lista de números.

19
2.7.3. Función DoGraph

La función DoGraph se encarga de realizar las gráficas de un archivo


de texto. Esta función recibe tres parámetros DirectionOf Data que
recibe la dirección del archivo de texto que se graficará, TimeOf que
es el tiempo en el que se graficará (en minutos, horas, días o meses).
Por último se tiene el parámetro TypeOfGraph, este parámetro sirve
para saber si la gráfica será de humedad o temperatura.

Explicación del Código: Primero la función chequea si el archivo


de texto existe, sí existe primero se abrirá el archivo y se obtendrán
todos los datos del mismo. Luego hará la gráfica conforme a las soli-
citudes que el usuario haya ingresado.

2.7.4. Función SelectGraph

Esta función realiza la gráfica que el usuario ha requerido. Si no existe


la gráfica que el usuario ha requerido devuelve una gráfica de error.
Si en dado caso existe utiliza la función DoGraph.
Para saber si la función debe graficar utiliza un Archivo (DataFromPHP)
y recibe todos los parámetros de la gráfica que el usuario ha enviado.
Si la primera línea cuenta con un ON, la función realizará la gráfica
con los datos siguientes que el usuario ha mandado.

2.8. Módulo DoGraph

Este módulo tiene como finalidad únicamente correr en todo momen-


to la función SelectGraph del módulo Graphi. Verificando cada 0.5
segundos si el usuario ha mandado algún dato para poder graficarlo.

2.9. Módulo ArchiveOrder

El fin de este módulo es ir creando los directorios conforme las horas,


los días y meses transcurran. La forma en la que estos directorios son
creados pueden ser ejemplificados en la Figura 13 y su explicación
puede ser encontrada en la sección 2.5.
De igual forma este módulo se encarga de ejecutar la función 2.6.1
(MinuteAv), Esto para que conforme se vayan tomando los datos del
sensor, al mismo tiempo que se creen los directorios y archivos de
cada hora, día, mes y año. Para que las gráficas conseguidas sean las
mas recientes y actualizadas de los datos tomados.

2.10. Página Web Local

Para comenzar cabe mencionar que el servidor es Local, ya que ac-


tualmente el laboraotorio no cuenta con una ip pública. Por lo que
la página puede ser consultada únicamente cuando los dispositivos se
encuentran conectados a la misma red de la Raspberry Pi.

20
2.10.1. Servidor Raspberry

Para configurar el servidor en la Raspberry Pi, se utilizó LAMP. Por


lo que se instalaron los paquetes de Apache 2, MySQL y PHP 5. Lo-
grando compatibilidad con la mayoría de navegadores. Debido a la fa-
cilidad que Chrome da al usuario y que es el navegador mas utilizado
en el mundo la página fue optimizada para ese navegador, utilizando
paquetes que son mayormente utilizados en el navegador de Google.
Básicamente el servidor funciona como una comunicación entre el
usuario y los módulos descritos anteriormente hechos en Python. Los
cuadros de texto almacenan los valores y son enviados a un archivo
que Python lee constantenemte, ese archivo es llamado Datos.txt en
ese archivo, se encuentran 5 líneas que python se encargará de leer.

Primera Línea: Esta línea sirve para poder saber si el usuario ha


mandado algún dato que desea graficar. Si en esta línea hay un ON, el
programa comenzará a leer completamente el archivo. Caso contrario
lo dejará como está.

Segunda Línea: En esta línea se encuentra el año que el usuario


desea analizar.

Tercera Línea: En esta línea se encuentra el mes que el usuario desea


analizar.

Cuarta Línea: En esta línea se encuentra el día que el usuario desea


analizar.

Quinta Línea: En esta línea se encuentra la hora que el usuario


desea analizar.
Si en alguna de esas líneas se encuentra el String NA. El programa no
tomará en cuenta el resto y únicamente graficará los datos obtenidos
anteriormente.
Por último el servidor cuenta con el archivo TEMPHUMINST.txt,
en este archivo la temperatura y humedad instantáneas son escritos
de forma constante y recurrente por el módulo 2.6.1 MinuteAv. PHP
solo se encarga de leer este archivo de forma periódica para poder
imprimir en pantalla.

2.10.2. IP Raspberry Pi

La dirección IP de la Raspberry Pi del laboratorio de metrología cuen-


ta actualmente con una dirección ip estática en conexión modo WiFi.
Siendo la dirección establecida: http://192.168.2.50/

21
Para poder cambiar esta dirección dirigirse al archivo /etc/dhcpcd.conf
y con permisos de super usuario cambiar la dirección IP a una desea-
da en la interface wlan0. Para ello es necesario que la raspberry esté
conectada vía WiFi al router.

2.11. Descarga del Código

A continuación se dejará el acceso al link donde está ubicado todo el


programa y página web, cabe mencionar que si en algún momento
el link presenta algún error, el programador puede comunicarse de
forma directa a través del correo y facebook colocado en la primera
página de este documento.
Link Mega: Hacer Click Aquí5

5
Si este manual está siendo visto de forma impresa, copiar este link en
su navegador: https://mega.nz/#!VZgUEBQS!F3gEuG1c2vFhDAYJej2D9X_mKn_
o9KcUm92ruxarBtw

22

S-ar putea să vă placă și