Beruflich Dokumente
Kultur Dokumente
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
Adems de todo esto, por si falla la red, siempre se puede conectar una tarjeta SD
por SPI y utilizarla generando un archivo de seguridad para grabar los datos en la
tarjeta SD cuando no haya acceso al servidor e incluso cuando haya acceso al
servidor para usar el documento creado como copia de respaldo.
Pgina 1 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
Una de las constantes en los sistemas que dan soporte a la Internet de las cosas
son las bases de datos porque ofrecen, frente a la alternativa del almacenamiento
en bruto de la informacin o usando procedimientos de un nivel bajo, un mtodo
muy eficaz equilibrado en esfuerzo de instalacin, consumo de recursos
(procesador y memoria a corto y largo plazo) mantenimiento y rendimiento.
La manera ms comn de explotar la base de datos es conforme a una arquitectura
cliente-servidor. El dispositivo electrnico, el objeto de la Internet de las cosas,
actuara como cliente y se dispondra de un sistema autnomo, frecuentemente un
ordenador completo, trabajando como servidor de las bases de datos.
Hay multitud de formas de conectar con el sistema que soporta el servidor de bases
de datos (muchas de las cuales ya han sido discutidas en artculos anteriores) al
tratarse de un equipo de la Internet de las cosas parece que lo ms intuitivo es
pensar en una conexin de red remota (como GPRS o EDGE/EGPRS, por ejemplo)
o una local, seguramente WiFi, que posiblemente conecte a por medio de un
enrutador (router) a otra remota.
Como conectar directamente con la base de datos puede ser complejo y si se trata
de un sistema pblico hay que aadir otras cuestiones que pueden afectar a la
seguridad y al rendimiento, lo ms comn es acceder a la base de datos desde un
servidor web que, aunque seguramente limite un poco el rendimiento, aade una
capa al sistema que, aunque parezca una paradoja, hace ms sencilla la gestin.
Pgina 2 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
Pgina 3 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
Pgina 4 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
Pgina 5 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
Pgina 6 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
Accept
Sirve para indicar el tipo MIME que la peticin espera que el servidor
use en la respuesta. Se expresa como tipo/subtipo que puede generalizarse
utilizando como signo comodn el asterisco (*) por ejemplo como */* para
referirse a cualquiera o tipo/* para referirse a todos los subtipos de tipo
Pgina 7 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
text/plain
Pgina 8 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
En el ejemplo anterior la prioridad del formato JSON es la mayor (0.9) la del texto
plano y la del texto en formato XML, que cumplen la especificacin text/*, es menor
(0.8) e igual entre ellos. En caso de ser posible el servidor debera reaccionar
codificando la respuesta como JSON.
En el siguiente ejemplo de una peticin POST ms completa se accede a la pgina
/iot/grabar_temperatura del servidor llamado polaridad.es usando la versin 1.1 del
protocolo HTTP. El cliente, llamado Sensoreitor-2000 enva los datos codificados en
formato JSON, espera la respuesta como texto plano en formato UTF-8 usando el
espaol de Espaa sin usar compresin, cosa que, por cierto, no es necesario
indicar. Los datos que se envan al servidor ocupan 65 bytes. Al enviar la respuesta
la conexin entre el cliente y el servidor se cerrar.
Pgina 10 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
fondo cuando la parte del trabajo web IoT que se realiza implique una atencin ms
seria al backend de la que se explica aqu.
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
desde esos privilegios otros usuarios (que a su vez podrn tenerlos) y en su caso
las bases de datos y las tablas en las que almacenar la informacin que el sistema
para Internet de las cosas necesita. Se hace con la orden mysql -u root -p
Es importante atender al proceso de instalacin del conjunto de servicios o del
servidor MySQL, segn sea el proceso seguido, ya que, en muchos casos, el propio
instalador se encargar de realizar este paso y otros y no ser necesario repetirlos
salvo cuando se desee modificar la configuracin.
En la orden mysql -u root p se indica con la opcin u el nombre del usuario (root)
y con la opcin -p (de password) que debe solicitarse la clave al acceder a la
consola MySQL. Para volver a la consola del sistema se puede usar la orden quit
para salir
Antes de abandonar la consola de MySQL, para establecer los privilegios del
usuario root se ha utilizado la ordengrant all privileges on *.* to root@localhost
identified by '1234' with grant option; en la que
se otorgan todos los privilegios grant all privileges
en todas las tablas de todas las bases de datos on *.*
al usuario root usando accediendo desde la mquina que ejecuta el servidor
MySQLto root@localhost
usando como clave 1234 identified by '1234'
con permiso para autorizar a otros usuarios with grant option
Pgina 14 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
Pgina 15 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
Para permitir nombres de tablas o bases de datos que pudieran entrar en conflicto
con rdenes o procedimientos se puede utilizar el signo de acento grave, llamado a
veces comilla invertida, para rodear el nombre y evitar conflictos o errores en las
rdenes SQL.
Pgina 16 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
Pgina 17 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
MySQLDump
El formato de la orden mysqldump es muy sencillo, slo hay que indicar el nombre de
usuario user, la contrasea password y la base de datos que se desea copiar o --alldatabases para hacer una copia de seguridad de todas las bases de datos como en
el siguiente ejemplo:
mysqldump --opt --user=pelaez --password=1234 --all-databases > copia.sql
El ejemplo anterior genera el documento copia.sql que contiene las rdenes SQL
(es decir, texto) necesarias para reconstruir todas las bases de datos. Al guardarse
Pgina 18 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
Pgina 19 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
--password 1234
datos
--directory=copia_iot
Pgina 20 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
En este ltimo artculo de la serie sobre el uso de un servidor web para almacenar
los datos de los dispositivos conectados a la Internet de las cosas, se explica como
grabar en una base de datos MySQL la informacin que los nodos IoT envan al
servidor haciendo peticiones HTTP POST. Los lectores de este artculo, de todo el
blog, puede que no estn especialmente familiarizados con la programacin en
ellenguaje PHP pero seguramente s con la programacin de microcontroladores en
los lenguajes C o C++ as que, salvo algunos detalles, como preceder del signo
dlar ($) a las variables, podrn seguir los ejemplos sin necesidad de mayores
explicaciones ya que se han hecho siguiendo un estilo de programacin muy
neutro, no especfico de PHP.
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
El objetivo final del siguiente cdigo PHP ser enviar al servidor de bases de datos
MySQL la orden SQL:
1 INSERT
2 INTO `calefacciones`
3 (
4
numero_estancia,
5
temperatura,
6
corriente
7 )
8 VALUES
9 (
10
12,
11
10.26,
12
2.18
13 );
detectar
si
la
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
1 $fin_linea=PHP_EOL;
2 $servidor='localhost';
3 $usuario='pelaez';
4 $clave='1234';
5 $base_datos='base_datos_temperaturas';
6 $conexion=mysqli_connect($servidor,$usuario,$clave,$base_datos);
7 if(mysqli_connect_errno())
8 {
9
echo 0; // Devolver el valor 0 para indicar que se ha producido un error
10 }
11 else
12 {
13 $numero_estancia=(int)$_POST['ne'];
14 $temperatura=(float)$_POST['tp'];
15 $corriente=(float)$_POST['cr'];
16 $consulta_sql ='INSERT INTO calefacciones (numero_estancia,temperatura,corriente) ';
17 $consulta_sql.='VALUES ('.$numero_estancia.','.$temperatura.','.$corriente.');';
18 $resultado=mysqli_query($conexion,$consulta_sql);
19 if($resultado) // Si no se ha producido un error al realizar la consulta
20 {
21
echo mysqli_insert_id($conexion); // Devolver el ndice del nuevo registro (>0!)
22 }
23 else
24 {
25
echo 0; // Devolver el valor 0 para indicar que se ha producido un error
26 }
27 mysqli_close($conexion);
28 }
29 echo $fin_linea;
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
44
45
}
else
{
echo 'No se ha encontrado ningn estado de alarma'.$fin_linea;
}
mysqli_free_result($resultado);
}
mysqli_close($conexion);
}
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
nodo respondiendo cero (para indicar una comparacin incorrecta) o uno (para
indicar que la comparacin tuvo xito) segn el resultado de una consulta a su base
de datos.
Con esta excusa se puede ver un ejemplo en el que se reciben datos del dispositivo
conectado a la Internet de las cosas (un cdigo de llave y otro de cerradura), se
devuelve un resultado (uno o cero segn el resultado sea verdadero o falso) y se
realiza un pequeo procesado de la informacin consistente en comparar los
resultados obtenidos al consultar la base de datos con los enviados por el nodo IoT.
1 $fin_linea=PHP_EOL;
2 $servidor='localhost';
3 $usuario='pelaez';
4 $clave='1234';
5 $base_datos='base_datos_puertas';
6 $conexion=mysqli_connect($servidor,$usuario,$clave,$base_datos);
7 if(mysqli_connect_errno())
8 {
9
echo 0; // Devolver el valor 0 para indicar que la comparacin no es vlida o que se ha
10 producido un error (en este caso es un error)
11 }
12 else
13 {
14 $cerradura=hexdec($_POST["c"]);
15 $llave=hexdec($_POST["l"]);
16 $consulta_sql='SELECT llave FROM cerraduras WHERE cerradura='.$cerradura.';';
17 $resultado=mysqli_query($conexion,$consulta_sql);
18 if($resultado) // Si no se ha producido un error al realizar la consulta
19 {
20
$total_resultado=mysqli_num_rows($resultado);
21
if($total_resultado) // Si se ha encontrado algn resultado
22
{
23
$numero_resultado=0;
24
$buscando_cerradura=TRUE;
25
while($buscando_cerradura&&$numero_resultado<$total_resultado)
26
{
27
mysqli_data_seek($resultado,$numero_resultado);
28
$registro=mysqli_fetch_row($resultado);
29
if($registro[0]==$llave)
30
{
31
$buscando_cerradura=FALSE;
32
}
33
else
34
{
35
$numero_resultado++;
36
}
37
}
38
// echo !$buscando_cerradura;
Pgina 27 de 28
Cmo almacenar los datos obtenidos por los dispositivos de la Internet de las cosas (IoT)
39
if($buscando_cerradura)
40
{
41
echo 0; // Devolver el valor 0 para indicar que la comparacin no es vlida (o que se ha
42 producido un error; y aquu no es el caso)
43
}
44
else
45
{
46
echo 1; // Devolver el valor 1 para indicar que la comparacin S es vlida
47
}
48
}
49
else
50
{
51
echo 0; // Devolver el valor 0 para indicar que la comparacin no es vlida o que se ha
52 producido un error
53
}
54 }
55 else
56 {
57
echo 0; // Devolver el valor 0 para indicar que la comparacin no es vlida o que se ha
58 producido un error
}
mysqli_close($conexion);
}
echo $fin_linea;
Pgina 28 de 28