Node-Red: automação simplificada

há 2 meses 41

Saudações.

O Node-Red é um sistema simples de programar um fluxo de trabalho (workflow) simples, pontual e flexível.

Pré-requisitos (constam em outros artigos aqui do blog):

  • Instalação do Linux (Debian);
  • Internet no servidor;
  • Docker CE instalado;

1 – Apresentando o Node-Red

O Node-Red é mantido pela IBM por meio da OpenJS Foundation, foi criado em 2013 e possui uma maturidade elevadíssima.

É totalmente OpenSource e gratuito, sem limitações de software, sem licença, sem custo adicional com software.

O foco principal é provar uma maneira LowCode (desenhavel) de criar automações para IoT, hardware e dispositivos.

Seu diferencial é a flexibilidade de criação de nodes personalizados para integraçãom com APIs modernas (HTTP, gRPC, ND-JSON).

É possível e fácil criar nodes próprios em Javascript/Typescript (NodeJS).

Ele conta com uma vasta biblioteca online oficial de nodes da comunidade.

Node-RED é ideal para:

  • Desenvolvedores que trabalham com IoT e dispositivos conectados;
  • Automação residencial (Home Assistant, Raspberry Pi);
  • Integração com sensores, PLCs e protocolos industriais (MQTT, OPC-UA, Modbus);
  • Edge computing e ambientes industriais (IIoT);

Sites:

Explore e descubra coisas incríveis!

2 – Instalando no Docker

O Node-Red roda um servidor web na porta HTTP 1880 para edição e gerenciamento de fluxos.

2.1 – Execução simples

Para rodar em Docker para uso imediato:

Bash

# Preparar diretorio do volume com permissao correta mkdir -p /storage/node-red; chown -R 1000:1000 /storage/node-red; # Rodar: docker run -d \ --name node-red \ -h node-red.intranet.br \ -p 1880:1880 \ -e TZ=America/Sao_Paulo \ -v /storage/node-red:/data \ nodered/node-red:latest;

2.2 – Execução com Traefik

Para rodar em nome de DNS (FQDN) público com certificado, instale previamente o Traefik (consta em outros tutoriais do site).

Modo “docker run

Bash

#!/bin/sh # Variaveis NAME=node-red; FQDN="$NAME.$(hostname -f)"; IMAGE=nodered/node-red:latest; TZ="America/Sao_Paulo"; DATADIR="/storage/$NAME"; # Preparar pasta do volume e ajustar permissoes mkdir -p $DATADIR; chown 1000:1000 $DATADIR; # Obter imagem atualizada docker pull $IMAGE; # Rodar/Renovar # n8n_main1 docker rm -f $NAME 2>/dev/null; docker run -d \ --name $NAME \ -h $NAME.intranet.br \ \ --network network_public \ --ip=10.249.1.11 \ --ip6=2001:db8:10:249::1:11 \ --mac-address 02:cd:02:49:01:11 \ \ -e TZ=$TZ \ \ -v ${DATADIR}:/data \ \ --label "traefik.enable=true" \ --label "traefik.http.routers.$NAME.rule=Host(\`$FQDN\`)" \ --label "traefik.http.routers.$NAME.entrypoints=web,websecure" \ --label "traefik.http.routers.$NAME.tls=true" \ --label "traefik.http.routers.$NAME.tls.certresolver=letsencrypt" \ --label "traefik.http.services.$NAME.loadbalancer.server.port=1880" \ \ $IMAGE;

Stack para Docker Compose (para quem gosta de Portainer)

YAML

services: node-red: image: nodered/node-red:latest container_name: node-red hostname: node-red.intranet.br restart: always tmpfs: - /run:rw,noexec,nosuid,size=2m cpus: "8.0" mem_limit: 4g memswap_limit: 4g environment: - TZ=America/Sao_Paulo volumes: - /storage/node-red:/data networks: network_public: ipv4_address: 10.249.1.11 ipv6_address: 2001:db8:10:249::1:11 mac_address: 02:cd:02:49:01:11 labels: - traefik.enable=true - traefik.http.routers.node-red.rule=Host(`node-red.seu-site.com.br`) - traefik.http.routers.node-red.entrypoints=web,websecure - traefik.http.routers.node-red.tls=true - traefik.http.routers.node-red.tls.certresolver=letsencrypt - traefik.http.services.node-red.loadbalancer.server.port=1880 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:1880"] interval: 30s timeout: 10s retries: 3 networks: network_public: driver: bridge enable_ipv6: true ipam: config: - subnet: 10.249.0.0/16 gateway: 10.249.255.254 - subnet: 2001:db8:10:249::/64 gateway: 2001:db8:10:249::ffff

Obs.: O redirecionamento de portas é opcional ao usar com o Traefik. Deixei a instrução “ports: 1880:1880” mas recomendo que remova quando o acesso pelo Traefik funcionar.

3 – Adicionando nodes da comunidade

Nodes da comunidade aumentam significativamente o poder da sua automação, resumindo em um node o que antes precisaria de uma rede enorme de nós.

Alguns nodes famosos:

  • node-red-contrib-influxdb: Integração com InfluxDB (banco de dados de séries temporais), amplamente usado em projetos IoT e monitoramento;
  • node-red-contrib-modbus: Suporte completo para Modbus TCP, UDP e Serial, essencial para automação industrial;
  • node-red-contrib-telegrambot: Integração com Telegram para bots e notificações, muito usado em projetos de automação residencial;
  • node-red-contrib-home-assistant-websocket: Integração com Home Assistant, popular em projetos de casa inteligente;
  • node-red-contrib-uibuilder: Cria interfaces web personalizadas sem limitações do Dashboard, suporta Vue, React e outros frameworks;
  • node-red-node-mysql: Conecta Node-RED a bancos de dados MySQL/MariaDB, essencial para persistência de dados;
  • node-red-contrib-moment: Manipulação avançada de datas e horários usando Moment.js, suporte a timezone, DST e locale;
  • node-red-node-mongodb: Integração com MongoDB, popular para aplicações NoSQL;
  • node-red-contrib-bigtimer: Timer avançado com suporte a nascer/pôr do sol, muito usado em automação baseada em tempo;

Top nodes mais baixados:

  • node-red-dashboard (agora @flowfuse/node-red-dashboard): dashboard melhorada;
  • node-red-contrib-cron-plus: Nó de agendamento flexível (cron, eventos solares, datas fixas) com controle dinâmico completo e suporte a fusos horários;
  • node-red-contrib-zigbee2mqtt e node-red-contrib-zigbee2mqtt-devices: Integração com dispositivos Zigbee através do Zigbee2MQTT, controlar lâmpadas, sensores e dispositivos Zigbee (Ikea Trådfri, Philips Hue, Xiaomi Aqara, etc.);
  • node-red-contrib-aedes: Servidor MQTT broker completo rodando dentro do Node-RED para criar um broker MQTT local sem necessidade de Mosquitto ou outro servidor externo;
  • node-red-node-pushbullet / node-red-contrib-pushbell: Enviar notificações push para smartphones e desktops, alertas e notificações de automação residencial, monitoramento de sistemas;
  • node-red-contrib-sendgrid / node-red-node-email: Envio de emails através de SMTP ou API do SendGrid, envia alertas por email, relatórios automatizados, notificações de eventos;
  • node-red-contrib-http-request: Node HTTP aprimorado com suporte otimizado para proxy, requisições HTTP/HTTPS com recursos avançados, alternativa ao node HTTP nativo quando precisa de recursos adicionais, suporte a proxy HTTPS via CONNECT, conexões persistentes, e mais opções de configuração;

Top nodes de IA/LLM:

  • node-red-contrib-ai-agent: Agente de IA que permite processamento de linguagem natural com memória, integração de ferramentas (HTTP e Functions), encadeamento de múltiplos agentes, persistência de memória em arquivo;
  • node-red-contrib-ollama: módulo que encapsula a biblioteca ollama.js, ideal para rodar LLMs localmente., oferecendo funcionalidades como nós configuráveis para fácil integração em fluxos (chat, generate, embed, list/pull/push de modelos);
  • node-red-contrib-openai: biblioteca que fornece acesso conveniente à API OpenAI, suportando qualquer plataforma compatível com OpenAI API, suporta MCP, endpoint de responses API, compabibilidade com OpenRouter, Groq, etc);
  • node-red-ai-toolkit: coleção de nós e fluxos para desenvolvimento low-code interativo de aplicações usando tecnologias de IA, recursos:
    • Catálogo de modelos testados;
    • Tool Store para expandir agentes;
    • Recipe Store para guiar agentes;
    • Key-Value e Vector Stores;
    • Busca na web (Brave, Startpage);
  • LangChain/LangGraph: é possível usar LangGraph importando as bibliotecas diretamente nos function nodes, criando agentes com ferramentas como TavilySearchResults e mantendo histórico de conversação com MemorySaver;

Instalando via repositório NPM:

Bash

# Garantir as permissoes do volume para o usuario node-red (UID 1000) mkdir -p /storage/node-red; chown -R 1000:1000 /storage/node-red; # Funcao mais rapida: nodered_install(){ #USER=root; USER=node-red; docker exec \ --user $USER \ -it node-red bash -c \ "npm install $1"; }; # Instalar todos os top-nodes: nodered_install node-red-contrib-uibuilder; nodered_install node-red-contrib-moment; nodered_install node-red-contrib-bigtimer; nodered_install node-red-contrib-cron-plus; #nodered_install node-red-contrib-http-request; < vulneravel # Instalar modulos de banco de dados nodered_install node-red-contrib-postgresql; nodered_install node-red-contrib-redis; nodered_install node-red-node-mysql; nodered_install node-red-node-mongodb; # Instalar nodes de IA/LLM: nodered_install node-red-contrib-ai-agent; nodered_install node-red-contrib-ollama; nodered_install node-red-contrib-openai; # Instalar bibliotecas adicionais de IA/LLM nodered_install node-red-contrib-ml-rag; # Instalar langchain: nodered_install langchain; # Pacote principal nodered_install @langchain/core; # Principais funcoes nodered_install @langchain/anthropic; # Para Claude nodered_install @langchain/google-genai; # Para Gemini nodered_install @langchain/langgraph; # LangGraph (visual) nodered_install @langchain/openai; # OpenAI (GPT-4, GPT-3.5, etc) nodered_install @langchain/google-vertexai; # Google Vertex AI nodered_install @langchain/google-vertexai-web; # Google Vertex AI nodered_install @langchain/mistralai; # Mistral AI nodered_install @langchain/aws; # AWS (Bedrock) nodered_install @langchain/azure-openai; # Azure OpenAI nodered_install @langchain/groq; # Groq nodered_install @langchain/cerebras; # Cerebras nodered_install @langchain/cloudflare; # Cloudflare Workers AI nodered_install @langchain/ollama; # Ollama (modelos locais) nodered_install @langchain/together; # Together AI nodered_install @langchain/fireworksai; # Fireworks AI nodered_install @langchain/baidu-qianfan; # Baidu Qianfan nodered_install @langchain/yandex; # Yandex # - vector store nodered_install @langchain/pinecone; # Pinecone nodered_install @langchain/qdrant; # Qdrant nodered_install @langchain/weaviate; # Weaviate nodered_install @langchain/redis; # Redis nodered_install @langchain/mongodb; # MongoDB Atlas nodered_install @langchain/milvus; # Milvus # Conferindo modulos: docker exec -it --user node-red node-red bash -c 'npm audit'; # Fixar permissoes novamente # Garantir as permissoes do volume para o usuario node-red (UID 1000) mkdir -p /storage/node-red; chown -R 1000:1000 /storage/node-red;

Reinicie o Node-Red para aplicar as novas bibliotecas:

Bash

# Reiniciar node-red docker restart node-red;

Use e abuse, sempre faça backup das suas automações.

4 – Exemplos

Alguns exemplos para ajudar os iniciantes a verem as coisas acontecendo!

4.1 – Webhook/HttpServer com HTML Hello-World

Automação com servidor http (node Network -> http-in), HTML de Hello-World (node Function -> template) e resposta da requisição (node Network -> http response), acesso via https://node-red.seu-dominio.com.br/v1/test01

JSON

[ { "id": "2e065a883bd6c062", "type": "tab", "label": "Teste-01", "disabled": false, "info": "", "env": [] }, { "id": "d88736d783dcec0e", "type": "http in", "z": "2e065a883bd6c062", "name": "test01", "url": "/v1/test01", "method": "get", "upload": false, "skipBodyParsing": false, "swaggerDoc": "", "x": 170, "y": 240, "wires": [ [ "8172d84ce8b74fa4" ] ] }, { "id": "c468c08b6b68667d", "type": "http response", "z": "2e065a883bd6c062", "name": "reply", "statusCode": "", "headers": {}, "x": 550, "y": 240, "wires": [] }, { "id": "8172d84ce8b74fa4", "type": "template", "z": "2e065a883bd6c062", "name": "", "field": "payload", "fieldType": "msg", "format": "handlebars", "syntax": "mustache", "template": "<!DOCTYPE html>\n<html>\n<head>\n <title>Hello World</title>\n</head>\n<body>\n <h1>Hello World!</h1>\n <p>Esta página foi criada com Node-Red.</p>\n</body>\n</html>", "output": "str", "x": 360, "y": 240, "wires": [ [ "c468c08b6b68667d" ] ] } ]

A vida é como uma caixa de chocolates. Você nunca sabe o que vai encontrar.
Autor: Forest Gump

Terminamos por hoje!

Patrick Brandão, patrickbrandao@gmail.com

Ler artigo completo