Mi blog personal sobre investigación y divulgación
Tag Archives: web
Usando Raspberry Pi 3 para subir datos a la web



Desde hace unas semanas en este blog puedes encontrar una sección con mapas de predicción, imágenes de satélite y datos de concentración de polvo en tiempo real para que puedas estar prevenido ante una intrusión de polvo africano (calima). Es algo que tenía muchas ganas de hacer desde hace tiempo, ya que trabajé durante casi 12 años realizando diariamente predicciones de calima que se publicaban en una web, pero esa web ya no existe y sé que hay mucha gente que la echa de menos, especialmente personas con problemas respiratorios que necesitan disponer de esta información. La información no es tan clara como la de aquella web, ya que no puedo hacer un resumen de los datos y redactar un texto con la predicción diariamente como hacía antes, pero he automatizado y explicado todo para que esté lo más claro posible.

Esta sección de la web ha estado funcionando durante muchas semanas gracias a unos scripts que corrían en un viejo ordenador portátil con sistema operativo Linux. En mi anterior entrada del blog expliqué algunos comandos que estoy usando para ello. El caso es que tenía un portátil enchufado a la corriente eléctrica y conectado a internet las 24 horas del día, con el gasto y ruido que esto supone. Para ahorrar en energía, en espacio sobre la mesa y en ruido, he pasado todo a una Raspberry Pi.

Una Raspberry Pi es un pequeño ordenador del tamaño aproximado de una tarjeta de crédito. Todo está contenido en una única placa, y han ido saliendo diferentes versiones hasta la actual Raspberry Pi 3 Model B, que es la que estoy usando. Puedes consultar información sobre la historia de este dispositivo aquí. Este pequeñísimo ordenador, que incluye en este modelo conexión WiFi, Bluetooth, HDMI, puerto Ethernet, 4 conectores USB, lector de tarjetas SD, un zócalo para conectarle algunas cosas que podrían ser útiles en algunos proyectos, como por ejemplo sensores (de temperatura, de humedad…), y potencia más que suficiente para utilizarla en la mayoría de proyectos que se te pasen por la cabeza. En este caso, para mi proyecto de adquisición, procesado y subida de datos a la web, me habría bastado con modelos menos recientes, pero compré el último modelo porque no su precio no llega ni a 50 €. Eso sí, hay que comprar por separado la tarjeta microSD, pues no viene en la caja, pero eso no te supondrá mucho más de 6 € más.

Para proteger esta pequeña placa-ordenador tienes dos opciones, comprar una caja de las que pueden encontrarse fácilmente en el mercado, o hacer una. El ordenador es tan pequeño que con cualquier cajita de cartón a la que puedas hacer unas cuantas aperturas para los conectores te servirá. Por internet también puedes encontrar plantillas para imprimir y montar una caja. Yo me quise dar el capricho de hacer la caja yo misma con material que suelo usar para manualidades: cuentas de colores de tipo Hama Beads. La caja está hecha con las Pysslas que se compran en Ikea, y el adorno con el logo de Raspberry Pi lo hice con otras de un tamaño más pequeño, compradas en tiendas de productos chinos. Esta es una primera versión, con dos laterales al aire para poder extraer la tarjeta más cómodamente mientras sigo probándola, pero no descarto mejorarla.

Caja Raspberry Pi 3 Caja Raspberry Pi 3 Caja Raspberry Pi 3 Caja Raspberry Pi 3

Si compras una Raspberry para cualquier proyecto, lo que te recomiendo es que una vez instales el sistema operativo aproveches para hacerle una actualización. Yo le instalé el sistema operativo Raspbian, que es una distribución Linux basado en Debian y optimizado para estos pequeños mini-ordenadores. Una vez instalado, corrí los comandos apt-get update y apt-get upgrade. Así tendrías las últimas versiones de todos los paquetes instalados en tu sistema operativo Linux.

Una vez instalado y actualizado el sistema operativo, copié mis scripts del portátil a la Raspberry Pi, conectándome a esta por SSH con el comando scp. Luego modifiqué en los scripts, ya en la Raspberry Pi, para que la ruta de los ficheros fuese la correcta (solo tuve que cambiar el nombre de usuario, que por defecto es pi).

De entre los comandos que ya ejecutaba en mis scripts, encontré que algunos no funcionaban porque no estaban instalados por defecto. Por ejemplo, necesito un comando para cortar solo una porción de los mapas de predicción de polvo del NAAPS y del NMMB-Dust, que son las porciones que luego subo a la web, y ese comando es parte del paquete Imagemagick. Para instalarlo, ejecuté apt-get install imagemagick y con eso ya estaba disponible. Encontré algún otro comando que no funcionaba, pero todo se solucionó de la misma manera.

Y de momento eso es todo. La sección de predicción e información sobre calimas está funcionando gracias a esta pequeña plaquita que está ahí, en un rincón de la mesa junto al router, alimentada por un cargador de móvil (según para lo que la uses, la puedes alimentar hasta por un simple USB), sin hacer ruido y ahorrándome un montón de espacio en la mesa. Todo costó menos de 60 €, solo unos minutos para instalar el sistema operativo y poner a correr los scripts, y un ratito de artesanía para hacer yo misma la caja a mi gusto.

Para más adelante dejo otro proyecto que tengo en mente desde hace tiempo, que es montar una pequeña estación meteorológica que sirva datos en tiempo real a la web, también usando uno de estos pequeños ordenadores.


Usando wget, awk, paste, cut y sed para tener datos en tiempo real en la web

En agosto de 2014 escribí en este blog sobre cómo representar gráficas en una web usando Dygraphs, una librería en Javascript que es ampliamente utilizada para publicar representación gráfica de datos en internet. En esa ocasión mostré un ejemplo cargando unos cuantos datos directamente en el código que hace la representación de la gráfica, pero comentaba que se puede hacer dándole directamente la ruta de un fichero .csv. Esta semana he estado trabajando un buen número de horas para ir un poquito más allá con esta herramienta. La idea era mostrar en la sección “predicción polvo africano” de este blog, datos en tiempo real (promedios horarios de las últimas 24 horas) de las concentraciones de polvo en diferentes puntos de Canarias.

Los datos provienen de la web de la Red de Control y Vigilancia de la Calidad del Aire del Gobierno de Canarias. Son datos que pueden consultarse libremente en dicha web pero, curiosamente, solo pueden verse en formato tabla. Se pueden descargar en formato .csv, en excell y en pdf, pero no te los representan en una gráfica. Mi idea era realizar yo la gráfica automáticamente, totalmente actualizada, y que se pudiese consultar en mi blog. Todo lo hice desde un ordenador con sistema operativo Linux.

grafica con dygraphs

La primera tarea, lógicamente, fue ingeniármelas para bajar los datos. En teoría debería ser lo más sencillo del mundo: un wget apuntando al enlace donde están los datos y listo. El problema es que en la web fuente de los datos no hay links fijos, sino que llaman a algún tipo de script para generar los datos. Además, todos los ficheros bajan con el mismo nombre. Dos días estuve (estuvimos, que conté con ayuda) intentando averiguar cómo hacerlo. Al final lo conseguimos, y lo que voy a mostrar aquí es el comando básico de wget para bajar un fichero y renombrarlo. Sería así:

wget -C “http://www.nombredelaweb.loquesea/rutaalfichero/” -O fichero1

El -O al final es lo que usas para renombrar el fichero que bajas. Como yo tenía que bajar muchos ficheros, ya que publican los datos por zonas de las islas, y los ficheros originales tienen todos el mismo nombre, tengo que usar esta opción sí o sí.

A partir de aquí lo que tenía eran 11 ficheros (csv en mi caso) con un montón de datos. Los ficheros .csv son como ficheros de excell (datos en filas y columnas), donde las columnas están separadas por una coma. Yo quería combinar los 11 ficheros en uno y quedarme con solo las columnas que me interesaban. Para ello usé el comando awk desde una terminal de mi distribución de linux.

Esta es la instrucción para combinar los ficheros (todos los que quieras).

paste -d , fichero1 fichero2 fichero3 fichero4 > ficherocombinado

Es importante que dejes un espacio entre la d y la coma. Luego vienen todos los nombres de los ficheros individuales, separados por espacios, y tras el > viene el nombre del fichero resultado de la combinación.

Una vez tienes el fichero combinado, con muchísimos datos, para quedarte solo con las columnas que necesitas tienes que hacer esto:

cut -d , -f 1,2,3,5,7,9,11 ficherocombinado > ficherorecortado

Lo que le hemos dicho al ordenador con esta instrucción es que se quede con las columnas 1,2,3,5,7,9 y 11 del fichero que creamos antes, y que el resultado lo escriba en el fichero resultante. Ojo, que aunque la instrucción se llame cut (cortar), lo que hay que darle es el número de las columnas con las que nos queremos quedar, no las que queremos eliminar.

Una vez tenía este nuevo fichero con justo los datos que necesitaba (fecha, hora y PM10 en diferentes estaciones de medida que elegí) yo me encontré con un problema: la librería Dygraph solo admite las fechas en formato yyyy-mm-dd hh:mm, y en los ficheros originales lo que tenía era dd-mm-yyy en la primera columna, y hh:mm en la segunda columna. Necesitaba entonces cambiar de formato la primera columna y, una vez hecho, unir la primera y la segunda con los datos de fecha y hora separados por un espacio. Para ello usé el comando awk:

awk -F , ‘{split($1, a, “-“)$1=a[3]”-“a[2]”-“a[1]” “}1’ OFS = , ficherorecortado > ficheroconfechaok

Fíjate en lo que hice ahí. Le he dicho que en la columna 1 hay algo que tiene tres valores separados por un guión, y lo que quiero hacer es que lo sobreescriba con los elementos cambiados de orden, es decir, el año (que aparecía en tercer lugar en el formato original dd-mm-yyy) lo quiero delante, el mes se queda donde está, y el día (que aparecía en primer lugar) lo llevo al tercero. Luego le doy el nombre del fichero (el de antes, el que recorté para quedarme con los datos que necesito) y al final le doy el nombre del fichero resultado.

Ahora vamos con la combinación de la fecha y la hora en una misma columna. Vuelvo a usar el comando awk para ello:

awk -F , ‘{($1=$1″ “$2)}1’ OFS = , ficheroconfechaok > ficherofinal

Lo que he hecho es decirle que en la columna 1 escriba lo que era la 1 combinada con la 2 y separadas por un espacio, que se encontraban en el fichero que escribimos antes, y el resultado de ello lo escriba en un nuevo fichero.

Ya está, con esto ya tendría todo lo necesario para subir este fichero por ftp a alguna carpeta de mi web, darle la ruta al Dygraphs y que él solito haga la representación gráfica.

Cuando lo hice me encontré un pequeño detalle más que quise corregir. Resulta que algunos de los nombres de las estaciones de medida de donde provienen los datos, que salen en la leyenda de la gráfica, tienen letras con tilde o contienen una ñ. En ese caso el Dygraphs no es capaz de escribirlos bien. Entonces decidí aprovechar para cambiar los nombres de las estaciones en el fichero final (primera fila del .csv), añadiendo además el nombre de la isla en la que están. Para ello primero tuve que cambiar la codificación del fichero, de iso-8859-15 a utf-8. Si no lo hacía, el paso siguiente no me funcionaba.

iconv -f iso-8859-15 -t utf-8 ficherofinal > ficherofinal_utf8

Ahora ya solo queda el paso final, que es usar el comando sed para sustituir palabras. Aquí tienes un ejemplo:

sed -i ‘s/Tefía-Puerto del Rosario/Tefia-Puerto del Rosario (Fuerteventura)/g’ ficherofinal_utf8

Lo que hace el comando sed ahí es buscar en el fichero ficherofinal_utf8 dónde aparece la cadena de texto Tefía-Puerto del Rosario. Una vez la encuentra, la sustituye por la cadena Tefia-Puerto del Rosario (Fuerteventura). Esto lo hice con todos los nombres de estaciones que contenían algún caracter que el Dygraphs no es capaz de representar en la leyenda.

Estas y más instrucciones, para representar también mapas de predicción e imágenes de satélite, están una detrás de otra en scripts que ejecuto cada hora en segundo plano en mi ordenador gracias al administrador de tareas Cron. El ordenador está encendido y conectado a internet las 24 horas del día, bajando y procesando los datos, subiéndolos por FTP a mi web, y a partir de ahí puedes verlos desde cualquier lugar.

Ya ya está, el resultado final puede verse en esta página. Espero que esta explicación te sea útil para trabajar con datos para representar gráficamente en tu web.