Skip to content
BotServBotServ
Node-REDHome AssistantSmart HomeAutomatizaciónIoT

Node-RED con Home Assistant

Conecta Node-RED con Home Assistant. Controla entities, crea automatizaciones e integra IA en tu hogar inteligente.

S

schutzgeist

6 min read
Node-RED con Home Assistant

Node-RED con Home Assistant

Qué cubre este artículo sobre Node-RED y Home Assistant

  • Cómo conectar Node-RED con Home Assistant.
  • Cómo controlar entidades y reaccionar ante cambios de estado.
  • Cómo se ven las automatizaciones complejas en Node-RED.
  • Cómo integrar inteligencia artificial en flows de domótica.
  • Ejemplos prácticos para iluminación, climatización, seguridad y energía.

Introducción: Node-RED con Home Assistant explicado

Home Assistant tiene automatizaciones propias, pero son limitadas. Node-RED como complemento permite lógica compleja: encadenamientos si-entonces con múltiples condiciones, horarios, retrasos y decisiones basadas en IA. Esta combinación es el estándar para automatización domótica avanzada.

Este artículo está dirigido a usuarios que quieren ampliar Home Assistant con Node-RED. Encontrarás los conceptos básicos en Instalar Node-RED y Automatización del hogar.

¿Por qué necesito Node-RED con Home Assistant?

Las automatizaciones de Home Assistant se basan en YAML y son lineales. Si necesitas “Si temperatura > 25 Y nadie en casa Y brilla el sol, entonces bajar persianas”, YAML se vuelve confuso. Node-RED lo hace visual: sensor → condiciones → acción, todo como un flow.

Node-RED con Home Assistant brevemente

Node-RED se conecta a Home Assistant mediante WebSocket. Ves todas las entidades, puedes reaccionar ante cambios de estado e invocar servicios. Los flows son visuales y más potentes que las automatizaciones YAML.

La idea central es simple: Home Assistant proporciona datos, Node-RED proporciona la lógica.

A quién está dirigido este artículo

  • Usuarios de Home Assistant que necesitan automatizaciones más complejas.
  • Aficionados a domótica que quieren integrar IA en su automatización.
  • Usuarios de Node-RED que desean conectar Home Assistant.
  • Autohospedadores que controlan su domótica de forma independiente.

Conocimientos previos en Home Assistant y Node-RED son útiles.

Términos importantes

  • Node-RED - Editor de flows. Cuándo es útil: para lógica compleja.
  • Home Assistant - Plataforma de domótica. Cuándo es útil: la base del sistema.
  • Entity - Dispositivo/sensor en HA. Cuándo es útil: qué se controla.
  • Service - Acción en HA. Cuándo es útil: qué se invoca.
  • WebSocket - Conexión HA ↔ Node-RED. Cuándo es útil: para tiempo real.
  • Ollama - Servidor de modelos local. Cuándo es útil: para IA en flows.

Configuración: Node-RED + Home Assistant

1. Add-on de Home Assistant (método más sencillo)

Si usas Home Assistant OS:

  1. Configuración → Complementos → Tienda de complementos
  2. Busca “Node-RED” e instala
  3. Activa “Iniciar al arranque”
  4. Abre Node-RED

La conexión se configura automáticamente.

2. Docker (manual)

version: "3.8"

services:
  homeassistant:
    image: homeassistant/home-assistant:latest
    container_name: homeassistant
    restart: unless-stopped
    ports:
      - "8123:8123"
    volumes:
      - ha_config:/config
    networks:
      - smarthome

  nodered:
    image: nodered/node-red:latest
    container_name: nodered
    restart: unless-stopped
    ports:
      - "1880:1880"
    volumes:
      - nodered_data:/data
    networks:
      - smarthome

volumes:
  ha_config:
  nodered_data:

networks:
  smarthome:
    driver: bridge

3. Conectar Node-RED con HA

# En Node-RED: Paleta → Instalar
node-red-contrib-home-assistant-websocket

Luego en Node-RED:

  1. Añade un nodo events: state.
  2. Haz clic en el engranaje → “Agregar nuevo servidor”.
  3. URL de Home Assistant: http://homeassistant:8123
  4. Token de acceso desde Home Assistant (Perfil → Tokens de acceso de larga duración).

Nodos importantes

NodoPropósito
events: stateReacciona ante cambio de estado
events: allTodos los eventos
call serviceInvocar servicio (light.turn_on)
current stateLeer estado actual
trigger: stateDisparador al cambiar estado
poll stateConsultar estado periódicamente
wait untilEsperar hasta que se cumpla una condición
apiInvocar cualquier API de HA

Ejemplo práctico 1: Luz por movimiento

[events: state: binary_sensor.movimiento_pasillo]
    │
    ▼ (state == "on")
[time range: 18:00 - 06:00]  ← solo por la noche
    │
    ▼
[call service: light.turn_on]
  Entity: light.pasillo
  Data: {"brightness": 128}
    │
    ▼
[delay: 5 minutes]
    │
    ▼
[call service: light.turn_off]
  Entity: light.pasillo

Ejemplo práctico 2: Automatización de climatización

[poll state: sensor.temperatura_exterior] (cada 5 min)
    │
    ▼
[function: Decisión]
  const temp = msg.payload;
  const interna = global.get("temperatura_interna") || 21;
  if (temp > 25 && interna > 23) {
    msg.payload = "enfriar";
  } else if (temp < 5 && interna < 19) {
    msg.payload = "calentar";
  } else {
    msg.payload = "nada";
  }
    │
    ▼
[switch]
    ├─ enfriar → [call service: climate.set_hvac_mode cool]
    ├─ calentar → [call service: climate.set_hvac_mode heat]
    └─ nada → [call service: climate.set_hvac_mode off]

Ejemplo práctico 3: Reconocimiento de presencia con IA

[events: state: person.max]
    │
    ▼
[function: Recopilar contexto]
  const context = {
    person: msg.payload,
    hora: new Date().toLocaleTimeString(),
    dia: new Date().toLocaleDateString('es', {weekday: 'long'}),
    iluminacion: global.get("estado_luz"),
    temperatura: global.get("temperatura")
  };
  msg.payload = JSON.stringify(context);
    │
    ▼
[HTTP Request: Ollama]
  "Basándote en el contexto, ¿qué debería ocurrir?
   Contexto: {{msg.payload}}
   Opciones: luz_on, musica_on, calefaccion_on, nada
   Responde como JSON."
    │
    ▼
[function: Procesar JSON]
    │
    ▼
[switch: action]
    ├─ luz_on → [call service: light.turn_on]
    ├─ musica_on → [call service: media_player.play]
    └─ calefaccion_on → [call service: climate.set_temperature]

Ejemplo práctico 4: Gestión de energía

[poll state: sensor.precio_electricidad] (cada 15 min)
    │
    ▼
[function: Analizar precio]
  const precio = parseFloat(msg.payload);
  msg.barato = precio < 0.25;  // céntimos/kWh
  msg.caro = precio > 0.40;
    │
    ▼
[switch]
    ├─ barato → [call service: switch.turn_on lavadora]
    │           [call service: switch.turn_on lavavajillas]
    └─ caro → [call service: switch.turn_off no_esencial]

Ejemplo práctico 5: Monitoreo de seguridad

[events: state: group.todos_sensores]
    │
    ▼
[function: Verificar alarma]
  const state = msg.payload;
  const hora = new Date().getHours();
  const noche = hora < 6 || hora > 22;

  if (state === "on" && noche) {
    msg.alarma = true;
    msg.razon = "Movimiento nocturno detectado";
  }
    │
    ▼
[switch: alarma?]
    │
    ▼ (sí)
[call service: notify.notify]
  "Alarma! {{msg.razon}}"
    │
    ▼
[call service: light.turn_on]
  Todas las luces
    │
    ▼
[call service: camera.snapshot]
  Capturar foto

IA en flows de domótica

Comandos en lenguaje natural

[HTTP In: /api/voice-command]
    │
    ▼
[HTTP Request: Ollama]
  "Interpreta el comando: '{{msg.payload.command}}'
   Entidades disponibles: {{entities}}
   Responde como JSON: {action, entity, params}"
    │
    ▼
[function: Procesar JSON e invocar servicio]
  const cmd = JSON.parse(msg.payload);
  msg.service = cmd.action;
  msg.entity = cmd.entity;
  msg.data = cmd.params;
    │
    ▼
[call service]

Detección de anomalías

// Function Node: Detectar patrones inusuales
const verlauf = context.get("verlauf") || [];
verlauf.push({ temp: msg.payload, zeit: Date.now() });
if (verlauf.length > 100) verlauf.shift();

// Enviar a IA para análisis
msg.payload = `Historial de temperatura: ${JSON.stringify(verlauf.slice(-20))}
¿Detectas anomalías? Responde: normal/anomalia + justificación`;
return msg;

Consideraciones de seguridad

  • Access Token: Genera un token dedicado para Node-RED con permisos mínimos.
  • No expongas: Node-RED y Home Assistant no deben estar directamente expuestos en Internet.
  • Acciones críticas: Para operaciones sensibles (alarmas, cerraduras), requiere confirmación manual. Consulta Aprobación humana.
  • Validación: Revisa siempre las salidas de la IA antes de ejecutar acciones.

Problemas comunes

  • Entity-IDs incorrectas: Las entidades se llaman light.wohnzimmer, no Wohnzimmer.
  • Token expirado: Los Long-Lived Access Tokens pueden caducar. Regenera uno nuevo.
  • Demasiados eventos: events: all puede ser abrumador. Filtra específicamente.
  • Race Conditions: Dos flows que controlan la misma entidad pueden entrar en conflicto.
  • Sin plan B: Si Node-RED falla, las automatizaciones críticas deben ejecutarse en Home Assistant.

Enlaces relacionados

Puntos clave:

  • Node-RED + Home Assistant = automatización inteligente del hogar potente.
  • node-red-contrib-home-assistant-websocket para la conexión.
  • events: state para disparadores, call service para acciones.
  • IA con Ollama para decisiones inteligentes.
  • Lógica compleja de forma visual en lugar de YAML.

Preguntas frecuentes

¿Cómo conecto Node-RED con Home Assistant?

Instala node-red-contrib-home-assistant-websocket, crea un Long-Lived Access Token en Home Assistant y configura el servidor en Node-RED.

¿Node-RED o automatizaciones de Home Assistant?

Usa automatizaciones de Home Assistant para lógica simple. Node-RED es mejor para condiciones complejas, retrasos e integración con IA. Ambas pueden coexistir.

¿Cómo encuentro Entity-IDs?

En Home Assistant, ve a Settings → Devices & Services → Entities. O en Node-RED, en el editor de nodos al configurar un nodo de Home Assistant.

¿Cómo integro IA en flows del hogar inteligente?

A través de un nodo HTTP Request hacia Ollama. La IA puede analizar contexto, interpretar comandos o detectar anomalías.

¿Es seguro?

Sí, si todo está en local. Ambos servicios permanecen en tu red. Crea un token dedicado con permisos mínimos y no expongas nada a Internet.

¿Qué sucede si Node-RED falla?

Los flows se detienen. Las automatizaciones críticas (alarma, calefacción) deben tener un respaldo en Home Assistant.

¿Cuál es el rendimiento?

La conexión WebSocket es en tiempo real (milisegundos). Las llamadas a IA tardan 2-10 segundos. Para operaciones críticas (sensor de movimiento → luz), Node-RED sin IA es más rápido.

¿Cómo debugueo flows?

Añade nodos Debug después de cada paso y revisa los mensajes en el panel de Debug. El nodo events: all muestra todos los eventos de Home Assistant.

Fuentes y referencias

Volver al blog
Share:

Entradas relacionadas