Archivo de la etiqueta: nodered

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":[]}]

Node-RED en la Industria

Node-RED puede ejecutarse en PLCs o en PLCs basados en Linux como p.e. los que tienen una Raspberry vistos en el punto anterior de “Raspberry Pi en la Industria”: https://aprendiendoarduino.wordpress.com/2020/03/01/raspberry-pi-en-la-industria/ 

Tanto Node-RED como Raspberry Pi en la industria se podría incluir en cualquiera de estas categorías funcionales:

  • PLC – automatizar procesos
  • PAC – PLC + PC con protocolos avanzados
  • IPC – Industrial PC
  • HMI – Dashboard Node-RED
  • Scada – Lógica programad + Dashboard

Un controlador lógico programable, más conocido por sus siglas en inglés PLC (Programmable Logic Controller) o por autómata programable, es una computadora utilizada en la ingeniería automática o automatización industrial, para automatizar procesos electromecánicos, electroneumáticos, electrohidráulicos, etc…

Un controlador de automatización programable, o PAC (del inglés Programmable Automation Controller), es una tecnología industrial orientada al control automatizado, al diseño de prototipos y a la medición. El PAC se refiere al conjunto formado por un controlador (una CPU típicamente), módulos de entradas y salidas, y uno o múltiples buses de datos que lo interconectan todo.

SCADA, acrónimo de Supervisory Control And Data Acquisition (Supervisión, Control y Adquisición de Datos) es un concepto que se emplea para realizar un software para ordenadores que permite controlar y supervisar procesos industriales a distancia. Facilita la retroalimentación en tiempo real con los dispositivos de campo (sensores y actuadores), y controla el proceso automáticamente.

IPC, acrónimo de PC industrial es una computadora destinada a fines industriales (producción de bienes y servicios), con un factor de forma entre una nettop y un rack de servidor. Las PC industriales tienen estándares más altos de confiabilidad y precisión, y generalmente son más caras que los productos electrónicos de consumo. A menudo utilizan conjuntos de instrucciones complejos, como x86, donde de otro modo se utilizarían conjuntos de instrucciones reducidos como ARM.

El Interfaz Hombre-Máquina (HMI) es el interfaz entre el proceso y los operario; se trata básicamente de un panel de instrumentos del operario. Es la principal herramienta utilizada por operarios y supervisores de línea para coordinar y controlar procesos industriales y de fabricación. El HMI traduce variables de procesos complejos en información útil y procesable.

La función de los HMI consiste en mostrar información operativa en tiempo real y casi en tiempo real. Proporcionan gráficos de procesos visuales que aportan significado y contexto al estado del motor y de la válvula, niveles de depósitos y otros parámetros del proceso. Suministran información operativa al proceso, y permiten el control y la optimización al regular los objetivos de producción y de proceso.

PAC podría equipararse al uso de un PC y un PLC conjuntamente. Los PAC están compuestos por varias aplicaciones informáticas, lo que hace que su programación sea más flexible. A diferencia de los PLC, pueden ejecutar multitareas fácilmente, trabajando en diferentes dominios como el movimiento, las aplicaciones discretas y el control de procesos.

Los PACs y PLCs tienen varias cosas en común. Internamente, ambos incluyen una fuente de potencia, un CPU, un plano trasero o dispositivo de E/S, y módulos. Tienen registros de memoria que reflejan los canales de E/S individuales en los módulos. Sin embargo, las siguientes diferencias resultan muy significativas. La 5 características principales en los PAC:

  • Funcionalidad de dominio múltiple, al menos dos de lógica, movimiento, control PID, y proceso en una sola plataforma.
  • Plataforma de desarrollo sencillo de disciplina múltiple incorporando etiquetas comunes y una base de datos sencilla para tener acceso a todos los parámetros y funciones.
  • Herramientas de software que permiten diseñar flujo del proceso a través de varias máquinas o unidades de proceso, junto con el IEC 61131-3, guía del usuario y administración de datos.
  • Arquitecturas modulares, abiertas que reflejan las aplicaciones industriales a partir de un despliegue de maquinaria en fábricas en plantas de proceso.
  • Uso de estándares de la industria para interfaces en red, lenguajes, etc., como búsquedas TCP/IP, OPC y XML, y SQL.

Una ventaja de los PAC al compararse con los PLCs, son la habilidad para procesar y desempeñar medidas complejas. Con esta característica, puede combinar diferentes sistemas de adquisición de datos como frecuencias, formas de onda, voltajes, corrientes, control de movimiento e incluso, adquisición de imágenes. Esto crea un nivel sin precedentes de manipulación y estandarización en términos del tipo de señales que pueden manipularse y procesarse. Los PACs ofrecen cientos de funciones para procesar, analizar y extraer información de estas señales.

Un PAC permite conectarse a aplicaciones empresariales y almacenar datos en bases de datos o redes corporativas ODBC/SQL activadas. Además, puede utilizar OPC para integrarse y comunicarse con sistemas de software y hardware de terceros. Los PAC’s automáticamente publican sus datos de E/S a un servidor OPC localizado en la computadora tipo servidor usada para configurar el banco de E/S. La mayoría de los paquetes de software SCADA para Windows soportan OPC, y la mayoría de los proveedores de hardware de E/S industrial proporcionan servidores de OPC para su hardware. Esto hace más sencilla la integración de los PACs con una gran variedad de hardware de E/S industrial como lo son los controladores lógicos programables (PLCs) y otros dispositivos industriales. Usted puede utilizar un paquete SCADA de terceros o el Módulo de Registro de Datos y Control, inclusive se puede conectar a servicios en la nube o plataformas administrativas como SAP

Más información:

PACs y PLCs con Node-RED

Recientemente se está incorporando Node-RED en diversos PLCs para su programación.

Varios ejemplos de PLCs basados en Raspberry Pi donde puede usarse Node-RED en: https://aprendiendoarduino.wordpress.com/2020/03/01/raspberry-pi-en-la-industria/ 

PLC/PAC de industrial shield https://www.industrialshields.com/es_ES/industrial-plc-pac-raspberry-pi-202009 basados en Raspberry Pi que pueden ejecutar Node-RED.

Industrial Shields: https://www.industrialshields.com/es_ES/blog/nuestro-blog-1/post/an-introduction-to-node-red-39

Node-RED con Industrial Shields: https://www.industrialshields.com/es_ES/blog/nuestro-blog-1/post/create-your-own-framework-node-red-first-steps-6 

Paneles HMI/IPC basados en Raspberry PI: https://www.industrialshields.com/es_ES/hmi-industrial-panel-pc-10-based-on-raspberry-pi-202011-lp

Node Red se puede comunicar con PLCs usando Modbus o con los Scadas usando OPC u OPC-UA, pero existen nodos específicos:

PLCs con Node-RED integrado:

Node-RED para openWRT: https://github.com/dceejay/openwrt-node-red 

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

Interesante proyecto para la industria integrando Automata de Siemens: https://riunet.upv.es/bitstream/handle/10251/110768/73657734G_TFM_1536705921392151385469958862519.pdf?sequence=1&isAllowed=y

Montar un servidor OPC-UA con Node-RED: 

Casos de Uso

Node-RED en la industria tiene muchos casos de uso

  • Scada
  • HMI
  • Mantenimiento predictivo
  • Predicción de fallos (mirando datos de sensores en tiempo real en streaming) aquí no vale big data, buscar patrones, analizar y generar alertas, ya que se necesita tiempo real e inmediatez.

Encuesta 2019 Node-RED: https://nodered.org/about/community/survey/2019/

Ejemplo de ABB con Node-RED: https://sesam-world.com/_pdf/sesam-138/06-ABB.pdf  

Node-RED en open energy monitor: https://guide.openenergymonitor.org/integrations/nodered/

Ejemplo de uso de Node-RED: https://sie.fer.es/esp/Servicios/Comunicacion/Sala_Prensa/Archivo_fotografico/Primera_plataforma_integrada_datos_desarrollada_JIG_Digital_junto_5_empresas_vitivinicolas/webDoc_28268.htm

Empresas que usan Node-RED

Obtenido de los planes de futuro de Node-RED publicado en https://nodered.org/blog/2020/10/13/future-plans 

Another group of users come from the companies who have integrated Node-RED into their own products and services. Hitachi, Siemens, Samsung, Particle and many others. They have a different set of needs. They want to integrate Node-RED into their existing platforms. They want to be able to offer a seamless experience to their end users – hiding away the details of how Node-RED is being run or where the flows are executed.

Whilst some of that will come from individuals, we want to increase the commercial adoption of Node-RED. This will help increase the commercial investment back into the project itself.

ModBus y Nodered

Usado el nodo https://flows.nodered.org/node/node-red-contrib-modbus

Github: https://github.com/BiancoRoyal/node-red-contrib-modbus 

Wiki: https://github.com/BiancoRoyal/node-red-contrib-modbus/wiki 

Artículo: https://blog.ironchip.net/2019/01/18/instalacion-de-node-red-en-una-raspberry-pi/ 

Ejemplo: https://flows.nodered.org/flow/bf06a87e84395e4bce276714c6f5f884

SNMP y Nodered

SNMP: https://flows.nodered.org/node/node-red-node-snmp

Trap listener: https://flows.nodered.org/node/node-red-contrib-snmp-trap-listener

Código: https://github.com/node-red/node-red-nodes/tree/master/io/snmp

Node-RED y Fiware

Existen varios nodos de Fiware para Node-RED:

El nodo principal es https://flows.nodered.org/node/node-red-contrib-fiware_official y el repositorio es: https://github.com/FIWARE/node-red-contrib-FIWARE_official. Lo que hace es trabajar con el Orion context broker, realizando varias operaciones.

Fiware + Node-RED: https://m.riunet.upv.es/bitstream/handle/10251/114982/memoria_4632841.pdf

Simulador Fiware: https://www.fiware.org/wp-content/uploads/2017/01/Hands-on-FIWARE-Context-provider-Simulator.pdf

Interesante presentación de Telefónica: https://www.uma.es/smart-campus/navegador_de_ficheros/SmartUMA/descargar/Material%20Curso%20de%20formaci%C3%B3n%20para%20la%20red%20IoT%20Smart%20Cities/FORMACION%20SMART%20CITY%20UMA%20-%20FIWARE%20y%20Plataforma%20Thinking%20Cities.pdf

Node-RED y Domótica

En HA (Home Assistant) se usa Node-RED.

Nodos de HA:

Tutorial de HA y Node-RED: https://www.juanmtech.com/get-started-with-node-red-and-home-assistant/

Addon de Node-RED en HA: https://community.home-assistant.io/t/home-assistant-community-add-on-node-red/55023

Getting Started con HA y Node-RED: https://diyfuturism.com/index.php/2017/11/26/the-open-source-smart-home-getting-started-with-home-assistant-node-red/ 

Ejemplo de HA: https://www.thesmarthomebook.com/2020/07/28/the-elephant-in-the-room-presence-detection-in-home-assistant/ 

Home Assitant Websocket: https://flows.nodered.org/node/node-red-contrib-home-assistant-websocket 

Vídeo: https://www.youtube.com/watch?v=SuoSXVqjyfc&feature=youtu.be 

Más información: https://www.domoticaeconomica.com/node-red-en-hassio-o-home-assistant

Simular dispositivos HomeKit de apple con Node-RED: https://swifting.io/blog/2017/04/05/39-homekit-devices-simulator-using-node-red-raspberry-pi/ 

Ejemplo: Scada con Node-RED

Este proyecto consiste en hacer o renovar un scada partiendo de los datos de un Scada Antiguo y crear un sistema moderno, basado en web y que publique los datos para poder integrar con sistemas de terceros de forma sencilla o poder añadir funcionalidades al sistema sin tener que modificar el scada ni el PLC.

Partimos de un sistema con un PLC (Siemens, Rockwell, Schneider, etc…) con decenas de señales y control. Además este PLC es gestionado por un Scada de la misma marca con un HMI que habla OPC y guarda los datos en ficheros txt y desde el que se hacen ciertas operaciones y también tiene una programación para control y envío de alertas.

Es un sistema antiguo, cuyo coste de actualización es muy caro. Además está sobre una versión de Windows sin soporte, por lo que es vulnerable.

La propuesta es aislar por completo el sistema de PLC y Scada para proteger de posibles vulnerabilidades al ser sistemas no actualizables y solo exponer los datos mediante tecnologías actuales. Las tecnologías que se usen serán open source.

Propuesta:

  • Uso de python y/o Node-RED para recuperar los datos de las tablas en ficheros txt y guardar los datos en una BBDD.
  • Uso de openOPC + python para obtener resto de variables, estados, etc… que no se exportan en fichero txt y guardar BBDD todas las variables adicionales en un histórico
  • Publicar en MQTT esas variables para tener disponibilidad de ellas en tiempo real
  • Usar Node-RED para programación adicional necesaria.
  • Usar el Dashboard de Node-RED para hacer el sistema HMI con el que visualizar e interactuar.
  • Hacer gráficas más complejas y otros dashboards con grafana, en combinación con el Dashboard de Node-RED

Mensajes en Node-RED

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

Un flujo Node-RED funciona pasando mensajes entre nodos. Los mensajes son simples objetos de JavaScript que pueden tener cualquier conjunto de propiedades.

Los mensajes generalmente tienen una propiedad payload: esta es la propiedad predeterminada con la que trabajarán la mayoría de los nodos.

Node-RED también agrega una propiedad llamada _msgid: este es un identificador para el mensaje que puede usarse para rastrear su progreso a través de un flujo.

El valor de una propiedad puede ser cualquier tipo de JavaScript válido, como:

  • Boolean – true, false
  • Number – eg 0, 123.4
  • String – «hello»
  • Array – [1,2,3,4]
  • Object – { «a»: 1, «b»: 2}
  • Null

Entender la Estructura del Mensaje

La forma más fácil de comprender la estructura de un mensaje es pasarlo a un nodo de debug y verlo en la barra lateral de depuración.

De forma predeterminada, el nodo debug mostrará la propiedad msg.payload, pero se puede configurar para mostrar cualquier propiedad o el mensaje completo.

Al mostrar una matriz u objeto, la barra lateral proporciona una vista estructurada que se puede utilizar para explorar el mensaje.

  • En la parte superior muestra el nombre de la propiedad que se ha pasado. Aquí, se ha utilizado el msg.payload predeterminado.
  • Junto al nombre de la propiedad está el tipo de propiedad: objeto, cadena, matriz, etc.
  • Luego muestra el contenido de la propiedad. Para matrices y objetos, la propiedad se contrae en una sola línea. Al hacer clic en él, la propiedad se expandirá para mostrar más detalles.

Cuando pasa el cursor sobre cualquier elemento, aparece un conjunto de botones a la derecha, se puede:

  • Copiar la ruta al elemento seleccionado en su portapapeles. En este ejemplo, copiará payload.Phone[2].type. Esto le permite determinar rápidamente cómo acceder a una propiedad en un nodo de Cambio o Función.
  • Copiar el valor del elemento en su portapapeles como una cadena JSON. Tenga en cuenta que la barra lateral trunca las matrices y los búferes en una determinada longitud. Al copiar el valor de dicha propiedad, se copiará la versión truncada.
  • Fijar el elemento seleccionado para que siempre se muestre. Cuando se recibe otro mensaje del mismo nodo de depuración, se expande automáticamente para mostrar todos los elementos anclados.

JSON, (JavaScript Object Notation), es una forma estándar de representar un objeto JavaScript como una cadena. Es comúnmente utilizado por las API web para devolver datos. Si una propiedad de mensaje contiene una cadena JSON, primero debe analizarse en su objeto JavaScript equivalente antes de poder acceder a las propiedades que contiene.

Node-RED proporciona un nodo JSON para hacer esta conversión: https://cookbook.nodered.org/basic/convert-json 

Notación JSON: https://www.json.org/json-en.html 

Cambiar las Propiedades de Mensajes

Hay dos nodos principales para modificar un mensaje, el nodo Función y el nodo Change.

El nodo Función le permite ejecutar cualquier código JavaScript en el mensaje. Esto le brinda total flexibilidad en lo que hace con el mensaje, pero requiere familiaridad con JavaScript y es innecesario para muchos casos simples.

El nodo Change proporciona mucha funcionalidad sin necesidad de escribir código JavaScript. No sólo puede modificar las propiedades de los mensajes, sino que también puede acceder al flujo y al contexto global.

Proporciona cuatro operaciones básicas:

  • Set – Establecer una propiedad a un valor
  • Change – Cambiar una propiedad de la cadena realizando una búsqueda y reemplazando
  • Delete – Borrar una propiedad
  • Move – Mover una propiedad

Para la operación de Set, primero identifica qué propiedad quieres ajustar, luego el valor que quieres que tenga. Ese valor puede ser un valor codificado, como una cadena o un número, o puede ser tomado de otro mensaje o propiedad de flujo/contexto global. También soporta el uso del lenguaje de expresión JSONata para calcular un nuevo valor.

Más información: https://nodered.org/docs/user-guide/nodes#change

Secuencia de Mensajes

Una secuencia de mensajes es una serie ordenada de mensajes que están relacionados de alguna manera. Por ejemplo, el nodo Split puede convertir un mensaje único cuya carga útil sea una matriz, en una secuencia de mensajes en la que cada mensaje tenga una carga útil correspondiente a uno de los elementos de la matriz.

Más información: https://www.youtube.com/watch?v=c6qXLko0n48

Cada mensaje en una secuencia tiene una propiedad llamada msg.parts. Se trata de un objeto que contiene información sobre cómo encaja el mensaje en la secuencia. Tiene las siguientes propiedades:

  • msg.parts.id – un identificador único para la secuencia
  • msg.parts.index – la posición del mensaje dentro de la secuencia
  • msg.parts.count – si se conoce, el número total de mensajes en la secuencia

Hay un número de nodos de core que pueden trabajar a través de secuencias de mensajes:

  • Split – Convierte un solo mensaje en una secuencia de mensajes. Dependiendo del payload, el comportamiento es diferente.
  • Join – Convierte una secuencia de mensajes en un solo mensaje. El nodo proporciona tres modos de funcionamiento: Automatic, Manual, Reduce
  • Sort – Ordena la secuencia basada en el valor de una propiedad o en el resultado de la expresión JSONata.
  • Batch – Crea nuevas secuencias de mensajes a partir de los recibidos. El nodo proporciona tres modos de funcionamiento: Número de mensajes, Intervalo de tiempo, Concatenar Secuencias.

Por ejemplo, dado un flujo de datos de sensor proveniente de un nodo MQTT, el nodo Batch puede usarse para crear secuencias divididas en el tiempo que el nodo Join reduce para calcular la lectura promedio del sensor dentro de cada segmento de tiempo.

Los nodos CSV y File In, al enviar varios mensajes, los manda como secuencias de mensajes correctamente formadas. Esto le permite transmitir de manera más eficiente archivos CSV grandes a través de un flujo

Más información: https://nodered.org/docs/user-guide/messages#message-sequences

Manejo de Mensajes

Poner la propiedad de un mensaje a un valor fijo: https://cookbook.nodered.org/basic/set-message-property-fixed

Borrar una propiedad de un mensaje: https://cookbook.nodered.org/basic/delete-message-property

Mover la propiedad de un mensaje: https://cookbook.nodered.org/basic/move-message-property 

Mapear una propiedad entre diferentes rangos numéricos con el nodo range: https://cookbook.nodered.org/basic/map-between-different-number-ranges 

Contexto

Trabajar con el contexto: https://nodered.org/docs/user-guide/context

Node-RED proporciona una forma de almacenar información que se puede compartir entre diferentes nodos sin usar los mensajes que pasan a través de un flujo. Esto se llama «contexto».

El «scope» de un valor de contexto particular determina con quién se comparte. Hay tres niveles de alcance de contexto:

  • Nodo: solo visible para el nodo que establece el valor
  • Flujo: visible para todos los nodos en el mismo flujo (o pestaña en el editor)
  • Global: visible para todos los nodos

Si un valor solo necesita ser accedido por un solo nodo, como un nodo Función, entonces el contexto de Nodo es suficiente.

Por defecto, el contexto se almacena solo en la memoria. Esto significa que su contenido se borra cada vez que Node-RED se reinicia (no cuando se hace un deploy). Es posible configurar Node-RED para guardar datos de contexto en disco para que esté disponible en todos los reinicios, se almacena en caché los valores en la memoria y solo los escribe en el sistema de archivos cada 30 segundos.

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»);

El contexto global se puede preconfigurar con valores utilizando la propiedad functionGlobalContext en el archivo de configuración.

La forma más fácil de establecer un valor en contexto es usar el nodo Change. Por ejemplo, la siguiente regla de cambio de nodo almacenará el valor de msg.payload en el contexto de flujo bajo la clave de myData.

Varios nodos pueden acceder al contexto directamente. Por ejemplo, el nodo Inject puede configurarse para inyectar un valor de contexto y el nodo Switch puede enrutar mensajes en función de un valor almacenado en contexto.

El contexto se puede eliminar de forma permanente mediante el uso de un conjunto de nodos Change para eliminar o desde la barra lateral en la pestaña “Context Data”

Dashboard Node-RED

Dashboard UI

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:

El diseño del dashboard debe considerarse como una cuadrícula. Cada elemento del grupo tiene un ancho: de forma predeterminada, 6 ‘unidades’ (una unidad tiene 48 píxeles de ancho de forma predeterminada con un espacio de 6 píxeles).

Cada widget del grupo también tiene un ancho: de forma predeterminada, ‘auto’, lo que significa que ocupará el ancho del grupo en el que se encuentra, pero puede establecerlo en un número fijo de unidades.

El algoritmo de diseño del dashboard siempre trata de colocar elementos tan altos y a la izquierda como sea posible dentro de su contenedor; esto se aplica a cómo se posicionan los grupos en la página, así como a cómo se colocan los widgets en un grupo.

Dado un grupo con un ancho de 6, si agrega seis widgets, cada uno con un ancho de 2, se colocarán en dos filas, tres widgets en cada uno.

Si agrega dos grupos de ancho 6, siempre que la ventana de su navegador sea lo suficientemente ancha, se sentarán uno al lado del otro. Si encoge el navegador, en algún momento el segundo grupo cambiará para estar debajo del primero, en una columna.

Es posible utilizar múltiples grupos si es posible, en lugar de un gran grupo, para que la página pueda cambiar de tamaño dinámicamente en pantallas más pequeñas.

Una descripción completa de los controles: https://flows.nodered.org/node/node-red-dashboard

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

Multiusuario en Dashboard: Este panel NO admite varios usuarios individuales. Es una vista del estado del flujo Node-RED subyacente, que a su vez es de un solo usuario. Si el estado del flujo cambia, todos los clientes serán notificados de ese cambio.

Los mensajes que provienen del tablero tienen un msg.socketid, y las actualizaciones como el cambio de pestaña, notificaciones y alertas de audio se dirigirán solo a esa sesión. Elimine msg.sessionid para enviar a todas las sesiones.

Más información:

Tutoriales node red dashboard

Características

Barra lateral: El diseño del widget es administrado por una pestaña del tablero en la barra lateral del editor Node-RED.

Layout

  • Tabs: desde aquí puede reordenar las pestañas, los grupos y los widgets, y agregar y editar sus propiedades.
  • Links: también se pueden agregar al menú otras páginas web. Opcionalmente, se pueden abrir en un iframe, si la página de destino lo permite.

Site:

  • Título: se puede establecer el título de la página de la interfaz de usuario.
  • Opciones: oculta opcionalmente la barra de título y permite deslizar el dedo hacia los lados entre pestañas en una pantalla táctil. También puede establecer si la plantilla usa el tema seleccionado o usa el tema de Material angular subyacente. También puede optar por utilizar el tema Material angular en todas partes.
  • Formato de fecha: establece el formato de fecha predeterminado para el gráfico y otras etiquetas.
  • Tamaños: establece la geometría básica del diseño de la cuadrícula en píxeles. Se puede configurar el ancho y alto de los widgets, al igual que el ancho de los grupos. Estas son las definiciones básicas de las «unidades» que se utilizan en otras partes del dashboard.

Theme: el tema y la fuente de la interfaz de usuario se configuran en la barra lateral del dashboard. Puede seleccionar un tema claro, oscuro o personalizado predeterminado. No puede tener diferentes temas para cada pestaña.

Nodos de Dashboard. Widgets.

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

La mayoría de los widgets pueden tener una etiqueta y un valor, ambos pueden especificarse mediante las propiedades del mensaje entrante si es necesario y modificarse mediante filtros de angular. Por ejemplo, la etiqueta se puede establecer en {{msg.topic}}, o el valor se puede establecer en {{value|number:1}}% para redondear el valor a un lugar decimal y agregar un signo de %.

Cada nodo puede analizar msg.payload para que sea adecuado para su visualización.

Cualquier widget puede desactivarse pasando una propiedad msg.enabled establecida en false. Nota: esto no impide que el widget reciba mensajes, pero impide que las entradas estén activas y cambia el estilo del widget.

La mayoría de los widgets de interfaz de usuario también se pueden configurar mediante un mensaje msg.ui_control. Más información en https://github.com/node-red/node-red-dashboard/blob/master/config-fields.md 

Widgets disponibles:

  • Audio out – Un widget que le permitirá reproducir audio (wav o mp3) o enviar texto a voz (TTS) al cliente.
  • Button – Pulsador para interactuar. El icono se puede configurar usando Material o fa-icons; el color y el color de fondo también se pueden configurar. Si el widget tiene un tamaño de 1 de ancho, el icono tiene prioridad.
  • Chart – Gráfica de datos. Tiene modos de gráfico de líneas, barras y tarta. Además, las etiquetas del eje X se pueden personalizar utilizando una cadena de formato de fecha. Para obtener más información sobre los formatos de datos de gráficos aceptados ver https://github.com/node-red/node-red-dashboard/blob/master/Charts.md 
  • Colour Picker – Selector de color
  • Date Picker – Selector de fechas. El formato de fecha mostrado se puede especificar en la pestaña Site usando el formato moment.js.
  • Dropdown – Selección desplegable. Se pueden especificar varios pares de etiquetas y valores. Las opciones también se pueden configurar a través de msg.options que contienen una matriz de objetos. Si es solo texto, el valor será el mismo que el de la etiqueta; de lo contrario, puede especificar ambos mediante el uso de un objeto de pares «etiqueta»: «valor»: [«Opción 1», «Opción 2», {«Opción 3»: 3}]. msg.payload pre seleccionará el valor en el menú desplegable.
  • Form – Formulario. Un widget que puede estar compuesto por varios sub-widgets. Cuando se envían, todos los valores se envían como un solo mensaje.
  • Gauge – Indicador, tiene 4 modos: estándar (indicador simple), rosquilla (360 ° completo), brújula y onda. También puede especificar la gama de colores de los indicadores estándar y de rosca.
  • Notification – Erea alertas para el usuario; puede ser un mensaje emergente o un cuadro de alerta descartable. La alerta puede estar dirigida a un solo usuario.
  • Numeric – Entrada numérica con botones arriba / abajo.
  • Slider – Control deslizante horizontal simple, con tamaño de paso variable.
  • Switch – Conmutador/interruptor. También puede configurar dos iconos y / o colores según el estado.
  • Template – El nodo de plantilla permite al usuario especificar y crear sus propios widgets dentro del marco usando HTML, Javascript. Este es un widget de Angular.js. También puede usar esto para anular los estilos CSS integrados.
  • Text – Texto de solo lectura. La etiqueta y el valor pueden ser configurados. El widget de texto aceptará html, por lo que puede usarlo junto con los íconos fa.
  • Text input – El cuadro de entrada de texto, con etiqueta opcional, también admite modos de contraseña, correo electrónico y color.
  • UI-Control – Permite cierto control dinámico del Dashboard. El envío de un msg.payload del número de pestaña o tab_name cambiará a esa pestaña. Las pestañas se pueden habilitar/deshabilitar/ocultar/mostrar a través de msg. Los grupos se pueden ocultar y hacer visibles mediante un mensaje también.

Charts

El widget charts, traza los valores de entrada en un gráfico. Puede ser un gráfico de líneas basado en el tiempo, un gráfico de barras (vertical u horizontal) o un gráfico circular.

Características: 

  • Cada valor de carga de mensaje de entrada se convertirá en un número. Si la conversión falla, el mensaje se ignora.
  • Los valores mínimos y máximos del eje Y son opcionales. El gráfico se escalará automáticamente a cualquier valor recibido.
  • Se pueden mostrar varias series en el mismo gráfico utilizando un valor de topic de mensaje diferente en cada mensaje de entrada. Se pueden mostrar varias barras de la misma serie mediante la propiedad msg.label.
  • El eje X define una ventana de tiempo o un número máximo de puntos para mostrar. Los datos más antiguos se eliminarán automáticamente del gráfico. Las etiquetas de los ejes se pueden formatear utilizando una cadena con formato de tiempo moment.js.
  • Ingresando un msg.payload que contenga una matriz en blanco [] borrará el gráfico.
  • La etiqueta también se puede establecer mediante una propiedad de mensaje estableciendo el campo con el nombre de la propiedad, por ejemplo {{msg.topic}}.
  • La salida del nodo contiene una matriz del estado del gráfico que se puede conservar si es necesario. Esto se puede pasar al nodo del gráfico para volver a mostrar los datos persistentes.

Más información de: https://github.com/node-red/node-red-dashboard/blob/master/Charts.md

Text Widget

Muestra un campo de texto no editable en la interfaz de usuario. Cada msg.payload recibido actualizará el texto basado en el formato de valor proporcionado.

El campo Formato de Valor puede utilizarse para cambiar el formato mostrado y puede contener filtros válidos de HTML y Angular. Por ejemplo: {{value | uppercase}} ° pondrá en mayúsculas el texto de payload y añadirá el símbolo de grado.

La etiqueta también puede ser establecida por una propiedad de mensaje estableciendo el campo al nombre de la propiedad, por ejemplo {{msg.topic}}.

También están disponibles las siguientes fuentes de iconos: Icono de Material Design (e.g. ‘check’, ‘close’)  o un icono de Font Awesome (por ejemplo, ‘fa-fire’), o un icono de Weather. 

Puedes utilizar el conjunto completo de iconos de google material si añades «mi-» al nombre del icono, por ejemplo, «mi-videogame_asset».

El widget también tiene una clase de nr-dashboard-widget-{the_widget_label_with_underscores} que se puede usar para un estilo adicional si es necesario. 

NOTA: el nr-dashboard-xx es una clase de Node-RED que define el color. Son variables CSS. Ver las variables en https://github.com/node-red/node-red-dashboard/blob/master/src/theme.less

Para el nodo ui_text de Dashboard, el campo «Value Format» puede utilizarse para cambiar el formato de visualización y puede contener HTML y filtros de Angular https://scotch.io/tutorials/all-about-the-built-in-angularjs-filters que permiten modificar el texto.

Insertar en payload en lugar de un texto un icono usando fa (font awesome icons):

  • Bombilla: <i class=»fa fa-lightbulb-o fa-2x nr-dashboard-ok»></i>
  • Warning: <i class=»fa fa-warning fa-2x nr-dashboard-warning»></i>
  • Error: <i class=»fa fa-exclamation-circle fa-2x nr-dashboard-error»></i>
  • Con un if cambio color: <font color={{(msg.payload?»yellow»:»grey»)}}><i class=»fa fa-lightbulb-o fa-2x»></i></font><br/><font size=»-2″>World</font>

Iconos que se pueden usar:

Ejemplo de uso de iconos fa: https://fontawesome.com/v4.7.0/examples/

Insertar iconos en HTML: https://www.w3schools.com/icons/

Algunos ejemplos de indicadores simples que pueden utilizarse para mostrar el estado utilizando el widget de texto, ya sea pasando en html incluyendo fa-iconos o utilizando las clases de color incorporadas. Ver este flow: https://flows.nodered.org/flow/90341d0d81f59762fe1cf8d753723636

Uso del Editor de Node-RED

Manual: https://nodered.org/docs/user-guide/editor/

Workspace

Workspace: https://nodered.org/docs/user-guide/editor/workspace/

  • Herramientas
  • Personalizar vista

Flujos (Pestañas): https://nodered.org/docs/user-guide/editor/workspace/flows

  • Añadir un flujo
  • Editar propiedades de un flujo
  • Habilitar/deshabilitar un flujo
  • Borrar un flujo
  • Cambiar entre flujos

Nodos: https://nodered.org/docs/user-guide/editor/workspace/nodes

  • Añadir nodos de forma rápida
  • Editar las propiedades de un nodo
  • Habilitar/deshabilitar un nodo
  • Nodos de configuración

Entender los nodos de Node-RED: https://medium.com/node-red/understanding-node-red-flows-64e37f2777fb

Si un nodo tiene cambios no desplegados, muestra un círculo azul sobre él. Si hay errores con su configuración, muestra un triángulo rojo.

Pulsando ctrl + click del ratón puedo añadir nodos de una forma rápida:

La configuración de un nodo se puede editar haciendo doble clic en el nodo o presionando enter cuando el espacio de trabajo tenga el foco. Si se seleccionan varios nodos, se editará el primer nodo de la selección.

Un nodo de configuración (config) es un tipo especial de nodo que contiene una configuración reutilizable que los nodos regulares pueden compartir en un flujo.

Por ejemplo, los nodos MQTT In y Out utilizan un nodo de configuración MQTT Broker para representar una conexión compartida a un agente MQTT.

Los nodos de configuración se agregan a través del diálogo de edición de un nodo que requiere el nodo de configuración. Tendrá un campo para seleccionar entre los nodos de configuración disponibles del tipo requerido o para agregar una nueva instancia.

El cuadro de diálogo de edición contiene tres pestañas:

  • Propiedades: el formulario de edición específico del tipo de nodo que se está editando.
  • 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.

Wires: https://nodered.org/docs/user-guide/editor/workspace/wires

  • Dividir wires
  • Mover wires
  • Borrar wires

Grupos: https://nodered.org/docs/user-guide/editor/workspace/groups 

  • Crear un grupo
  • Editar propiedades de grupo
  • Añadir nodos al grupo
  • Unir grupos
  • Desagrupar
  • Quitar un nodo de un grupo

Subflows: https://nodered.org/docs/user-guide/editor/workspace/subflows

  • Crear un subflow
  • Editar un subflow
  • Entradas y Salidas
  • Estado del subflow
  • Editar propiedades del subflow
  • Propiedades
  • Apariencia
  • Borrar un subflow

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.

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.

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.

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.

Selección: https://nodered.org/docs/user-guide/editor/workspace/selection

  • Herramienta de lazo
  • Seleccionar todos los nodos
  • Seleccionar flujos

Si se mantiene presionada la tecla Ctrl al hacer clic en el nodo, el nodo se agregará a la selección actual (o se eliminará si ya estaba seleccionado).

Si se mantiene presionada la tecla Shift al hacer clic en el nodo, seleccionará ese nodo y todos los demás nodos a los que está conectado.

Se selecciona un cable cuando se hace clic en él. A diferencia de los nodos, solo es posible seleccionar un cable a la vez.

El editor admite las acciones estándar de copiar/cortar/pegar. Tenga en cuenta que utilizan un portapapeles interno en lugar del portapapeles del sistema.

Importar y Exportar Flujos: https://nodered.org/docs/user-guide/editor/workspace/import-export

  • Importar flujos
  • Exportar flujos

Los flujos se pueden importar y exportar desde el editor usando su formato JSON, lo que facilita compartir flujos con otros.

Más información: 

Búsqueda de flujos: https://nodered.org/docs/user-guide/editor/workspace/search

  • Sintaxis de búsqueda

El cuadro de diálogo Buscar se puede utilizar para buscar nodos dentro del espacio de trabajo, incluidos los nodos de configuración.

Indexa todas las propiedades de los nodos, por lo que se puede utilizar para buscar un nodo por su id, tipo, nombre o cualquier otra propiedad.

Paleta de Nodos

Paleta: https://nodered.org/docs/user-guide/editor/palette/

La paleta contiene todos los nodos que están instalados y disponibles para su uso.

Están organizados en varias categorías, con entradas, salidas y funciones en la parte superior. Si hay subflujos, aparecen en una categoría en la parte superior de la paleta.

Gestor de paleta: https://nodered.org/docs/user-guide/editor/palette/manager

  • Gestionar nodos
  • Instalar nodos

El Administrador de paletas se puede usar para instalar nuevos nodos en la paleta. Se puede acceder en la pestaña palette del cuadro de diálogo Configuración de usuario.

El Administrador de paleta tiene dos pestañas:

  • Nodes: enumeran los módulos que están instalados actualmente en el tiempo de ejecución
  • Install: enumera los módulos disponibles que se pueden instalar

Añadir nodos a la paleta: https://nodered.org/docs/user-guide/runtime/adding-nodes

Además de instalar nodos mediante el administrador de paletas (Palette Manager) podemos instalar mediante:

  • npm: Para instalar un módulo de nodo desde la línea de comandos, puede usar el siguiente comando desde su directorio de datos de usuario (por defecto, $HOME/.node-red) – npm install <npm-package-name>
  • Subir el módulo: tgz file.
  • Manual: Durante el desarrollo también es posible instalar nodos copiando sus archivos .js y .html en un directorio de nodos dentro de su directorio de datos de usuario. Si estos nodos tienen dependencias npm, también deben instalarse dentro del directorio de datos del usuario. Esto solo se recomienda realmente para fines de desarrollo.

Actualizar nodos:

  • La forma más fácil de buscar actualizaciones de nodos es abrir el administrador de paletas en el editor. Luego puede aplicar esas actualizaciones según sea necesario.
  • También puede buscar actualizaciones desde la línea de comandos usando npm. En su directorio de usuario, ~/.node-red ejecute el comando: npm outdated
    Para instalar la última versión de cualquier módulo, ejecute el comando: npm install <nombre-de-módulo>

Independientemente de la opción que tome, deberá reiniciar Node-RED para cargar las actualizaciones.

Barra Lateral

Manual: https://nodered.org/docs/user-guide/editor/sidebar/

La barra lateral contiene una serie de herramientas útiles del editor:

  • Information – view information about nodes and their help
  • Help – provides access to the help content for all nodes in the editor – not just the current selection
  • Debug – view messages passed to Debug nodes
  • Configuration Nodes – manage configuration nodes
  • Context data – view the contents of context

El orden de las pestañas puede cambiarse, simplemente moviendo las pestañas.

Algunos nodos contribuyen con sus propios paneles de barra lateral, como node-red-dashboard: https://flows.nodered.org/node/node-red-dashboard o la activación de proyectos.

Ejercicios

Instalar el nodo de dashboard e intentar hacer un botón que encienda el led de la Raspberry Pi https://flows.nodered.org/node/node-red-dashboard

Hacer un dashboard y mostrar los datos publicado de temperatura, humedad y presión en el topic aprendiendonodered/casa/m5stick/#

Crear un flujo que al pulsar un botón de tu raspberry pi, encienda el led de la raspberry pi del compañero.

Modifica el anterior para que encienda todas las de la fila, de forma consecutiva durante 1 segundo haciendo el efecto del coche fantástico Usa el node de delay.