Saltar al contenido
Elausys

HyperVisu / Integraciones

Dispositivos virtuales y Node-RED

Widgets virtuales, flujos Node-RED personalizados en el equipo y cómo se conectan.

elausys · 29 julio 2026
En esta página

Dispositivos virtuales

Un dispositivo virtual no tiene ningún enlace físico: el propio servidor conserva su estado. Los dispositivos virtuales conectan las funciones de las instalaciones avanzadas. Usos habituales:

  • Puntos controlados por flujos Node-RED (a continuación).
  • Grupos de dispositivos — un grupo es un widget virtual que controla a sus miembros (véase «Grupos de dispositivos»).
  • Salidas de lógica materializadas — la salida de una función convertida en un widget real (véase «Configuración de funciones y salidas»).
  • Indicadores y consignas para automatizaciones («Modo vacaciones», «Desplazamiento de temperatura objetivo»).

Créelos en el espacio de trabajo Dispositivos como cualquier otro widget, con Protocol en VIRTUAL. Para cada objeto se configura:

AjusteSignificado
Range - Min / Range - MaxLos valores que acepta el objeto. Se rechaza cualquier valor escrito desde fuera (un flujo o el webhook) que quede fuera del rango; un objeto nuevo empieza con 0 a 100.
Persist StateSi el valor actual se conserva tras reiniciar el servidor. Actívelo para indicadores y consignas; déjelo desactivado para señales momentáneas.

Un objeto virtual no tiene ajuste de valor predeterminado. Active Persist State si el último valor debe recuperarse tras un reinicio. El Object ID que aparece bajo el título del diálogo del objeto es el identificador que utiliza un flujo o el webhook para dirigirse al objeto.

Ajustes del objeto de un widget virtual.

Node-RED

Node-RED es un servicio opcional del servidor (actívelo en «Servicios y protocolos») para crear flujos personalizados: puentes MQTT, API de nube particulares, lógica a medida que no encaja en el motor de lógica o un controlador para un dispositivo que HyperVisu no admite.

  • Activación: en Services, active Node-RED. La fila muestra Changes need a restart; pulse Restart Server en el aviso Pending Changes y espere a que el servidor vuelva a estar disponible.
  • Apertura: cuando el servicio esté en ejecución, Node-Red aparecerá en el grupo APPS de la barra lateral de administración. Púlselo para abrir el editor de flujos en una pestaña nueva.
  • Conexión: inicie sesión con su cuenta HyperVisu.
  • Control de dispositivos: los nodos Hypervisu de la paleta leen y escriben directamente en los dispositivos HyperVisu (véase «Los nodos HyperVisu» a continuación). Los dispositivos virtuales son el punto de encuentro natural: el flujo calcula, el dispositivo virtual muestra el resultado y participa en escenarios, automatizaciones y vistas como cualquier otro dispositivo.
  • API webhook: los flujos y los sistemas de terceros también pueden utilizar la API webhook de dispositivos, protegida mediante la verificación del número de serie (véase «Webhooks y API de terceros»). El interruptor Webhooks de la página Services debe estar activado (véase «Servicios y protocolos»). Mantenga el número de serie en secreto: cualquiera que lo conozca puede escribir mediante el webhook.

💡 Consejo: utilice preferentemente el motor de lógica (véase «Motor de lógica — Conceptos y lienzo») para la lógica habitual de automatización de edificios: está supervisada, validada y es visible para los residentes. Utilice Node-RED para lo que requiere código.

Los nodos HyperVisu

El Node-RED del servidor incluye una categoría de paleta Hypervisu: un nodo por tipo de dispositivo, un nodo Input Target, dos nodos de comandos globales y un nodo Scenario. Un nodo de dispositivo representa un dispositivo HyperVisu. Envíele un mensaje para controlar el dispositivo; cuando este cambia, el nodo emite el nuevo valor por una de sus salidas.

La paleta desplazada hasta la categoría Hypervisu.
NodoTipo de dispositivo (véase «Descripción general de los tipos de widgets»)Entradas → salidas
PushbuttonPulsadorCualquier mensaje → 1 salida
Light Switch, SwitchInterruptor de luz, interruptor2 destinos → 2 salidas
Analog OutputSalida analógicaUn número → 1 salida
Shutter / BlindPersiana / veneciana8 destinos → 8 salidas
Temperature ControllerTemperatura / termostato5 destinos → 5 salidas
DimmerRegulador4 destinos → 4 salidas
RGB DimmerRegulador RGB4 destinos → 4 salidas
Tunable White DimmerRegulador de blanco ajustable6 destinos → 6 salidas
Analog InputEntrada analógicaUn número → 1 salida
Digital InputEntrada digitaltrue / false → 1 salida
Text InputEntrada de textoUn texto → 1 salida
AlarmAlarma7 destinos → 7 salidas
AudioAudio13 destinos → 13 salidas
VentilationVentilación10 destinos → 10 salidas
Air ConditioningAire acondicionado11 destinos → 11 salidas
Door LockCerradura de puerta2 destinos → 2 salidas
MeterContador4 destinos → 4 salidas
ChargerCargador de vehículo eléctrico8 destinos → 8 salidas
Global Lights, Global ShuttersTodas las luces o persianas de una estancia o categoríaEncendido / apagado, subida / bajada — sin salida
ScenarioUn escenarioCualquier mensaje lo ejecuta — sin salida
Input Target—Añade el nombre del destino a un mensaje (véase «El nodo Input Target»)

Cómo se conectan los nodos al servidor. El Node-RED del servidor incluye un subflujo Hypervisu ya colocado en una pestaña de flujo, junto a los nodos que encaminan mensajes hacia y desde los nodos de dispositivo (un nodo de enlace, un nodo Widget out y un nodo de reenvío). El subflujo inicia sesión en el servidor con una cuenta de servicio dedicada, carga estancias, categorías, dispositivos y escenarios, y mantiene abierta la conexión en tiempo real. Deje estos nodos en su sitio: sin ellos, los nodos de dispositivo tienen listas vacías y no emiten mensajes. La paleta también incluye un nodo Msg Forwarder: forma parte de este encaminamiento y ya está colocado; no añada otro a sus flujos.

La pestaña de flujo Dashboard.

⚠️ Advertencia: los flujos actúan con todos los permisos y un nodo Global Lights o Global Shutters actúa sobre todos los dispositivos correspondientes de la estancia o categoría, incluidos los físicos.

Añadir un nodo de dispositivo

Requisitos: el servicio Node-RED activado (véase «Node-RED» arriba), un servidor activado y el dispositivo creado en el espacio de trabajo Dispositivos.

  1. En el editor de Node-RED, arrastre el nodo del tipo de dispositivo desde la categoría Hypervisu de la paleta hasta el flujo.
  2. Haga doble clic en el nodo. El diálogo muestra las estancias, categorías y dispositivos de la instalación.
  3. Elija Room, después Category y luego Widget (el dispositivo). Cada lista filtra la siguiente. El dispositivo debe ser del tipo del nodo: un nodo Dimmer solo muestra reguladores.
  4. Compruebe Description y la lista de objetos situada debajo: muestran los objetos del dispositivo con sus Object IDs, para confirmar que ha seleccionado el dispositivo correcto.
  5. Name to display se rellena automáticamente como «Room - Device». Cámbielo si desea otra etiqueta en el lienzo.
  6. Pulse Done.
  7. Conecte un nodo inject (o cualquier nodo que genere un valor) a la entrada y un nodo debug a cada salida que desee observar.
  8. Pulse Deploy.
El diálogo abierto del nodo Light Switch.

Si un dispositivo recién creado no aparece en las listas, reinicie los flujos (menú Deploy → Restart Flows), recargue la página del editor y abra de nuevo el diálogo.

Mensajes de entrada y salida

Un mensaje dirigido a un nodo de dispositivo contiene dos propiedades:

PropiedadContenido
msg.inputTargetEl objeto del dispositivo al que se destina el valor, identificado por su nombre — por ejemplo Switch On/OFF o Dimming setpoint. Los nombres de cada nodo figuran en «Referencia de nodos», más abajo. Utilice un nodo Input Target para definirlo (véase «El nodo Input Target»).
msg.payloadEl valor: true / false, un número, un texto o un objeto RGB {"red": 255, "green": 120, "blue": 0}.

Un mensaje emitido por una salida contiene el valor en msg.payload y el Object ID del objeto en msg.topic. La salida n corresponde al destino n de la lista del nodo, en el mismo orden.

Los destinos de un nodo son de dos tipos:

  • Comandos (Switch On/OFF, Dimming setpoint, Up/Down output…) — enviarlos controla el dispositivo, igual que pulsar en la aplicación.
  • Realimentaciones (Feedback, Status feedback, Actual setpoint, Temperature…) — el estado que comunica el dispositivo. Escribir desde un flujo actualiza el valor que muestra HyperVisu; no se envía nada al dispositivo.

Cuándo se activan las salidas:

Salida de un…Se activa cuando
Destino de comandoel flujo envía ese destino (el valor sale de inmediato); la aplicación, un escenario, una automatización u otro flujo controla el dispositivo — solo cuando cambia el valor.
Destino de realimentaciónel dispositivo comunica un valor — siempre, aunque se repita.

ℹ️ Nota: los nombres distinguen mayúsculas y minúsculas. Un mensaje con un nombre desconocido, o sin msg.inputTarget en un nodo que lo necesita, se ignora sin error — por ejemplo Switch ON/OFF en lugar de Switch On/OFF.

Node-RED como controlador de dispositivo

Node-RED puede encargarse de un dispositivo para el que HyperVisu no dispone de protocolo:

  1. Cree un dispositivo virtual del tipo adecuado (véase «Dispositivos virtuales» arriba).
  2. Añada su nodo a un flujo. Conecte las salidas de comando a los nodos que se comunican con el dispositivo real (HTTP, MQTT, serie…).
  3. Conecte las respuestas del dispositivo real de vuelta al nodo mediante un nodo Input Target configurado con el destino de realimentación correspondiente.

Los residentes utilizan el dispositivo en las aplicaciones como siempre; el flujo transmite los comandos y devuelve el estado.

La barra lateral de depuración tras inyectar «ON» en el nodo Light Switch.

El nodo Input Target

El nodo Input Target define msg.inputTarget a partir de una lista para que no tenga que escribir los nombres.

  1. Arrastre un nodo Input Target entre el origen del valor y el nodo de dispositivo.
  2. Haga doble clic en él.
  3. En Widget, elija el tipo de dispositivo (Dimmer, Shutter/Blind, Audio…).
  4. En Input, elija el destino. La lista muestra los destinos de ese tipo en el orden de las salidas del nodo de dispositivo.
  5. Rellene Name si lo desea. Sin nombre, el nodo muestra el nombre del destino en el lienzo.
  6. Pulse Done y después Deploy.
El diálogo abierto del nodo Input Target.

El nodo reenvía cada mensaje añadiendo msg.inputTarget y muestra debajo el último valor: un punto verde con Value: …, o un anillo rojo con No input target selected cuando Input está vacío. Un nodo de dispositivo suele tener delante varios nodos Input Target, uno por destino utilizado.

💡 Consejo: en un nodo function, defina usted mismo la misma propiedad — msg.inputTarget = "Dimming setpoint"; msg.payload = 40; return msg;. Una función puede enviar después varios destinos seguidos con node.send().

Referencia de nodos

Cada entrada enumera los destinos en el orden de las salidas. C = comando, F = realimentación. Los ejemplos proceden de un flujo de prueba con dispositivos virtuales: nodos inject a la izquierda, nodos Input Target en el centro, el nodo de dispositivo y un nodo debug por salida a la derecha.

Importar un ejemplo

Cada ejemplo siguiente está disponible como archivo para importar en su propio Node-RED. Los nodos de dispositivo de estos archivos no están vinculados a ningún dispositivo: muestran «(set device)» en su nombre.

  1. Descargue el archivo de ejemplo.
  2. En el editor de Node-RED, abra el menú principal (☰) y elija Import.
  3. Pulse select a file to import y elija el archivo, o pegue su contenido en el diálogo.
  4. Elija current flow o new flow, pulse Import y después haga clic en el lienzo para colocar el grupo.
  5. Haga doble clic en el nodo de dispositivo y elija Room, Category y Widget de su instalación (véase «Añadir un nodo de dispositivo»). Para Global Lights y Global Shutters, elija una estancia o categoría; para Scenario, un escenario. Pulse Done.
  6. Pulse Deploy.

⚠️ Advertencia: los nodos inject de un ejemplo controlan el dispositivo en cuanto los pulsa. Vincule primero los ejemplos a un dispositivo de prueba o virtual y seleccione el dispositivo antes de desplegar — un nodo sin dispositivo solo registra errores.

Pulsador

EntradaSalida
Cualquier mensaje — no se necesitan msg.inputTarget ni msg.payload1 · el valor enviado, cada vez que se utiliza el pulsador (aplicación, escenario o flujo), una vez que lo tiene el servidor

El subtipo del dispositivo determina el valor: ON envía true, OFF envía false, Toggle envía lo contrario del último valor.

El ejemplo Pushbutton.

Pushbutton.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Interruptor de luz e interruptor

#DestinoTipoValor
1Switch On/OFFCtrue / false
2FeedbackFtrue / false
El ejemplo Light Switch.

Light-Switch.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

El ejemplo Switch.

Switch.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Salida analógica

EntradaSalida
Un número en msg.payload, dentro del rango del dispositivo; msg.inputTarget es opcional (Analog Output)1 · Comando — el valor, cada vez que se controla el dispositivo (aplicación, escenario, automatización o flujo)
El ejemplo Analog Output.

Analog-Output.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Persiana / veneciana

#DestinoTipoValor
1Up/Down outputCfalse = subir, true = bajar
2Stop outputCtrue = detener
3Blind Position inputFposición 0–100 %
4Blind Position outputCposición 0–100 %
5Moving Up inputFtrue durante la subida
6Moving Down inputFtrue durante la bajada
7Slat Position inputFángulo de lamas 0–100 %
8Slat Position outputCángulo de lamas 0–100 %

Las posiciones siguen la regla de HyperVisu: 100 % significa completamente cerrado. Los destinos de lamas solo existen en persianas con lamas. Las salidas 1 y 2 se activan con cada comando, aunque el valor se repita.

El ejemplo Shutter / Blind.

Shutter-Blind.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Controlador de temperatura

#DestinoTipoValor
1SetpointC°C
2TemperatureFtemperatura medida, °C
3Actual setpointF°C
4Mode SelectionCnúmero de modo: 1 Confort, 2 Espera, 3 Noche
5Actual modeFnúmero de modo
El ejemplo Temperature Controller.

Temperature-Controller.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Regulador

#DestinoTipoValor
1Switch On/OFFCtrue / false
2Status feedbackFtrue / false
3Dimming setpointC0–100 %
4Dimming feedbackF0–100 %
El ejemplo Dimmer.

Dimmer.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Regulador RGB

#DestinoTipoValor
1Switch On/OFFCtrue / false
2Status feedbackFtrue / false
3RGB setpointC{"red": 0–255, "green": 0–255, "blue": 0–255}
4RGB feedbackFmismo formato
El ejemplo RGB Dimmer.

RGB-Dimmer.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Regulador de blanco ajustable

#DestinoTipoValor
1Switch On/OFFCtrue / false
2Status feedbackFtrue / false
3Dimming setpointCluminosidad 0–100 %
4Dimming feedbackFluminosidad
5Temperature setpointCtemperatura de color, dentro del rango del objeto del dispositivo
6Temperature feedbackFtemperatura de color
El ejemplo Tunable White Dimmer.

Tunable-White-Dimmer.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Entrada analógica y entrada digital

NodoEntradaSalida
Analog InputUn número en msg.payload, dentro del rango del dispositivo; msg.inputTarget opcional (Analog Input)1 · el valor, cada vez que el dispositivo comunica uno
Digital Inputtrue / false; msg.inputTarget opcional (Digital Input)1 · el estado, cada vez que el dispositivo comunica uno

Son mediciones: un valor escrito por un flujo sale por la salida solo después de que el servidor lo haya almacenado, no cuando lo envía el flujo.

El ejemplo Analog Input.

Analog-Input.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

El ejemplo Digital Input.

Digital-Input.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Entrada de texto

EntradaSalida
Un texto en msg.payload; msg.inputTarget opcional (Text)1 · el texto, cada vez que cambia en el servidor

El nodo solo acepta textos de un flujo para un dispositivo de texto VIRTUAL. En KNX, un texto (DPT 16) contiene como máximo 14 caracteres.

El ejemplo Text Input.

Text-Input.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Alarma

#DestinoTipoValor
1Arm CommandCsiempre envía true, independientemente de la carga útil
2Partial Arm CommandCsiempre envía true
3Disarm CommandCsiempre envía true
4Armed StatusFtrue / false
5Partial Armed StatusFtrue / false
6Disarmed StatusFtrue / false
7Alarm StatusFtrue cuando se dispara la alarma

No se solicita PIN, aunque la alarma esté protegida con uno.

El ejemplo Alarm.

Alarm.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Audio

#DestinoTipoValor
1Volume setpointC0–100
2Volume feedbackF0–100
3Zone On/OffCtrue / false
4Zone feedbackFtrue / false
5Mute On/OffCtrue / false
6Mute feedbackFtrue / false
7Play/StopCtrue = reproducir, false = detener
8Play/Stop feedbackFtrue / false
9Source selectionCnúmero de fuente
10Source feedbackFnúmero de fuente
11Previous/NextCfalse = anterior, true = siguiente
12Track TitleFtexto
13Track ArtistFtexto

La salida 11 se activa con cada pulsación, aunque el valor se repita.

El ejemplo Audio.

Audio.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Ventilación

#DestinoTipoValor
1Auto On/OffCtrue / false
2Auto feedbackFtrue / false
3Slow On/OffCtrue / false
4Slow feedbackFtrue / false
5Medium On/OffCtrue / false
6Medium feedbackFtrue / false
7High On/OffCtrue / false
8High feedbackFtrue / false
9BoostCtrue / false
10Boost feedbackFtrue / false
El ejemplo Ventilation.

Ventilation.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Aire acondicionado

#DestinoTipoValor
1On/OffCtrue / false
2On/Off feedbackFtrue / false
3Heating ModeCtrue
4Heating feedbackFtrue / false
5Cooling ModeCtrue
6Cooling feedbackFtrue / false
7Auto ModeCtrue
8Auto feedbackFtrue / false
9SetpointC°C
10Actual setpointF°C
11TemperatureFtemperatura medida, °C
El ejemplo Air Conditioning.

Air-Conditioning.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Un segundo ejemplo Air Conditioning en el mismo dispositivo, con nodos Input Target.

Air-Conditioning-Input-Targets.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Cerradura de puerta

#DestinoTipoValor
1Lock/UnlockCtrue = bloquear, false = desbloquear
2FeedbackFtrue / false
El ejemplo Door Lock.

Door-Lock.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Contador

#DestinoTipoValor
1Power/FlowFnúmero (W, o caudal para agua y gas)
2Energy/VolumeFnúmero (kWh, o volumen)
3Exported EnergyFnúmero (kWh)
4State Of ChargeFnúmero (%)

Sin msg.inputTarget, el valor se dirige a Power/Flow. Un contador solo tiene los objetos de su función (véase «Descripción general de los tipos de widgets»): un contador de red no tiene estado de carga. Un valor escrito por un flujo sale por la salida una vez que el servidor lo ha almacenado.

El ejemplo Meter.

Meter.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Cargador

#DestinoTipoValor
1Start/StopCtrue = iniciar, false = detener
2ChargingFtrue / false
3Charging CurrentCA
4ConnectedFtrue cuando hay un vehículo conectado
5ErrorFtrue / false
6Actual PowerFW
7Last EnergyFkWh de la última sesión
8Last durationFduración de la última sesión
El ejemplo Charger.

Charger.json — impórtelo en Node-RED, haga doble clic en el nodo de dispositivo para elegir su dispositivo y pulse Deploy.

Global Lights, Global Shutters y Scenario

NodoEn el diálogoEntradaSalida
Global LightsRoom o Category (elegir uno vacía el otro)msg.inputTarget = On o Off; se ignora la carga útil—
Global ShuttersRoom o Categorymsg.inputTarget = Up o Down—
ScenarioScenarioCualquier mensaje ejecuta el escenario—

Los nodos globales envían el mismo comando que los botones globales de la aplicación: todas las luces o todas las persianas de la estancia o categoría.

El ejemplo de comandos globales.

Global-Commands-and-Scenario.json — impórtelo en Node-RED, haga doble clic en cada nodo para elegir la estancia o categoría (nodos globales) o el escenario y pulse Deploy.

El diálogo del nodo Global Lights.

ℹ️ Nota: al volver a abrir un nodo Global Lights o Global Shutters, ambas listas muestran un valor: la lista Category simplemente muestra su primera entrada. El nodo actúa sobre la lista modificada por última vez: aquí, la estancia, como indica su nombre. Para cambiar a una categoría, elíjala en Category (la estancia se vacía).

Preguntas frecuentes

¿Qué es un dispositivo virtual?

Es un widget cuyo estado se conserva en el servidor sin un enlace de protocolo físico. Puede representar un indicador, un grupo, un valor calculado o un punto Node-RED.

¿Cómo conservo un valor virtual después de reiniciar?

Active Persist State en su objeto de comunicación. Un objeto virtual no tiene ajuste de valor predeterminado.

¿Dónde abro Node-RED?

Active el servicio opcional Node-RED en la página Services y reinicie el servidor. Una vez en ejecución, su entrada aparece en APPS en la barra lateral de administración y abre el editor de flujos en una pestaña nueva.

¿Cuándo conviene usar Node-RED en lugar del motor de lógica?

Utilice el motor de lógica para la lógica habitual de automatización de edificios con validación y supervisión. Node-RED resulta adecuado para integraciones y flujos personalizados que no encajan en esos bloques.

¿Por qué un nodo HyperVisu ignora mi mensaje?

El nombre del destino en msg.inputTarget falta, está mal escrito o tiene mayúsculas incorrectas — por ejemplo Switch ON/OFF en lugar de Switch On/OFF. Defínalo con un nodo Input Target. Compruebe también que el nodo está vinculado a un dispositivo: un ejemplo importado muestra «(set device)» hasta que elija uno.

¿Los flujos necesitan el PIN de la alarma?

No. Un flujo arma y desarma una alarma sin PIN, aunque esté protegida, igual que los escenarios y las automatizaciones.

Seguir explorando

Encuentre las demás guías de este producto en la documentación.

Volver a Integraciones