Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Software Multiplataforma
Mayo 2020
Aplicaciones de IoT
Índic
e
Índice..................................................................................................................2
Introducción.......................................................................................................4
2.7. Como guardar la información recabada a una base de datos con node.js..................15
Conclusión.......................................................................................................22
Referencias.......................................................................................................23
Introducción
El protocolo MQTT se ha convertido en uno de los principales pilares del IoT por su
sencillez y ligereza. Ambos son condicionantes importantes dado que los dispositivos de IoT,
a menudo, tienen limitaciones de potencia, consumo, y ancho de banda.
Para los dispositivos de Internet de las Cosas (IoT), la conexión a Internet es un requisito.
La conexión a Internet permite que los dispositivos trabajen entre sí y con servicios de
backend. El protocolo de red subyacente de Internet es el TCP/IP. Desarrollado con base en la
pila TCP/IP, el MQTT (Message Queue Telemetry Transport) se ha convertido en el patrón
para las comunicaciones del IoT.
MQTT son las siglas de Message Queue Telemetry Transport y tras ellas se encuentra
un protocolo ideado por IBM y liberado para que cualquiera podamos usarlo enfocado a la
conectividad Machine-to-Machine (M2M).
Está enfocado al envío de datos en aplicaciones donde se requiere muy poco ancho de
banda. Además, sus características le permiten presumir de tener un consumo realmente bajo,
así como precisar de muy pocos recursos para su funcionamiento. Estas características han
hecho que rápidamente se convierta en un protocolo muy empleado en la comunicación de
sensores y, consecuentemente, dentro del Internet de las Cosas.
MQTT es un protocolo de conexión que explica cómo los bytes de datos son organizados y
transmitidos por la red TCP/IP. (Figura 1)
Figura 1. MQTT
Para filtrar los mensajes que son enviados a cada cliente los mensajes se disponen en topics
organizados jerárquicamente. Un cliente puede publicar un mensaje en un determinado topic.
Otros clientes pueden suscribirse a este topic, y el bróker le hará llegar los mensajes suscritos.
Figura 2. Funcionamiento
Los clientes inician una conexión TCP/IP con el bróker, el cual mantiene un registro de los
clientes conectados. Esta conexión se mantiene abierta hasta que el cliente la finaliza. Por
defecto, MQTT emplea el puerto 1883 y el 8883 cuando funciona sobre TLS.
Para ello el cliente envía un mensaje CONNECT que contiene información necesaria
(nombre de usuario, contraseña, cliente-id). El bróker responde con un mensaje CONNACK,
que contiene el resultado de la conexión (aceptada, rechazada, etc.). (Figura 3)
Figura 3. CONNACK
Para enviar los mensajes el cliente emplea mensajes PUBLISH, que contienen el topic y el
payload. (Figura 4)
Figura 4. PUBLISH
Es asíncrono con diferentes niveles múltiples de calidad del servicio, lo que resulta
ser importante en los casos donde las conexiones de Internet son poco confiables.
Envía mensajes cortos que se vuelven adecuados para las situaciones de un bajo
ancho de banda.
No se requiere de mucho software para implementar a un cliente, lo cual lo vuelve
fantástico para los dispositivos como Arduino con una memoria limitada.
Podemos cifrar los datos enviados y usar usuario y password para proteger nuestros
envíos.
En esta forma de comunicación se desacoplan los clientes que publican (Publisher) de los
que consumen los datos (Suscribers).
Un “topic” se representa mediante una cadena y tiene una estructura jerárquica. Cada
jerarquía se separa con ‘/’. (Figura 7)
Figura 7. Arquitectura
Ejemplos de Topics MQTT Válidos:
casa/prueba/topic
casa/+/topic
casa/#
casa/+/+
+/#
#
Uno de los componentes más importantes del protocolo MQTT es la definición y tipología
de los mensajes, ya que son una de las bases de la agilidad en la que radica su fortaleza. Cada
mensaje consta de 3 partes: (Figura 8)
Los tipos de mensajes y códigos de control que se envían en el protocolo MQTT son los
siguientes.
Message Code
CONNECT 0x10
CONNACK 0x20
PUBLISH 0x30
PUBACK 0x40
PUBREC 0x50
PUBREL 0x60
PUBCOMP 0x70
SUSBSCRBE 0x80
SUBACK 0x90
UNSUSCRIBE 0xA0
UNSUBACK 0xB0
PINGREQ 0xC=
PINGRESP 0xD0
DISCONNECT 0xE0
MQTT ha surgido como un protocolo de mensajería estándar para la IoT. Se puede utilizar
en redes TCP/IP y es muy ligero. La norma sigue un modelo de publicación-suscripción
(“pub/sub”).
Una de las librerías más conocidas y la más estable y flexible es Arduino Client for
MQTT http://pubsubclient.knolleary.net/ que nos provee de un sencillo cliente que nos
permite tanto subscribirnos como publicar contenido usando MQTT. Internamente, usa la API
de Arduino Ethernet Client lo que lo hace compatible con un gran número de shields y placas.
(Figura 9)
MQTT dispone de un mecanismo de calidad del servicio o QoS, entendido como la forma
de gestionar la robustez del envío de mensajes al cliente ante fallos (por ejemplo, de
conectividad).
QoS 0 unacknowledged (at most one): El mensaje se envía una única vez. En caso
de fallo por lo que puede que alguno no se entregue.
QoS 1 acknowledged (at least one): El mensaje se envía hasta que se garantiza la
entrega. En caso de fallo, el suscriptor puede recibir algún mensaje duplicados.
QoS 2 assured (exactly one). Se garantiza que cada mensaje se entrega al suscriptor,
y únicamente una vez.
Usar un nivel u otro depende de las características y necesidades de fiabilidad de nuestro
sistema. Lógicamente, un nivel de QoS superior requiere un mayor intercambio mayor de
mensajes de verificación con el cliente y, por tanto, mayor carga al sistema.
La idea principal de Node.js es usar el modelo de entrada y salida sin bloqueo y controlado
por eventos para seguir siendo liviano y eficiente frente a las aplicaciones en tiempo real de
uso de datos que se ejecutan en los dispositivos.
Cuando hay una nueva solicitud se genera un tipo de evento. El servidor empieza a
procesarlo y, cuando hay una operación de bloqueo de entrada y salida, no espera hasta que se
complete y en su lugar crea una función de devolución de llamada. El servidor comienza en el
acto a procesar otro evento (tal vez otra solicitud) y cuando finaliza la operación de entrada y
salida, continuará trabajando en la solicitud ejecutando la devolución de llamada tan pronto
como tenga tiempo.
Node.js incorpora varios "módulos básicos" compilados en el propio binario, como por
ejemplo el módulo de red, que proporciona una capa para programación de red asíncrona y
otros módulos fundamentales, como por ejemplo Path, FileSystem, Buffer, Timers y el de
propósito más general Stream. Es posible utilizar módulos desarrollados por terceros, ya sea
como archivos “. node" precompilados, o como archivos en JavaScript plano. Los módulos
Javascript se implementan siguiendo la especificación CommonJS para módulos, utilizando
una variable de exportación para dar a estos scripts acceso a funciones y variables
implementadas por los módulos.
Los módulos de terceros pueden extender node.js o añadir un nivel de abstracción,
implementando varias utilidades middleware para utilizar en aplicaciones web, como por
ejemplo los frameworks connect y express. Pese a que los módulos pueden instalarse como
archivos simples, normalmente se instalan utilizando el Node Package Manager (npm) que nos
facilitará la compilación, instalación y actualización de módulos, así como la gestión de las
dependencias.
2.7. Como guardar la información recabada a una base de datos con node.js
3. Debemos conectarnos a una tabla como ejemplo pondremos una tabla de productos que
tienen id autoincrementable, nombre y precio.
4. Nos vamos a conectar a través de ella creando una conexión a través de un pool. (Figura
13)
Figura 13. Conexión Pool
5. Cuando establecemos una conexión con la base de datos podemos llamar al método
query con la consulta como cadena y opcionalmente un arreglo de valores que van a
remplazar a los placeholders. El placeholder es aquel indicado con $1, $2, etcétera y
evita las inyecciones SQL.
6. A continuación, se muestra el modelo de productos que se encargará de interactuar con
la base de datos: (Figura 14)
Como ves, algunas rutas se encargan de renderizar vistas y otras de recuperar datos del
formulario. Para pasar datos a las vistas se pasa un objeto como segundo argumento
a res.render.
8. Las vistas son creadas con EJS, aunque pueden ser creadas con cualquier otro motor de
plantillas. Comencemos viendo el encabezado y el pie, pues serán unas cosas que
siempre vamos a incluir en todas las demás plantillas. (Figura 16)
Figura 16. Vistas
9. El formulario para insertar datos es el siguiente, fíjate en el atributo name que tiene
cada input, pues a él accedemos desde el router de express. (Figura 17)
12. Para mostrarlos dibujamos una tabla con los detalles del producto y además dos enlaces.
Un enlace es para eliminar y otro para editar.
Figura 20. Mostrar
Figura 21 . Final
Conclusión
Una de las características fundamentales del internet de las cosas es que tienen la habilidad
de conectarse y enviar datos. Los dispositivos se tienen que entender de alguna u otra manera
y es aquí donde se introducen los protocolos para la comunicación de datos.
Sin embargo, hay algunos protocolos que no llegan a ser eficientes con el internet de las
cosas debido a la entrega de datos que se envía de manera continua y requieren de demasiados
recursos.
Un escenario podría ser con los sensores, en donde supongamos que estamos dentro de
nuestro cuarto con sensores de temperatura y tiene que regularse con nuestro aire
acondicionado, si detecta que hace mucho calor entonces la temperatura se ajusta de acuerdo
con los datos que recibió del sensor para poder sentirse cómodo y no sentir demasiado calor.
MQTT fue diseñado con el propósito de cumplir el servicio de calidad para la entrega de
datos, contando con un protocolo ligero y sin ocupar muchos recursos de red.
Referencias
Llamas, L. (s.f.). Luis Llamas. ¿Qué es MQTT? Su importancia como protocolo de IoT.
Recuperado el 18 de mayo del 2020 de: https://www.luisllamas.es/que-es-mqtt-su-
importancia-como-protocolo-iot/
https://nodejs.org/es/about/
Mashable. (s.f.). Porque todo mundo está hablando de nodo. Recuperado el 18 de mayo del
Mariños, J. (13 de junio del 2018). DevCode. ¿Qué es node.js? Recuperado el 18 de mayo
js-postgresql-ejemplo-conexion/