Node-Red – Interface e programação básica

Node-Red – Interface e programação básica

Introdução ao Node-RED

Nesta disciplina utilizaremos o Node-RED como tecnologia-base para implementar os sistemas supervisórios.

O Node-RED é uma ferramenta de desenvolvimento de programação visual que permite a integração de dispositivos, serviços e sistemas, facilitando a criação de fluxos para telemetria, automação e controle de processos. O software foi criado em 2013 por Nick O'Leary e Dave Conway-Jones enquanto ambos trabalhavam para a IBM. O objetivo original era criar uma plataforma que simplificasse a criação de aplicações IoT, permitindo a integração de diversos tipos de instrumentos, serviços e aplicações de maneira visual e acessível.

Devido a sua crescente popularidade, o Node-RED também passou a ser usado em aplicações de automação industrial, integração de serviços web, monitoramento de dados, etc. Como exemplo, a Rockwell atualmente disponibiliza módulos de Embedded Edge Computing e expansões para seus ControlLogix capazes de rodar containers do Docker, que têm sido muito utilizados para executar o Node-RED diretamente em plantas industriais.

O Node-RED roda sobre o runtime do Node.js, possibilitando assim a execução de fluxos de dados orientados a eventos e de forma assíncrona. Com interface simples e intuitiva, a programação segue o paradigma da programação baseada em fluxo (flow-based programming), conectando blocs de construção chamados de nós (nodes) para criar pipelines de dados.

Casos de uso do Node-RED

  • Monitoramento e controle de sensores e atuadores
  • Supervisão local ou remota de pequenas plantas
  • Dashboards customizáveis e em tempo real
  • Gateways IoT (ex: MQTT ↔ Modbus)
  • Integração com banco de dados, nuvem e APIs REST
  • Etc.

Principais características e funcionalidades

As principais características e funcionalidades do Node-RED são:

  • Programação visual: O usuário cria fluxos de dados arrastando e conectando nós no editor web, facilitando a visualização e o entendimento do fluxo de informações e processos. Cada nó representa uma funcionalidade/operação específica (e.g., entrada de dados, processamento de informações, execução de funções customizadas, comunicação com outros dispositivos, acesso a recursos web, etc).
  • Extensa biblioteca de nós: É disponibilizada gratuitamente uma biblioteca extensa de nós que cobrem uma ampla gama de funcionalidades, como comunicação com dispositivos IoT, integração com APIs externas, bancos de dados, serviços de nuvem, protocolos de comunicação industrial (como Modbus, MQTT, HTTP, WebSockets), sistemas de automação residencial (como Zigbee, Z-Wave), e muito mais. Além dos módulos padrão, uma grande comunidade desenvolve inúmeros nós customizados.
  • Suporte a protocolos de comunicação: O Node-RED é projetado para trabalhar nativamente com diversos protocolos de comunicação ao mesmo tempo, como Modbus, MQTT, CoAP, HTTP, WebSocket, OPC-UA, dentre muitos outros. Assim, torna-se relativamente simples integrar instrumentos de campo em uma mesma aplicação.
  • Fácil armazenamento de dados: O Node-RED facilita a integração com banco de dados (e.g., MySQL, MongoDB, SQLite), ou plataformas de "nuvem" (e.g., IBM Cloud, Microsoft Azure, AWS, Google Cloud, etc.).
  • Automações e notificações: Principalmente por ser baseado em Javascript, o Node-RED permite criar fluxos automatizados customizados baseados em eventos, com a possiblidade de enviar notificações por e-mail ou plataformas de mensagens instantâneas (e.g., Slack ou Telegram).
  • Acessibilidade e escalabilidade: Por ser baseado em web, o Node-RED pode ser acessado de qualquer dispositivo com um navegador, permitindo o monitoramento e controle remotos do processo.
  • Criação de telas de supervisório: É possível criar telas de supervisório (dashboards) de maneira rápida e simplificada.

Conceitos Fundamentais

Seguem alguns conceitos fundamentais relacionados ao software Node-RED.

Aplicação web

O software pode ser dividido em uma componente back-end, que executa as funcionalidades da aplicação, e uma componente front-end, que disponibilize uma interface para o usuário acessível via navegadores web. Geralmente são baseados na tríade HTML (para estruturar o conteúdo a ser apresentado), CSS (para estilizar o conteúdo) e JavaScript (para criar interatividade na aplicação).

Aplicações web são acessíveis utilizando pelo navegador ao digitar o endereço da aplicação no formato <endereço>:<porta>. (e.g., http://192.168.0.1:3000 ou http://localhost:1880, ou até https://google.com). Quando a porta não é especificada, o navegador procura pela aplicação primeiro na porta 80 (HTTP) e depois na 443 (HTTPS).

Javascript

Javascript é a principal linguagem de programação utilizada dentro do Node-RED, tanto para criação de fluxos quanto para a implementação lógica e personalizada dos nós. O JavaScript é uma linguagem de programação interpretada e baseada em objetos que é usada para adicionar interatividade a páginas web.

Os códigos customizados de usuários escritos em nós de funções personalizadas dentro do editor do Node-RED permitem a criação de algoritmos versáteis, podendo realizar a manipulação de dados, integração de APIs, criação de lógicas complexas, etc. Além disso, é possível integrar bibliotecas JavaScript de terceiros, aumentando sua flexibilidade.

Node.JS

O JavaScript foi concebido para ser executado nativamente nos navegadores para gerar interatividade nas páginas e aplicações web, ou seja, possuia foco principalmente no front-end. Com o tempo, os desenvolvedores sentiram a necessidade de também usar o JavaScript para implementar as funcionalidades do back-end. Assim surgiu o Node.js, que permite executar códigos de JavaScript direto de um terminal.

Websockets

Websockets criam um canal de comunicação full-duplex sobre uma conexão TCP singular e persistente, permitindo a troca de dados entre cliente e servidor com baixa latência.

O Node-RED utiliza websockets para transmitir dados entre o servidor do Node-RED e as interfaces de usuário (e.g., dashboards), aplicativos móveis ou outras plataformas. Assim, é possível atualizar dados para o usuário em tempo real, sem a necessidade de recarregar a página ou fazer novas requisições ao servidor.

JSON (Javscript Object Notation)

O Javascript Object Notation (JSON) é um formato leve e amplamente utilizado para armazenar a transportar dados. É baseado em texto, fácil de ler e escrever para seres humanos, e fácil de analisar e gerar para as máquinas. Os dados são estruturados em conjunto de pares chave-valor, onde as chaves são strings e os valores podem ser números, strings, arrays, objetos ou valores booleanos. No Node-RED, o JSON é utilizado para transportar dados entre nós e representar configuraçòes de fluxos. Veja um exemplo de definição de objeto JSON:

javascript
{
    "sensor": "temperatura", 
    "valor": 22.5,
    "unidade": "°C",
    "timestamp": "2023-10-10T14:30:00",
    "status": "ativo
}

Programação: Flow-based Programming (FPB)

O Flow-based Programming (FPB) é um paradigma de programação orientada a fluxos, onde o sistema é criado a partir de uma rede de componentes interconectados, chamados de nós. Cada nó executa uma ação em específico e o fluxo de dados é controlado pela maneira que as interconexões são definidas.

Esta abordagem facilita a criação, visualização e depuração de sistemas complexos, possibilitando uma rápida prototipagem de soluções.

O que são nós (nodes)?

  • Cada executa uma tarefa específica:
    • Entradas: recebem dados (ex: MQTT in, HTTP in, Modbus read)
    • Processamento: transformam os dados (ex: função, delay, filtro)
    • Saídas: enviam dados (ex: dashboard, banco de dados, MQTT out)

O que é um fluxo?

  • Um fluxo é o conjunto de nós conectados que definem o caminho de execução dos dados
  • No Node-RED os dados fluem como objetos JSON.

Docker

Docker é uma plataforma de código aberto que facilita o processo de criação, implantação e execução de aplicativos em "contêineres". Um contêiner é uma unidade leve e isolada que contém tudo o que um aplicativo precisa para ser executado, incluindo código, bibliotecas e dependências. Diferente de uma máquina virtual, que emula todo um sistema operacional, o Docker compartilha o núcleo do sistema operacional hospedeiro, tornando os contêineres mais eficientes e rápidos. Isso permite que o Docker execute aplicativos de maneira mais ágil, ocupando menos recursos e permitindo que múltiplos contêineres sejam executados simultaneamente sem a sobrecarga que as máquinas virtuais impõem.

Os usuários criam e compartilham imagens de contêiner, que são versões pré-configuradas de aplicativos ou ambientes. Essas imagens são armazenadas no Docker Hub ou em repositórios privados, e podem ser baixadas e executadas em qualquer sistema com o Docker instalado, proporcionando portabilidade e consistência entre diferentes ambientes de desenvolvimento, teste e produção.

O Docker facilita o desenvolvimento e a entrega contínuos (DevOps) ao permitir que aplicativos sejam empacotados em contêineres que podem ser movidos facilmente entre diferentes servidores e sistemas sem a necessidade de reconfiguração. Além disso, o Docker oferece funcionalidades de orquestração com ferramentas como o Docker Compose e o Kubernetes, que ajudam a gerenciar múltiplos contêineres, permitindo a construção de sistemas distribuídos escaláveis. O Docker também ajuda a reduzir os problemas de compatibilidade entre ambientes, já que o mesmo contêiner pode ser executado de forma idêntica em diferentes máquinas e plataformas.

Veja os links a seguir para instalar o docker no Linux, Windows, ou MacOS.

Container

Unidade leve e isolada que contém tudo o que um aplicativo precisa para ser executado, incluindo código, bibliotecas e dependências.

Pode ser interpretado como uma pequena máquina virtual (VM), porém difere desta em essência.

  • Compartilha o kernel com o SO hospedeiro, sendo geralmente mais eficiente e rápido que máquinas virtuais.

Executando o Node-RED via container

O passo-a-passo a seguir ensina como executar o Node-RED como um container do Docker.

Passo 1 – Instale o Docker em sua máquina (instruções de instalação para Linux, Mac, Windows).

Passo 2 – Crie uma rede virtual do docker que será utilizada pelo container:

docker network create net-nodered

Passo 3 – Agora crie um container baseado nesta imagem:

bash
docker run -d -p 1880:1880 -v node_red_data_class:/data --network net-nodered --name nodered-class nodered/node-red

Os parâmetros passados ao comando docker run que você acabou de executar trazem informações importantes quanto à maneira com a qual a aplicação do Node-RED irá se comportar na sua máquina:

  • -d: executa o container em modo detached, i.e., não será acoplado um terminal a este container.
  • -p 1880:1880: solicita que haja um mapeamento direto entre a porta 1880 do container e do host. Esta é a porta onde será disponibilizada o Node-RED.
  • -v node_red_data_class:/data: cria um volume de armazenamento persistente no sistema do docker, permitindo que alterações do container não se percam quando este for parado.
  • --network net-nodered: conecta o container à rede net-nodered criada anteriormente
  • --name mynodered_class: Define um nome para o container.

Passo 4 – Abra algum navegador em sua máquina e digite o endereço localhost:1880. Pronto! O Node-RED está instalado e pronto para ser utilizado.

Interface e programação básica

A imagem a seguir apresenta a interface padrão do Node-RED e o que representa cada região.

Área de programação: Onde os nós são inseridos e os fluxos são criados.

Abas de flows abertos: "Flow" pode ser o termo para designar uma interconexão entre nós, ou para designar um programa em Node-RED. É possível criar vários programas e executá-los em paralelo para a sua aplicação, sendo possível visualizar cada um deles em uma aba separada.

Menu de nós disponíveis: Todos nós instalados no ambiente Node-RED serão exibidos nesta área.

Menus de contexto, parâmetros, debug: Contém diversos menus e funcionalidades para auxiliar na programação. Por exemplo, é possível encontrar os parâmetros dos nós neste menu. Há também o menu de debug (depuração), que permite visualizar o valor de variáveis em tempo de execução.

Compile and deploy: Este botão compila a aplicação e a coloca em execução automaticamente. Caso haja erros, eles serão indicados por mensagens ao usuário. As modificações no programa apenas refletirão em sua execução após clicar neste botão.

Menu geral: Menu geral do Node-RED, com opções para importar ou exportar o programa, configurar nós, visualizar os flows, gerenciar e instalar os módulos, opções gerais do Node-RED, help, about, etc.

Nós e módulos

Cada "nó" é considerado um objeto isolado que realiza uma função em específico. Cada nó pode possuir um fluxo de entrada e/ou saída de dados.

Os "módulos" são conjuntos de nós que executam funções similares ou pertecem a um mesmo grupo funcional. Existem diversos módulos que já vem por padrão no Node-RED (e.g., common, function, network, sequence, parser, storage). É possível instalar módulos criados por outros usuários a partir de uma biblioteca online ou até criar os seus próprios módulos.

Nós mais comuns

No módulo common há alguns nós que são muito utilizados. Apresentam-se dois dos mais utilizados durante as implementações de código.

Inject: Permite gerar dados de entrada para o fluxo, permitindo testar e simular a entrada de informações em diferentes pontos do processo. Pode injetar diversos tipos de dados, como números, textos, objetos JSON, datas, funções customizadas, etc. Pode-se pressionar um botão no nó para acionar a injeção de valor, ou configurar para a geração ser automática seguindo uma frequência temporal pré-definida.

Debug: Utilizado para exibir informações no painel de depuração, facilitando a visualização de dados que são passados pelos fluxos do programa. É essencial para entender como os dados vão sendo passados e no diagnóstico de problemas durante o desenvolvimento. O nó pode ser configurado para mostrar a mensagem completa ou somente uma parte dela.

Mensagens

Os JSON transmitidos pelo Node-RED por convenção possuem uma estrutura base definida com as chaves:

  • topic para o identificador daquele tipo de mensagem;
  • payload, contendo o(s) dado(s) de interesse;
  • _msgid como um hash identificador único para cada mensagem enviada. Segue o exemplo do JSON de uma mensagem:
javascript
{
    "payload": {
        "valor": 27,
        "unidade": "celsius"
    },
    "topic": "temperatura_cap",
    "_msgid": "30255a8f7517d98d"
}

Programação

Para programar, basta arrastar os nós de interesse desde o Menu de nós até a Área de programação. Criam-se fluxos entre os nós ao clicar com o mouse desde o ponto de conexão de origem em um nó até o ponto de conexão destino em outro nó.

Note que os nós modificados apresentam uma bolinha azul em sua parte superior. Isto indica que o nó foi modificado porém ainda não compilado, i.e., as alterações feitas ainda não estão sendo executadas.

Para compilar as modificações e começar as executá-las, basta clicar no botão deploy na parte superior-direita.

"Errar é humano. Debugar é divino" - Autor desconhecido.

Durante qualquer programação, é interessante ter a capacidade de visualizar como os dados estão sendo gerados e manipulados ao longo do programa. Normalmente, as IDEs (Integrated Development Environment) disponibilizam uma funcionalidade (normalmente chamdada "debug" ou "debugger") que auxilia nesta tarefa.

O Node-RED disponibiliza o menu debug no painel da direita do editor. Nele aparecem todas as mensagens que chegarem a nós do tipo Debug. É possível visualizar o JSON completo de cada mensagem, ou simplesmente uma chave ou conjunto de chaves em específico.

Autor: FILIPE A. S. ROCHA

Publicado em 28 de abril de 2026· Atualizado em 26 de maio de 2026