Integración TCP/UDP
El protocolo TCP/UDP está pensado para dispositivos que utilizan un lenguaje de comandos sencillo directamente sobre un socket de red, sin API web ni modelo de registros: reproductores y matrices de audio profesionales (AUDAC XMP44 y módulos SourceCon), proyectores (PJLink), pantallas y amplificadores detrás de pasarelas RS-232 a IP, y placas de microcontroladores personalizadas. Usted define las tramas de comandos que HyperVisu envía al cambiar un valor, los patrones que extraen valores de las tramas de respuesta que devuelve el equipo y las tramas de consulta opcionales para el sondeo. Toda la lógica específica del equipo se gestiona en la configuración, sin requerir adaptaciones en el servidor.
Cada conexión corresponde a un dispositivo, ya sea mediante TCP (una única conexión persistente, mantenida abierta y reconectada automáticamente) o UDP (datagramas). En TCP, todos los objetos del dispositivo comparten ese único socket, lo cual es imprescindible para equipos que solo admiten un cliente simultáneo (como el XMP44).
Requisitos previos: la dirección IP y el puerto del dispositivo, su manual de comandos (sintaxis de tramas, delimitador, comandos y respuestas de estado) y determinar si envía cambios de estado de forma autónoma o requiere sondeo.
Conexiones. TCP/UDP admite múltiples conexiones: una conexión por dispositivo (consulte «Conexiones»). Campos:
| Campo | Descripción |
|---|---|
| Dirección del dispositivo | Dirección IP o nombre de host del dispositivo. |
| Puerto | El puerto TCP o UDP en el que escucha el dispositivo (AUDAC XMP44: 5001). |
| Intervalo de sondeo (segundos) | Frecuencia de lectura del dispositivo. 0 para un dispositivo que envía su estado de forma autónoma. |
| Transporte | TCP · conexión persistente o UDP · datagramas. |
| Delimitador de trama | Carácter o secuencia que separa dos tramas; \r\n en la mayoría de protocolos de texto. |
| Codificación de la carga útil | Texto ASCII para protocolos de texto, Bytes HEX para protocolos binarios. |
| Puerto de escucha | Solo UDP. Para dispositivos que envían datos a un puerto fijo; si se deja vacío, las respuestas se reciben en el puerto de origen del servidor. |
| Trama de latido / Cada | Solo TCP, opcional. Trama enviada durante la inactividad para evitar que el dispositivo cierre la conexión (mínimo cada 5 s); la vista previa de Trama enviada muestra los caracteres de control. |
| Tiempo de espera de conexión | Tiempo máximo de espera para que el dispositivo acepte la conexión (ms, por defecto 5000). |
| Retardo entre comandos | Muchos dispositivos descartan comandos consecutivos muy rápidos; aumente este valor si se ignoran comandos (ms, por defecto 50). |
| Leer todo al conectar | Activado: HyperVisu envía todas las consultas una vez tan pronto como el dispositivo responde, mostrando el estado real en la aplicación sin esperar al primer ciclo de sondeo. |
La ventana Añadir conexión solicita el Nombre de la instancia, la Dirección del dispositivo, el Puerto, el Intervalo de sondeo (segundos), el Transporte y el Delimitador de trama (valores predeterminados 30, TCP · conexión persistente y \r\n). El resto de campos se encuentra en Tramas y temporización dentro de la conexión guardada: seleccione la nueva conexión, ajuste los parámetros y haga clic en Guardar conexión.
El botón Probar en la ventana Añadir conexión abre un socket hacia la dirección introducida. Esto confirma que el dispositivo es accesible, no que entienda la sintaxis de las tramas. En una conexión ya guardada, mientras el servicio mantiene abierta la única conexión del dispositivo, Probar informa del estado en tiempo real y del recuento de tramas entrantes y salientes sin abrir un segundo socket.

Vinculación de un objeto (consulte «Vinculación TCP/UDP» más abajo). Para cada objeto se define una Clave (Key): un texto breve que contienen todas las respuestas asociadas a este valor. Solo las tramas entrantes que contengan dicha clave se evaluarán con el patrón de coincidencia del objeto (en AUDAC, el identificador de respuesta: OG1, FREQ2). La comprobación distingue mayúsculas de minúsculas y la clave no puede contener :. Dos objetos pueden compartir la misma clave, por ejemplo un objeto de comando y su objeto de estado. La interfaz almacena <conexión>:<clave>. El resto corresponde a la cadena de tipo de datos del objeto, generada a partir de los campos del editor:
| Campo | Almacenado como | Significado |
|---|---|---|
| Codificación de la carga útil | ASCII / HEX | Primer elemento de la cadena. No modifica el formato de envío ni de recepción: la codificación efectiva se define en la conexión, dentro de Tramas y temporización. |
| Plantilla de comando | SEND= | Trama enviada al cambiar el valor (objetos Salida y Entrada/Salida). ${value} se sustituye por el valor. |
| Comandos distintos para ON y OFF → Comando para ON / Comando para OFF | SEND1= / SEND0= | Para objetos booleanos cuyos dispositivos utilizan dos comandos independientes (SPPLAY1 / SPSTOP1) en lugar de un único comando con argumento 0/1. Deje OFF vacío para pulsadores. |
| Plantilla de consulta | POLL= | Enviada en cada ciclo de sondeo y una vez al conectar (objetos Entrada y Entrada/Salida). Dejar vacío si el dispositivo envía datos de forma autónoma. |
| Patrón de coincidencia | MATCH= | Aplicado a cada trama entrante que contenga la clave; el valor capturado se asigna al objeto. Sin este patrón, un objeto de entrada nunca recibirá valores. |
| Escala / Offset | SCALE= / OFFSET= | Lectura: valor = bruto × escala + offset; la escritura aplica la operación inversa. Solo para capturas numéricas. |
| Patrón de confirmación / Tiempo de espera de confirmación (ms) | ACK= / ACKTIMEOUT= | Opcional. Si se define, la escritura solo se considera correcta cuando una trama entrante coincide con el patrón dentro del tiempo límite (por defecto 2000 ms). |
Las plantillas admiten ${value}, así como ${value:d} para redondear un valor escalado a un número entero (un control deslizante de 0–100 % en un dispositivo que requiere enteros), ${value:02d} para rellenar con ceros a la izquierda y ${value:1f} para un número fijo de decimales; en modo HEX se dispone de ${value:u8}, ${value:u16be}, ${value:u16le}, ${value:u32be} y ${value:u32le} para bytes de longitud fija. \r, \n, \t y \xNN son secuencias de escape de bytes. En modo ASCII, si una plantilla no incluye el delimitador, este se añade automáticamente.
Los patrones de coincidencia utilizan los siguientes identificadores; cualquier otro carácter se evalúa de forma literal:
| Identificador | Captura / función |
|---|---|
\v | un número |
\h | valor hexadecimal, interpretado como número |
\a | texto, hasta el siguiente carácter literal del patrón |
\iTexto\i | omite la cadena "Texto" |
\sN | omite N caracteres |
\d \w \. | un dígito / una palabra / cualquier carácter |
El editor muestra la Trama enviada visualizando los caracteres de control (# | D001 | hv | SOG1 | 28 | U | <CR><LF>), junto con la cadena resultante guardada. La Trama enviada es una vista previa de prueba, no un registro de tráfico: cualquier ${value…} se sustituye por el valor de muestra 28, sin aplicar el formato ni el escalado, y en objetos con comandos ON/OFF independientes solo se muestra el comando ON. Tampoco incluye el delimitador que el servidor añade automáticamente en modo ASCII. Compruebe siempre el formato real con el dispositivo.

Comportamiento del sistema
- Dirección. Los objetos de Entrada procesan patrones (y realizan sondeo si tienen plantilla de consulta); los de Salida envían tramas; los de Entrada/Salida realizan ambas funciones (la respuesta de confirmación del dispositivo actualiza el estado, de forma análoga a los objetos de estado en KNX).
- Una trama para múltiples objetos. Cada trama recibida se comprueba con todos los objetos de entrada de la conexión que contengan su clave, lo que permite actualizar varios objetos con una sola trama. Las plantillas de consulta idénticas se envían una única vez por ciclo de sondeo.
- TCP. Tras un error de comunicación, la reconexión se realiza con intervalos crecientes; al restablecer la conexión, se relanzan las consultas si Leer todo al conectar está activo. Las tramas salientes se gestionan mediante una cola respetando el Retardo entre comandos.
- UDP. Cada datagrama equivale a una trama. Los envíos no solicitados requieren configurar el Puerto de escucha.
- Los comandos enviados mientras el dispositivo no está disponible fallan sin bloquear el sistema; la aplicación mantiene el último estado registrado.
Ejemplo práctico: reproductor multimedia AUDAC XMP44
El XMP44 escucha en el puerto TCP 5001, admite un solo cliente y utiliza tramas con la estructura # | D001 | <origen> | <comando> | <argumento> | <checksum> | <CR><LF> (se acepta el carácter literal U como suma de control). El ajuste de ganancia se realiza mediante SOG1 | <arg> con arg = 8 − dB; el equipo responde con una trama de estado … | OG1 | <arg> | …, que también emite automáticamente al modificar la ganancia desde el panel frontal. La reproducción y parada emplean dos comandos independientes (SPPLAY1, SPSTOP1).
-
Cree una conexión TCP/UDP (consulte «Conexiones»): dirección
192.168.1.60, puerto5001, transporte TCP, delimitador\r\n, intervalo de sondeo30. Haga clic en Probar y después en Crear conexión. Seleccione la conexión creada y, en Tramas y temporización, mantenga activado Leer todo al conectar y configure la trama de latido# | D001 | hv | GTPS | 0 | U | \r\ncada120s. Haga clic en Guardar conexión. -
En Dispositivos, añada un widget de Audio «Reproductor XMP44» y seleccione esta conexión en Protocolo.
-
En el objeto volumen (Entrada/Salida): clave
OG1, plantilla de comando# | D001 | hv | SOG1 | ${value:d} | U | \r\n, plantilla de consulta# | D001 | hv | GOG1 | 0 | U | \r\n, patrón de coincidencia\i | OG1 | \i\v, escala-1, offset8(de este modo, −20 dB se envía como28y un valor recibido de28se interpreta como −20 dB). -
En el objeto reproducción (Salida, booleano): clave
PLAY1, active Comandos distintos para ON y OFF: ON# | D001 | hv | SPPLAY1 | 0 | U | \r\n, OFF# | D001 | hv | SPSTOP1 | 0 | U | \r\n. -
En el objeto título de pista (Entrada, texto): clave
SON1, consulta# | D001 | hv | GSON1 | 0 | U | \r\n, patrón\i | SON1 | \i\a |. -
Haga clic en Guardar objeto en cada uno de ellos, pulse Aplicar cambios en la barra lateral y confirme. Al mover el regulador de volumen se envía
SOG1, la respuestaOG1confirma el nivel en la interfaz y cualquier cambio físico en el panel frontal se actualiza en la aplicación.
💡 Consejo: Mantenga a mano la tabla de comandos del dispositivo: la clave corresponde al identificador de respuesta (
OG1), que en AUDAC difiere del comando de control (SOG1).
Vinculación TCP/UDP
Los objetos TCP/UDP se configuran en el diálogo de ajustes del objeto (consulte «Ajustes de objetos, registro y notificaciones»). Secciones disponibles:
Direccionamiento de trama
| Campo | Descripción |
|---|---|
| Clave | Texto identificativo presente en cada respuesta asociada a este objeto (ej. OG1). Solo las tramas que incluyan esta clave se evaluarán con el patrón de coincidencia; distingue mayúsculas de minúsculas. No admite :. La clave puede ser compartida entre objetos, como un comando y su estado correspondiente. La dirección guardada es <conexión>:<clave>. |
| Codificación de la carga útil | Texto ASCII para protocolos de texto, Bytes HEX para binarios. |
Comandos enviados (objetos de salida)
| Campo | Descripción |
|---|---|
| Plantilla de comando | Enviada al cambiar el valor. ${value} se sustituye por el valor (${value:d} redondea a entero); \r, \n, \xNN son secuencias de escape. |
| Comandos distintos para ON y OFF | Objetos booleanos: habilita Comando para ON y Comando para OFF en equipos con comandos independientes en lugar de parámetros 0/1. Deje OFF vacío para pulsadores. |
| Patrón de confirmación / Tiempo de espera (ms) | Opcional. Si se define, la escritura solo se da por correcta cuando se recibe una trama que coincide con el patrón dentro del tiempo configurado. |
Valores leídos (objetos de entrada)
| Campo | Descripción |
|---|---|
| Plantilla de consulta | Enviada en cada sondeo y al conectar. Dejar en blanco si el dispositivo transmite cambios de forma autónoma. |
| Patrón de coincidencia | Evaluado en cada trama recibida que contenga la clave; extrae el valor del objeto. Identificadores: \v número · \h hex a número · \a texto hasta el siguiente literal · \iTexto\i salta "Texto" · \sN salta N caracteres · \d \w \. dígito / palabra / cualquier carácter. Sin patrón de coincidencia, el objeto no recibe datos. |
| Escala / Offset | Lectura: valor = bruto × escala + offset; la escritura aplica el cálculo inverso. |
Debajo de las secciones, Trama enviada muestra la trama resultante de prueba con los caracteres de control visibles (… | 28 | U | <CR><LF>), y Almacenado como detalla la cadena de configuración guardada. Las reglas de sintaxis de patrones, plantillas y el ejemplo práctico de AUDAC se detallan en la sección superior.
