Medidor de consumo. Almacenar los datos

El pequeño medidor de consumo ya puede enviar las lecturas realizadas a una dirección de un servidor. Ahora tenemos que recoger esa información, almacenarlas y luego visualizarla.
Vamos a ver como definir una tabla que almacena los datos en una base de datos MySQL y como crear una serie de scripts PHP para almacenar la información enviada por el Arduino y luego ver los datos. Con los datos guardados en una tabla, ya podemos explotarlos con una gran cantidad de herramientas o exportarlos en formatos que luego podamos tratar con aplicaciones que conozcamos mejor, como por ejemplo exportarlos a un formato tabulado CSV que luego podamos abrir con Excel.
En este ejemplo veremos como crear el script SQL para crear una tabla que pueda almacenar los datos enviados por el arduino en MySQL. Muy similar será el script para otras bases de datos o incluso se puede llevar a bases de datos no relacionales, muy de moda ahora …
Definimos la tabla «arduino» con los siguientes campos:
- id: Entero autoincremental que será la clave primaria de la tabla
- fecha: Campo que almacenará la fecha en segundos. En nuestro caso almacenará la fecha en la que se está realizando la nueva inserción en base de datos
- irms: Valor decimal con el consumo enviado por el arduino
El script a utilizar sería el siguiente:
CREATE TABLE `arduino` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `fecha` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `consumo` DECIMAL(7,2) NOT NULL, PRIMARY KEY (`id`), INDEX `idx_fecha` (`fecha`) ) |
Como podéis ver, todos los campos son obligatorios, NOT NULL en la sintaxis de MySQL, el campo ‘id’ es autoincremental y el campo ‘fecha’ almacenará por defecto la fecha de inserción, DEFAULT CURRENT_TIMESTAMP.
El campo ‘irms’ lo hemos definido como DECIMAL(7,2) donde tendrá 7 posiciones enteras y 2 decimales, mas que de sobra para guardar nuestros ocnsumos
Con PRIMARY KEY indicamos cual será la clave de nuestra tabla y con INDEX, creamos un índice por el campo ‘fecha’ para acelerar las búsquedas entre intervalos de tiempo
Scripts PHPs
PHP es un lenguaje de programación sencillo de aprender, fácil de utilizar y que soporta la mayoría de los alojamientos de forma gratuita. http://www.php.net/
En la anterior entrada definimos la URL que iba a utilizar el arduino para enviar la información a nuestro servidor sería «/arduino/saveData.php?consumo=«. Para que funcione nuestro nuevo script deberemos subirlo a la carpeta «arduino» de nuestro servidor Web y llamar al fichero «saveData.php«.
El pequeño script tendrá el siguiente contenido:
<?php #Conectamos con MySQL $conexion = mysql_connect("[servidor]","[usuario]","[clave]") or die ("Fallo en el establecimiento de la conexión"); #Seleccionamos la base de datos a utilizar mysql_select_db("[nombre de base de datos]") or die("Error en la selección de la base de datos"); #Recuperamos la variable de consumo enviada por el arduino $consumo= $_GET['consumo']; if(!$consumo) $consumo = consumo; #Creamos la sentencia SQL para insertar el consumo $query = "INSERT INTO arduino VALUES (NULL,NULL,$consumo);"; #Ejecutamos la query $result = mysql_query($query,$conexion); #Cerramos la conexión con la base de datos mysql_close($conexion); echo $consumo; ?> |
En el script deberemos reemplazar los siguientes valores por los de nuestras base de datos:
- [servidor]
- [usuario]
- [clave]
- [nombre de base de datos]
En la sentencia SQL, para los dos primeros campos de la tabla, ID y FECHA, es suficiente con indicar valores nulos para que coja los valores por defecto, en ID un número autoincremental y en FECHA, la fecha en el que se realizar la inserción.
Si hemos conseguido crear correctamente la tabla y subido el script a nuestro servidor, podemos probar que todo funciona utilizando la siguiente URL, cambiando el dominio por el de vuestro servidor:
http://www.gonzalogalvan.es/arduino/saveData.php?consumo=100
Si queremos cambiar la localización del script o el nombre, deberemos ajustar la siguiente linea del programa del Arduino:
ether.browseUrl(PSTR("/arduino/saveData.php?consumo="),irmsChar , website, procesarRespuesta); |
Cambiando la cadena «/arduino/saveData.php?consumo=» por la que necesitemos.
Os dejo otro pequeño script que nos permite ver fácilmente la información que se está almacenando en la tabla, limitando la consulta a los últimos 50 registros, lo llamaremos showData.php:
<?php #Conectamos con MySQL $conexion = mysql_connect("[servidor]","[usuario]","[clave]") or die ("Fallo en el establecimiento de la conexión"); #Seleccionamos la base de datos a utilizar mysql_select_db("[nombre de base de datos]") or die("Error en la selección de la base de datos"); #Definimos la query y la ejecutamos $query = "SELECT * FROM arduino ORDER BY fecha desc limit 50"; $result = mysql_query($query,$conexion); #Montamos una pequeña tabla para ver mejor los datos echo "<table border="1"><tr><td>Id</td><td>Fecha</td><td>Consumo</td></tr>"; #Vamos recorriendo cada registro devuelto por la consulta a base de datos while ($row = mysql_fetch_array($result)) { echo "<tr><td>". $row[0]."</td><td>". $row[1]."</td><td>". $row[2]."</td></tr>"; } echo "</table>"; #Cerramos la conexión con la base de datos mysql_free_result($result); mysql_close($conexion); ?> |
Probando todo el montaje
Ya tenemos montadas todas las partes de nuestro medidor de consumo y preparado el servidor para recoger los datos.
Conectaremos nuestro Arduino a la corriente y pondremos un electrodoméstico o lámpara en el enchufe donde tengamos puesta nuestra pinza amperímetra. El Arduino deberá coger IP automáticamente y resolver el nombre de nuestro servidor.
A partir de este momento cada 5 segundos se enviará al servidor el consumo y quedará registrado en la base de datos. Mediante el script showData.php podremos comprobar que se está registrado la información correctamente.
No Comment