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:
| Ajuste | Significado |
|---|---|
| Range - Min / Range - Max | Los 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 State | Si 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.

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.

| Nodo | Tipo de dispositivo (véase «Descripción general de los tipos de widgets») | Entradas → salidas |
|---|---|---|
| Pushbutton | Pulsador | Cualquier mensaje → 1 salida |
| Light Switch, Switch | Interruptor de luz, interruptor | 2 destinos → 2 salidas |
| Analog Output | Salida analógica | Un número → 1 salida |
| Shutter / Blind | Persiana / veneciana | 8 destinos → 8 salidas |
| Temperature Controller | Temperatura / termostato | 5 destinos → 5 salidas |
| Dimmer | Regulador | 4 destinos → 4 salidas |
| RGB Dimmer | Regulador RGB | 4 destinos → 4 salidas |
| Tunable White Dimmer | Regulador de blanco ajustable | 6 destinos → 6 salidas |
| Analog Input | Entrada analógica | Un número → 1 salida |
| Digital Input | Entrada digital | true / false → 1 salida |
| Text Input | Entrada de texto | Un texto → 1 salida |
| Alarm | Alarma | 7 destinos → 7 salidas |
| Audio | Audio | 13 destinos → 13 salidas |
| Ventilation | Ventilación | 10 destinos → 10 salidas |
| Air Conditioning | Aire acondicionado | 11 destinos → 11 salidas |
| Door Lock | Cerradura de puerta | 2 destinos → 2 salidas |
| Meter | Contador | 4 destinos → 4 salidas |
| Charger | Cargador de vehículo eléctrico | 8 destinos → 8 salidas |
| Global Lights, Global Shutters | Todas las luces o persianas de una estancia o categoría | Encendido / apagado, subida / bajada — sin salida |
| Scenario | Un escenario | Cualquier 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.

⚠️ 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.
- En el editor de Node-RED, arrastre el nodo del tipo de dispositivo desde la categoría Hypervisu de la paleta hasta el flujo.
- Haga doble clic en el nodo. El diálogo muestra las estancias, categorías y dispositivos de la instalación.
- 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.
- 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.
- Name to display se rellena automáticamente como «Room - Device». Cámbielo si desea otra etiqueta en el lienzo.
- Pulse Done.
- Conecte un nodo inject (o cualquier nodo que genere un valor) a la entrada y un nodo debug a cada salida que desee observar.
- Pulse Deploy.

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:
| Propiedad | Contenido |
|---|---|
msg.inputTarget | El 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.payload | El 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 comando | el 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ón | el 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.inputTargeten un nodo que lo necesita, se ignora sin error — por ejemploSwitch ON/OFFen lugar deSwitch On/OFF.
Node-RED como controlador de dispositivo
Node-RED puede encargarse de un dispositivo para el que HyperVisu no dispone de protocolo:
- Cree un dispositivo virtual del tipo adecuado (véase «Dispositivos virtuales» arriba).
- 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…).
- 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.

El nodo Input Target
El nodo Input Target define msg.inputTarget a partir de una lista para que no tenga que escribir los nombres.
- Arrastre un nodo Input Target entre el origen del valor y el nodo de dispositivo.
- Haga doble clic en él.
- En Widget, elija el tipo de dispositivo (Dimmer, Shutter/Blind, Audio…).
- En Input, elija el destino. La lista muestra los destinos de ese tipo en el orden de las salidas del nodo de dispositivo.
- Rellene Name si lo desea. Sin nombre, el nodo muestra el nombre del destino en el lienzo.
- Pulse Done y después Deploy.

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 connode.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.
- Descargue el archivo de ejemplo.
- En el editor de Node-RED, abra el menú principal (☰) y elija Import.
- Pulse select a file to import y elija el archivo, o pegue su contenido en el diálogo.
- Elija current flow o new flow, pulse Import y después haga clic en el lienzo para colocar el grupo.
- 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.
- 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
| Entrada | Salida |
|---|---|
Cualquier mensaje — no se necesitan msg.inputTarget ni msg.payload | 1 · 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.

Interruptor de luz e interruptor
| # | Destino | Tipo | Valor |
|---|---|---|---|
| 1 | Switch On/OFF | C | true / false |
| 2 | Feedback | F | true / false |


Salida analógica
| Entrada | Salida |
|---|---|
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) |

Persiana / veneciana
| # | Destino | Tipo | Valor |
|---|---|---|---|
| 1 | Up/Down output | C | false = subir, true = bajar |
| 2 | Stop output | C | true = detener |
| 3 | Blind Position input | F | posición 0–100 % |
| 4 | Blind Position output | C | posición 0–100 % |
| 5 | Moving Up input | F | true durante la subida |
| 6 | Moving Down input | F | true durante la bajada |
| 7 | Slat Position input | F | ángulo de lamas 0–100 % |
| 8 | Slat Position output | C | á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.

Controlador de temperatura
| # | Destino | Tipo | Valor |
|---|---|---|---|
| 1 | Setpoint | C | °C |
| 2 | Temperature | F | temperatura medida, °C |
| 3 | Actual setpoint | F | °C |
| 4 | Mode Selection | C | número de modo: 1 Confort, 2 Espera, 3 Noche |
| 5 | Actual mode | F | número de modo |

Regulador
| # | Destino | Tipo | Valor |
|---|---|---|---|
| 1 | Switch On/OFF | C | true / false |
| 2 | Status feedback | F | true / false |
| 3 | Dimming setpoint | C | 0–100 % |
| 4 | Dimming feedback | F | 0–100 % |

Regulador RGB
| # | Destino | Tipo | Valor |
|---|---|---|---|
| 1 | Switch On/OFF | C | true / false |
| 2 | Status feedback | F | true / false |
| 3 | RGB setpoint | C | {"red": 0–255, "green": 0–255, "blue": 0–255} |
| 4 | RGB feedback | F | mismo formato |

Regulador de blanco ajustable
| # | Destino | Tipo | Valor |
|---|---|---|---|
| 1 | Switch On/OFF | C | true / false |
| 2 | Status feedback | F | true / false |
| 3 | Dimming setpoint | C | luminosidad 0–100 % |
| 4 | Dimming feedback | F | luminosidad |
| 5 | Temperature setpoint | C | temperatura de color, dentro del rango del objeto del dispositivo |
| 6 | Temperature feedback | F | temperatura de color |

Entrada analógica y entrada digital
| Nodo | Entrada | Salida |
|---|---|---|
| Analog Input | Un 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 Input | true / 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.


Entrada de texto
| Entrada | Salida |
|---|---|
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.

Alarma
| # | Destino | Tipo | Valor |
|---|---|---|---|
| 1 | Arm Command | C | siempre envía true, independientemente de la carga útil |
| 2 | Partial Arm Command | C | siempre envía true |
| 3 | Disarm Command | C | siempre envía true |
| 4 | Armed Status | F | true / false |
| 5 | Partial Armed Status | F | true / false |
| 6 | Disarmed Status | F | true / false |
| 7 | Alarm Status | F | true cuando se dispara la alarma |
No se solicita PIN, aunque la alarma esté protegida con uno.

Audio
| # | Destino | Tipo | Valor |
|---|---|---|---|
| 1 | Volume setpoint | C | 0–100 |
| 2 | Volume feedback | F | 0–100 |
| 3 | Zone On/Off | C | true / false |
| 4 | Zone feedback | F | true / false |
| 5 | Mute On/Off | C | true / false |
| 6 | Mute feedback | F | true / false |
| 7 | Play/Stop | C | true = reproducir, false = detener |
| 8 | Play/Stop feedback | F | true / false |
| 9 | Source selection | C | número de fuente |
| 10 | Source feedback | F | número de fuente |
| 11 | Previous/Next | C | false = anterior, true = siguiente |
| 12 | Track Title | F | texto |
| 13 | Track Artist | F | texto |
La salida 11 se activa con cada pulsación, aunque el valor se repita.

Ventilación
| # | Destino | Tipo | Valor |
|---|---|---|---|
| 1 | Auto On/Off | C | true / false |
| 2 | Auto feedback | F | true / false |
| 3 | Slow On/Off | C | true / false |
| 4 | Slow feedback | F | true / false |
| 5 | Medium On/Off | C | true / false |
| 6 | Medium feedback | F | true / false |
| 7 | High On/Off | C | true / false |
| 8 | High feedback | F | true / false |
| 9 | Boost | C | true / false |
| 10 | Boost feedback | F | true / false |

Aire acondicionado
| # | Destino | Tipo | Valor |
|---|---|---|---|
| 1 | On/Off | C | true / false |
| 2 | On/Off feedback | F | true / false |
| 3 | Heating Mode | C | true |
| 4 | Heating feedback | F | true / false |
| 5 | Cooling Mode | C | true |
| 6 | Cooling feedback | F | true / false |
| 7 | Auto Mode | C | true |
| 8 | Auto feedback | F | true / false |
| 9 | Setpoint | C | °C |
| 10 | Actual setpoint | F | °C |
| 11 | Temperature | F | temperatura medida, °C |


Cerradura de puerta
| # | Destino | Tipo | Valor |
|---|---|---|---|
| 1 | Lock/Unlock | C | true = bloquear, false = desbloquear |
| 2 | Feedback | F | true / false |

Contador
| # | Destino | Tipo | Valor |
|---|---|---|---|
| 1 | Power/Flow | F | número (W, o caudal para agua y gas) |
| 2 | Energy/Volume | F | número (kWh, o volumen) |
| 3 | Exported Energy | F | número (kWh) |
| 4 | State Of Charge | F | nú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.

Cargador
| # | Destino | Tipo | Valor |
|---|---|---|---|
| 1 | Start/Stop | C | true = iniciar, false = detener |
| 2 | Charging | F | true / false |
| 3 | Charging Current | C | A |
| 4 | Connected | F | true cuando hay un vehículo conectado |
| 5 | Error | F | true / false |
| 6 | Actual Power | F | W |
| 7 | Last Energy | F | kWh de la última sesión |
| 8 | Last duration | F | duración de la última sesión |

Global Lights, Global Shutters y Scenario
| Nodo | En el diálogo | Entrada | Salida |
|---|---|---|---|
| Global Lights | Room o Category (elegir uno vacía el otro) | msg.inputTarget = On o Off; se ignora la carga útil | — |
| Global Shutters | Room o Category | msg.inputTarget = Up o Down | — |
| Scenario | Scenario | Cualquier 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.


ℹ️ 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).