Passer au contenu
Elausys

HyperVisu / Intégrations

Intégration TCP/UDP

Pilotez des équipements audiovisuels et des appareils sur mesure via des trames brutes en TCP ou UDP : modèles, motifs d'extraction et scrutation.

elausys · 21 août 2026
Sur cette page

Intégration TCP/UDP

Le protocole TCP/UDP est destiné aux appareils qui communiquent via un jeu de commandes simple directement sur une socket réseau — sans API web ni modèle de registres : lecteurs audio professionnels et matrices (AUDAC XMP44 et modules SourceCon), vidéoprojecteurs (PJLink), écrans et amplificateurs derrière des passerelles RS-232 sur IP, ainsi que cartes à microcontrôleur personnalisées. Vous décrivez les trames de commande que HyperVisu envoie lorsqu'une valeur change, les motifs (patterns) qui extraient les valeurs des trames retournées par l'appareil, et les trames d'interrogation optionnelles pour la scrutation. Toutes les spécificités de l'appareil sont définies dans la configuration, aucune dans le serveur.

Chaque connexion correspond à un appareil, via TCP (une connexion persistante, maintenue ouverte et reconnectée automatiquement) ou UDP (datagrammes). En TCP, tous les objets de l'appareil partagent cette socket unique — ce qu'exigent les équipements qui n'acceptent qu'un seul client (comme le XMP44).

Ce dont vous avez besoin : l'adresse IP et le port de l'appareil, sa documentation de commandes (syntaxe des trames, délimiteur, commandes et retours d'état envoyés), et s'il transmet ses changements d'état spontanément ou sur interrogation.

Connexions. TCP/UDP prend en charge plusieurs connexions : une connexion par appareil (voir « Connexions »). Champs :

ChampDescription
Device addressAdresse IP ou nom d'hôte de l'appareil.
PortLe port TCP ou UDP sur lequel l'appareil écoute (AUDAC XMP44 : 5001).
Poll Interval (seconds)Fréquence de relecture de l'appareil. 0 pour un appareil qui transmet spontanément son état.
TransportTCP · persistent connection ou UDP · datagrams.
Frame delimiterSéparateur de trames — \r\n pour la quasi-totalité des protocoles texte.
Payload encodingASCII text pour les protocoles texte, HEX bytes pour les protocoles binaires.
Listen portUDP uniquement. Pour un appareil qui transmet vers un port fixe ; laissez vide et les réponses reviennent sur le port d'émission du serveur.
Heartbeat frame / EveryTCP uniquement, optionnel. Trame envoyée sur une connexion inactive pour éviter que l'appareil ne la ferme (au moins toutes les 5 s) ; l'aperçu Frame sent l'affiche avec les caractères de contrôle visibles.
Connect timeoutTemps d'attente pour que l'appareil accepte la connexion (ms, par défaut 5000).
Delay between commandsDe nombreux appareils ignorent les commandes envoyées trop rapidement ; augmentez cette valeur si certaines sont ignorées (ms, par défaut 50).
Read everything on connectActivé : HyperVisu envoie toutes les interrogations dès que l'appareil répond, afin que l'application affiche l'état réel sans attendre le premier cycle de scrutation.

La boîte de dialogue Add connection demande le Instance Name, le Device address, le Port, le Poll Interval (seconds), le Transport et le Frame delimiter (valeurs par défaut : 30, TCP · persistent connection et \r\n). Les autres champs se trouvent sous Framing and timing sur la connexion enregistrée : sélectionnez la nouvelle connexion, configurez-les et cliquez sur Save connection.

Le bouton Test dans la boîte de dialogue Add connection ouvre une socket vers l'adresse saisie. Cela confirme que l'appareil est accessible, pas qu'il comprend vos trames. Sur une connexion enregistrée, alors que le service occupe déjà la connexion unique de l'appareil, Test affiche l'état en direct ainsi que le décompte des trames entrantes et sortantes au lieu d'ouvrir une seconde socket.

Éditeur de connexion TCP/UDP.

Liaison d'un objet (voir « Liaison TCP/UDP » ci-dessous). Pour chaque objet, vous définissez une Key — un court texte présent dans chaque réponse contenant cette valeur : seules les trames entrantes contenant la clé sont analysées avec le motif d'extraction de l'objet (pour AUDAC, le nom de la commande de retour : OG1, FREQ2). La comparaison est sensible à la casse et une clé ne peut pas contenir :. Deux objets peuvent partager une clé, par exemple un objet de commande et son objet de retour d'état. L'administration enregistre <connexion>:<clé>. Le reste constitue la chaîne du type de données de l'objet, générée à partir des champs de l'éditeur :

ChampEnregistré sousSignification
Payload encodingASCII / HEXPremier élément de la chaîne. Il ne modifie pas ce qui est envoyé ni la lecture des réponses : l'encodage effectif est celui de la connexion, sous Framing and timing.
Command templateSEND=Envoyé lorsque la valeur change (objets Out et In/Out). ${value} est remplacé par la valeur.
Different commands for ON and OFF → Command for ON / Command for OFFSEND1= / SEND0=Pour les objets booléens dont l'appareil utilise deux commandes distinctes (SPPLAY1 / SPSTOP1) plutôt qu'une seule commande avec un argument 0/1. Laissez OFF vide pour un bouton à action unique.
Query templatePOLL=Envoyé à chaque cycle de scrutation et une fois à la connexion (objets In et In/Out). Laissez vide pour un appareil qui transmet spontanément.
Match patternMATCH=Appliqué à chaque trame entrante contenant la clé ; la valeur capturée devient la valeur de l'objet. Sans ce motif, un objet entrant ne reçoit jamais de valeur.
Scale / OffsetSCALE= / OFFSET=Lecture : valeur = brut × échelle + décalage ; l'écriture utilise l'inverse. Captures numériques uniquement.
Acknowledge pattern / Acknowledge timeout (ms)ACK= / ACKTIMEOUT=Optionnel. Lorsqu'il est défini, l'écriture n'est considérée comme réussie que si une trame correspond au motif dans le délai imparti (par défaut 2000 ms).

Les modèles (templates) utilisent ${value}, ainsi que ${value:d} pour arrondir une valeur mise à l'échelle à un entier (curseur 0–100 % sur un appareil attendant des arguments entiers), ${value:02d} pour un entier complété par des zéros et ${value:1f} pour un nombre fixe de décimales, et en mode HEX ${value:u8}, ${value:u16be}, ${value:u16le}, ${value:u32be}, ${value:u32le} pour des octets de taille fixe. \r, \n, \t et \xNN sont des caractères d'échappement d'octets. En mode ASCII, si le délimiteur est omis dans un modèle, il est ajouté automatiquement.

Les motifs d'extraction (match patterns) utilisent ces identifiants ; tout le reste est comparé littéralement :

IdentifiantCapture / action
\vun nombre
\hhexadécimal, lu comme un nombre
\atexte, jusqu'au caractère littéral suivant dans le motif (pour objets texte)
\iTexte\isaute "Texte"
\sNsaute N caractères
\d \w \.un chiffre / un mot / n'importe quel caractère

L'éditeur affiche Frame sent avec les caractères de contrôle visibles (# | D001 | hv | SOG1 | 28 | U | <CR><LF>), ainsi que la chaîne enregistrée. Frame sent est un aperçu, pas un journal : chaque ${value…} est remplacé par la valeur d'exemple 28, sans le formatage de la valeur ni la mise à l'échelle, et pour un objet avec des commandes ON et OFF distinctes, seule la commande ON est affichée. Il n'affiche pas le délimiteur ajouté automatiquement par le serveur en mode ASCII. Vérifiez une commande et une réponse réelles avec l'appareil.

Éditeur d'objet TCP/UDP pour un objet de gain audio.

Comportements à retenir

  • Direction. Les objets In analysent les retours (et scrutent s'ils ont une requête) ; les objets Out transmettent ; les objets In/Out font les deux — l'écho de l'appareil sert de confirmation, comme pour les objets d'état KNX.
  • Une trame, plusieurs objets. Chaque trame entrante est testée par rapport à tous les objets entrants de la connexion dont elle contient la clé, ainsi une seule trame d'état peut alimenter plusieurs objets. Les modèles d'interrogation identiques sont envoyés une seule fois par cycle de scrutation.
  • TCP. La connexion est rétablie avec des délais croissants après un échec ; lors de la reconnexion, les requêtes sont réexécutées lorsque Read everything on connect est activé. Les trames sortantes passent par une file d'attente espacée par Delay between commands.
  • UDP. Un datagramme équivaut à une trame. Les réceptions spontanées nécessitent la configuration du Listen port.
  • Les commandes envoyées alors que l'appareil est inaccessible échouent sans bloquer le système ; l'application affiche le dernier état connu.

Exemple pratique — Lecteur multimédia AUDAC XMP44

Le XMP44 écoute sur le port TCP 5001, accepte un seul client et communique via des trames # | D001 | <source> | <command> | <argument> | <checksum> | <CR><LF> — la lettre U est acceptée comme somme de contrôle. La définition du gain de sortie s'effectue via SOG1 | <arg> avec arg = 8 − dB ; l'appareil répond par une trame de mise à jour … | OG1 | <arg> | …, qu'il diffuse également lorsque le gain est modifié en façade. La lecture et l'arrêt correspondent à deux commandes distinctes (SPPLAY1, SPSTOP1).

  1. Créez une connexion TCP/UDP (voir « Connexions ») : adresse 192.168.1.60, port 5001, transport TCP, délimiteur \r\n, intervalle de scrutation 30. Cliquez sur Test, puis sur Create connection. Sélectionnez la nouvelle connexion et, sous Framing and timing, laissez Read everything on connect activé et définissez le heartbeat # | D001 | hv | GTPS | 0 | U | \r\n toutes les 120 s. Cliquez sur Save connection.

  2. Dans Devices, ajoutez un widget Audio « Lecteur XMP44 » et sélectionnez cette connexion sous Protocol.

  3. Sur l'objet volume (In/Out) : clé OG1, modèle de commande # | D001 | hv | SOG1 | ${value:d} | U | \r\n, modèle d'interrogation # | D001 | hv | GOG1 | 0 | U | \r\n, motif d'extraction \i | OG1 | \i\v, échelle -1, décalage 8 — ainsi, −20 dB est envoyé sous la forme 28 et un 28 reçu est lu comme −20 dB.

  4. Sur l'objet lecture (Out, booléen) : clé PLAY1, Different commands for ON and OFF : ON # | D001 | hv | SPPLAY1 | 0 | U | \r\n, OFF # | D001 | hv | SPSTOP1 | 0 | U | \r\n.

  5. Sur l'objet titre de la piste (In, texte) : clé SON1, interrogation # | D001 | hv | GSON1 | 0 | U | \r\n, motif \i | SON1 | \i\a | .

  6. Cliquez sur Save object pour chaque objet, puis sur Apply changes dans la barre latérale et confirmez. Le déplacement du curseur de volume envoie SOG1, le retour OG1 de l'appareil confirme le nouveau niveau, et toute modification effectuée sur la façade de l'appareil apparaît dans l'application.

💡 Conseil : Gardez la documentation des commandes de l'appareil ouverte lors de la liaison — la clé correspond au nom du retour d'état (OG1), qui chez AUDAC diffère du nom de la commande (SOG1).

Liaison TCP/UDP

Les objets TCP/UDP sont configurés dans la boîte de dialogue des paramètres d'objet (voir « Paramètres d'objet, journalisation et notifications »). Les sections sont :

Adressage de trame

ChampDescription
KeyTexte présent dans chaque réponse contenant la valeur de cet objet — ex. OG1. Seules les trames entrantes contenant la clé sont comparées au motif d'extraction ; la comparaison est sensible à la casse. Le caractère : est interdit. La clé n'a pas besoin d'être unique : deux objets peuvent la partager, par exemple un objet de commande et son objet de retour d'état. L'adresse enregistrée est <connexion>:<clé>.
Payload encodingASCII text pour les protocoles texte, HEX bytes pour les protocoles binaires.

Commandes envoyées (objets sortants)

ChampDescription
Command templateEnvoyé lorsque la valeur change. ${value} est remplacé par la valeur (${value:d} l'arrondit à un entier) ; \r \n \xNN sont des caractères d'échappement d'octets.
Different commands for ON and OFFObjets booléens : affiche Command for ON et Command for OFF pour les appareils utilisant deux commandes distinctes plutôt qu'une commande unique avec un argument 0/1. Laissez OFF vide pour un bouton à action unique.
Acknowledge pattern / Acknowledge timeout (ms)Optionnel. Lorsqu'il est défini, l'écriture n'est validée que si une trame correspond à ce motif dans le délai imparti.

Valeurs relues (objets entrants)

ChampDescription
Query templateEnvoyé à chaque cycle de scrutation et une fois à la connexion. Laissez vide pour un appareil qui transmet spontanément.
Match patternAppliqué à chaque trame entrante contenant la clé ; la valeur capturée devient la valeur de l'objet. Identifiants : \v un nombre · \h hexadécimal, lu comme un nombre · \a texte, jusqu'au caractère littéral suivant · \iTexte\i saute "Texte" · \sN saute N caractères · \d \w \. chiffre / mot / n'importe quel caractère. Sans motif, l'objet ne reçoit jamais de valeur.
Scale / OffsetLecture : valeur = brut × échelle + décalage ; l'écriture utilise l'inverse.

Sous les sections, Frame sent montre la trame sortante résolue pour une valeur d'exemple avec les caractères de contrôle visibles (… | 28 | U | <CR><LF>), et Stored as affiche la chaîne du type de données enregistrée. La syntaxe des motifs, les modèles et un exemple pratique AUDAC sont détaillés dans le chapitre TCP/UDP ci-dessus.

Paramètres d'objet TCP/UDP pour un objet de gain audio.

Questions fréquentes

HyperVisu ouvre-t-il une socket TCP distincte pour chaque objet ?

Non. Tous les objets d'une même connexion d'appareil partagent une socket TCP persistante unique, prenant en charge les équipements qui n'acceptent qu'un seul client.

Pourquoi un objet entrant ne reçoit-il jamais de valeur ?

Sa clé doit figurer dans la trame de retour, et il nécessite un motif d'extraction (match pattern) pour capturer la valeur. Vérifiez ces deux éléments dans la documentation de commandes de l'appareil.

Comment configurer un appareil qui transmet spontanément son état ?

Définissez l'intervalle de scrutation sur 0 et laissez les requêtes inutiles vides. Pour les transmissions UDP spontanées, configurez le port d'écoute (Listen port).

Pourquoi certaines commandes sont-elles ignorées ?

Vérifiez la structure de la trame dans l'aperçu Frame sent, en gardant à l'esprit qu'il affiche une valeur d'exemple et non ce qui a réellement été émis. Augmentez le délai entre les commandes (Delay between commands) si l'appareil rejette les requêtes consécutives.

Que fait le bouton Test lorsque la connexion TCP est déjà ouverte ?

Il indique l'état réel existant plutôt que d'ouvrir une seconde socket qu'un appareil mono-client pourrait refuser.

Continuer l'exploration

Retrouvez les autres guides de ce produit dans la documentation.

Retour à Intégrations