Las herramientas de codificación visual Node-RED de IBM simplifican el trabajo de cableado del mundo actual de ordenadores, sensores y servicios en línea.

    Piratear el mundo que te rodea para someterlo a tu voluntad es cada vez más fácil.

    Ya sea que esté configurando una lámpara para que parpadee cuando alguien te retuite o un sistema para que te envíe un mensaje de texto cuando termines de lavar, se está trabajando para que sea más fácil para que la máquina hable con la máquina.

    Conectar la riqueza de ordenadores, sensores y servicios en línea en el mundo moderno puede conducir a creaciones extrañas y maravillosas, por ejemplo, este avión teledirigido controlado por un silbato.

    Pero la esencia de trabajar con esta Internet de las cosas es un poco repetitiva. Para quitar algunos de esos monótonos investigadores de IBM, se nos ocurrió la idea de construir una caja de herramientas de código reutilizable que la gente pudiera usar para conectar más fácilmente el software y los dispositivos en sistemas útiles.

    Los investigadores de IBM buscaban una manera de simplificar el proceso de unir sistemas y sensores al construir tecnologías de prueba de concepto para los clientes.

    «Estábamos charlando y Nick dijo:’Debe haber una manera más fácil de hacer esto'», dijo Dave Conway-Jones, inventor senior de IBM.

    Conway-Jones se refiere a Nick O’Leary, especialista en tecnología emergente de IBM, que en ese momento había estado experimentando con el uso de herramientas gráficas de arrastrar y soltar para construir el código necesario para permitir que los servicios web, el software y el hardware se comuniquen. Son estas herramientas las que se convertirían en Node-RED.

    Node-RED es un motor de procesamiento de eventos que básicamente evita que los hackers de hardware y software tengan que reinventar continuamente la rueda. O’Leary utiliza el ejemplo de tener que escribir código para enviar datos a un dispositivo a través de su puerto serie cada vez que se inicia un nuevo proyecto.

    «Dave y yo sabemos cómo escribir código para hablar con un puerto serie, pero puede que tarde un poco en recordar cómo hacerlo y escribirlo.»

    «Para hablar con un puerto serie usando Node-RED es sólo cuestión de arrastrar un nodo y darle los detalles del puerto serie y listo. Nos da esta agilidad para hacer prototipos rápidamente».

    Node-RED no elimina la necesidad de escribir código por completo, pero sí la reduce, y en el proceso baja la barra técnica y permite que la gente se concentre en la creación, en lugar de en el hacer.

    «Así como una hoja de cálculo te permite jugar con los números, Node-RED es una herramienta que es buena para jugar con los eventos», dijo Conway-Jones.

    «La gente que no es programadora puede empezar a pensar:’Tengo Twitter aquí y quiero analizar lo que se dice y publicarlo en un documento aquí, ¿cómo puedo hacerlo? Por ejemplo, puedes tener un feed de Twitter, hacer un poco de análisis de sentimientos en los tweets y enviar todos los buenos a una dirección de correo electrónico.

    «La gente que trabaja en funciones de casi nivel empresarial, no del todo, pero que llega a ese nivel, podría hacer esto. Ese es el nivel al que queremos llegar».

    ¿Qué es Node-RED?

    A primera vista, la interfaz de Node-RED puede recordar a los usuarios Scratch, la herramienta gráfica desarrollada por el MIT que permite a los niños codificar programas simples arrastrando y soltando comandos de software.

    Al igual que Scratch, Node-RED proporciona una GUI donde los usuarios arrastran y sueltan bloques que representan componentes de un sistema más grande, en el caso de Node-RED usualmente los dispositivos, plataformas de software y servicios web que van a ser conectados. Se pueden colocar más bloques entre estos componentes para representar las funciones de software que disputan y transforman los datos en tránsito.

    Quizás la mejor manera de entender lo que es Node-RED es verlo. A continuación se muestra la representación de Node-RED de un programa «Hello World», comúnmente utilizado para introducir a alguien a una nueva tecnología o lenguaje de programación. Para aquellos que no están familiarizados con este programa es usualmente una rutina muy simple que imprime el mensaje `Hola Mundo’ en la pantalla.

    Aquí puede ver la interfaz gráfica de usuario de Node-RED y cómo la plataforma descompone los sistemas en sus partes constituyentes.

    Cada uno de los bloques redondeados que puede ver en la pantalla es un nodo, que es una representación visual de un bloque de código JavaScript diseñado para llevar a cabo una tarea específica.

    Para construir el programa’Hello World’ el usuario arrastra a la ventana central un’nodo de inyección’, un nodo diseñado para enviar un mensaje a otros nodos.

    Este nodo de inyección se edita para dar salida a la cadena ‘Hola’.

    A continuación, se arrastra un nodo de función y se edita para definir una función JavaScript que añade la cadena «World» a cualquier mensaje que reciba.

    Estos dos nodos se conectan entre sí. La mayoría de los nodos tienen un círculo gris en su borde izquierdo, que representa su puerto de entrada, y en su borde derecho, que representa su puerto de salida. Haciendo clic con el botón izquierdo del ratón y arrastrando el puerto de salida del nodo’Hola’ al puerto de entrada del nodo’Mundo’ se conectan los dos nodos.

    La última etapa es añadir un nodo Debug que imprime el mensaje que recibe en la ventana Debug. Este nodo Debug se conecta a la salida del nodo ‘ World’.

    El proceso ya está listo para ejecutarse y, una vez desplegado, mostrará la cadena `Hola Mundo’ en el cuadro de depuración, que se muestra a la derecha de la pantalla.

    Este programa terminado es un ejemplo de lo que se llama un flujo en Node-RED.

    Lo que es interesante de Node-RED es que puede hacer mucho más que escupir un simple mensaje, también puede pegar servicios web y hardware, y ahí es donde comienza a ser poderoso.

    Tome este uso de Node-RED por el fotógrafo y empleado de IBM Dom Bramley, que captura imágenes del cielo nocturno. El equipo en el que confía no es impermeable, pero necesita ser dejado afuera durante la noche para fotografiar las estrellas.

    Utilizó Node-RED para construir un sistema de alerta meteorológica personal, que funciona controlando las luces de su casa. Bramley construyó un flujo que se conectaba con el pronóstico del tiempo.io cada tres minutos para comprobar las predicciones de precipitaciones locales. Un segundo nodo tomó la respuesta de forecast.io y la usó para calcular cuántos minutos faltaban para que llegara la lluvia a su casa. Una lámpara ambiental en su sala de estar cambiaba de color en función del número de minutos hasta que llegaba la lluvia, mientras que una lámpara de cabecera se encendía si la lluvia estaba lo suficientemente cerca como para ser considerada insegura.

    Dos flujos controlaban las luces de la casa, uno de ellos creaba un valor RGB que cambiaba el color de una luz ambiental en función de la proximidad de la lluvia. El segundo envió una señal a un Arduino conectado a MQTTT controlando un enchufe de 433MHz, el cual encendía una lámpara de cabecera si una condición insegura era activada.

    Node-RED era el pegamento que mantenía unido el sistema de alerta meteorológica, permitiendo a Bramley absorber los datos de la previsión.io API, para extraer una visión útil de la misma y utilizar esa información para manipular los sistemas automatizados de su casa.

    Construyendo el internet de las cosas

    El flujo de alertas meteorológicas de Bramley demuestra cómo Node-RED permite a los creadores construir sobre el trabajo de otros.

    Por ejemplo, para extraer datos de forecast.io Bramley importó un nodo existente que envía peticiones HTTP GET. Todo lo que tenía que hacer era editar la URL a la que se hacía la petición y añadir una cadena que definiera su consulta.

    A su vez, el sistema de alerta meteorológica de Bramley está disponible para que otros lo importen a Node-RED para que puedan usarlo y abusar de él como mejor les parezca. Incluso si no querían todo el flujo, podían canibalizarlo por partes, tal vez simplemente instalando el nodo para cambiar el color del sistema de iluminación ambiental.

    «En Node-RED se puede envolver cualquier funcionalidad, encapsular esa función como un nodo en nuestra paleta», dijo O’Leary – listando módulos para un cliente MQTT y hablando con puertos serie en hardware como ejemplos de funcionalidad incorporada en los nodos.

    «Esta paleta de nodos no está codificada, por lo que puedes añadir nuevos nodos y, cuando empieces, tendrás una nueva funcionalidad.

    «Es ese ecosistema de nodos el que hace de Node-RED una plataforma a la que la gente puede contribuir.

    «Significa que no tenemos que perder tiempo preocupándonos de cómo manejar desafíos técnicos específicos. Podemos centrarnos en lo que queremos que haga esta aplicación. Tienes que concentrarte en el qué, más que en el cómo».

    Nuevos nodos para interactuar con hardware, software y servicios web están siendo añadidos todo el tiempo. Entre las últimas incorporaciones se incluyen los nodos para el control de las tomas con mando a distancia Belkin WeMo y la iluminación de color de Philips. También se pueden escribir nodos para aprovechar las plataformas de software, con nodos para enviar mensajes SMS a través de Twilio y mensajes a través de Twitter.

    La barra técnica para escribir un nodo no es especialmente alta, ya que un nodo es simplemente una encapsulación de algún código JavaScript que se ejecuta en el entorno node.js.

    Ya existe una comunidad activa que produce regularmente nuevos nodos y la plataforma Node-RED es un proyecto de código abierto alojado en GitHub, por lo que cualquiera puede contribuir.

    Los flujos Node-RED se representan en JavaScript Object Notation o JSON y pueden ser fácilmente exportados al portapapeles para ser importados a Node-RED o compartidos en línea.

    IBM también está considerando la posibilidad de simplificar el trabajo de otros en Node-RED mediante la introducción de subflujos. Los subflujos permitirían a los usuarios colapsar los flujos de múltiples nodos enlazados en un solo nodo, permitiendo que la lógica más compleja sea abstraída en un solo nodo.

    Las múltiples caras de Node-RED

    «Todo el mundo lo hace con una percepción completamente diferente de lo que es Node-RED o lo que podría ser», dijo O’Leary, refiriéndose a cómo la flexibilidad de la plataforma ha llevado a la gente a ver posibilidades que originalmente no se habían previsto.

    «Claramente es una plataforma que tiene muchas aplicaciones diferentes, diferentes sectores ven cosas diferentes en ella.

    «Estamos construyendo una plataforma a la que cualquiera puede contribuir con nodos para que les resuelva algún problema, y luego volver a contribuir con esos nodos».

    Por ejemplo, la educación no era el objetivo de IBM cuando diseñaba Node-RED, pero la simplicidad de arrastrar y soltar de los programas de construcción en Node-RED ha llevado a algunas escuelas a utilizarlo como una plataforma para enseñar a los niños sobre codificación y hacking de hardware.

    Y O’Leary dijo que con el tiempo se pueden añadir más nodos que abstraen más de la codificación, para hacer que Node-RED sea menos intimidante para las personas que no tienen conocimientos de programación.

    «Definitivamente hay un espacio para una abstracción de más alto nivel», dijo.

    El descenso de la barra técnica se simplifica por la facilidad con la que se puede extender Node-RED, por ejemplo, añadiendo nodos para llevar a cabo construcciones de programación comunes, como por ejemplo un bucle For.

    O’Leary habló también de la posibilidad de que alguien creara flujos Node-RED para encarnar lecciones para enseñar a los niños sobre electrónica e informática, de modo que un profesor pudiera cambiar una frambuesa Pi conectada a sensores para que funcionara en modo «lección número uno».

    Node-RED es actualmente popular para la gestión de la automatización doméstica, según O’Leary, citando casos en los que ha dejado de lado «el lío de los scripts Perl y Python» que anteriormente mantenían unidos estos sistemas, dijo.

    Lo bien que encaja Node-RED en la automatización del hogar se hace obvio cuando se entra en el laboratorio de Tecnologías Emergentes de IBM en Hursley, Inglaterra. Los investigadores han utilizado Node-RED para permitir que el mismo interruptor inalámbrico encienda un ventilador, altere la pantalla de un letrero LED o encienda y apague una lámpara. Cambiar lo que hace el conmutador no requiere más que hacer clic en el flujo Nodo-Rojo y cambiar el cableado entre los nodos, una tarea que se realiza en segundos.

    Se han encontrado usos aún más exóticos para el Node-RED en Hursley. Se ha escrito un flujo para controlar un zángano silbando, un tono ascendente hace que el zángano despegue y un tono descendente lo hace aterrizar.

    Node-RED ya está ayudando a IBM a pegar demostraciones de pruebas de concepto para sus clientes. La empresa recientemente ha ejecutado flujos Node-RED en placas Raspberry Pi para conectar las placas Arduino a cámaras web y sensores de temperatura, presión y humedad que monitorean una línea de producción de la fábrica.

    «Por supuesto que podríamos haber escrito código para capturar todo eso, pero habría sido mucho menos flexible, porque cuando se añaden nuevos sensores hay que entrar y averiguar dónde añadir nuevos trozos de código», dijo O’Leary.

    Cuando la misma empresa tuvo un problema con que los constructores desconectaran el servidor para poder conectar sus herramientas eléctricas, IBM pudo, «en un espacio de unos cinco minutos», utilizar Node-RED para conectar un sistema que enviaba automáticamente por correo electrónico al personal clave si el servidor se caía.

    «Para nosotros la flexibilidad es el valor», dijo O’Leary, «pero otras personas ven un valor diferente».

    Para las empresas, este valor podría consistir en clasificar los datos cerca de donde se recogen en el borde de la red, filtrando el ruido y enviando únicamente la información pertinente.

    «Lo que tenemos aquí es algo que te permite llevar la lógica y el control del negocio hasta el borde de la red, hasta una frambuesa Pi o una pequeña caja Linux integrada», dijo O’Leary.

    «Es un área interesante. Es adecuado para funcionar en el borde de la red debido a su huella ligera. Puede supervisar los eventos localmente y sólo enviar algo a la empresa cuando sea necesario, en lugar de tener que enviar todos los datos a su centro de datos central de la empresa y ocuparse de ello allí».

    Limitaciones de Node-RED

    Node-RED es una aplicación basada en node.js, una plataforma JavaScript del lado del servidor que utiliza un modelo de E/S basado en eventos, sin bloqueo, adecuado para crear aplicaciones en tiempo real que se ejecutan en dispositivos distribuidos.

    Para que un dispositivo o servicio funcione con Node-RED es necesario que exista una biblioteca o módulo node.js capaz de hablar con ellos.

    Pero el número de servicios y dispositivos compatibles es amplio, gracias en parte a la tendencia de muchas plataformas modernas a exponer sus datos y funcionalidades a través de API abiertas que aceptan peticiones HTTP.

    Y como Node-RED se ejecuta en node.js, también puede funcionar en una serie de dispositivos menos potentes, como el frambuesa Pi de 35 euros.

    ¿Qué sigue para Node-RED?

    IBM open-sourcing la plataforma Node-RED en septiembre y O’Leary dijo que IBM tiene «una pizarra llena de planes, ideas y características para trabajar lentamente a través de nuestro camino».

    Node-RED es una plataforma en evolución que O’Leary espera que encuentre nuevas audiencias a medida que la comunidad construye nuevas herramientas sobre ella.

    «Esto todavía no es algo que mi madre usaría, pero ciertamente hay mucha gente a la que esto le está permitiendo hacer más de lo que pensaban que podían hacer».