Está en la página 1de 26

Almacenamiento de datos

González Frías Liliana Itzel

Universidad Tecnológica de Tecámac

Tecnologías de la Información y Comunicación Área de Desarrollo de

Software Multiplataforma

Estado de México, Tecámac.

Mayo 2020

Aplicaciones de IoT

Índic
e

Índice..................................................................................................................2

Introducción.......................................................................................................4

Capítulo 1 Definición de que es MQTT.............................................................5

1.1. ¿Qué es MQTT?...........................................................................................................5

1.2. ¿Cómo funciona MQTT?.............................................................................................5

1.3. Ventajas de MQTT.......................................................................................................7

1.3. Arquitectura de MQTT................................................................................................7

1.4. Estructura de un mensaje MQTT.................................................................................9

1.5. Seguridad de MQTT..................................................................................................10

1.6. MQTT y Arduino.......................................................................................................10

1.5. Calidad del servicio (QOS)........................................................................................11

Capítulo 2 Definición de que es node.js..........................................................12

2.1. ¿Qué es node.js?.........................................................................................................12

2.5. Módulos de node.js....................................................................................................14


2.6. Desarrollo homogéneo entre cliente y servidor.........................................................15

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 es un protocolo de conectividad máquina a máquina (M2M) "Internet de las


cosas". Fue diseñado como un transporte de mensajes de publicación o suscripción
extremadamente ligera. Es útil para conexiones con ubicaciones remotas donde se requiere
una pequeña huella de código y / o el ancho de banda de la red es muy importante. 

Node.js es un entorno de tiempo de ejecución de JavaScript (de ahí su terminación en .js


haciendo alusión al lenguaje JavaScript). Este entorno de tiempo de ejecución en tiempo real
incluye todo lo que se necesita para ejecutar un programa escrito en JavaScript. También
aporta muchos beneficios y soluciona muchísimos problemas, por lo que sería más que
interesante realizar nuestro curso de Node.js para obtener las bases, conceptos y habilidades
necesarias que nos motiven a profundizar en sus opciones e iniciar la programación.

Node.js es especialmente conocido por trabajar de maravilla con bases de datos no


relacionales como Mongo, esto debido principalmente a que ambos usan javascript en sus
procesos, pero Node.js va más allá de solo Mongo y puede conectarse a cualquier base de
datos relacional tal como se haría con otras tecnologías backend.
Capítulo 1 Definición de que es MQTT

1.1. ¿Qué es MQTT?

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á basado en la pila TCP/IP como base para la comunicación. En el caso de MQTT cada


conexión se mantiene abierta y se "reutiliza" en cada comunicación.

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

1.2. ¿Cómo funciona MQTT?

El funcionamiento del MQTT es un servicio de mensajería push con patrón


publicador/suscriptor (pub-sub). (Figura 2)

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

Para suscribirse y desuscribirse se emplean mensajes SUBSCRIBE y UNSUSCRIBE, que


el servidor responde con SUBACK y UNSUBACK. (Figura 5)

Figura 5. SUBACK y UNSUBACK


Por otro lado, para asegurar que la conexión está activa los clientes mandan periódicamente
un mensaje PINGREQ que es respondido por el servidor con un PINGRESP. Finalmente, el
cliente se desconecta enviando un mensaje de DISCONNECT.

1.3. Ventajas de MQTT

Las ventajas de usar el protocolo MQTT son:

 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.

1.3. Arquitectura de MQTT

MQTT (Message Queue Telemetry Transport), un protocolo usado para la comunicación


machine-to-machine (M2M) en el “Internet of Things”. Este protocolo está orientado a la
comunicación de sensores, debido a que consume muy poco ancho de banda y puede ser
utilizado en la mayoría de los dispositivos empotrados con pocos recursos. (Figura 6)

Figura 6. Arquitectura MQTT


La arquitectura de MQTT sigue una topología de estrella, con un nodo central que hace de
servidor o “bróker”. El bróker es el encargado de gestionar la red y de transmitir los mensajes,
para mantener activo el canal, los clientes mandan periódicamente un paquete (PINGREQ) y
esperan la respuesta del bróker (PINGRESP). La comunicación puede ser cifrada entre otras
muchas opciones.

En esta forma de comunicación se desacoplan los clientes que publican (Publisher) de los
que consumen los datos (Suscribers).

El desacoplamiento se produce en tres dimensiones:

 En el espacio: El publicador y el suscriptor no tienen por qué conocerse.


 En el tiempo: El publicador y el suscriptor no tienen por qué estar conectados en el
mismo momento.
 En la sincronización: las operaciones en cualquiera de los dos componentes no
quedan interrumpidas mientras se publican o se reciben mensajes.

Dentro de la arquitectura de MQTT, es muy importante el concepto “topic” o “tema” en


español ya que a través de estos “topics” se articula la comunicación puesto que emisores y
receptores deben estar suscritos a un “topic” común para poder entablar la comunicación.

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/+/+
 +/#
 #

1.4. Estructura de un mensaje MQTT

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)

Figura 8. Estructura de un mensaje MQTT

 Cabecera fija. Ocupa 2 a 5 bytes, obligatorio. Consta de un código de control, que


identifica el tipo de mensaje enviado, y de la longitud del mensaje. La longitud se
codifica en 1 a 4 bytes, de los cuales se emplean los 7 primeros bits, y el último es
un bit de continuidad.
 Cabecera variable. Opcional, contiene información adicional que es necesaria en
ciertos mensajes o situaciones.
 Contenido(payload). Es el contenido real del mensaje. Puede tener un máximo de
256 Mb, aunque en implementaciones reales el máximo es de 2 a 4 kB.

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

1.5. Seguridad de MQTT

La seguridad siempre debe ser un factor importante a considerar en cualquier sistema de


comunicación M2M. El protocolo MQTT dispone de distintas medidas de seguridad que
podemos adoptar para proteger las comunicaciones.

Esto incluye transporte SSL/TLS y autentificación por usuario y contraseña o mediante


certificado. Sin embargo, hay que tener en cuenta que muchos de los dispositivos IoT
disponen de escasa capacidad, por lo que el SLL/TLS puede suponer una carga de proceso
importante.

1.6. MQTT y Arduino

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)

Figura 9. MQTT y Arduino

1.5. Calidad del servicio (QOS)

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).

MQTT tiene tres niveles QoS posibles.

 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.

Capítulo 2 Definición de que es node.js

2.1. ¿Qué es node.js?

Node.js es un entorno en tiempo de ejecución multiplataforma, de código abierto, para la


capa del servidor basado en el lenguaje de programación JavaScript, asíncrono, con E/S de
datos en una arquitectura orientada a eventos y basado en el motor V8 de Google. Fue creado
con el enfoque de ser útil en la creación de programas de red altamente escalables, como por
ejemplo, servidores web.4, fue creado por Ryan Dahl en 2009.

Ideado como un entorno de ejecución de JavaScript orientado a eventos asíncronos, Node.js


está diseñado para crear aplicaciones network escalables. En el siguiente ejemplo de "hola
mundo", pueden atenderse muchas conexiones simultáneamente. Por cada conexión, se activa
la devolución de llamada o callback, pero si no hay trabajo que hacer, Node.js se dormirá.
(Figura 10)

Figura 10. node.js

Node.js funciona con un modelo de evaluación de un único hilo de ejecución, usando


entradas y salidas asíncronas las cuales pueden ejecutarse concurrentemente en un número de
hasta cientos de miles sin incurrir en costos asociados al cambio de contexto. Este diseño de
compartir un único hilo de ejecución entre todas las solicitudes atiende a necesidades de
aplicaciones altamente concurrentes, en el que toda operación que realice entradas y salidas
debe tener una función callback. Un inconveniente de este enfoque de único hilo de ejecución
es que Node.js requiere de módulos adicionales como clúster para escalar la aplicación con el
número de núcleos de procesamiento de la máquina en la que se ejecuta.

2.2. ¿Para qué sirve node.js?

Node.js utiliza un modelo de entrada y salida sin bloqueo controlado por eventos que lo


hace ligero y eficiente (con entrada nos referimos a solicitudes y con salida a respuestas).
Puede referirse a cualquier operación, desde leer o escribir archivos de cualquier tipo hasta
hacer una solicitud HTTP.

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.

2.3. Ventajas de node.js

 En primer lugar y como gran ventaja, es tener Javascript incorporado en la


plataforma Node.js, siendo un lenguaje fácil de aprender y que puede ser manejado
por programadores de Java.
 Node.js se desarrolla en un entorno de tiempo de ejecución de fuente libre que
ayudará en el almacenamiento de creación de proyectos únicos.
 El modelo de entrada y salida impulsado por eventos ayuda mucho en el manejo
simultáneo de peticiones.
 El administrador y el usuario incorporan estrategias de codificación similares que
desembocan en la creación de abundantes aplicaciones de internet de gran
competencia.
 Como es un modelo de programación de un solo subproceso, Node.js ofrece
abundantes características y opciones. Para tener una buena retención de los eventos
de salida en tiempo de ejecución, como las devoluciones de llamada, se implementa
Node.js
 Node.js es la plataforma de software más utilizada en este momento estando por
encima en entornos de ejecución y lenguajes de programación como PHP y C a la
vez que tiene un tiempo de ejecución (tiempo real) muy superior.
 No es un código muy complejo, pero requiere muchas más líneas de codificación y
mayor comprensión que el lenguaje PHP.

2.4. Funcionamiento de node.js

El funcionamiento interno del entorno de ejecución para JavaScript, Node.js, es bastante


interesante. En comparación con las técnicas tradicionales de servicio web donde cada
conexión (que crea una solicitud) genera un nuevo subproceso, ocupando la RAM del sistema
y regularmente maximizando la cantidad de RAM disponible, Node.js opera en un solo
subproceso, utilizando el modelo entrada y entrada sin bloqueo de la salida, lo que le permite
soportar decenas de miles de conexiones al mismo tiempo mantenidas en el bucle de eventos.

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.

2.5. Módulos de node.js

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.6. Desarrollo homogéneo entre cliente y servidor

Node.js puede ser combinado con una base de datos documental (por


ejemplo, MongoDB o CouchDB) y JSON lo que permite desarrollar en un entorno de
desarrollo JavaScript unificado. Con la adaptación de los patrones para desarrollo del lado del
servidor tales como MVC y sus variantes MVP, MVVM, etc. Node.js facilita la reutilización
de código del mismo modelo de interfaz entre el lado del cliente y el lado del servidor.

2.7. Como guardar la información recabada a una base de datos con node.js

1. Lo primero que se debe hacer es  instalar Node.JS y también PostgreSQL.


2. Debemos instalar la librería de pg. (Figura 11)

Figura 11. Instalación

3. Debemos conectarnos a una tabla como ejemplo pondremos una tabla de productos que
tienen id autoincrementable, nombre y precio.

La estructura de la tabla es la siguiente: (Figura 12)

Figura 12. Conexión a tabla

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)

Figura 14. Modelo


7. Se usará el enrutador como controlador, pues se encargará de rende rizar las vistas y
pasarle datos a través de los modelos. (Figura 15)
Figura 15. Enrutador

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)

Figura 17. Formulario para insertar datos


10. Para editar, debemos obtener el id producto de la URL, obtenerlo desde nuestro modelo
y después rellenar el formulario. (Figura 18)

Figura 18. id del producto

11. Código para poder editar (Figura 19)

Figura 19. Código para poder editar

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

13. Quedaría de la siguiente manera (Figura 21)

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.

Node.js no es un nuevo lenguaje de programación, es una plataforma que te va a permitir


ejecutar código JavaScript por fuera del navegador. Con Node.js puedes crear cualquier
programa o aplicación que podrías crear con otro lenguaje de uso general como Java, Ruby,
C++ o Python. El gran poder de Node.js se encuentra en las librerías (llamadas paquetes) y en
la comunidad de programadores que las escriben y las publican sin costo alguno.

Node.JS y sus paquetes ayudan a que el desarrollador se centre en la lógica de la aplicación,


pues solo tiene que conectar los paquetes entre sí y programar la lógica de negocio.

Referencias

IBM Developer (04 de Octubre de 2017). IBM. Conociendo MQTT. Recuperado el 18


de mayo del 2020 de: https://www.ibm.com/developerworks/ssa/library/iot-mqtt-why-good-
for-iot/index.html

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/

Aprendiendo Arduino (s.f.) Wordpress. Aprendiendo Arduino. Recuperado el 18 de mayo


del 2020 de: https://aprendiendoarduino.wordpress.com/2018/11/19/mqtt/
NodeJs. (s.f.). Acerca de Node.js. Recuperado el 18 de mayo del 2020 de:

https://nodejs.org/es/about/

Mashable. (s.f.). Porque todo mundo está hablando de nodo. Recuperado el 18 de mayo del

2020 de: https://mashable.com/2011/03/10/node-js/

Mariños, J. (13 de junio del 2018). DevCode. ¿Qué es node.js? Recuperado el 18 de mayo

del 2020 de: https://devcode.la/blog/que-es-nodejs/

ParziBytes. (28 de junio de 2018). ParziBytes blog. Node.js y PostgreSQL – Ejemplo de

conexión. Recuperado el 18 de mayo del 2020 de: https://parzibyte.me/blog/2019/06/28/node-

js-postgresql-ejemplo-conexion/

También podría gustarte