Sensores
Tratamiento de datos metereológicoscon
Python
Generar página web de temperaturas
Este artículo es una continuación de una serie de artículos sento.html , oracam.html, serora.html .
El propósito de este artículo es capturar los datos que manda un módulo ( en este caso un arduino con sensores) a través del puerto serie ( /dev/ttyUSB0', '/dev/ttyUSB1','/dev/ttyACM0','/dev/ttyACM1'....) y procesarlos para guardarlos en un fichero ( ejemplo: Temp2019_06_04.csv ).
Además de todo lo anterior, creará una página web donde se visualizarán los datos a través de un servidor web.
No soy muy partidario de Python, pero al estar muy implantado en todas la plataformas del tipo Raspberry o Orange-PI, que es donde se va montar el servidor, la programación se va a realizar en este lenguaje. Deberéis perdonar lo mal que sé programar en Python, soy novato en este lenguaje de programación, normalmente programo en C/C++ o Básic.
Lo primero es saber el formato que tienen los datos que transmite el modulo de sensores (arduino) a través del puerto serie.
Formato de datos |
INICIO Temperatura,14.0 Humedad,32 #presion,923 #Temperatura,26.1 FINAL |
Dos cadenas INICIO y FINAL, y en medio datos.
Cada línea de datos está compuesto del tipo de dato y el valor, separados por una coma.
Lo primero que hace el programa es buscar el módulo en todos los puertos serie posibles.
Al escanear los puertos, si existe el módulo, responderá el módulo con la palabra SENSORTOTAL empezándose a ejecutarse la rutina principal del programa.
En la rutina principal del programa, se lee continuamente el puerto serie hasta que encuentra datos a procesar.
Cuando encuentra datos, los almacena en las variables dTemperatura, dHumedad, dPresion.
La visualización en tiempo real se realiza en consola.
Cada minuto se van almacenando las variables en un fichero con el formato TempAÑO_MES_DIA.csv .
Ejemplo : Temp2019_06_04.csv
Esto se realiza con los comandos en python:
nombreFichero="Temp20"+time.strftime("%y_%m_%d")+".csv" f = open(nombreFichero,'a') f.write(time.strftime("%H,%M")) f.write(',') f.write(dTemperatura+','+dHumedad+','+dPresion+','+'\n') f.close() |
Como podéis observar cada día se crea automáticamente un fichero de datos.
Formato del fichero de datos metereológicos |
00,00,21.6,25,924, 00,01,21.6,25,924, 00,02,21.6,25,924, 00,03,21.6,25,924, 00,04,21.5,25,924, |
El programa, cada 41 segundos o cada vez que recibe datos del módulo de sensores, actualiza el fichero index.html que es el que se representa en la página web.
El código python que se utiliza para crear la página web es el siguiente:
print "Crear pagina" fw = open('index.html','w') mensajeWeb = """ <html> <head> <meta http-equiv="refresh" content="115"> <title>PALENCIA</title> </head> <body bgcolor="#ffff99"> <h2>Palencia, Spain <hr size="2" width="100%"> <img alt="" src="web.jpg" height="480" width="640"><br> <hr size="2" width="100%"> """ mensajeWeb = mensajeWeb + time.strftime("%d/%m/%y") +" "+ time.strftime("%H:%M:%S") mensajeWeb = mensajeWeb + """<br>""" mensajeWeb = mensajeWeb + mensaje mensajeWeb = mensajeWeb + """ <h2><a href="gradia.html">GRAFICOS</a><br> <img alt="" src="mapa.png" > </h2> </body> </html>""" fw.write(mensajeWeb) fw.close() |
Con lo que obliga al navegador a actualizar automáticamente la página web.
El resultado es el siguiente:
Podéis comprobar el resultado en mi página:
http://seta43.duckdns.org/seta/webcam/index.html
http://seta43.ddns.net/seta/webcam/index.html
El resultado no lo he hecho muy vistoso a propósito, para hacer mas legible el código, el que quiera lo puede mejorar retocando el código html.
Para ejecutar el programa en python he creado un programa en bash llamado app_python.sh que se ejecuta cuando se inicia el ordenador.
app_python.sh |
#!/bin/bash cd /home/seta/www/webcam xterm -e "python camtem4.py" |
PROGRAMA
Saludos.
Juan Galaz
Bibliografía:
https://pyserial.readthedocs.io/en/latest/
sento.html
predi.html
raspb.html
arterec.html
tm16tem.html
No hay comentarios:
Publicar un comentario