Archivo de la etiqueta: Node-Red flow

Estructura de los Flujos en Node-RED

Cuando comience a usar Node-RED, probablemente comience a agregar todos sus nodos a la misma pestaña en el editor. Con el tiempo, eso puede provocar un desorden de nodos y cables que dificultan encontrar partes particulares del flujo.

Pensar un poco en cómo estructurar sus flujos al comienzo de cualquier proyecto de desarrollo puede ayudar a mantenerlos organizados y facilitar su mantenimiento. El método principal para organizar los flujos en Node-RED es separarlos en varias pestañas dentro del editor. Hay algunas estrategias diferentes que se pueden utilizar para hacer eso.

Si puede identificar componentes lógicos separados de su aplicación, considere colocarlos en pestañas separadas.

Para una aplicación de automatización del hogar, puede poner la lógica de flujo para cada habitación en una pestaña separada para reflejar el espacio físico. O es posible que desee separar los flujos según la función, por lo que todos los flujos relacionados con la iluminación van en una pestaña y la calefacción en otra.

Si está creando un backend de API HTTP, cada pestaña podría representar un tipo de recurso independiente al que accede la API.

El objetivo debe ser facilitar la “lectura” de un flujo individual de principio a fin. Mantenerlo en una sola pestaña puede ayudar a lograrlo.

Otra consideración es si está trabajando junto con otros desarrolladores en la misma aplicación Node-RED. Es mucho más fácil administrar la combinación de cambios si están en pestañas separadas. Si tiene desarrolladores con diferentes roles o especializaciones, considere cómo eso puede afectar la forma en que se organizan sus flujos.

Hacer Flujos Reutilizables

A medida que crea sus flujos, es posible que encuentre algunas partes comunes que desee reutilizar en varios lugares. Debe evitar tener varias copias de esas partes comunes distribuidas en sus flujos, ya que se vuelven más difíciles de mantener; termina con varios lugares para aplicar correcciones y podría pasar por alto uno fácilmente.

Node-RED proporciona dos formas diferentes de crear flujos reutilizables: nodos de enlaces y subflujos

Los nodos de enlace (link nodes) le permiten crear un flujo que puede saltar entre pestañas en el editor; agregan un cable virtual desde el final de un flujo hasta el inicio de otro.

Los subflows le permiten crear un nuevo nodo en la paleta cuya implementación interna se describe como un flujo. Luego, puede agregar nuevas instancias del subflujo en cualquier lugar donde lo haría con un nodo normal.

Existen algunas diferencias importantes entre los dos enfoques. Los nodos de enlace no se pueden usar en medio de un flujo, donde los mensajes se pasan por el enlace y luego regresan cuando el otro flujo se completa. Solo se pueden utilizar para iniciar o finalizar un flujo. También se pueden conectar a más de un nodo de enlace. Esto le permite pasar mensajes a varios flujos o hacer que varios flujos pasen mensajes a un solo flujo. Se pueden usar dentro de una sola pestaña para ayudar a que haya flujos en el espacio de trabajo sin que haya muchos cables que se crucen de derecha a izquierda.

Los link nodes no se pueden crear entrando o saliendo de un subflujo.

Más información sobre los nodos link: https://techexplorations.com/guides/esp32/nore-red-esp32-project/node-red-link/ 

Los subflujos aparecen como nodos regulares, por lo que se pueden utilizar en cualquier punto de un flujo. Sin embargo, cada instancia del subflujo es independiente de las demás. Cualquier contexto de flujo dentro del subflujo se limitará a las instancias individuales. Si el subflujo crea una conexión a un sistema remoto (p.e mandar un email), cada instancia creará su propia conexión.

Subflows en Node-RED

Un subflujo es una colección de nodos que se contraen en un solo nodo en el espacio de trabajo. Se pueden usar para reducir la complejidad visual de un flujo o para agrupar un grupo de nodos como un flujo reutilizable que se usa en varios lugares.

Una vez creado, el subflujo se agrega a la paleta de nodos disponibles. Las instancias individuales del subflujo se pueden agregar al espacio de trabajo como cualquier otro nodo.

Crear Subflows

Se puede crear un subflujo seleccionando la opción “Subflow -> Create Subflow” en el menú. Esto creará un subflujo en blanco y lo abrirá en el espacio de trabajo.

También es posible convertir la selección actual de nodos a un subflujo seleccionando la opción “Subflow -> Selection to Subflow” en el menú. Los nodos se moverán a un nuevo subflujo y se reemplazarán por un nodo de instancia de subflujo dentro del flujo.

Esto solo es posible si los cables que entran en la selección están conectados a un nodo, ya que el nodo de subflujo resultante solo puede tener como máximo una entrada.

Un subflujo no puede contener una instancia de sí mismo, ni directa ni indirectamente.

Editar un Subflow

Hay dos formas de abrir un subflujo para editar su contenido. Haga doble clic en su nodo en la paleta o haga clic en el botón “Editar plantilla de flujo” en el cuadro de diálogo de edición de un nodo de instancia de subflujo.

El subflujo se abre en el espacio de trabajo como una nueva pestaña. A diferencia de las pestañas de flujo normal, las pestañas de subflujo se pueden cerrar para ocultarlas.

Las entradas y salidas del subflujo están representadas por los nodos cuadrados grises que se pueden conectar al flujo de forma normal.

La barra de herramientas ofrece opciones para agregar y eliminar estos nodos. Al igual que con los nodos de flujos normales, puede haber como máximo una entrada y tantas salidas como sea necesario. 

La barra de herramientas ofrece una opción para agregar una salida de “estado” a un subflujo. Esto se puede utilizar para actualizar el estado de los nodos de instancia de subflujo. Lo que haya en payload y se mande al node ‘status’, se mostrará en el esatdo del subflow. También se puede usar el nodo ‘status’ y mandar al estado del subflow para mostrarlo.

El botón “editar propiedades” abre el cuadro de diálogo de propiedades del subflujo. Al igual que con el cuadro de diálogo Propiedades del flujo, se puede establecer el nombre y la descripción del subflujo.

  •  Propiedades: propiedades por instancia que se exponen como variables de entorno dentro del subflujo.
  •  Descripción: documentación por nodo formateada con Markdown. Esto se muestra en la barra lateral de Información cuando se selecciona el nodo.
  •  Apariencia: opciones para personalizar la apariencia del nodo.

La pestaña Apariencia ofrece opciones para:

  • cambiar la categoría de paleta en la que aparece el nodo
  • seleccione si se muestra la etiqueta del nodo
  • cambiar el color del nodo
  • cambiar el icono del nodo
  • proporcionar etiquetas de puerto personalizadas.

Personalizar Subflows

Al crear subflujos, es posible que desee poder personalizar su comportamiento de alguna manera. Por ejemplo, cambiar el tema de MQTT en el que publica. Un patrón para hacer eso es establecer msg.topic en cada mensaje que se pasa al subflujo. Pero eso requiere agregar un nodo Cambiar delante de cada instancia de subflujo para establecer el valor deseado.

Una forma más sencilla de hacerlo es mediante las propiedades de subflujo. Estas son propiedades que se pueden establecer en la instancia de subflujo y aparecen como variables de entorno dentro del subflujo.

La pestaña “Propiedades” del cuadro de diálogo de edición se puede utilizar para definir un conjunto de propiedades que luego se pueden personalizar para cada instancia del subflujo. Luego, las propiedades se exponen como variables de entorno dentro del subflujo.

Cada entrada en la tabla de propiedades se puede expandir para personalizar cómo se muestra cuando se edita una instancia del subflujo. La pestaña “Vista previa de la interfaz de usuario” proporciona una vista previa de cómo aparecerán.

En la propia instancia de subflow puedes añadir variables de entorno para solo esa instancia.

El valor que se pone es el valor por defecto y en la personalización puedo añadir el icono, label y el input type que puede ser de tipo:

  • input
  • credential
  • select
  • checkbox
  • spinner

Por ejemplo, para que dentro de un subflow publique en un topic que se defina como una variable de entorno y que se indica al crear el nodo, se pone como:

Entonces añadir MY_TOPIC como una propiedad del subflow.

Cuando un usuario edita una instancia individual, puede proporcionar un valor personalizado para MY_TOPIC para esa instancia del subflow.

Este patrón se puede aplicar a cualquier campo de configuración de nodo que le permita ingresar el valor directamente. Actualmente, no funciona para campos que se exponen como checkboxes u otros elementos personalizados de la IU.

Contexto en Subflow

Para los nodos en un subflujo, el contexto del flujo lo comparten esos nodos y no el flujo en el que se encuentra el subflujo. Los nodos dentro de un subflujo pueden acceder al contexto del flujo principal anteponiendo $parent. a la clave de contexto: var colour = flow.get(“$parent.colour”);

Las variables de flow creadas dentro de un subflow, no se ven en el “context data”.

Captura de errores en un Subflow

Si se registra un error desde el interior de un subflow, el tiempo de ejecución primero comprobará si hay nodos Catch dentro del subflujo. Si no hay ninguno allí, el error se propagará hasta el flujo que contiene la instancia del subflujo.

En el caso del estado de del subflow, se puede detectar dentro del subflow con el nodo “status” o desde el flujo que contiene el subflow, también con el nodo “status”.

Borrar un Subflow

El botón “delete subflow” de la barra de herramientas del subflujo se puede utilizar para eliminar el subflujo y todas las instancias del mismo.

Más información de Subflows:

Exportable Subflows

En próximas versiones de Node-RED va a estar disponible los Subflows exportables. Se quiere facilitar a los usuarios la creación de sus propios nodos y compartirlos con la comunidad. El objetivo es permitir que los subflujos se publiquen como módulos de nodo adecuados que luego se puedan instalar como cualquier otro nodo de la biblioteca.

El trabajo ya está en marcha en esto: hay un borrador de PR (Pull Request) que agrega soporte básico para cargar subflujos en el tiempo de ejecución desde un módulo.

Ejemplo de Subflow

Ejemplo de subflow simple con un if then else. Consiste en crear unas variables de entorno MAX y MIN y en función de ellas enrutar. Estas variables tienen un valor por defecto de 100 en el MAX y de 0 en el MIN.

[{"id":"88bbe218.63673","type":"subflow","name":"Subflow 1","info":"","category":"","in":[{"x":50,"y":30,"wires":[{"id":"ab7f195c.aa0308"}]}],"out":[{"x":340,"y":200,"wires":[{"id":"ab7f195c.aa0308","port":"2"}]},{"x":340,"y":80,"wires":[{"id":"ab7f195c.aa0308","port":"0"}]},{"x":340,"y":140,"wires":[{"id":"ab7f195c.aa0308","port":"1"}]}],"env":[{"name":"MAX","type":"num","value":"100","ui":{"icon":"font-awesome/fa-thermometer-full","type":"spinner"}},{"name":"MIN","type":"num","value":"0","ui":{"icon":"font-awesome/fa-thermometer-empty","type":"spinner"}}],"color":"#DDAA99"},{"id":"ab7f195c.aa0308","type":"switch","z":"88bbe218.63673","name":"If else","property":"payload","propertyType":"msg","rules":[{"t":"lt","v":"MIN","vt":"env"},{"t":"gt","v":"MAX","vt":"env"},{"t":"else"}],"checkall":"true","repair":false,"outputs":3,"x":160,"y":140,"wires":[[],[],[]]},{"id":"95c32f11.1ede8","type":"tab","label":"Ejemplo Subflow","disabled":false,"info":""},{"id":"cf06a908.bb4758","type":"subflow:88bbe218.63673","z":"95c32f11.1ede8","name":"","env":[],"x":380,"y":80,"wires":[["98bc246e.47db78"],["11198781.6b7008"],["e488842f.92dd48"]]},{"id":"614a918a.f2d9","type":"inject","z":"95c32f11.1ede8","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"-1","payloadType":"str","x":130,"y":80,"wires":[["cf06a908.bb4758"]]},{"id":"98bc246e.47db78","type":"debug","z":"95c32f11.1ede8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":670,"y":60,"wires":[]},{"id":"11198781.6b7008","type":"debug","z":"95c32f11.1ede8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":670,"y":100,"wires":[]},{"id":"e488842f.92dd48","type":"debug","z":"95c32f11.1ede8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":670,"y":140,"wires":[]}]

Qué es Node-RED

Node-RED es una herramienta de programación visual. Muestra visualmente las relaciones y funciones, y permite al usuario programar sin tener que escribir una línea. Node-RED es un editor de flujo basado en el navegador donde se puede añadir o eliminar nodos y conectarlos entre sí con el fin de hacer que se comuniquen entre ellos.

Node-Red hace que el conectar los dispositivos de hardware, APIs y servicios en línea sea más fácil que nunca.

Node-red se ha convertido en el estándar open-source para la gestión y procesado de datos en tiempo real, logrando simplificar los procesos entre productores y consumidores de información.

Node-Red se ha consolidado como framework open-source para la gestión y transformación de datos en tiempo real en entornos de Industry 4.0, IOT, Marketing digital o sistemas de Inteligencia Artificial entre otros. La sencillez de aprendizaje y uso, que no requiere de conocimientos de programación, su robustez y la necesidad de bajos recursos de cómputo ha permitido que hoy en día se encuentre integrado en prácticamente la mayoría de dispositivos IOT e IIOT del mercado, así como equipos Raspberry, sistemas cloud o equipos locales.

Node-RED es una herramienta muy potente que sirve para comunicar hardware y servicios de una forma muy rápida y sencilla. Simplifica enormemente la tarea de programar del lado del servidor gracias a la programación visual.

Node red es una herramienta de programación que se utiliza para conectar dispositivos de hardware, APIs y servicios de internet. Adecuado para los equipos dedicados al Internet de las cosas Industrial( IIoT) y personal dedicado al diseño y prueba de soluciones para la comunicación de equipos de planta con aplicaciones de IT.

Dado que la mayoría de dispositivos IoT para industria 4.0 posibilitan realizar un programa de control con la herramienta de Node-Red, el dominio de dicha herramienta permitiría al equipo IIoT explorar y ampliar las soluciones que ofrece a la empresa que lo use.

Fue creada por Nick O’Leary y Dave Conway-Jones del grupo de Servicios de Tecnologías Emergentes de IBM en el año 2013. Su objetivo es dar solución a la complejidad que surge cuando queremos integrar nuestro hardware con otros servicios.

Su punto fuerte es la sencillez. Nos permite utilizar tecnologías complejas sin tener que profundizar hasta el más mínimo detalle en todas ellas. Nos quedamos en una capa inicial donde nos centramos en lo importante y dejamos de lado aquello que no es práctico.

Wikipedia: https://en.wikipedia.org/wiki/Node-RED 

Node-RED está creado a partir de NodeJS y la librería de JavaScript D3.js.

Node-Red se basa en Node.js. Para instalar el Node-Red, necesitas tener tanto Node.js instalado como NPM. Con NPM, es muy fácil instalar Node-Red: npm install -g node-red

NodeJS proporciona la potencia suficiente para que Node-RED sea fiable y escalable. NodeJS es un software muy potente que permite la programación en JavaScript del lado del servidor.

La estructura mínima son los nodos. Estos se arrastran a través de la interfaz gráfica y nos permiten hacer una tarea concreta. Recibir una llamada HTTP, un mensaje MQTT o la activación de un pulsador.

Todos estos nodos se organizan en flujos o flows que agrupan nodos que se conectan entre ellos. Todo de una forma visual, sin apenas tener que programar.

Node-RED es un motor de flujos con enfoque IoT, que permite definir gráficamente flujos de servicios, a través de protocolos estándares como REST, MQTT, Websocket, AMQP… ademas de ofrecer integración con apis de terceros, tales como Twitter, Facebook, Yahoo!…

Se trata de una herramienta visual muy ligera, programada en NodeJS y que puede ejecutarse desde en dispositivos tan limitados como una Raspberry, hasta en plataformas complejas como IBM Bluemix, Azure IoT o Sofia2 Platform.

Web: https://nodered.org/ 

Node-RED es una herramienta de código abierto, estando este disponible en github.

Repositorio: https://github.com/node-red/node-red

Una de las características más notables de Node-RED es la sencillez con la que se pueden crear nuevos nodos e instalarlos, en el siguiente enlace disponemos de toda la documentación necesaria: http://nodered.org/docs/creating-nodes/, en él, podemos ver que desarrollar un nuevo nodo es tan sencillo como crear un fichero HTML con el formulario de configuración mostrado en la imagen anterior para el nodo en concreto, y un fichero JS, con la lógica del nodo escrita en NodeJS.

De este modo, cualquier persona u organización puede crearse sus propios nodos, adaptando el motor de flujo a las necesidades de su negocio.

Los flujos programados en Node-RED se almacenan internamente en formato JSON y son portables entre distintas instalaciones de Node-RED, siempre que el Node-RED de destino tenga instalados los nodos utilizados en el flujo.

De este modo un flujo Node-RED consiste en un fichero con este aspecto:

La facilidad de desarrollo de nuevos nodos, así como la portabilidad de los flujos, confieren a Node-RED un marcado enfoque social. Gran parte de su éxito se fundamenta en que los nodos y flujos desarrollados por una persona u organización, pueden ser aprovechados por otras. En este sentido, en el sitio oficial de Node-RED encontramos una sección de contribuciones de terceros, con más de 1000 nodos y flujos subidos por la comunidad y listos para utilizar.

Node-RED Library: https://flows.nodered.org 

Getting Started Node-RED: https://nodered.org/#get-started 

Comunidad Node-RED: https://nodered.org/#community 

Documentación Node-RED: https://nodered.org/docs/ 

En cuanto a cómo instalar Node-RED, existen dos alternativas:

  • Modo Standalone: Donde se ejecuta como un proceso NodeJS independiente del resto de procesos.
  • Modo Embebido: Donde forma parte de una aplicación mayor, de forma que es responsabilidad de esta controlar el ciclo de vida del propio Node-RED

Ambas instalaciones son securizables tanto a nivel control de acceso con usuario y contraseña, como con certificado SSL para acceder al editor por protocolo seguro HTTPS.

Asimismo dispone de un API Rest de administración y operación (http://nodered.org/docs/api/) de manera que puede interactuar y ser controlado por un sistema externo.

Estas características son las que hacen que Node-RED sea adecuado para ejecutarse casi en cualquier plataforma, ya que le dan la versatilidad de ser instalado tal cual, por ejemplo en una Raspberry. O poder ser administrado por un sistema mayor, como por ejemplo IBM Bluemix.

Instalación: https://nodered.org/docs/getting-started/ 

  • Localmente
  • En un dispositivo
  • En la nube

Es posible instalar Node-RED en un portátil y controlar el broker desde el mismo.

Configuración node red: https://nodered.org/docs/configuration 

Node-RED con Arduino: https://nodered.org/docs/hardware/arduino 

API nodered: https://nodered.org/docs/api/ 

Más información:

Vídeo Introducción IoT: https://www.youtube.com/watch?time_continue=85&v=vYreeoCoQPI

Curso IoT simatic (Siemens con Node red); http://www.infoplc.net/descargas/109-siemens/comunicaciones/2847-manual-simatic-iot2040-node-red

Node-RED

Node-RED es una herramienta muy potente que sirve para comunicar hardware y servicios de una forma muy rápida y sencilla. Simplifica enormemente la tarea de programar del lado del servidor gracias a la programación visual.

Fue creada por Nick O’Leary y Dave Conway-Jones del grupo de Servicios de Tecnologías Emergentes de IBM en el año 2013. Su objetivo es dar solución a la complejidad que surge cuando queremos integrar nuestro hardware con otros servicios.

Su punto fuerte es la sencillez. Nos permite utilizar tecnologías complejas sin tener que profundizar hasta el más mínimo detalle en todas ellas. Nos quedamos en una capa inicial donde nos centramos en lo importante y dejamos de lado aquello que no es práctico.

Wikipedia: https://en.wikipedia.org/wiki/Node-RED

La estructura mínima son los nodos. Estos se arrastran a través de la interfaz gráfica y nos permiten hacer una tarea concreta. Recibir una llamada HTTP, un mensaje MQTT o la activación de un pulsador.

Todos estos nodos se organizan en flujos o flows que agrupan nodos que se conectan entre ellos. Todo de una forma visual, sin apenas tener que programar.

Node-RED es un motor de flujos con enfoque IoT, que permite definir gráficamente flujos de servicios, a través de protocolos estándares como REST, MQTT, Websocket, AMQP… ademas de ofrecer integración con apis de terceros, tales como Twitter, Facebook, Yahoo!…

Se trata de una herramienta visual muy ligera, programada en NodeJS y que puede ejecutarse desde en dispositivos tan limitados como una Raspberry, hasta en plataformas complejas como IBM Bluemix, Azure IoT o Sofia2 Platform.

Web: https://nodered.org/

Node-RED es una herramienta de código abierto, estando este disponible en github.

Repositorio: https://github.com/node-red/node-red

Una de las características más notables de Node-RED es la sencillez con la que se pueden crear nuevos nodos e instalarlos, en el siguiente enlace disponemos de toda la documentación necesaria: http://nodered.org/docs/creating-nodes/, en él, podemos ver que desarrollar un nuevo nodo es tan sencillo como crear un fichero HTML con el formulario de configuración mostrado en la imagen anterior para el nodo en concreto, y un fichero JS, con la lógica del nodo escrita en NodeJS.

De este modo, cualquier persona u organización puede crearse sus propios nodos, adaptando el motor de flujo a las necesidades de su negocio.

Los flujos programados en Node-RED se almacenan internamente en formato JSON y son portables entre distintas instalaciones de Node-RED, siempre que el Node-RED de destino tenga instalados los nodos utilizados en el flujo.

De este modo un flujo Node-RED consiste en un fichero con este aspecto:

La facilidad de desarrollo de nuevos nodos, así como la portabilidad de los flujos, confieren a Node-RED un marcado enfoque social. Gran parte de su éxito se fundamenta en que los nodos y flujos desarrollados por una persona u organización, pueden ser aprovechados por otras. En este sentido, en el sitio oficial de Node-RED encontramos una sección de contribuciones de terceros, con más de 1000 nodos y flujos subidos por la comunidad y listos para utilizar.

Node-RED Library: https://flows.nodered.org

Getting Started Node-RED: https://nodered.org/#get-started

Comunidad Node-RED: https://nodered.org/#community

Documentación Node-RED: https://nodered.org/docs/

En cuanto a cómo instalar Node-RED, existen dos alternativas:

  • Modo Standalone: Donde se ejecuta como un proceso NodeJS independiente del resto de procesos.
  • Modo Embebido: Donde forma parte de una aplicación mayor, de forma que es responsabilidad de esta controlar el ciclo de vida del propio Node-RED

Ambas instalaciones son securizables tanto a nivel control de acceso con usuario y contraseña, como con certificado SSL para acceder al editor por protocolo seguro HTTPS.

Asimismo dispone de un API Rest de administración y operación (http://nodered.org/docs/api/) de manera que puede interactuar y ser controlado por un sistema externo.

Estas características son las que hacen que Node-RED sea adecuado para ejecutarse casi en cualquier plataforma, ya que le dan la versatilidad de ser instalado tal cual, por ejemplo en una Raspberry. O poder ser administrado por un sistema mayor, como por ejemplo IBM Bluemix.

Instalación: https://nodered.org/docs/getting-started/

  • Localmente
  • En un dispositivo
  • En la nube

Es posible instalar Node-RED en un portátil y controlar el broker desde el mismo.

Configuración node red: https://nodered.org/docs/configuration

Node-RED con Arduino: https://nodered.org/docs/hardware/arduino

API nodered: https://nodered.org/docs/api/

Más información:

Vídeo Introducción IoT: https://www.youtube.com/watch?time_continue=85&v=vYreeoCoQPI

Curso IoT simatic (Siemens con Node red); http://www.infoplc.net/descargas/109-siemens/comunicaciones/2847-manual-simatic-iot2040-node-red

Instalar Node-RED en Raspberry Pi

Node-Red no viene instalado en Raspberry Pi pero se puede hacer desde add/remove software.

La forma recomendada es desde Menú – Preferencias – Software Recomendado. Si se instala de esta manera, se puede actualizar usando sudo apt-get upgrade.

Luego se puede ejecutar manualmente con el comando “node-red-star” o :

Para iniciar Node-RED en el arranque de Raspberry Pi de forma automática usar:

  • sudo systemctl enable nodered.service

Más información https://nodered.org/docs/hardware/raspberrypi

Para comprobar que funciona abrir en un navegador http://ip-raspberry:1880

pantalla node-red

Para encontrar más nodos y ejemplos de flows ver https://flows.nodered.org/

Para añadir nodos adicionales primero debe instalar la herramienta npm, ya que no está incluida en la instalación predeterminada de Raspbian. Esto no es necesario si ha actualizado a Node.js 8.x.

Los siguientes comandos instalan npm y luego lo actualizan a la última versión.

  • sudo apt-get install npm
  • sudo npm install -g npm

Para poder ver la paleta e instalar nodos, reiniciar el servicio:

  • sudo systemctl restart nodered.service

Y luego para instalar un nodo:

  • cd ~/.node-red
  • npm install node-red-{example node name}

Por ejemplo, podemos suscribirnos a un topic de MQTT, recibir un dato de temperatura y mostrarlo en la pantalla de debug:

Pero no sólo podemos hacer esto, también podemos conectar con servicios de terceros como IFTTT, ThingSpeak, Google Home, ThingerIO, etc…

Alternativamente se puede instalar mediante un script con el comando:

Configurar y Securizar Node-RED

Para configurar Node-RED seguir: https://nodered.org/docs/configuration

El fichero de configuración se encuentra normalmente en $HOME/.node-red/settings.js

Para securizar Node-RED seguir: https://nodered.org/docs/security para añadir usuario y password, así como otras configuraciones de seguridad

Para calcular la contraseña uso https://www.dailycred.com/article/bcrypt-calculator

Command line administration: https://nodered.org/docs/node-red-admin

Para usar https con Node-RED seguir estos tutoriales:

Programación Node-RED

Con respecto a Node-RED, se pueden hacer muchas cosas. Desde encender un LED en remoto, crear una API Rest en 5 minutos o conectar con una base de datos InfluxDB para graficar con Grafana. Aunque es visual, se requieren unos conocimientos técnicos en programación y tecnología medios y/o avanzados.

También permite programar en JavaScript funciones que pueden hacer de todo. Node-RED da mucho juego para muchas cosas.

El editor de flujos de Node-RED consiste en una sencilla interfaz en HTML, accesible desde cualquier navegador, en la que arrastrando y conectando nodos entre sí, es posible definir un flujo que ofrezca un servicio.

Como vemos, el editor se estructura como un entorno gráfico sencillo con:

  • Paleta de Nodos: Muestra todos los nodos que tenemos disponibles en nuestra instalación. Como veremos más adelante, existe un repositorio de nodos desarrollados por otros usuarios e incluso podemos crear e instalar nuestros propios nodos.
  • Editor: Nos permite arrastrar nodos desde la paleta y conectarlos. De este modo iremos creado el flujo de operación. El lienzo de node-red no tiene límites y se puede hacer zoom.

secciones principales node-red

Asimismo, seleccionando cada nodo, se muestra a la izquierda su formulario de configuración, donde es posible establecer las propiedades concretas de dicho nodo:

En node-Red los nodos se comunican entre sí mediante msg, que es un objeto con propiedades y que podemos añadir propiedades. La propiedad principal es payload, pero puedo añadir las que quiera. Puedo añadir otras propiedades como temperatura. Los nodos se unen en flujos que se ejecutan en paralelo.

En los nodos con entrada y salida, lo que entra sale y se mantiene la información salvo la que modifiques en el nodo.

Hay tres datos o propiedades que no se pueden modificar.:

  • número de mensaje
  • topic
  • payload

Disponemos de un debug que nos muestra el objeto y la podemos sacar por pantalla.

Los nodos son la unidad mínima que podemos encontrar en Node-RED. En la parte izquierda de la interfaz podemos ver la lista de nodos que vienen instalados por defecto y organizados en categorías según su funcionalidad.

Hay nodos de entrada, salida, funciones, social, para almacenar datos, etc… Esto muestra la capacidad de Node-RED de comunicarse con otros servicios.

Se pueden clasificar en tres tipos de nodos:

  • Nodos que sólo admiten entradas: sólo admiten datos de entrada para ser enviados a algún sitio como pueda ser una base de datos o un panel de control.
  • Nodos que sólo admiten salidas: son los nodos que sólo ofrecen datos tras recibirlos a través de diferentes métodos como por ejemplo un mensaje MQTT.
  • Nodos que admiten entradas y salidas: estos nodos nos permiten la entrada de datos y luego ofrecen una o varias salidas. Por ejemplo, podemos leer una temperatura, transformarla en grados Celsius y enviarla a otro nodo.

Los nodos los arrastramos al flujo o flow, en inglés. Aquí es donde tendremos la lógica para cada dato a base de ir arrastrando nodos.

Algunos de los nodos disponibles en Node-RED, los nodes de core son: https://nodered.org/docs/user-guide/nodes

  • Inject: para disparar un flujo manualmente. Inyecta una payload a un topic.
  • Debug: sirve para mostrar mensajes en la zona de debug de Node-RED. Puede habilitarse o deshabilitarse.
  • Function: permite programar un nodo mediante JavaScript, pero es mejor buscar nodos hechos que hagan la función deseada, por ejemplo un temporizador.
  • Change: se usa para modificar las propiedades de un mensaje sin usar funciones
  • Switch: permite que los mensajes sean enrutados a diferentes ramas de un flujo mediante un conjunto de reglas contra el mensaje.
  • Template: se usa para generar texto usando las propiedades de un mensaje.

Trabajar con mensajes en Node-RED: https://nodered.org/docs/user-guide/messages

Escribir funciones en Node-RED: https://nodered.org/docs/writing-functions

Existen además muchos tipos de nodos que podemos ver en https://flows.nodered.org/?num_pages=1 que son contribuciones de terceros.

Los nodos se organizan en flujos, para organizar los nodos como queramos. Es recomendable agrupar en flujos tareas que tengan relación entre ellos, pero solo a modo organizativo.

En node-red se puede trabajar con variables:

  • Contexto – solo aplica a un nodo
  • Flujo – aplica solo al flujo
  • globales – aplica a todo.

Cookbook de nodered: https://cookbook.nodered.org/

Node-RED programming guide: http://noderedguide.com/

Administración de node red mediante comando: https://nodered.org/docs/node-red-admin

Running node-red: https://nodered.org/docs/getting-started/running

Más información: https://programarfacil.com/blog/raspberry-pi/introduccion-node-red-raspberry-pi/

Node Red en Cloud

Hosting de node-red gratuito FRED (hasta 50 nodos): https://fred.sensetecnic.com/

FRED: Front End For Node-RED

Web principal de FRED

Google cloud: https://medium.com/google-cloud/deploy-your-node-red-environment-onto-kubernetes-clusters-using-google-cloud-platform-2e4775c2e79f

Más información:

Ejemplos Node-RED

Primer Flujo en Node-RED

Vamos a probar un flujo muy simple. Lo que hará es mostrar un texto por el panel de debug. Arrastra un nodo inject de la categoría input y un nodo debug de la categoría output al flujo. Los tienes que conectar entre ellos arrastrando el punto de la parte derecha del nodo inject sobre el punto de la parte izquierda del nodo debug.

A continuación vamos a editar el nodo inject. Si haces doble click sobre el nodo se abrirá un panel donde nos muestra diferentes parámetros. En este panel tienes que seleccionar del menú desplegable donde pone Payload, la opción que pone String.

En el campo de texto pon cualquier cosa como por ejemplo Hola mundo 🙂

Para guardar la aplicación sólo tienes que dar a Deploy que si te has dado cuenta, ha pasado de estar en un color gris oscuro a rojo.

Una vez que lo hayas pulsado, volverá de nuevo al color gris oscuro. Esto quiere decir que ya tenemos guardados todos los cambios del flujo de Node-RED.

Para probar este primer flujo con Node-RED tenemos que abrir el panel de debug que está situado en la parte derecha. Luego, tienes que hacer click sobre la parte izquierda del nodo inject.

Esto hará que en el panel debug aparezca lo que hemos escrito en la configuración del nodo inject.

Como puedes ver, el mensaje se muestra en el panel debug.

Más información: https://programarfacil.com/blog/raspberry-pi/introduccion-node-red-raspberry-pi/

Node-RED y MQTT

Sólo tienes que arrastrar el nodo mqtt que está en la categoría input al flujo.

Ahora hay que configurarlo. Aquí es donde vemos la potencia de Node-RED. Cuando utilizamos una tecnología, nos centramos en lo superficial. En el caso de MQTT lo único que tenemos que hacer es configurar el broker y el topic.

Al tratarse de un nodo de entrada, lo que hace es recibir los mensajes publicados en un topic es decir, se suscribe al topic. Haz doble click sobre el nodo para que abra el panel de configuración.

En el panel de configuración MQTT vamos a configurar primero el broker MQTT. Haz click en el lápiz que aparece en Server.

Esto abre un nuevo panel de configuración. Pon un nombre al broker MQTT por ejemplo ALARMA PUERTA. En Server tienes que poner la IP donde está instalado el broker MQTT y el puerto que utiliza, normalmente es el 1883.

Esta sería la configuración mínima. No te olvides de hacer click en el botón Add.

Después de esta acción volverás al panel de configuración del nodo mqtt y automáticamente, habrá seleccionado el broker MQTT que acabamos de crear.

Por último, vamos a rellenar el campo de Topic. Debe ser el mismo que hemos puesto en Arduino o el ESP8266, /casa/puerta/alarma. Una vez lo tengas, haz click en Done.

Ahora sólo nos queda probarlo. Para ello vamos a utilizar el mismo nodo debug de la categoría output que hemos utilizado antes.

Arrástralo al flujo, conecta los dos nodos y haz click en el botón Deploy.

Para probar el sistema lo podemos hacer de dos formas. Desde una terminal de Raspberry Pi podemos publicar un mensaje en el topic o directamente conectando la placa y simulando que abren la puerta.

El resultado sería el siguiente.

Nodos Node-RED

Existe una amplia librería de nodos para node-RED que puede consultarse en https://flows.nodered.org/?num_pages=1

Para añadir un nodo: https://nodered.org/docs/getting-started/adding-nodes

Si quieres crear tu propio nodo: https://nodered.org/docs/creating-nodes/first-node

Por defecto vienen unos nodos instalados, pero pueden añadirse otros fácilmente.

Github: https://github.com/node-red/node-red-nodes

Hay más de 1500 nodos, algunos de los más interesantes son:

Más información:

Nodo MySQL

Node de mysql: https://flows.nodered.org/node/node-red-node-mysql

Código del nodo de mysql: https://github.com/node-red/node-red-nodes/tree/master/storage/mysql

Ejemplo: https://flows.nodered.org/flow/13c55d1aa11e864609e24fa534a1fa26

Ejemplo de uso: https://tech.scargill.net/tag/mqtt-and-mysql-on-node-red/

Y nodo interesante para manejo de fechas:

Nodo MongoDB

Nodo MongoDB: https://flows.nodered.org/node/node-red-node-mongodb

Dashboard en Node-RED

Uno de los nodos más populares de Node-RED es el de dashboard, que  permite hacer un dashboard muy sencillo desde Node-RED.

Node dashboard: https://flows.nodered.org/node/node-red-dashboard

Github: https://github.com/node-red/node-red-dashboard

Cómo usarlo: https://randomnerdtutorials.com/getting-started-with-node-red-dashboard/

Más información:

Y se accede al dashboard con http://IP_NodeRED:1880/ui   

Tutoriales node red dashboard

Otro dashboard es el freeboard:

Ejemplo Arduino + MQTT + NodeRed + Dashboard

Hacer un Dashboard como este usando dos sondas o dos potenciómetros que manden datos a varios topic y se muestre en el dashboard, así como un led que pueda encenderse al pulsar un botón del dashboard y dos leds que se enciendan cuando se supere el umbral de temperatura.

Además hacer una pestaña con las gráficas y hacer un flujo de debug para ver los datos.

Todos los datos serán guardarlos en la BBDD MariaDB instalada en las Raspberry Pi

Ejemplo hecho con 4 flujos:

Código node-red: https://github.com/jecrespo/Curso-IoT-Open-Source/blob/master/node-red/node-red.json

Código Arduino: https://github.com/jecrespo/Curso-IoT-Open-Source/blob/master/node-red/arduino-node-red/arduino-node-red.ino