MQTT
MQTT स्क्रीन एक MQTT क्लाइंट है, जो किसी ब्रोकर को देखने और उसमें जो है उसे बदलने के लिए है। कनेक्ट करें, और डिफ़ॉल्ट रूप से यह # को सब्सक्राइब करता है: ब्रोकर में जो भी टॉपिक हैं, वे अपने नवीनतम मान के साथ एक ट्री बनकर जुड़ते जाते हैं। वहाँ से आप पब्लिश करते हैं, कोई retained मान साफ़ करते हैं, किसी टॉपिक को सिग्नल के रूप में सहेजते हैं या उसे एक प्रयोग चरण बनाते हैं।
Signal Lab सादे TCP पर MQTT 3.1.1 बोलता है, सब्सक्राइब, पब्लिश और लास्ट-विल के लिए QoS 0, 1 और 2 के साथ। कोई MQTT 5 नहीं और कोई TLS नहीं: जो ब्रोकर केवल mqtts:// या MQTT 5 क्लाइंट स्वीकार करता है, उस तक पहुँचा नहीं जा सकता।
कनेक्ट करना
- MQTT खोलें।
- ब्रोकर होस्ट और पोर्ट दर्ज करें।
- क्लाइंट ID को वैसा ही छोड़ दें, जब तक ब्रोकर कोई ख़ास id न चाहे। उपयोगकर्ता और पासवर्ड केवल तभी जोड़ें जब ब्रोकर माँगे।
- कनेक्ट करें दबाएँ।
कनेक्ट करना TCP कनेक्शन खोलता है और बाकी किसी चीज़ से पहले MQTT handshake पूरा करता है, इसलिए ग़लत पासवर्ड या बंद पोर्ट वहीं बताया जाता है। कनेक्ट रहते कनेक्शन के फ़ील्ड लॉक हो जाते हैं; डिस्कनेक्ट करें इसे बंद करता है। कनेक्शन कंसोल पट्टी में एक जॉब है और वहाँ से भी रोका जा सकता है।
| फ़ील्ड | क्या | डिफ़ॉल्ट |
|---|---|---|
| ब्रोकर होस्ट | ब्रोकर का IP पता या होस्ट नाम | 127.0.0.1 |
| पोर्ट | ब्रोकर का पोर्ट | 1883 |
| क्लाइंट ID | ब्रोकर पर आपके क्लाइंट का नाम। यह ख़ाली नहीं हो सकता, और वहाँ अद्वितीय होना चाहिए: वही id वाला दूसरा क्लाइंट पहले को हटा देता है। | signal-lab- और छह रैंडम hex अंक, ऐप के हर शुरू होने पर नया |
| उपयोगकर्ता, पासवर्ड | केवल तभी भेजे जाते हैं जब ब्रोकर को उनकी ज़रूरत हो — सादे टेक्स्ट में, क्योंकि कोई TLS नहीं है। उपयोगकर्ता नाम के बिना पासवर्ड बिलकुल नहीं भेजा जाता: MQTT 3.1.1 उसे ले नहीं जा सकता। | ख़ाली |
| कीप-अलाइव (s) | कितने सेकंड कनेक्शन चुप रह सकता है। Signal Lab हर आधे पर ब्रोकर को ping करता है; ब्रोकर उससे 1.5 गुना देर चुप रहने वाले क्लाइंट को गिरा देता है। 0 ping बंद कर देता है। | 60 |
| clean session | चालू: हर कनेक्शन बिना किसी रखी हुई सब्सक्रिप्शन और बिना कतार में रखे संदेश के शुरू होता है। बंद ब्रोकर से कहता है कि वह इन्हें इस क्लाइंट id के लिए कनेक्शनों के बीच रखे। | चालू |
| कनेक्ट होने पर स्कैन करें और उसका QoS | कनेक्शन तैयार होते ही सब्सक्राइब किया जाने वाला फ़िल्टर; # हर टॉपिक है। ख़ाली: कोई नहीं। | #, QoS 0 |
| मेरा कनेक्शन टूटने पर मेरी ओर से एक संदेश पब्लिश करें | ब्रोकर को एक लास्ट-विल दें (नीचे) | बंद |
ब्रोकर के पास TCP कनेक्शन स्वीकार करने के लिए 6 सेकंड हैं और handshake का जवाब देने के लिए 6 और।
लास्ट-विल
लास्ट-विल वह संदेश है जो ब्रोकर आपके लिए रखता है और ख़ुद पब्लिश करता है, अगर आपका कनेक्शन बिना ठीक से विदा कहे मर जाए। उपस्थिति आम तौर पर इसी तरह बनती है: कोई डिवाइस अपने status टॉपिक पर online पब्लिश करता है, और उसका will उसी टॉपिक को off पर सेट कर देता है।
मेरा कनेक्शन टूटने पर मेरी ओर से एक संदेश पब्लिश करें पर टिक करके कहाँ पब्लिश करें और क्या पब्लिश करें सेट करें (डिफ़ॉल्ट off)। will QoS 2 पर और retained पब्लिश किया जाता है। टॉपिक के बिना, कोई will नहीं भेजा जाता।
सब्सक्राइब करना
scan फ़िल्टर कनेक्ट होते समय ही सब्सक्राइब हो जाता है। और के लिए:
- फ़िल्टर जोड़ें में एक टॉपिक फ़िल्टर टाइप करें।
- उसका QoS चुनें।
- सब्सक्राइब करें या Enter दबाएँ।
फ़िल्टर वाइल्डकार्ड वाला एक टॉपिक है:
| वाइल्डकार्ड | किसके लिए | उदाहरण |
|---|---|---|
+ | ठीक एक स्तर | sensors/+/state sensors/door/state से मेल खाता है |
# | उसके नीचे हर स्तर, केवल अंतिम अक्षर | sensors/# sensors/door/state और sensors दोनों से मेल खाता है |
सब्सक्रिप्शन हर फ़िल्टर को उसके साथ सूचीबद्ध करता है जो ब्रोकर ने दिया: qos0, qos1 या qos2 — ब्रोकर आपकी माँग से कम भी दे सकता है — या अस्वीकृत। हटाएँ किसी एक से अनसब्सक्राइब करता है।
| QoS | डिलीवरी |
|---|---|
| 0 | अधिकतम एक बार: भेजा और भुला दिया |
| 1 | कम से कम एक बार: स्वीकार किया, दो बार भी पहुँच सकता है |
| 2 | ठीक एक बार: दो-चरणीय handshake; दोबारा डिलीवरी दो बार नहीं दिखती |
टॉपिक ट्री
हर आने वाला संदेश टॉपिक में जाता है, जो टॉपिक स्तरों का एक ट्री है। कोई टॉपिक अपना नवीनतम मान दिखाता है, वह मान retained हो तो एक R, और एक से ज़्यादा संदेश होने पर कि उसके कितने संदेश रहे। किसी स्तर को खोलने या बंद करने के लिए उस पर क्लिक करें।
- ट्री के ऊपर के फ़ील्ड में टाइप करें ताकि केवल वे टॉपिक सूचीबद्ध हों जिनके पाथ या नवीनतम मान में वह टेक्स्ट है।
- ट्री के ऊपर टॉपिकों की संख्या, कितने retained मान रखते हैं और, कनेक्ट रहते, वह ब्रोकर जिस पर आप सुन रहे हैं।
- पेलोड टेक्स्ट के रूप में दिखाए जाते हैं; जो बाइट UTF-8 नहीं हैं, वे replacement अक्षरों के रूप में दिखते हैं।
- साफ़ करें ट्री ख़ाली कर देता है। और कुछ नहीं: स्क्रीन बदलने या डिस्कनेक्ट करने पर यह वैसा ही रहता है, तब तक जब तक ऐप बंद न हो।
संदेश स्क्रीन तक बैचों में, सेकंड में दस बार पहुँचते हैं। जब कोई ब्रोकर दसवें सेकंड में 4000 से ज़्यादा संदेश भेजे, तो उस बैच के सबसे पुराने ट्री से छोड़ दिए जाते हैं और उसके ऊपर "not shown" के रूप में गिने जाते हैं।
किसी टॉपिक का पैनल
मान वाला कोई टॉपिक चुनें और उसे ट्री के नीचे देखें: मान, QoS, retain, बाइट, संदेश और अंतिम बार देखा गया। इसके बटन:
| बटन | क्या करता है |
|---|---|
| पब्लिश में लोड करें | टॉपिक, मान, QoS और retain फ़्लैग को पब्लिश में कॉपी करता है |
| इसकी प्रतीक्षा करें | इस टॉपिक पर, इस ब्रोकर पर, कोई भी पेलोड, 2000 ms टाइमआउट के साथ, खुले प्रयोग में एक Wait for MQTT चरण जोड़ता है |
| retained साफ़ करें | retained मान हटाता है (नीचे) |
| सिग्नल के रूप में सहेजें | टॉपिक और उसके नवीनतम मान को कैप्चर किए गए फ़ोल्डर में एक सिग्नल के रूप में रखता है |
पब्लिश करना
- कनेक्ट करें।
- पब्लिश के नीचे, टॉपिक और पेलोड दर्ज करें।
- QoS चुनें, और अगर ब्रोकर को संदेश को बाद में सब्सक्राइब करने वाले हर क्लाइंट के लिए टॉपिक का मान बनाए रखना है तो retain पर टिक करें।
- पब्लिश करें दबाएँ।
कंसोल हर पब्लिश की पुष्टि करता है: QoS 0 के लिए तुरंत, QoS 1 और 2 के लिए जब ब्रोकर उसे स्वीकार कर लेता है। पब्लिश करने वाले टॉपिक में कोई वाइल्डकार्ड नहीं होता और वह ख़ाली नहीं होता: + या # वाला टॉपिक कुछ भी भेजे जाने से पहले अस्वीकार कर दिया जाता है, उसी संदेश के साथ जो कोई सिग्नल, कोई चरण और signallab send mqtt देते हैं, और कनेक्शन जैसा था वैसा रहता है। केवल सब्सक्रिप्शन ही वाइल्डकार्ड वाले फ़िल्टर लेता है।
retained मान साफ़ करना
एक retained मान ब्रोकर पर तब तक रहता है जब तक उसे बदला न जाए, और जो भी क्लाइंट सब्सक्राइब करता है उसे वह सबसे पहले मिलता है — पुराना मान इसका एक क्लासिक कारण है कि कोई डिवाइस ग़लत हालत में बूट होता है। उसे हटाने का एकमात्र तरीका है retain के साथ एक ख़ाली पेलोड पब्लिश करना।
किसी टॉपिक के पैनल में retained साफ़ करें यही करता है: इसे दबाएँ, फिर साफ़ करें?। यह आपके कनेक्शन पर QoS 1 पर ख़ाली retained पेलोड पब्लिश करता है। यह केवल कनेक्ट रहते और तभी उपलब्ध होता है जब टॉपिक का नवीनतम मान retained हो। आप हाथ से भी यही कर सकते हैं: retain पर टिक करके एक ख़ाली पेलोड।
WARNING
साफ़ करना हर क्लाइंट के लिए एक साथ ब्रोकर बदल देता है।
इंस्पेक्टर में
कैप्चर चालू रहते, MQTT ट्रैफ़िक प्रोटोकॉल mqtt के साथ दिखता है:
| स्रोत | क्या | कितने |
|---|---|---|
mqtt | स्क्रीन का कनेक्शन जो पब्लिश करता है; ख़ाली retained पब्लिश का फ़ैसला clears retained होता है | हर एक |
mqtt | कनेक्शन को मिलने वाले संदेश | हर 200 ms में अधिकतम एक |
mqtt-send | वह पब्लिश जो अपना अलग कनेक्शन लाया: स्क्रीन के सिग्नल के ब्रोकर से कनेक्ट न रहते कोई सिग्नल भेजा गया, कोई चरण, signallab send mqtt (फ़ैसला one-shot) | हर एक |
experiment-wait | MQTT की प्रतीक्षा चरण के सब्सक्रिप्शन को मिलने वाले संदेश, retained replays को छोड़कर | हर एक |
सारांश topic = payload पढ़ता है, जहाँ लागू हों वहाँ QoS और retained के साथ। देखें इंस्पेक्टर।
सहेजना और दोबारा उपयोग
- सिग्नल के रूप में सहेजें। पब्लिश के नीचे सहेजें… ब्रोकर (कनेक्शन का ब्रोकर होस्ट और पोर्ट), टॉपिक, पेलोड, QoS और retain फ़्लैग सिग्नल लाइब्रेरी में रखता है; पब्लिश पैनल में Ctrl+S यही करता है, और पैनल उससे जुड़ जाने पर सिग्नल को अपडेट करता है। देखें सिग्नल।
- MQTT सिग्नल भेजना। जब तक यह स्क्रीन ब्रोकर से कनेक्ट है (सिग्नल वही होस्ट नाम दे, केस छोड़कर, और वही पोर्ट; सिग्नल कोई पोर्ट न दे तो
1883), लाइब्रेरी से भेजा गया सिग्नल उस कनेक्शन पर, उसकी client id और क्रेडेंशियल के साथ जाता है। वरना — कनेक्ट न होना, या किसी और ब्रोकर से कनेक्ट होना — यह अपने ब्रोकर तक अपना अलग कनेक्शन खोलता है — एक नई client id, कोई उपयोगकर्ता नाम नहीं — पब्लिश करता है, अपने QoS के अनुसार स्वीकृति की प्रतीक्षा करता है, और डिस्कनेक्ट कर देता है। नाम खोजे नहीं जाते, इसलिएlocalhostऔर127.0.0.1अलग ब्रोकर गिने जाते हैं। लाइब्रेरी कोई पासवर्ड नहीं रखती। - किसी प्रयोग में। सहेजा गया MQTT सिग्नल प्रयोग के नोड जोड़ें मेनू में सहेजे गए सिग्नल के नीचे चुना जा सकता है, जो उसे एक MQTT पब्लिश चरण बना देता है।
प्रयोगों में
| चरण | क्या करता है |
|---|---|
| MQTT पब्लिश | कनेक्ट करता है, एक संदेश पब्लिश करता है और डिस्कनेक्ट करता है — न उपयोगकर्ता नाम न पासवर्ड, एक clean सेशन, 15 सेकंड के भीतर। विवरण |
| MQTT की प्रतीक्षा | रन शुरू होते ही सब्सक्राइब करता है और ऐसे टॉपिक फ़िल्टर पर उस संदेश की प्रतीक्षा करता है जिसका पेलोड मेल खाता हो; सब्सक्राइब करते समय दोबारा दिए गए retained मान अनदेखे किए जाते हैं। विवरण |
| एमुलेटर | रन का अपना एक MQTT ब्रोकर। विवरण |
दोनों चरण लॉग इन नहीं करते, इसलिए उन्हें ऐसे ब्रोकर की ज़रूरत है जो बिना उपयोगकर्ता नाम वाले क्लाइंट स्वीकार करे।
ब्रोकर एमुलेटर
Signal Lab ख़ुद ब्रोकर भी बन सकता है: एक MQTT ब्रोकर एमुलेटर रूट करता है कि क्लाइंट क्या पब्लिश करते हैं, उन तक जो सब्सक्राइब किए — 3.1.1, सादा TCP, QoS 0, 1 और 2, retained संदेश, wills, एक वैकल्पिक लॉगिन — और किसी डिवाइस की तरह नियमों से जवाब देता है। बिना असली ब्रोकर के टेस्ट करने के लिए अपने उपकरण और इस स्क्रीन को उसकी ओर मोड़ें। देखें एमुलेटर।
कमांड लाइन से
signallab send mqtt अपने अलग कनेक्शन से एक संदेश पब्लिश करता है:
signallab send mqtt 127.0.0.1:1883 lab/light/1/set on --qos 1
signallab send mqtt 127.0.0.1:1883 lab/light/1/state "" --retain✔ lab/light/1/set → 127.0.0.1:1883 · 2 B · qos1दूसरी पंक्ति एक retained मान साफ़ करती है। पोर्ट के बिना, ब्रोकर 1883 पर है। यह कोई क्रेडेंशियल उपयोग नहीं करता। यह 0 के साथ निकलता है जब ब्रोकर ने संदेश लिया, 1 जब वह पहुँचा नहीं जा सका या उसने अस्वीकार किया। देखें कमांड लाइन।
समस्याएँ
| जो आप देखते हैं | सामान्य कारण |
|---|---|
… refused the connection — nothing is listening on that port | उस पते और पोर्ट पर कोई ब्रोकर नहीं। |
… accepted the connection but did not answer in time — is it an MQTT broker? | वहाँ कुछ सुनता है, पर MQTT नहीं बोलता, या उसे TLS पर बोलता है। |
… answered with something other than MQTT 3.1.1 | यह MQTT ब्रोकर नहीं, या ऐसा ब्रोकर जिसने कुछ ऐसा भेजा जो Signal Lab पढ़ नहीं सकता। |
… does not accept MQTT 3.1.1 clients | ब्रोकर केवल MQTT 5 लेता है। |
… rejected the client ID — choose another one | id बहुत लंबी है या उसमें ऐसे अक्षर हैं जो ब्रोकर स्वीकार नहीं करता। |
… rejected the username or password | ग़लत क्रेडेंशियल, या उपयोगकर्ता नाम के बिना पासवर्ड। |
… did not authorize this client — check its access rules | ब्रोकर के access नियम इस क्लाइंट को अस्वीकार करते हैं। |
… is unavailable right now — try again later | ब्रोकर चालू है पर क्लाइंट नहीं ले रहा। |
Enter a client ID — brokers refuse an empty one | क्लाइंट ID ख़ाली है। |
A publish topic cannot contain the wildcards + or # | जिस टॉपिक पर पब्लिश करना है उसमें + या # है। वे सब्सक्राइब करने के लिए हैं; एक बार में एक टॉपिक पर पब्लिश करें। |
| कोई फ़िल्टर अस्वीकृत दिखाता है | ब्रोकर के access नियम उसे मना करते हैं, या फ़िल्टर ख़राब है (# अंतिम नहीं, + दूसरे अक्षरों के साथ एक ही स्तर साझा कर रहा है)। |
| कनेक्ट होने के एक पल बाद कनेक्शन गिर जाता है | वही क्लाइंट ID लेकर कोई दूसरा क्लाइंट कनेक्ट हुआ। |
| ट्री में कुछ नहीं दिखता | scan फ़िल्टर ख़ाली है, या ब्रोकर इस क्लाइंट को कुछ देखने नहीं देता। |
हर त्रुटि संदेश त्रुटि संदेश में सूचीबद्ध है।