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

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

Ενσωμάτωση MQTT

Εγγραφείτε σε θέματα κατάστασης (state topics) και δημοσιεύστε εντολές μέσω ενός MQTT broker — payload codec, topic browser και QoS.

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

Ενσωμάτωση MQTT

Το MQTT συνδέει το HyperVisu με τον κόσμο του publish/subscribe: Zigbee2MQTT, Tasmota, Shelly (λειτουργία MQTT), ESPHome, energy gateways και οποιοδήποτε προσαρμοσμένο firmware που επικοινωνεί με έναν MQTT broker. Το HyperVisu λειτουργεί ως MQTT client — εγγράφεται (subscribes) στα topics όπου οι συσκευές δημοσιεύουν την κατάστασή τους και δημοσιεύει (publishes) εντολές στα topics που ακούν οι συσκευές. Δεν υπάρχει polling: μια συσκευή που αλλάζει κατάσταση δημοσιεύει, και το widget ενημερώνεται άμεσα.

Ένας broker μεσολαβεί στη σύνδεση. Μπορεί να είναι ένας broker που εκτελείτε ήδη (Mosquitto, EMQX, αυτός που συνοδεύει μια εγκατάσταση Zigbee2MQTT, …) ή ο ενσωματωμένος broker του HyperVisu, τον οποίο μπορεί να εκτελεί ο ίδιος ο διακομιστής ώστε οι συσκευές να συνδέονται απευθείας σε αυτόν (βλ. «The Built-in MQTT Broker»). Όλα όσα περιγράφονται σε αυτό το άρθρο ισχύουν και στις δύο περιπτώσεις — ο ενσωματωμένος broker είναι ένας τυπικός broker, προσβάσιμος μέσω μιας κανονικής σύνδεσης.

Τι χρειάζεστε: τη διεύθυνση και τη θύρα του broker, τα διαπιστευτήριά του εάν απαιτούνται, καθώς και τα topics και τη μορφή payload της συσκευής — από την τεκμηρίωση της συσκευής ή απευθείας από τον broker μέσω του topic browser (παρακάτω).

Συνδέσεις. Ενεργοποιήστε πρώτα το MQTT Protocol στη σελίδα Services (βλ. «Services & Protocols»)· είναι απενεργοποιημένο σε έναν νέο server. Το MQTT υποστηρίζει πολλαπλές συνδέσεις: μία σύνδεση ανά broker (βλ. «Connections»). Στο Add connection, επιλέξτε την κάρτα MQTT: το παράθυρο διαλόγου ζητά ένα Instance Name, τη Broker address, τη Port, το Client ID και τα διαπιστευτήρια, ενώ περιλαμβάνει και κουμπί Test. Το CA certificate και οι Broker options (Keepalive, Default QoS, Availability topic, Clean session) δεν περιλαμβάνονται στο παράθυρο διαλόγου: ορίζονται στην αποθηκευμένη σύνδεση, η οποία ανοίγει στον επεξεργαστή της μόλις κάνετε κλικ στο Create connection. Ο επεξεργαστής σύνδεσης περιλαμβάνει:

ΠεδίοΠεριγραφή
Broker addressHost, ή πλήρες URL: mqtt://, mqtts://, ws://, wss:// (ένα απλό host σημαίνει mqtt://). Μια διαδρομή στη διεύθυνση διατηρείται, για παράδειγμα ws://192.168.1.30/mqtt.
PortΗ θύρα ακρόασης — συνήθως 1883 για απλό MQTT και 8883 για MQTT μέσω TLS. Πληκτρολογείτε την πάντα: στο παράθυρο διαλόγου Add connection, ένα κενό πεδίο θύρας αποθηκεύεται ως 1883 ανεξαρτήτως του scheme, και το πεδίο Port υπερισχύει της θύρας που αναγράφεται στη διεύθυνση.
Username / PasswordΑφήστε τα κενά για ανώνυμο broker.
Client IDΑφήστε το κενό για παραγωγή αναγνωριστικού βάσει της διεύθυνσης MAC του server.
Accept self-signed certificatesΕμφανίζεται μόνο για mqtts:// / wss://. Απενεργοποιημένο από προεπιλογή: το πιστοποιητικό του broker πρέπει να έχει υπογραφεί από έμπιστη αρχή. Όταν ενεργοποιηθεί, το πιστοποιητικό δεν επαληθεύεται καθόλου.
CA certificateΕμφανίζεται μόνο για TLS: το πιστοποιητικό PEM της αρχής που υπέγραψε τον broker, όταν αυτή δεν είναι δημόσια.
KeepaliveΧρονικό διάστημα διατήρησης μιας ανενεργής σύνδεσης πριν από την αποστολή ping (προεπιλογή 60 s).
Default QoS0 · at most once, 1 · at least once ή 2 · exactly once — χρησιμοποιείται από κάθε αντικείμενο που δεν ορίζει δικό του.
Availability topic / Announce HyperVisu availabilityΤο topic όπου το HyperVisu δημοσιεύει online / offline για τον εαυτό του (προεπιλογή hypervisu/status, retained). Ο broker δημοσιεύει offline εκ μέρους του εάν διακοπεί η σύνδεση.
Clean sessionΕνεργό (προεπιλογή): ο broker διαγράφει τις εγγραφές όταν διακοπεί η σύνδεση και το HyperVisu επανεγγράφεται κατά την επανασύνδεση. Απενεργοποιήστε το μόνο για broker που πρέπει να διατηρεί μηνύματα σε ουρά όσο το HyperVisu είναι εκτός λειτουργίας.

Η δοκιμή (Test) σε μια σύνδεση MQTT είναι πραγματική δοκιμή: ο server συνδέεται στον broker και περιμένει την επιβεβαίωσή του (εντός 10 s). Ένα επιτυχές αποτέλεσμα εμφανίζει την ένδειξη Connection succeeded. Στο παράθυρο διαλόγου Add connection, το Test δοκιμάζει τις τιμές που πληκτρολογήσατε, πριν δημιουργήσετε τη σύνδεση. Σε μια αποθηκευμένη σύνδεση, το Test ελέγχει την αποθηκευμένη σύνδεση και όχι τα πεδία που δεν έχετε αποθηκεύσει ακόμα: κάντε πρώτα κλικ στο Save connection και στη συνέχεια στο Test. Μια επιτυχής δοκιμή αποδεικνύει ότι η διεύθυνση, η θύρα, τα διαπιστευτήρια και οι ρυθμίσεις TLS γίνονται δεκτές από τον broker· δεν αποδεικνύει ότι κάποιο topic μεταφέρει δεδομένα.

Η κατάσταση της σύνδεσης εμφανίζεται ως Connected όσο η σύνδεση με τον broker είναι ενεργή. Εάν ο broker καταστεί μη διαθέσιμος, πραγματοποιείται απόπειρα επανασύνδεσης κάθε λίγα δευτερόλεπτα, χωρίς όριο — δεν απαιτείται ποτέ επανεκκίνηση του server.

📘 Σημείωση: Αφού δημιουργήσετε ή αποθηκεύσετε μια σύνδεση, εμφανίζεται η επιλογή Apply changes στην πλευρική γραμμή με έναν μετρητή. Η σύνδεση λειτουργεί ήδη χωρίς αυτό· η εφαρμογή επαναφορτώνει τις ρυθμίσεις του server και μηδενίζει τον μετρητή.

Επεξεργαστής σύνδεσης MQTT σε desktop browser.

Σύνδεση αντικειμένου (βλ. «Binding MQTT» παρακάτω). Ανά αντικείμενο εισάγετε ένα Topic· η διαχείριση το αποθηκεύει ως <connection>:<topic> ώστε δύο brokers να μπορούν να διαθέτουν το ίδιο όνομα topic. Η κατεύθυνση του αντικειμένου καθορίζει τη συμπεριφορά:

ΚατεύθυνσηΣυμπεριφορά
InΕγγράφεται στο topic (state topic). Επιτρέπονται wildcards: + για ένα επίπεδο, # για τα υπόλοιπα.
OutΔημοσιεύει στο topic (command topic). Πρέπει να είναι συγκεκριμένο topic — χωρίς wildcards.
In/OutΕγγράφεται και δημοσιεύει στο ίδιο topic. Ενδείκνυται μόνο για συσκευές που διατηρούν retained state σε ένα ενιαίο topic· προτιμήστε δύο αντικείμενα (ένα In, ένα Out).

Το payload codec — ο τρόπος με τον οποίο το payload μετατρέπεται σε τιμή και αντίστροφα — είναι η συμβολοσειρά τύπου δεδομένων του αντικειμένου, η οποία δημιουργείται από τον επεξεργαστή βάσει αυτών των πεδίων:

ΠεδίοΑποθηκεύεται ωςΣημασία
Payload format— / PATH=Raw value: ολόκληρο το payload είναι η τιμή. JSON: η τιμή διαβάζεται στο JSON path (state, sensor.temperature, values[0]).
ON token / OFF tokenON= / OFF=Για δυαδικά (boolean) αντικείμενα: τι γράφει και τι αναμένει η συσκευή για true/false (π.χ. ON / OFF). Χωρίς tokens, τα true/false, 1/0, on/off αναγνωρίζονται στην είσοδο και δημοσιεύεται true/false.
Scale / OffsetSCALE= / OFFSET=Ανάγνωση: τιμή = raw × scale + offset· η δημοσίευση χρησιμοποιεί το αντίστροφο, raw = (τιμή − offset) ÷ scale. Ένα αντικείμενο εντολής και το αντίστοιχο αντικείμενο ανάδρασης λαμβάνουν επομένως το ίδιο scale.
Payload templatePUB=Προαιρετικό πρότυπο δημοσίευσης· το {{value}} αντικαθίσταται από την τιμή, π.χ. {"state":"{{value}}"}. Αφήστε το κενό για δημοσίευση της απλής τιμής.
QoSQOS=Broker default, 0, 1 ή 2 για αυτήν την εντολή.
Retain published messagesRETAIN=1Απενεργοποιημένο από προεπιλογή.
Minimum interval (ms)THROTTLE=Η συχνότητα αποστολής για αισθητήρες με υψηλό ρυθμό δεδομένων περιορίζεται σε αυτό το όριο (προεπιλογή 100 ms)· η τελευταία τιμή παραδίδεται πάντα. Η τιμή 0 το απενεργοποιεί.

Η συμβολοσειρά έχει τη μορφή TYPE:param:param… — για παράδειγμα BOOL:PATH=state:ON=ON:OFF=OFF ή FLOAT:SCALE=0.3937:PUB={"brightness":{{value}}}. Μια κενή συμβολοσειρά σημαίνει «χρήση του ανεπεξέργαστου payload ως τύπος του αντικειμένου». Ο επεξεργαστής αντικειμένου δεν διαθέτει πεδίο τύπου δεδομένων: ο τύπος είναι αυτός που εμφανίζεται στο πεδίο στο οποίο κάνετε κλικ στον topic browser (παρακάτω), και το κλικ σε ένα πεδίο προσαρμόζει αυτόματα τον τύπο του αντικειμένου. Τα αντικείμενα χρώματος (RGB) δέχονται {"r","g","b"}, {"red","green","blue"}, [r,g,b], #RRGGBB και 255,128,0 στην είσοδο, και δημοσιεύουν {"r":…,"g":…,"b":…} εκτός εάν ορίζεται διαφορετικά από ένα πρότυπο.

⚠️ Προειδοποίηση: Μια εντολή με ένδειξη retained εκτελείται εκ νέου κάθε φορά που η συσκευή επανασυνδέεται στον broker. Διατηρείτε retained κατάσταση, όχι εντολές — ο επεξεργαστής εμφανίζει προειδοποίηση όταν ενεργοποιείτε το retain για ένα αντικείμενο εξόδου.

Topic browser. Το MQTT είναι το μοναδικό πρωτόκολλο του οποίου οι διευθύνσεις μπορούν να ανιχνευθούν απευθείας από το δίκτυο. Στον επεξεργαστή αντικειμένου, στην ενότητα MQTT topic configuration, κάντε κλικ στο Scan broker: ο server παρακολουθεί ολόκληρο τον broker για τέσσερα δευτερόλεπτα και αναφέρει πόσα topics εντόπισε (τα retained topics λαμβάνονται άμεσα, επομένως μια σύντομη σάρωση εμφανίζει τα περισσότερα στοιχεία προς σύνδεση· για συσκευή που δεν χρησιμοποιεί retain, προκαλέστε μια νέα αποστολή τιμής και εκτελέστε ξανά σάρωση). Η λίστα περιορίζεται στα 500 topics. Ο επεξεργαστής αντικειμένου δεν μπορεί να σαρώσει επιμέρους τμήμα του broker: ανοίξτε το Topic και πληκτρολογήστε στο Search topics… για να φιλτράρετε τα αποτελέσματα, ή πληκτρολογήστε απευθείας το πλήρες topic. Κάθε γραμμή εμφανίζει το topic και το τελευταίο payload, με ένδειξη retained. Επιλέξτε ένα topic και:

  • για payload τύπου JSON, κάθε πεδίο παρατίθεται στην ενότητα Pick the value this object should follow — με ένα κλικ ορίζονται το JSON path, ο τύπος αντικειμένου και, για δυαδικές τιμές, τα tokens ON/OFF σύμφωνα με τη μορφοποίηση της συσκευής·
  • για απλό payload, η επιλογή Use the raw payload as συμπληρώνει τον τύπο.

Επιλέξτε το topic πριν κάνετε κλικ σε ένα πεδίο: η επιλογή άλλου topic επαναφέρει τη μορφή payload, το JSON path και τα tokens. Το κλικ δεν συμπληρώνει τα πεδία Scale και Offset.

Μπορείτε επίσης να πληκτρολογήσετε ένα topic που δεν εντοπίστηκε από τη σάρωση — ένα command topic ενδέχεται να μην έχει δημοσιευτεί ποτέ, ενώ ένα αντικείμενο εισόδου μπορεί να απαιτεί wildcard. Πληκτρολογήστε το στο Topic και κάντε κλικ στο Use "…" στη λίστα.

Επεξεργαστής αντικειμένου MQTT μετά το "Scan broker".

Σημαντικές λεπτομέρειες λειτουργίας

  • Άμεση κατάσταση μετά από επανεκκίνηση. Τα μηνύματα με retain αναπαράγονται από τον broker σε κάθε (επαν)σύνδεση, επομένως τα widgets εμφανίζουν τιμές χωρίς να αναμένουν την επόμενη δημοσίευση της συσκευής.
  • Καμία υποθετική ανάδραση. Μια εντολή επιβεβαιώνεται μόνο όταν η συσκευή δημοσιεύσει στο topic κατάστασής της (ή όταν το αναπαραγάγει ο broker) — ακριβώς όπως τα status objects στο KNX. Εάν η συσκευή είναι εκτός λειτουργίας, το widget δεν προσομοιώνει ανάδραση.
  • Εντολές κατά τη διάρκεια διακοπής. Οι εντολές με QoS 1 ή 2 τοποθετούνται σε ουρά όσο ο broker δεν είναι προσβάσιμος και παραδίδονται κατά την επανασύνδεση· οι εντολές με QoS 0 προς μη προσβάσιμο broker αποτυγχάνουν και καταγράφονται στο ιστορικό.
  • Προστασία. Payloads μεγαλύτερα από 64 KB απορρίπτονται με σχετική προειδοποίηση· ανοίγεται μία μόνο συνδρομή ανά διακριτό φίλτρο topic, ανεξάρτητα από το πόσα αντικείμενα το μοιράζονται.

Παράδειγμα εφαρμογής — dimmable λαμπτήρας Zigbee2MQTT

Το Zigbee2MQTT δημοσιεύει την κατάσταση του λαμπτήρα ως JSON στο zigbee2mqtt/lamp ({"state":"ON","brightness":178}) και δέχεται εντολές στο zigbee2mqtt/lamp/set. Το εύρος φωτεινότητας είναι 0–254.

  1. Δημιουργήστε μια σύνδεση MQTT για τον broker (βλ. «Connections»): διεύθυνση broker 192.168.1.10, θύρα 1883, διαπιστευτήρια του Zigbee2MQTT broker εάν υπάρχουν. Κάντε κλικ στο Test — πρέπει να επιβεβαιώσει επιτυχή σύνδεση.
  2. Στο Devices, προσθέστε ένα widget Dimmer με όνομα «Office lamp». Στο Protocol, επιλέξτε τη σύνδεση του broker σας, βάσει του ονόματος που ορίσατε. Η συσκευή δημιουργείται με τέσσερα αντικείμενα: Switch ON/OFF, Switch Feedback, Dimming setpoint και Dimming feedback.
  3. Στο Switch ON/OFF (εντολή on/off): πληκτρολογήστε zigbee2mqtt/lamp/set στο Topic και κάντε κλικ στο Use "…" στη λίστα. Ορίστε το ON token σε ON, το OFF token σε OFF και το Payload template σε {"state":"{{value}}"}. Πληκτρολογήστε τα tokens: οι γκρι ενδείξεις ON και OFF αποτελούν απλώς υποδείξεις, και χωρίς tokens ο διακόπτης δημοσιεύει true ή false.
  4. Στο Switch Feedback (κατάσταση on/off): κάντε κλικ στο Scan broker, επιλέξτε zigbee2mqtt/lamp, και μετά κάντε κλικ στο πεδίο state — ο επεξεργαστής ορίζει το JSON path state και τα tokens ON/OFF.
  5. Στο Dimming setpoint (εντολή φωτεινότητας): topic zigbee2mqtt/lamp/set, Payload template {"brightness":{{value}}}, Scale 0.3937, Offset 0.
  6. Στο Dimming feedback (κατάσταση φωτεινότητας): topic zigbee2mqtt/lamp, κάντε κλικ στο πεδίο brightness, και ορίστε το ίδιο Scale 0.3937. Αυτό αντιστοιχεί περίπου στο 100/254: οι εισερχόμενες τιμές πολλαπλασιάζονται με αυτό (το Zigbee 0–254 μετατρέπεται σε 0–100 %), οι εξερχόμενες τιμές διαιρούνται με αυτό (το 0–100 % μετατρέπεται σε 0–254).
  7. Κάντε κλικ στο Save object σε κάθε αντικείμενο, στη συνέχεια κάντε κλικ στο Apply changes στην πλευρική γραμμή και επιβεβαιώστε.
  8. Ρυθμίστε τη φωτεινότητα στο 50 % στην εφαρμογή. Ο λαμπτήρας λαμβάνει περίπου 127, και η ανάδρασή του επιστρέφει περίπου 50 %. Το slider επιβεβαιώνει την τιμή από το state topic, και ο χειρισμός του λαμπτήρα από το φυσικό του τηλεχειριστήριο ενημερώνει επίσης την εφαρμογή.

📘 Σημείωση: Η τιμή που αποστέλλεται δεν στρογγυλοποιείται: το 50 % δημοσιεύεται ως 127.000254. Ο επεξεργαστής αντικειμένου δεν διαθέτει πεδίο τύπου δεδομένων, επομένως δεν μπορείτε να ορίσετε ένα command object να στέλνει ακέραιο αριθμό. Βεβαιωθείτε ότι ο λαμπτήρας σας δέχεται δεκαδική τιμή φωτεινότητας.

Παραμετροποίηση αντικειμένων MQTT

Τα αντικείμενα MQTT διαμορφώνονται στο παράθυρο ρυθμίσεων αντικειμένου (ανοίξτε το αντικείμενο με το Edit, βλ. «Object Settings, Logging & Notifications»). Το τμήμα που αφορά το πρωτόκολλο κατανέμεται σε τρεις κάρτες:

MQTT topic configuration

ΠεδίοΠεριγραφή
TopicΤο topic στο οποίο εγγράφεται το αντικείμενο (In: state topic — επιτρέπονται wildcards + και #) ή στο οποίο δημοσιεύει (Out: command topic — χωρίς wildcards). Επιλέξτε το από τη λίστα μετά το Scan broker, ή πληκτρολογήστε το. Η αποθηκευμένη διεύθυνση είναι <connection>:<topic>.
Scan brokerΠαρακολουθεί τον broker για λίγα δευτερόλεπτα και παραθέτει τα topics που εντοπίστηκαν, το καθένα με το Last payload και ένδειξη retained. Με επιλεγμένο topic, ένα payload τύπου JSON εμφανίζει τα πεδία του στην ενότητα Pick the value this object should follow — με ένα κλικ συμπληρώνονται το JSON path, ο τύπος δεδομένων και τα tokens ON/OFF· ένα απλό payload προσφέρει την επιλογή Use the raw payload as .
Payload formatRaw value (ολόκληρο το payload αποτελεί την τιμή) ή JSON με JSON path (state, sensor.temperature, values[0]).
ON token / OFF tokenΔυαδικά αντικείμενα: τι γράφει και τι αναμένει η συσκευή για true/false (π.χ. ON / OFF).

Publishing (αντικείμενα εξόδου)

ΠεδίοΠεριγραφή
Payload templateΠροαιρετικό. Το {{value}} αντικαθίσταται από την τιμή· αφήστε το κενό για δημοσίευση της απλής τιμής.
QoSBroker default, 0, 1 ή 2 — η εγγύηση παράδοσης για αυτήν την εντολή.
Retain published messagesΑπενεργοποιημένο από προεπιλογή. Μια εντολή με retain εκτελείται εκ νέου κάθε φορά που επανασυνδέεται η συσκευή — διατηρείτε retain στην κατάσταση, όχι στις εντολές.

Subscribing (αντικείμενα εισόδου)

ΠεδίοΠεριγραφή
Minimum interval (ms)Η συχνότητα αποστολής για αισθητήρες με υψηλό ρυθμό δεδομένων περιορίζεται σε αυτό το όριο (προεπιλογή 100 ms)· η τελευταία τιμή παραδίδεται πάντα. Η τιμή 0 το απενεργοποιεί.
Scale / OffsetΑριθμητικά αντικείμενα: τιμή = raw × scale + offset στην είσοδο, το αντίστροφο κατά τη δημοσίευση.

Τα πεδία αποθηκεύονται ως η συμβολοσειρά τύπου δεδομένων του αντικειμένου (π.χ. BOOL:PATH=state:ON=ON:OFF=OFF) — η σύνταξη, ο topic browser και ένα παράδειγμα εφαρμογής περιγράφονται στην παραπάνω ενότητα MQTT.

Ρυθμίσεις αντικειμένου MQTT για αντικείμενο κατάστασης φωτεινότητας.

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

Χρειάζομαι ξεχωριστό MQTT broker;

Χρειάζεστε έναν broker, αλλά μπορεί να είναι ένας υπάρχων ή ο ενσωματωμένος broker του HyperVisu. Δημιουργήστε μια σύνδεση προς τον επιλεγμένο broker.

Πώς βρίσκω το σωστό state topic και πεδίο JSON;

Χρησιμοποιήστε το Scan broker στον επεξεργαστή αντικειμένου, επιλέξτε ένα topic και ορίστε το πεδίο που πρέπει να παρακολουθεί το αντικείμενο.

Μπορεί ένα command topic να περιέχει wildcards;

Όχι. Οι εισερχόμενες εγγραφές μπορούν να χρησιμοποιούν + και #, αλλά οι εξερχόμενες εντολές απαιτούν συγκεκριμένο topic.

Πρέπει να ενεργοποιώ το retain στα μηνύματα εντολών;

Γενικά όχι. Οι εντολές με retain εκτελούνται ξανά κάθε φορά που επανασυνδέεται η συσκευή. Τα μηνύματα κατάστασης με retain είναι χρήσιμα για την επαναφορά των προβαλλόμενων τιμών.

Γιατί μια εντολή δεν επιβεβαιώνει αμέσως την κατάσταση της συσκευής;

Το HyperVisu περιμένει τη δημοσίευση κατάστασης από την ίδια τη συσκευή αντί να παράγει υποθετική ανάδραση μόνο από την εντολή.

Χρειάζεται επανεκκίνηση ο server όταν επανέλθει ο broker;

Όχι. Επαναλαμβάνει αυτόματα τις αποτυχημένες συνδέσεις με τον broker και επανεγγράφεται στα topics κατά την επανασύνδεση.

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

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

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