Μετάβαση στο περιεχόμενο
Elausys

HyperVisu / Ενοποιήσεις

Ενσωμάτωση TCP/UDP

Έλεγχος εξοπλισμού AV και προσαρμοσμένων συσκευών με εντολές μέσω TCP ή UDP — πρότυπα, μοτίβα αντιστοίχισης και polling.

elausys · 21 Αυγούστου 2026
Σε αυτή τη σελίδα

Ενσωμάτωση TCP/UDP

Το πρωτόκολλο TCP/UDP προορίζεται για συσκευές που επικοινωνούν με απλές εντολές απευθείας μέσω network socket — χωρίς web API, χωρίς μοντέλο καταχωρητών: επαγγελματικά audio players και μήτρες ήχου (AUDAC XMP44 και μονάδες SourceCon), βιντεοπροβολείς (PJLink), οθόνες και ενισχυτές πίσω από γέφυρες RS-232-over-IP, καθώς και προσαρμοσμένες πλακέτες μικροελεγκτών. Ορίζετε τα πλαίσια εντολών (command frames) που στέλνει το HyperVisu όταν αλλάζει μια τιμή, τα μοτίβα (patterns) που εξάγουν τιμές από τα πλαίσια απάντησης της συσκευής, και προαιρετικά πλαίσια ερωτημάτων (query frames) για polling. Όλες οι ειδικές ρυθμίσεις της συσκευής βρίσκονται στην παραμετροποίηση, καμία στον server.

Κάθε σύνδεση αντιστοιχεί σε μία συσκευή, μέσω TCP (μία μόνιμη σύνδεση, ανοιχτή συνεχώς με αυτόματη επανασύνδεση) ή UDP (datagrams). Μέσω TCP, όλα τα αντικείμενα της συσκευής μοιράζονται το ίδιο μοναδικό socket — γεγονός απαραίτητο για συσκευές που δέχονται μόνο έναν client (όπως το XMP44).

Τι χρειάζεστε: τη διεύθυνση IP και τη θύρα της συσκευής, το εγχειρίδιο εντολών της (σύνταξη πλαισίου, οριοθέτη, εντολές και απαντήσεις ανάδρασης), καθώς και αν στέλνει αυτόματα αλλαγές κατάστασης (push) ή απαιτείται περιοδική ανάγνωση (poll).

Συνδέσεις. Το TCP/UDP υποστηρίζει πολλαπλές συνδέσεις: μία σύνδεση ανά συσκευή (βλ. «Συνδέσεις»). Πεδία:

ΠεδίοΠεριγραφή
Device addressΔιεύθυνση IP ή hostname της συσκευής.
PortΗ θύρα TCP ή UDP στην οποία ακούει η συσκευή (AUDAC XMP44: 5001).
Poll Interval (seconds)Συχνότητα περιοδικής ανάγνωσης της συσκευής. 0 για συσκευή που στέλνει αυτόματα την κατάστασή της (push).
TransportTCP · persistent connection ή UDP · datagrams.
Frame delimiterΧαρακτήρας οριοθέτησης μεταξύ δύο πλαισίων — \r\n για σχεδόν όλα τα πρωτόκολλα κειμένου.
Payload encodingASCII text για πρωτόκολλα κειμένου, HEX bytes για δυαδικά πρωτόκολλα.
Listen portΜόνο για UDP. Για συσκευές που στέλνουν δεδομένα (push) σε σταθερή θύρα. Αν μείνει κενό, οι απαντήσεις επιστρέφουν στη θύρα αποστολής του server.
Heartbeat frame / EveryΜόνο για TCP, προαιρετικό. Πλαίσιο που αποστέλλεται σε κατάσταση αδράνειας ώστε η συσκευή να μην κλείσει τη σύνδεση (τουλάχιστον ανά 5 s). Στην προεπισκόπηση Frame sent εμφανίζεται με ορατούς τους χαρακτήρες ελέγχου.
Connect timeoutΧρόνος αναμονής για την αποδοχή της σύνδεσης από τη συσκευή (ms, προεπιλογή 5000).
Delay between commandsΠολλές συσκευές απορρίπτουν διαδοχικές εντολές. Αυξήστε αυτήν την τιμή αν κάποιες αγνοούνται (ms, προεπιλογή 50).
Read everything on connectΕνεργό: Το HyperVisu στέλνει όλα τα ερωτήματα μία φορά μόλις η συσκευή συνδεθεί, ώστε η εφαρμογή να εμφανίζει την πραγματική κατάσταση χωρίς αναμονή του πρώτου κύκλου polling.

Το παράθυρο διαλόγου Add connection ζητά τα πεδία Instance Name, Device address, Port, Poll Interval (seconds), Transport και Frame delimiter (προεπιλογές 30, TCP · persistent connection και \r\n). Τα υπόλοιπα πεδία βρίσκονται στην ενότητα Framing and timing της αποθηκευμένης σύνδεσης: επιλέξτε τη νέα σύνδεση, ρυθμίστε τα και πατήστε Save connection.

Το κουμπί Test στο παράθυρο διαλόγου Add connection ανοίγει ένα socket στη διεύθυνση που πληκτρολογήσατε. Αυτό επιβεβαιώνει μόνο ότι η συσκευή είναι προσβάσιμη, όχι ότι αναγνωρίζει τα πλαίσιά σας. Σε μια αποθηκευμένη σύνδεση, όταν η υπηρεσία διατηρεί ήδη τη μοναδική σύνδεση της συσκευής, το Test αναφέρει την τρέχουσα κατάσταση λειτουργίας και τον αριθμό εισερχόμενων/εξερχόμενων πλαισίων αντί να ανοίξει δεύτερο socket.

TCP/UDP connection editor.

Σύνδεση αντικειμένου (Binding) (βλ. παρακάτω «Αντιστοίχιση TCP/UDP»). Για κάθε αντικείμενο ορίζετε ένα Key — ένα σύντομο κείμενο που περιέχεται σε κάθε απάντηση με αυτήν την τιμή: μόνο τα εισερχόμενα πλαίσια που περιέχουν το κλειδί ελέγχονται με το μοτίβο αντιστοίχισης (match pattern) του αντικειμένου (για την AUDAC, το όνομα της εντολής ανάδρασης: OG1, FREQ2). Η σύγκριση διακρίνει πεζά/κεφαλαία (case-sensitive) και το κλειδί δεν μπορεί να περιέχει :. Δύο αντικείμενα μπορούν να μοιράζονται το ίδιο κλειδί, για παράδειγμα ένα αντικείμενο εντολής και το αντίστοιχο αντικείμενο ανάδρασης. Στη διαχείριση αποθηκεύεται ως <connection>:<key>. Το υπόλοιπο τμήμα είναι η συμβολοσειρά τύπου δεδομένων του αντικειμένου, η οποία δημιουργείται από τα πεδία του επεξεργαστή:

ΠεδίοΑποθήκευση ωςΣημασία
Payload encodingASCII / HEXΠρώτο στοιχείο της συμβολοσειράς. Δεν αλλάζει τα δεδομένα που αποστέλλονται ούτε τον τρόπο ανάγνωσης των απαντήσεων: η κωδικοποίηση ορίζεται στις ρυθμίσεις της σύνδεσης στο Framing and timing.
Command templateSEND=Αποστέλλεται όταν αλλάζει η τιμή (αντικείμενα Out και In/Out). Το ${value} αντικαθίσταται από την τιμή.
Different commands for ON and OFF → Command for ON / Command for OFFSEND1= / SEND0=Για boolean αντικείμενα των οποίων η συσκευή χρησιμοποιεί δύο ξεχωριστές εντολές (SPPLAY1 / SPSTOP1) αντί για μία εντολή με παράμετρο 0/1. Αφήστε το OFF κενό για μπουτόν μονής ενέργειας.
Query templatePOLL=Αποστέλλεται σε κάθε κύκλο poll και μία φορά κατά τη σύνδεση (αντικείμενα In και In/Out). Αφήστε το κενό για συσκευές που στέλνουν αυτόματα δεδομένα (push).
Match patternMATCH=Εφαρμόζεται σε κάθε εισερχόμενο πλαίσιο που περιέχει το κλειδί. Η τιμή που απομονώνει καταχωρείται ως τιμή του αντικειμένου. Χωρίς αυτό, το αντικείμενο In δεν λαμβάνει ποτέ τιμή.
Scale / OffsetSCALE= / OFFSET=Ανάγνωση: value = raw × scale + offset. Κατά την εγγραφή χρησιμοποιείται η αντίστροφη πράξη. Μόνο για αριθμητικές τιμές.
Acknowledge pattern / Acknowledge timeout (ms)ACK= / ACKTIMEOUT=Προαιρετικό. Όταν οριστεί, η εγγραφή θεωρείται επιτυχής μόνο εφόσον ένα πλαίσιο ταιριάξει με το μοτίβο εντός του χρονικού ορίου (προεπιλογή 2000 ms).

Τα πρότυπα (templates) χρησιμοποιούν το ${value}, καθώς και ${value:d} για στρογγυλοποίηση κλιμακωμένης τιμής σε ακέραιο (π.χ. ρυθμιστικό 0–100 % για συσκευή που δέχεται μόνο ακεραίους), ${value:02d} για ακέραιο με συμπλήρωση μηδενικών, ${value:1f} για σταθερό αριθμό δεκαδικών ψηφίων, και σε λειτουργία HEX τα ${value:u8}, ${value:u16be}, ${value:u16le}, ${value:u32be}, ${value:u32le} για bytes σταθερού πλάτους. Οι χαρακτήρες \r, \n, \t και \xNN χρησιμοποιούνται ως byte escapes. Σε λειτουργία ASCII, εάν παραλειφθεί ο οριοθέτης από το πρότυπο, προστίθεται αυτόματα στο τέλος.

Τα μοτίβα αντιστοίχισης (match patterns) χρησιμοποιούν τα παρακάτω tokens. Όλα τα υπόλοιπα στοιχεία συγκρίνονται επακριβώς ως απλό κείμενο:

TokenΛειτουργία / εξαγωγή
\vαριθμός
\hδεκαεξαδικός (hex), αναγιγνώσκεται ως αριθμός
\aκείμενο, μέχρι τον επόμενο σταθερό χαρακτήρα (για αντικείμενα κειμένου)
\iText\iπαράκαμψη του κειμένου "Text"
\sNπαράκαμψη N χαρακτήρων
\d \w \.ψηφίο / λέξη / οποιοσδήποτε χαρακτήρας

Ο επεξεργαστής εμφανίζει το πεδίο Frame sent με ορατούς τους χαρακτήρες ελέγχου (# | D001 | hv | SOG1 | 28 | U | <CR><LF>), καθώς και την αποθηκευμένη συμβολοσειρά. Το Frame sent είναι προεπισκόπηση, όχι αρχείο καταγραφής: κάθε μεταβλητή ${value…} αντικαθίσταται από την ενδεικτική τιμή 28, χωρίς τη μορφοποίηση τιμής ή την κλιμάκωση, ενώ για αντικείμενα με ξεχωριστές εντολές ON και OFF εμφανίζει μόνο την εντολή ON. Δεν εμφανίζει τον οριοθέτη που προσθέτει αυτόματα ο server σε λειτουργία ASCII. Ελέγξτε την πραγματική εντολή και απόκριση απευθείας στη συσκευή.

TCP/UDP object editor for an audio gain object.

Χρήσιμες πληροφορίες λειτουργίας

  • Κατεύθυνση. Τα αντικείμενα In εκτελούν αντιστοίχιση (και poll, εφόσον διαθέτουν ερώτημα), τα αντικείμενα Out εκτελούν αποστολή, ενώ τα αντικείμενα In/Out εκτελούν και τα δύο — η απάντηση της ίδιας της συσκευής αποτελεί την επιβεβαίωση, όπως ακριβώς συμβαίνει με τα αντικείμενα κατάστασης (status) στο KNX.
  • Ένα πλαίσιο, πολλά αντικείμενα. Κάθε εισερχόμενο πλαίσιο ελέγχεται έναντι όλων των αντικειμένων In της σύνδεσης των οποίων το κλειδί περιέχεται σε αυτό. Έτσι, ένα μόνο πλαίσιο κατάστασης μπορεί να ενημερώσει πολλαπλά αντικείμενα. Πανομοιότυπα πρότυπα ερωτημάτων αποστέλλονται μία φορά ανά κύκλο poll.
  • TCP. Σε περίπτωση διακοπής, η επανασύνδεση πραγματοποιείται με σταδιακά αυξανόμενη καθυστέρηση. Κατά την επανασύνδεση, τα ερωτήματα εκτελούνται ξανά εφόσον είναι ενεργό το Read everything on connect. Τα εξερχόμενα πλαίσια τοποθετούνται σε ουρά με χρονική απόσταση ίση με το Delay between commands.
  • UDP. Κάθε datagram αντιστοιχεί σε ένα πλαίσιο. Για αυτόματες αποστολές (unsolicited push) απαιτείται η ρύθμιση του Listen port.
  • Οι εντολές που αποστέλλονται ενώ η συσκευή είναι εκτός σύνδεσης αποτυγχάνουν χωρίς να μπλοκάρουν άλλες διεργασίες. Η εφαρμογή διατηρεί την τελευταία γνωστή κατάσταση.

Παράδειγμα εφαρμογής — Media player AUDAC XMP44

Το XMP44 ακούει σε TCP θύρα 5001, δέχεται έναν μόνο client και χρησιμοποιεί πλαίσια της μορφής # | D001 | <source> | <command> | <argument> | <checksum> | <CR><LF> — ο χαρακτήρας U γίνεται δεκτός ως checksum. Η ρύθμιση του κέρδους εξόδου (gain) γίνεται με SOG1 | <arg> όπου arg = 8 − dB. Η συσκευή απαντά με πλαίσιο ενημέρωσης … | OG1 | <arg> | …, το οποίο εκπέμπει αυτόματα και όταν το gain ρυθμιστεί από την πρόσοψη. Η αναπαραγωγή και η διακοπή αποτελούν δύο ξεχωριστές εντολές (SPPLAY1, SPSTOP1).

  1. Δημιουργήστε μια σύνδεση TCP/UDP (βλ. «Συνδέσεις»): διεύθυνση 192.168.1.60, θύρα 5001, πρωτόκολλο μεταφοράς TCP, οριοθέτης \r\n, διάστημα ανάγνωσης (poll) 30. Πατήστε Test και μετά Create connection. Επιλέξτε τη νέα σύνδεση και, στην ενότητα Framing and timing, αφήστε ενεργό το Read everything on connect και ορίστε heartbeat # | D001 | hv | GTPS | 0 | U | \r\n ανά 120 s. Πατήστε Save connection.

  2. Στο μενού Devices, προσθέστε ένα widget Audio με όνομα "XMP44 player" και επιλέξτε αυτήν τη σύνδεση στο πεδίο Protocol.

  3. Στο αντικείμενο volume (In/Out): key OG1, command template # | D001 | hv | SOG1 | ${value:d} | U | \r\n, query template # | D001 | hv | GOG1 | 0 | U | \r\n, match pattern \i | OG1 | \i\v, scale -1, offset 8 — έτσι τα −20 dB αποστέλλονται ως 28 και η λήψη τιμής 28 αναγιγνώσκεται ως −20 dB.

  4. Στο αντικείμενο play (Out, boolean): key PLAY1, Different commands for ON and OFF: ON # | D001 | hv | SPPLAY1 | 0 | U | \r\n, OFF # | D001 | hv | SPSTOP1 | 0 | U | \r\n.

  5. Στο αντικείμενο track title (In, text): key SON1, query # | D001 | hv | GSON1 | 0 | U | \r\n, match \i | SON1 | \i\a | .

  6. Πατήστε Save object σε κάθε αντικείμενο, έπειτα πατήστε Apply changes στην πλευρική στήλη και επιβεβαιώστε. Η μετακίνηση του ρυθμιστικού έντασης στέλνει την εντολή SOG1, η απάντηση OG1 της συσκευής επιβεβαιώνει τη νέα στάθμη και οποιαδήποτε αλλαγή από την πρόσοψη της συσκευής ενημερώνει άμεσα την εφαρμογή.

💡 Συμβουλή: Έχετε διαθέσιμο το εγχειρίδιο εντολών της συσκευής κατά την παραμετροποίηση — το κλειδί (key) είναι το όνομα της ανάδρασης (OG1), το οποίο στην AUDAC διαφέρει από το όνομα της εντολής ελέγχου (SOG1).

Αντιστοίχιση TCP/UDP

Τα αντικείμενα TCP/UDP παραμετροποιούνται στο παράθυρο διαλόγου ρυθμίσεων αντικειμένου (βλ. «Ρυθμίσεις αντικειμένου, καταγραφή και ειδοποιήσεις»). Οι καρτέλες περιλαμβάνουν:

Frame addressing

ΠεδίοΠεριγραφή
KeyΚείμενο που περιέχεται σε κάθε απάντηση με την τιμή αυτού του αντικειμένου — π.χ. OG1. Μόνο τα εισερχόμενα πλαίσια που περιέχουν το κλειδί ελέγχονται έναντι του μοτίβου αντιστοίχισης (match pattern). Η σύγκριση διακρίνει πεζά/κεφαλαία. Δεν επιτρέπεται ο χαρακτήρας :. Το κλειδί δεν απαιτείται να είναι μοναδικό: δύο αντικείμενα μπορούν να μοιράζονται το ίδιο, για παράδειγμα ένα αντικείμενο εντολής και το αντίστοιχο αντικείμενο ανάδρασης. Η αποθηκευμένη διεύθυνση είναι <connection>:<key>.
Payload encodingASCII text για πρωτόκολλα κειμένου, HEX bytes για δυαδικά πρωτόκολλα.

Commands sent (εξερχόμενα αντικείμενα)

ΠεδίοΠεριγραφή
Command templateΑποστέλλεται όταν αλλάζει η τιμή. Το ${value} αντικαθίσταται από την τιμή (το ${value:d} τη στρογγυλοποιεί σε ακέραιο). Τα \r, \n, \xNN χρησιμοποιούνται ως byte escapes.
Different commands for ON and OFFBoolean αντικείμενα: εμφανίζει τα πεδία Command for ON και Command for OFF για συσκευές που χρησιμοποιούν δύο ξεχωριστές εντολές αντί για μία εντολή με παράμετρο 0/1. Αφήστε το OFF κενό για μπουτόν μονής ενέργειας.
Acknowledge pattern / Acknowledge timeout (ms)Προαιρετικό. Όταν οριστεί, η εγγραφή θεωρείται επιτυχής μόνο εφόσον ένα πλαίσιο ταιριάξει με αυτό το μοτίβο εντός του χρονικού ορίου.

Values read back (εισερχόμενα αντικείμενα)

ΠεδίοΠεριγραφή
Query templateΑποστέλλεται σε κάθε κύκλο poll και μία φορά κατά τη σύνδεση. Αφήστε το κενό για συσκευές που στέλνουν αυτόματα δεδομένα (push).
Match patternΕφαρμόζεται σε κάθε εισερχόμενο πλαίσιο που περιέχει το κλειδί. Η τιμή που απομονώνει καταχωρείται ως τιμή του αντικειμένου. Tokens: \v αριθμός · \h hex, αναγιγνώσκεται ως αριθμός · \a κείμενο, μέχρι τον επόμενο σταθερό χαρακτήρα · \iText\i παράκαμψη κειμένου "Text" · \sN παράκαμψη N χαρακτήρων · \d \w \. ψηφίο / λέξη / οποιοσδήποτε χαρακτήρας. Χωρίς μοτίβο αντιστοίχισης, το αντικείμενο δεν λαμβάνει ποτέ τιμή.
Scale / OffsetΑνάγνωση: value = raw × scale + offset. Κατά την εγγραφή χρησιμοποιείται η αντίστροφη πράξη.

Κάτω από τις καρτέλες, το πεδίο Frame sent εμφανίζει το τελικό εξερχόμενο πλαίσιο για μια ενδεικτική τιμή με ορατούς τους χαρακτήρες ελέγχου (… | 28 | U | <CR><LF>), ενώ το πεδίο Stored as εμφανίζει τη συμβολοσειρά τύπου δεδομένων που θα αποθηκευτεί. Η σύνταξη των μοτίβων, τα πρότυπα και το παράδειγμα εφαρμογής για συσκευή AUDAC περιγράφονται στην παραπάνω ενότητα TCP/UDP.

The TCP/UDP object settings for an audio gain object.

Συχνές ερωτήσεις

Ανοίγει το HyperVisu ξεχωριστό TCP socket για κάθε αντικείμενο;

Όχι. Όλα τα αντικείμενα μιας σύνδεσης συσκευής μοιράζονται ένα μόνιμο TCP socket, υποστηρίζοντας συσκευές που επιτρέπουν μόνο έναν client.

Γιατί ένα εισερχόμενο αντικείμενο δεν λαμβάνει ποτέ τιμή;

Το κλειδί του πρέπει να περιέχεται στο πλαίσιο ανάδρασης και απαιτείται μοτίβο αντιστοίχισης (match pattern) για την εξαγωγή της τιμής. Ελέγξτε και τα δύο βάσει των προδιαγραφών εντολών της συσκευής.

Πώς ρυθμίζεται μια συσκευή που στέλνει αυτόματα την κατάστασή της (push);

Ορίστε το διάστημα ανάγνωσης (poll interval) σε 0 και αφήστε κενά τα μη απαραίτητα ερωτήματα. Για αυτόματες αποστολές UDP, ρυθμίστε το Listen port.

Γιατί αγνοούνται ορισμένες εντολές;

Ελέγξτε την προεπισκόπηση Frame sent για τη δομή του πλαισίου, λαμβάνοντας υπόψη ότι εμφανίζει μια ενδεικτική τιμή και όχι την πραγματική αποστολή. Αυξήστε το Delay between commands αν η συσκευή απορρίπτει διαδοχικά αιτήματα.

Τι κάνει το κουμπί Test όταν η σύνδεση TCP είναι ήδη ανοιχτή;

Αναφέρει την τρέχουσα ενεργή κατάσταση αντί να ανοίξει δεύτερο socket που ενδέχεται να απορριφθεί από μια συσκευή μονού client.

Συνεχίστε την εξερεύνηση

Βρείτε τους υπόλοιπους οδηγούς για αυτό το προϊόν στην τεκμηρίωση.

Επιστροφή στο Ενοποιήσεις