Cómo y por qué debería construir dispositivos de Internet de las cosas con Node.js

En este artículo, analizaremos por qué y cómo puede usar Node.js para el lado del servidor de sus dispositivos de Internet de las cosas (IoT).

Comprender la oportunidad comercial

En 2019, los ingresos de mercado de IoT alcanzaron los $ 212 mil millones. Hay alrededor de 26,66 mil millones de dispositivos IoT conectados en todo el mundo, y se prevé que este número alcance los 75,44 mil millones en 2025.  

La ONU estima que, en febrero de 2020, la población mundial es actualmente de 7.700 millones de personas. Las matemáticas simples nos dicen que la persona promedio posee entre 3 y 4 dispositivos IoT. ¿Tienes uno? ¿Quizás un reloj inteligente? ¿Una televisión inteligente? ¿O un coche inteligente?

Avanzando más, se espera que la población alcance los 8.100 millones de personas en 2025. El mismo cálculo matemático nos muestra que, en 2025, una persona promedio tendrá de 9 a 10 dispositivos inteligentes en su poder.

¿Ves a dónde voy con esto? ¿Quiere unirse a este lucrativo nicho de mercado y convertir su dispositivo IoT en uno de estos 9 a 10?

Estadísticas recuperadas de Statista y Naciones Unidas.

Elija el marco adecuado

El lado del cliente de un dispositivo IoT está representado por el propio hardware. Está programado con C, C ++ o Lua, lenguajes de programación difíciles y de bajo nivel. Pero no hay mucho que pueda hacer al respecto debido a las limitaciones del hardware.

Junto con el alto rendimiento, los usuarios de dispositivos de IoT priorizan el bajo costo y la eficiencia energética. Así, al menos por ahora, deberías seguir trabajando con lenguajes de bajo nivel.

Por otro lado, el lado del servidor de las aplicaciones de IoT le ofrece más libertad de elección. Aquí, no está limitado por el hardware, por lo que puede elegir cualquier lenguaje de codificación y marco que prefiera.

Creo que el correcto es Node.js. He aquí por qué.

Node.js es rápido y eficaz

En primer lugar, cualquier dispositivo de IoT trabaja constantemente con datos que cambian dinámicamente. Esto significa que necesita un marco que pueda manejar aplicaciones en tiempo real y grandes flujos de datos.

Node.js se basa en el motor JS V8 de Google, que es muy eficaz y perfectamente escalable. Gracias a esta función, Node.js es el marco de trabajo número uno que se utiliza con aplicaciones y plataformas en tiempo real. El cambio constante de datos tampoco es un desafío para él.

Node.js es fácil de integrar con protocolos de IoT

Las aplicaciones de IoT utilizan activamente un protocolo de mensajería basado en publicación-suscripción, MQTT. A su vez, para transporte y encapsulación, este protocolo utiliza WebSockets. Tanto MQTT como WebSockets son bien compatibles y se integran fácilmente con Node.js.

Los módulos de Node.js facilitan el desarrollo de IoT

Node.js se amplía con npm, el Node Package Manager, que presenta una gran cantidad de módulos de IoT útiles. Hay alrededor de 80 paquetes para Intel IoT Edison, Arduino o Raspberry Pi. Además, cuenta con más de 30 paquetes para diferentes sensores, balizas y otras herramientas.

Es por eso que el desarrollo de Internet de las cosas es más simple y rápido con los módulos de IoT de Node.js.

Node.js ahorra recursos y es escalable

En general, los desarrolladores prefieren trabajar con Node.js porque no requiere muchos recursos. La CPU y la RAM no están sobrecargadas.

Además, Node.js es altamente escalable, lo cual es absolutamente necesario para la mayoría de las empresas modernas.

Cuidado con los desafíos

Entrar en el nicho de IoT puede llevarlo por un camino hacia el éxito. No es de extrañar, entonces, que haya muchos desafíos y trampas esperándote en tu camino; el éxito nunca es fácil de lograr. Y el primer y más importante desafío que debe tener en cuenta es la seguridad.

La seguridad es uno de los principales problemas en la esfera de IoT y uno de los primeros escollos con los que se encontrará. Entonces, ¿qué debería hacer?

Autenticación segura

Comencemos con la autenticación. Hay muchas herramientas para la autenticación en Node.js: tokens, tokens web JSON, Auth0, etc. Cada uno tiene sus ventajas y desventajas. Para empezar, debería mirarlos desde la perspectiva de IoT.

Por un lado, los tokens son efectivos pero no 100% seguros . Son una forma genial de configurar la autenticación, ya que le permiten identificar a un usuario específico y decidir si conceder o denegar el acceso. Un token se puede cifrar con cualquier algoritmo.

Sin embargo, el hardware (escáneres, sensores, concentradores u otras cosas de IoT) debe almacenar este token o datos de inicio de sesión / contraseña en el firmware. Esto significa que los atacantes pueden robar el token si tienen acceso físico al hardware. Lo mismo ocurre con JWT o Auth0.

Por otro lado, podemos usar cualquier herramienta para la autenticación en el lado del servidor. Puede integrar fácilmente cualquier herramienta de autenticación en la plataforma Node.js.

Hay muchos paquetes npm que le permiten hacer esto manualmente: Auth0, Passport y JWT. También existen paquetes para la integración con servicios de IoT en la nube: @ azure-iot / authentication, aws-iot-device-sdk, etc.

Solicitudes HTTP seguras

A continuación, tenga cuidado con las solicitudes HTTP de sus dispositivos IoT.Debe verificar si recibe una solicitud de un dispositivo de IoT adecuado.

En primer lugar, debe implementar HTTPS con sus dispositivos IoT. El hardware no es un navegador y debe implementar HTTPS manualmente en él. Para el lado del servidor, puede hacerlo manualmente o usar alojamiento con configuración y certificados HTTPS.

En Node.js, es bastante fácil de implementar:

const express = require('express'); const https = require('https'); const http = require('http'); const fs = require('fs'); const options = { key: fs.readFileSync('path/to/your/key.pem'), cert: fs.readFileSync(path/to/your/certificate.cert') }; const app = express(); http.createServer(app).listen(80); https.createServer(options, app).listen(443); 

HTTPS utiliza protocolos SSL o TLS para el cifrado de datos. Sin embargo, para asegurarse de haber recibido una solicitud del servidor o cliente necesario, utilice un cifrado de datos adicional. Por ejemplo, así es como puede usar una firma:

const fetch = require('node-fetch'); const verifier = crypto.createVerify('RSA-SHA1') const SIGNATURE_FORMAT = 'base64'; //check if it trusted url for your certificate const trustedUrl = ‘//trustedUrl/’ const isTrustedUrl = trustedUrl.match(url); If (isTrustedUrl) { verifier.update(req.body, 'utf8') fetch(isTrustedUrl) .then(certificate => { // check signature const isValidSignature = verifier.verify(certificate, reg.header.signature, SIGNATURE_FORMAT); }) .catch(err => console.log(err)); }

Para concluir esta parte:

  1. Primero, debe verificar la URL confiable de su certificado.
  2. Luego, firma un cuerpo de solicitud con la clave pública de su certificado.
  3. Finalmente, compara el cuerpo firmado con la firma de los encabezados.

Es extremadamente importante saber que recibe solicitudes de los dispositivos adecuados y que no se enfrenta a un ataque intermedio.

Mira estos ejemplos

Asama: seguimiento del movimiento de sus empleados

asama

Asama es un sistema de micro-ubicación, que utiliza relojes inteligentes y balizas Bluetooth para rastrear el movimiento y la actividad de los empleados. Las balizas transmiten una señal regular.

According to these signals, the smartwatch defines the location of an employee. The smartwatch also analyzes whether the right person is wearing it and if the employee is sleeping or working.

Baliza Asama rastreador asama

The data is then transmitted to the mobile app, which is installed and configured on the employer’s phone. The system is powered by Node.js in IoT.

This way, managers can track their employees in real time, find the person they need right away, and optimize the workspace. Also, at the end of the week the employer receives an extensive report on employee activity. All this helps to boost the company's performance and productivity.

This solution might not suit a business with a small office and flexible hours. Yet, it works perfectly for industrial plants, construction sites, factories, warehouses, shopping centers, supermarkets, hotels, security agencies, restaurants, or stores.

It's well-suited anywhere you as an employer need to know if employees are coming too late or leaving too early, being absent at the working place, not working actively throughout the day, or not following routes and schedules.

clientes de asama

PREE – finding your belongings

PREE  is a system of BLE beacons and mobile software which helps people stop losing their stuff. It is a lifesaver for those who often forget their phone, bag, keys, wallet, or any other valuable belongings.

The user can see the location of their item in real time and share it with trusted contacts. Once the item is out of range, they will get a notification, and so will their friends or family members. It doesn't spam others with notifications when they are not needed – for example, when at home, the user can mute them for a certain area.

This Internet of Things IoT system is built with Node.js, Express, and Mongo on the backend and Ionic with Cordova for the frontend. The combination of these frameworks ensures the best user experience.

PREE

Validate your idea

Once you have an idea for an IoT product, start with validating  it. You can do this in two ways:

  • Hire an idea validation team, who will help you test the viability of your product before you invest in development, or
  • Contrate un equipo de diseño y desarrollo de software, que pondrá en marcha un extenso proceso de descubrimiento de productos.

Posdata

Me gustaría enviar un gran agradecimiento a Volodya Andrushchak, el gurú de IoT en KeenEthics, por contribuir y básicamente darle vida a este artículo.

Si te ha gustado el artículo, definitivamente deberías leer un poco más sobre Node.js: ¿Cuáles son las ventajas de Node.JS? o NodeJS vs Python: cómo elegir la mejor tecnología para desarrollar el back-end de su aplicación web.

El artículo original publicado en el blog de KeenEthics se puede encontrar aquí: IoT y Node.JS: ¿Cómo aprovechar la oportunidad?