You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/mr/1-getting-started/lessons/4-connect-internet/README.md

452 lines
61 KiB

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "71b5040e0b3472f1c0949c9b55f224c0",
"translation_date": "2025-08-27T12:23:28+00:00",
"source_file": "1-getting-started/lessons/4-connect-internet/README.md",
"language_code": "mr"
}
-->
# तुमचं डिव्हाइस इंटरनेटला कसं जोडायचं
![या धड्याचं स्केच नोट](../../../../../translated_images/lesson-4.7344e074ea68fa545fd320b12dce36d72dd62d28c3b4596cb26cf315f434b98f.mr.jpg)
> स्केच नोट [नित्य नरसिंहन](https://github.com/nitya) यांनी तयार केले आहे. मोठ्या आवृत्तीसाठी प्रतिमेवर क्लिक करा.
हा धडा [Hello IoT मालिका](https://youtube.com/playlist?list=PLmsFUfdnGr3xRts0TIwyaHyQuHaNQcb6-) चा भाग म्हणून [Microsoft Reactor](https://developer.microsoft.com/reactor/?WT.mc_id=academic-17441-jabenn) मध्ये शिकवला गेला. हा धडा दोन व्हिडिओंमध्ये शिकवला गेला - एक तासाचा धडा आणि एक तासाची ऑफिस आवराची सत्र ज्यामध्ये धड्याचे भाग अधिक सखोलपणे समजावून सांगितले आणि प्रश्नांची उत्तरे दिली.
[![धडा 4: तुमचं डिव्हाइस इंटरनेटला कसं जोडायचं](https://img.youtube.com/vi/O4dd172mZhs/0.jpg)](https://youtu.be/O4dd172mZhs)
[![धडा 4: तुमचं डिव्हाइस इंटरनेटला कसं जोडायचं - ऑफिस आवर](https://img.youtube.com/vi/j-cVCzRDE2Q/0.jpg)](https://youtu.be/j-cVCzRDE2Q)
> 🎥 वर दिलेल्या प्रतिमांवर क्लिक करून व्हिडिओ पाहा
## धड्यापूर्वीचा प्रश्नमंजूषा
[धड्यापूर्वीचा प्रश्नमंजूषा](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/7)
## परिचय
IoT मधील **I** म्हणजे **Internet** - क्लाउड कनेक्टिव्हिटी आणि सेवा ज्यामुळे IoT डिव्हाइसची अनेक वैशिष्ट्ये शक्य होतात, जसे की डिव्हाइसशी जोडलेल्या सेन्सर्समधून मोजमाप गोळा करणे किंवा अॅक्च्युएटर्स नियंत्रित करण्यासाठी संदेश पाठवणे. IoT डिव्हाइस सामान्यतः एकाच क्लाउड IoT सेवेशी मानक संप्रेषण प्रोटोकॉल वापरून जोडले जातात, आणि ती सेवा तुमच्या IoT अॅप्लिकेशनशी जोडलेली असते, जसे की AI सेवा डेटा आधारित स्मार्ट निर्णय घेण्यासाठी किंवा नियंत्रण आणि अहवालासाठी वेब अॅप्स.
> 🎓 सेन्सर्समधून गोळा केलेला डेटा आणि क्लाउडला पाठवलेला डेटा टेलिमेट्री म्हणून ओळखला जातो.
IoT डिव्हाइस क्लाउडमधून संदेश प्राप्त करू शकतात. हे संदेश सहसा आदेश असतात - म्हणजे एखादी कृती करण्यासाठी सूचना, अंतर्गत (जसे की रीबूट किंवा फर्मवेअर अपडेट) किंवा अॅक्च्युएटर वापरून (जसे की दिवा चालू करणे).
या धड्यात IoT डिव्हाइस क्लाउडशी कनेक्ट होण्यासाठी वापरू शकणाऱ्या काही संप्रेषण प्रोटोकॉल्सची ओळख करून दिली जाईल, आणि ते पाठवू किंवा प्राप्त करू शकणाऱ्या डेटाच्या प्रकारांबद्दल चर्चा केली जाईल. तुम्ही यावर प्रत्यक्ष काम कराल, तुमच्या नाईटलाइटमध्ये इंटरनेट नियंत्रण जोडाल, LED नियंत्रण लॉजिक 'सर्व्हर' कोडमध्ये हलवून जो स्थानिक पातळीवर चालतो.
या धड्यात आपण कव्हर करू:
* [संप्रेषण प्रोटोकॉल्स](../../../../../1-getting-started/lessons/4-connect-internet)
* [Message Queueing Telemetry Transport (MQTT)](../../../../../1-getting-started/lessons/4-connect-internet)
* [टेलिमेट्री](../../../../../1-getting-started/lessons/4-connect-internet)
* [आदेश](../../../../../1-getting-started/lessons/4-connect-internet)
## संप्रेषण प्रोटोकॉल्स
IoT डिव्हाइस इंटरनेटशी संवाद साधण्यासाठी अनेक लोकप्रिय संप्रेषण प्रोटोकॉल्स वापरतात. सर्वात लोकप्रिय प्रोटोकॉल्स काही प्रकारच्या ब्रोकरद्वारे प्रकाशित/सदस्यता घेण्याच्या संदेशांवर आधारित असतात. IoT डिव्हाइस ब्रोकरशी कनेक्ट होतात आणि टेलिमेट्री प्रकाशित करतात आणि आदेशांसाठी सदस्यता घेतात. क्लाउड सेवा देखील ब्रोकरशी कनेक्ट होतात आणि सर्व टेलिमेट्री संदेशांसाठी सदस्यता घेतात आणि विशिष्ट डिव्हाइस किंवा डिव्हाइसच्या गटांना आदेश प्रकाशित करतात.
![IoT डिव्हाइस ब्रोकरशी कनेक्ट होतात, टेलिमेट्री प्रकाशित करतात आणि आदेशांसाठी सदस्यता घेतात. क्लाउड सेवा ब्रोकरशी कनेक्ट होतात, सर्व टेलिमेट्रीसाठी सदस्यता घेतात आणि विशिष्ट डिव्हाइसला आदेश पाठवतात.](../../../../../translated_images/pub-sub.7c7ed43fe9fd15d4e1f81a3fd95440413c457acd9bcbe9a43341e30e88db5264.mr.png)
MQTT हा IoT डिव्हाइससाठी सर्वात लोकप्रिय संप्रेषण प्रोटोकॉल आहे आणि तो या धड्यात कव्हर केला आहे. इतर प्रोटोकॉल्समध्ये AMQP आणि HTTP/HTTPS यांचा समावेश आहे.
## Message Queueing Telemetry Transport (MQTT)
[MQTT](http://mqtt.org) हा हलका, ओपन स्टँडर्ड मेसेजिंग प्रोटोकॉल आहे जो डिव्हाइस दरम्यान संदेश पाठवू शकतो. 1999 मध्ये तेलाच्या पाइपलाइन्सचे निरीक्षण करण्यासाठी याची रचना करण्यात आली होती, आणि 15 वर्षांनंतर IBM ने याला ओपन स्टँडर्ड म्हणून रिलीज केले.
MQTT मध्ये एक ब्रोकर आणि अनेक क्लायंट्स असतात. सर्व क्लायंट्स ब्रोकरशी कनेक्ट होतात, आणि ब्रोकर संबंधित क्लायंट्सकडे संदेश रूट करतो. संदेश थेट एखाद्या क्लायंटला पाठवण्याऐवजी नामांकित टॉपिक्स वापरून रूट केले जातात. क्लायंट एखाद्या टॉपिकवर प्रकाशित करू शकतो, आणि त्या टॉपिकसाठी सदस्यता घेतलेल्या कोणत्याही क्लायंटला संदेश प्राप्त होतो.
![IoT डिव्हाइस /telemetry टॉपिकवर टेलिमेट्री प्रकाशित करत आहे, आणि क्लाउड सेवा त्या टॉपिकसाठी सदस्यता घेत आहे](../../../../../translated_images/mqtt.cbf7f21d9adc3e17548b359444cc11bb4bf2010543e32ece9a47becf54438c23.mr.png)
✅ संशोधन करा. जर तुमच्याकडे अनेक IoT डिव्हाइस असतील, तर तुम्ही तुमचा MQTT ब्रोकर सर्व संदेश हाताळण्यासाठी कसा सक्षम करू शकता?
### तुमचं IoT डिव्हाइस MQTT शी कनेक्ट करा
तुमच्या नाईटलाइटमध्ये इंटरनेट नियंत्रण जोडण्याचा पहिला भाग म्हणजे MQTT ब्रोकरशी कनेक्ट करणे.
#### कार्य
तुमचं डिव्हाइस MQTT ब्रोकरशी कनेक्ट करा.
या धड्याच्या या भागात, तुम्ही तुमचं IoT नाईटलाइट इंटरनेटशी कनेक्ट कराल जेणेकरून ते दूरस्थपणे नियंत्रित करता येईल. या धड्याच्या पुढील भागात, तुमचं IoT डिव्हाइस MQTT वर एक टेलिमेट्री संदेश सार्वजनिक MQTT ब्रोकरला प्रकाश पातळीसह पाठवेल, जिथे तो तुम्ही लिहिलेल्या काही सर्व्हर कोडद्वारे उचलला जाईल. हा कोड प्रकाश पातळी तपासेल आणि डिव्हाइसला LED चालू किंवा बंद करण्यासाठी सांगणारा आदेश संदेश परत पाठवेल.
अशा सेटअपसाठी वास्तविक जगातील उपयोग प्रकरण म्हणजे अनेक प्रकाश सेन्सर्समधून डेटा गोळा करणे आणि नंतर प्रकाश चालू करण्याचा निर्णय घेणे, अशा ठिकाणी जिथे अनेक दिवे असतात, जसे की स्टेडियम. हे दिवे चालू होण्यापासून रोखू शकते जर फक्त एक सेन्सर ढग किंवा पक्ष्यांमुळे झाकलेला असेल, पण इतर सेन्सर्स पुरेसा प्रकाश शोधत असतील.
✅ कोणत्या परिस्थितीत अनेक सेन्सर्समधून डेटा गोळा करणे आणि आदेश पाठवण्यापूर्वी त्याचे मूल्यांकन करणे आवश्यक आहे?
या असाइनमेंटचा भाग म्हणून MQTT ब्रोकर सेट करण्याच्या क्लिष्टतेशी व्यवहार करण्याऐवजी, तुम्ही [Eclipse Mosquitto](https://www.mosquitto.org) चालवणाऱ्या सार्वजनिक चाचणी सर्व्हरचा वापर करू शकता, जो एक ओपन-सोर्स MQTT ब्रोकर आहे. हा चाचणी ब्रोकर [test.mosquitto.org](https://test.mosquitto.org) येथे सार्वजनिकपणे उपलब्ध आहे, आणि खाते सेट करण्याची आवश्यकता नाही, ज्यामुळे तो MQTT क्लायंट्स आणि सर्व्हर्सची चाचणी करण्यासाठी एक उत्कृष्ट साधन बनतो.
> 💁 हा चाचणी ब्रोकर सार्वजनिक आणि असुरक्षित आहे. तुम्ही प्रकाशित करत असलेल्या गोष्टी ऐकणारा कोणीही असू शकतो, त्यामुळे तो कोणत्याही खाजगी ठेवण्यायोग्य डेटासह वापरू नये.
![असाइनमेंटचा फ्लो चार्ट जो प्रकाश पातळी वाचणे आणि तपासणे, आणि LED नियंत्रित करणे दर्शवतो](../../../../../translated_images/assignment-1-internet-flow.3256feab5f052fd273bf4e331157c574c2c3fa42e479836fc9c3586f41db35a5.mr.png)
तुमचं डिव्हाइस MQTT ब्रोकरशी कनेक्ट करण्यासाठी खालील संबंधित चरणांचे अनुसरण करा:
* [Arduino - Wio Terminal](wio-terminal-mqtt.md)
* [Single-board computer - Raspberry Pi/Virtual IoT device](single-board-computer-mqtt.md)
### MQTT चा सखोल अभ्यास
टॉपिक्समध्ये श्रेणी असू शकते, आणि क्लायंट्स वाइल्डकार्ड्स वापरून श्रेणीच्या वेगवेगळ्या स्तरांसाठी सदस्यता घेऊ शकतात. उदाहरणार्थ, तुम्ही तापमान टेलिमेट्री संदेश `/telemetry/temperature` टॉपिकवर पाठवू शकता आणि आर्द्रता संदेश `/telemetry/humidity` टॉपिकवर पाठवू शकता, नंतर तुमच्या क्लाउड अॅपमध्ये `/telemetry/*` टॉपिकसाठी सदस्यता घेऊन तापमान आणि आर्द्रता टेलिमेट्री संदेश प्राप्त करू शकता.
संदेश गुणवत्ता सेवा (QoS) सह पाठवले जाऊ शकतात, जे संदेश प्राप्त होण्याची हमी ठरवते.
* एकदाच - संदेश फक्त एकदाच पाठवला जातो आणि क्लायंट आणि ब्रोकर वितरणाची पुष्टी करण्यासाठी कोणतेही अतिरिक्त पाऊल उचलत नाहीत (फायर अँड फॉरगेट).
* किमान एकदाच - संदेश पाठवणारा पुष्टी मिळेपर्यंत अनेक वेळा पुन्हा प्रयत्न करतो (पुष्टी दिलेले वितरण).
* अचूक एकदाच - पाठवणारा आणि प्राप्त करणारा दोन-स्तरीय हँडशेकमध्ये गुंततो जेणेकरून संदेशाची फक्त एक प्रत प्राप्त होईल (आश्वासित वितरण).
✅ कोणत्या परिस्थितीत फायर अँड फॉरगेट संदेशाऐवजी आश्वासित वितरण संदेश आवश्यक आहे?
MQTT मध्ये Message Queueing (MQTT मधील आद्याक्षरे) नाव असले तरी, प्रत्यक्षात ते संदेश रांगा समर्थित करत नाही. याचा अर्थ असा की जर क्लायंट डिस्कनेक्ट झाला, नंतर पुन्हा कनेक्ट झाला तर डिस्कनेक्शन दरम्यान पाठवलेले संदेश प्राप्त होणार नाहीत, फक्त ते संदेश जे QoS प्रक्रियेद्वारे प्रक्रिया करण्यास सुरुवात केली होती. संदेशांवर रिटेन्ड फ्लॅग सेट केला जाऊ शकतो. जर हे सेट केले असेल, तर MQTT ब्रोकर टॉपिकवर पाठवलेला शेवटचा संदेश या फ्लॅगसह संग्रहित करेल, आणि नंतर टॉपिकसाठी सदस्यता घेणाऱ्या कोणत्याही क्लायंटला तो पाठवेल. अशा प्रकारे, क्लायंट्स नेहमी नवीनतम संदेश प्राप्त करतील.
MQTT दीर्घ अंतराने संदेशांमध्ये कनेक्शन अद्याप जिवंत आहे की नाही हे तपासण्यासाठी कीप अलाइव्ह फंक्शनला समर्थन देते.
> 🦟 [Eclipse Foundation कडून Mosquitto](https://mosquitto.org) तुम्हाला MQTT चा प्रयोग करण्यासाठी स्वतःचा MQTT ब्रोकर चालवण्याची परवानगी देते, तसेच तुमचा कोड चाचणी करण्यासाठी सार्वजनिक MQTT ब्रोकर प्रदान करते, जो [test.mosquitto.org](https://test.mosquitto.org) येथे होस्ट केला आहे.
MQTT कनेक्शन सार्वजनिक आणि खुले असू शकतात, किंवा वापरकर्तानाव आणि पासवर्ड किंवा प्रमाणपत्रे वापरून एन्क्रिप्ट आणि सुरक्षित केले जाऊ शकतात.
> 💁 MQTT TCP/IP वर संवाद साधते, जो HTTP सारखाच अंतर्निहित नेटवर्क प्रोटोकॉल आहे, पण वेगळ्या पोर्टवर. तुम्ही वेब अॅप्ससह संवाद साधण्यासाठी MQTT वेब सॉकेट्सवर देखील वापरू शकता जे ब्राउझरमध्ये चालत आहेत, किंवा जिथे फायरवॉल किंवा इतर नेटवर्किंग नियम मानक MQTT कनेक्शन ब्लॉक करतात.
## टेलिमेट्री
टेलिमेट्री हा शब्द ग्रीक मूळ शब्दांपासून घेतला आहे ज्याचा अर्थ दूरस्थपणे मोजणे आहे. टेलिमेट्री म्हणजे सेन्सर्समधून डेटा गोळा करणे आणि क्लाउडला पाठवणे.
> 💁 सर्वात जुने टेलिमेट्री डिव्हाइस 1874 मध्ये फ्रान्समध्ये शोधले गेले होते आणि मॉंट ब्लँकवरून पॅरिसला रिअल-टाइम हवामान आणि बर्फाची खोली पाठवली होती. त्याने भौतिक तारा वापरले कारण वायरलेस तंत्रज्ञान त्या वेळी उपलब्ध नव्हते.
धडा 1 मधील स्मार्ट थर्मोस्टॅटच्या उदाहरणाकडे परत पाहूया.
![अनेक रूम सेन्सर्स वापरणारा इंटरनेटशी जोडलेला थर्मोस्टॅट](../../../../../translated_images/telemetry.21e5d8b97649d2ebeb0f68d4b9691ab2d1f7bd629338e131465aff8a614e4d4a.mr.png)
थर्मोस्टॅटमध्ये टेलिमेट्री गोळा करण्यासाठी तापमान सेन्सर्स असतात. त्यात एक तापमान सेन्सर अंगभूत असण्याची शक्यता आहे, आणि तो [Bluetooth Low Energy](https://wikipedia.org/wiki/Bluetooth_Low_Energy) (BLE) सारख्या वायरलेस प्रोटोकॉलद्वारे अनेक बाह्य तापमान सेन्सर्सशी कनेक्ट होऊ शकतो.
तो पाठवू शकणाऱ्या टेलिमेट्री डेटाचे उदाहरण असे असू शकते:
| नाव | मूल्य | वर्णन |
| ---- | ----- | ----------- |
| `thermostat_temperature` | 18°C | थर्मोस्टॅटच्या अंगभूत तापमान सेन्सरने मोजलेले तापमान |
| `livingroom_temperature` | 19°C | दूरस्थ तापमान सेन्सरने मोजलेले तापमान ज्याला `livingroom` असे नाव देण्यात आले आहे जेणेकरून ते असलेल्या खोलीची ओळख पटेल |
| `bedroom_temperature` | 21°C | दूरस्थ तापमान सेन्सरने मोजलेले तापमान ज्याला `bedroom` असे नाव देण्यात आले आहे जेणेकरून ते असलेल्या खोलीची ओळख पटेल |
क्लाउड सेवा नंतर ही टेलिमेट्री डेटा वापरून हीटिंग नियंत्रित करण्यासाठी कोणते आदेश पाठवायचे ते ठरवू शकते.
### तुमच्या IoT डिव्हाइसवरून टेलिमेट्री पाठवा
तुमच्या नाईटलाइटमध्ये इंटरनेट नियंत्रण जोडण्याचा पुढील भाग म्हणजे प्रकाश पातळी टेलिमेट्री MQTT ब्रोकरला टेलिमेट्री टॉपिकवर पाठवणे.
#### कार्य - तुमच्या IoT डिव्हाइसवरून टेलिमेट्री पाठवा
प्रकाश पातळी टेलिमेट्री MQTT ब्रोकरला पाठवा.
डेटा JSON म्हणून एन्कोड केला जातो - JavaScript Object Notation चे संक्षिप्त रूप, की/मूल्य जोड्या वापरून मजकूरात डेटा एन्कोड करण्यासाठी एक मानक.
✅ जर तुम्ही JSON बद्दल ऐकले नसेल, तर तुम्ही [JSON.org दस्तऐवज](https://www.json.org/) वर अधिक जाणून घेऊ शकता.
तुमच्या डिव्हाइसवरून MQTT ब्रोकरला टेलिमेट्री पाठवण्यासाठी खालील संबंधित चरणांचे अनुसरण करा:
* [Arduino - Wio Terminal](wio-terminal-telemetry.md)
* [Single-board computer - Raspberry Pi/Virtual IoT device](single-board-computer-telemetry.md)
### MQTT ब्रोकरकडून टेलिमेट्री प्राप्त करा
टेलिमेट्री पाठवण्यात काही उपयोग नाही जर दुसऱ्या बाजूला ऐकणारे काही नसेल. प्रकाश पातळी टेलिमेट्रीला डेटा प्रक्रिया करण्यासाठी काहीतरी ऐकणे आवश्यक आहे. हा 'सर्व्हर' कोड मोठ्या IoT अॅप्लिकेशनचा भाग म्हणून क्लाउड सेवेला तैनात करण्याचा प्रकार आहे, पण येथे तुम्ही हा कोड तुमच्या संगणकावर स्थानिक पातळीवर चालवणार आहात (किंवा तुमच्या Pi वर जर तुम्ही थेट त्यावर कोडिंग करत असाल). सर्व्हर कोडमध्ये Python अॅप आहे जो प्रकाश पातळी असलेल्या MQTT वर टेलिमेट्री संदेश ऐकतो. या धड्याच्या पुढील भागात तुम्ही LED चालू किंवा बंद करण्याच्या सूचना असलेल्या आदेश संदेशासह उत्तर देण्यासाठी ते तयार कराल.
✅ संशोधन करा: जर कोणताही ऐकणारा नसेल तर MQTT संदेशांचे काय होते?
#### Python आणि VS Code स्थापित करा
जर तुमच्याकडे स्थानिक पातळीवर Python आणि VS Code स्थापित नसेल, तर तुम्हाला दोन्ही स्थापित करावे लागतील जेणेकरून तुम्ही सर्व्हर कोड लिहू शकता. जर तुम्ही व्हर्च्युअल IoT डिव्हाइस वापरत असाल, किंवा तुमच्या Raspberry Pi वर काम करत असाल तर तुम्ही हा चरण वगळू शकता कारण ते आधीच स्थापित आणि कॉन्फिगर केलेले असावे.
##### कार्य - Python आणि VS Code स्थापित करा
Python आणि VS Code स्थापित करा.
1
💁 तुम्ही या धड्यांसाठी तुमच्या आवडीच्या कोणत्याही Python IDE किंवा संपादकाचा वापर करू शकता, परंतु धडे मुख्यतः VS Code वापरण्याच्या सूचनांवर आधारित असतील.
1. VS Code साठी Pylance विस्तार स्थापित करा. हा VS Code साठी एक विस्तार आहे जो Python भाषा समर्थन प्रदान करतो. VS Code मध्ये हा विस्तार कसा स्थापित करायचा यासाठी [Pylance विस्तार दस्तऐवज](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) पहा.
#### Python व्हर्च्युअल वातावरण कॉन्फिगर करा
Python ची एक शक्तिशाली वैशिष्ट्य म्हणजे [pip पॅकेजेस](https://pypi.org) स्थापित करण्याची क्षमता - ही इतर लोकांनी लिहिलेली आणि इंटरनेटवर प्रकाशित केलेली कोड पॅकेजेस आहेत. तुम्ही एका कमांडसह तुमच्या संगणकावर pip पॅकेज स्थापित करू शकता आणि नंतर तुमच्या कोडमध्ये ते पॅकेज वापरू शकता. तुम्ही MQTT वर संवाद साधण्यासाठी पॅकेज स्थापित करण्यासाठी pip वापरणार आहात.
डिफॉल्टनुसार, जेव्हा तुम्ही पॅकेज स्थापित करता तेव्हा ते तुमच्या संगणकावर सर्वत्र उपलब्ध असते, आणि यामुळे पॅकेज आवृत्त्यांसह समस्या निर्माण होऊ शकतात - जसे की एका अनुप्रयोगाला पॅकेजच्या एका आवृत्तीवर अवलंबून राहावे लागते जी दुसऱ्या अनुप्रयोगासाठी नवीन आवृत्ती स्थापित केल्यावर खराब होते. या समस्येवर उपाय म्हणून, तुम्ही [Python व्हर्च्युअल वातावरण](https://docs.python.org/3/library/venv.html) वापरू शकता, जे मूलत: Python ची एक समर्पित फोल्डरमधील प्रत आहे, आणि जेव्हा तुम्ही pip पॅकेजेस स्थापित करता तेव्हा ती फक्त त्या फोल्डरमध्ये स्थापित होतात.
##### कार्य - Python व्हर्च्युअल वातावरण कॉन्फिगर करा
Python व्हर्च्युअल वातावरण कॉन्फिगर करा आणि MQTT pip पॅकेजेस स्थापित करा.
1. तुमच्या टर्मिनल किंवा कमांड लाइनवरून, नवीन डिरेक्टरी तयार करण्यासाठी आणि त्यात नेव्हिगेट करण्यासाठी खालील कमांड चालवा:
```sh
mkdir nightlight-server
cd nightlight-server
```
1. आता `.venv` फोल्डरमध्ये व्हर्च्युअल वातावरण तयार करण्यासाठी खालील कमांड चालवा:
```sh
python3 -m venv .venv
```
> 💁 तुम्हाला `python3` स्पष्टपणे कॉल करणे आवश्यक आहे जेणेकरून तुम्ही Python 2 स्थापित केले असल्यास Python 3 (नवीनतम आवृत्ती) वापरून व्हर्च्युअल वातावरण तयार करता येईल. जर तुम्ही Python 2 स्थापित केले असेल तर `python` कॉल केल्यावर Python 2 वापरले जाईल.
1. व्हर्च्युअल वातावरण सक्रिय करा:
* Windows वर:
* जर तुम्ही कमांड प्रॉम्प्ट किंवा Windows टर्मिनलमधील कमांड प्रॉम्प्ट वापरत असाल, तर खालील चालवा:
```cmd
.venv\Scripts\activate.bat
```
* जर तुम्ही PowerShell वापरत असाल, तर खालील चालवा:
```powershell
.\.venv\Scripts\Activate.ps1
```
* macOS किंवा Linux वर, खालील चालवा:
```cmd
source ./.venv/bin/activate
```
> 💁 हे कमांड तुम्ही व्हर्च्युअल वातावरण तयार करण्यासाठी चालवलेल्या ठिकाणाहून चालवले पाहिजेत. तुम्हाला `.venv` फोल्डरमध्ये नेव्हिगेट करण्याची कधीच गरज नाही, तुम्ही नेहमी सक्रिय कमांड आणि पॅकेजेस स्थापित करण्यासाठी किंवा कोड चालवण्यासाठी तुम्ही व्हर्च्युअल वातावरण तयार केलेल्या फोल्डरमधून कमांड चालवली पाहिजे.
1. एकदा व्हर्च्युअल वातावरण सक्रिय झाल्यावर, डिफॉल्ट `python` कमांड व्हर्च्युअल वातावरण तयार करण्यासाठी वापरलेल्या Python ची आवृत्ती चालवेल. आवृत्ती मिळवण्यासाठी खालील चालवा:
```sh
python --version
```
आउटपुट खालीलप्रमाणे असेल:
```output
(.venv) ➜ nightlight-server python --version
Python 3.9.1
```
> 💁 तुमची Python आवृत्ती वेगळी असू शकते - जोपर्यंत ती आवृत्ती 3.6 किंवा त्याहून अधिक आहे, तुम्ही चांगले आहात. जर तसे नसेल, तर हा फोल्डर हटवा, Python ची नवीन आवृत्ती स्थापित करा आणि पुन्हा प्रयत्न करा.
1. [Paho-MQTT](https://pypi.org/project/paho-mqtt/) साठी pip पॅकेज स्थापित करण्यासाठी खालील कमांड चालवा, जे एक लोकप्रिय MQTT लायब्ररी आहे.
```sh
pip install paho-mqtt
```
हे pip पॅकेज फक्त व्हर्च्युअल वातावरणात स्थापित केले जाईल आणि त्याच्या बाहेर उपलब्ध होणार नाही.
#### सर्व्हर कोड लिहा
आता Python मध्ये सर्व्हर कोड लिहिता येईल.
##### कार्य - सर्व्हर कोड लिहा
सर्व्हर कोड लिहा.
1. व्हर्च्युअल वातावरणात Python फाइल `app.py` तयार करण्यासाठी तुमच्या टर्मिनल किंवा कमांड लाइनवरून खालील चालवा:
* Windows वरून चालवा:
```cmd
type nul > app.py
```
* macOS किंवा Linux वर चालवा:
```cmd
touch app.py
```
1. वर्तमान फोल्डर VS Code मध्ये उघडा:
```sh
code .
```
1. जेव्हा VS Code सुरू होते, तेव्हा ते Python व्हर्च्युअल वातावरण सक्रिय करेल. हे तळाच्या स्टेटस बारमध्ये नोंदवले जाईल:
![VS Code निवडलेले व्हर्च्युअल वातावरण दर्शवित आहे](../../../../../translated_images/vscode-virtual-env.8ba42e04c3d533cf677e16cbe5ed9a3b80f62c6964472dc84b6f940800f0909f.mr.png)
1. जर VS Code टर्मिनल VS Code सुरू झाल्यावर आधीच चालू असेल, तर त्यात व्हर्च्युअल वातावरण सक्रिय केलेले नसेल. सर्वात सोपी गोष्ट म्हणजे **Kill the active terminal instance** बटण वापरून टर्मिनल बंद करणे:
![VS Code Kill the active terminal instance बटण](../../../../../translated_images/vscode-kill-terminal.1cc4de7c6f25ee08f423f0ead714e61d069fac1eb2089e97b8a7bbcb3d45fe5e.mr.png)
1. *Terminal -> New Terminal* निवडून किंवा `` CTRL+` `` दाबून नवीन VS Code टर्मिनल सुरू करा. नवीन टर्मिनल व्हर्च्युअल वातावरण लोड करेल, टर्मिनलमध्ये हे सक्रिय करण्यासाठी कॉल दिसेल. व्हर्च्युअल वातावरणाचे नाव (`.venv`) प्रॉम्प्टमध्ये देखील असेल:
```output
➜ nightlight-server source .venv/bin/activate
(.venv) ➜ nightlight
```
1. VS Code एक्सप्लोररमधून `app.py` फाइल उघडा आणि खालील कोड जोडा:
```python
import json
import time
import paho.mqtt.client as mqtt
id = '<ID>'
client_telemetry_topic = id + '/telemetry'
client_name = id + 'nightlight_server'
mqtt_client = mqtt.Client(client_name)
mqtt_client.connect('test.mosquitto.org')
mqtt_client.loop_start()
def handle_telemetry(client, userdata, message):
payload = json.loads(message.payload.decode())
print("Message received:", payload)
mqtt_client.subscribe(client_telemetry_topic)
mqtt_client.on_message = handle_telemetry
while True:
time.sleep(2)
```
ओळ 6 वर `<ID>` बदलून तुमच्या डिव्हाइस कोड तयार करताना वापरलेला अद्वितीय ID ठेवा.
⚠️ हा **अचूक** ID असला पाहिजे जो तुम्ही तुमच्या डिव्हाइसवर वापरला होता, अन्यथा सर्व्हर कोड योग्य टॉपिकवर सबस्क्राइब किंवा प्रकाशित करणार नाही.
हा कोड अद्वितीय नावासह MQTT क्लायंट तयार करतो आणि *test.mosquitto.org* ब्रोकर्सशी कनेक्ट करतो. नंतर तो एक प्रोसेसिंग लूप सुरू करतो जो बॅकग्राउंड थ्रेडवर चालतो आणि सबस्क्राइब केलेल्या टॉपिक्सवरील संदेश ऐकतो.
क्लायंट नंतर टेलीमेट्री टॉपिकवरील संदेशांवर सबस्क्राइब करतो आणि संदेश प्राप्त झाल्यावर कॉल होणारे फंक्शन परिभाषित करतो. जेव्हा टेलीमेट्री संदेश प्राप्त होतो, तेव्हा `handle_telemetry` फंक्शन कॉल होतो, जो प्राप्त झालेला संदेश कन्सोलवर प्रिंट करतो.
शेवटी, एक अनंत लूप अनुप्रयोग चालू ठेवतो. MQTT क्लायंट बॅकग्राउंड थ्रेडवर संदेश ऐकत आहे आणि मुख्य अनुप्रयोग चालू असताना सतत चालतो.
1. VS Code टर्मिनलमधून, तुमचा Python अॅप चालवण्यासाठी खालील चालवा:
```sh
python app.py
```
अॅप IoT डिव्हाइसकडून संदेश ऐकण्यास सुरुवात करेल.
1. तुमचे डिव्हाइस चालू असल्याची खात्री करा आणि टेलीमेट्री संदेश पाठवत आहे. तुमच्या भौतिक किंवा आभासी डिव्हाइसद्वारे शोधलेले प्रकाश स्तर समायोजित करा. प्राप्त होणारे संदेश टर्मिनलवर प्रिंट केले जातील.
```output
(.venv) ➜ nightlight-server python app.py
Message received: {'light': 0}
Message received: {'light': 400}
```
nightlight व्हर्च्युअल वातावरणातील app.py फाइल चालू असणे आवश्यक आहे जेणेकरून nightlight-server व्हर्च्युअल वातावरणातील app.py फाइल पाठवलेले संदेश प्राप्त करू शकेल.
> 💁 तुम्ही हा कोड [code-server/server](../../../../../1-getting-started/lessons/4-connect-internet/code-server/server) फोल्डरमध्ये शोधू शकता.
### टेलीमेट्री किती वेळा पाठवावी?
टेलीमेट्रीसह एक महत्त्वाचा विचार म्हणजे डेटा किती वेळा मोजावा आणि पाठवावा? उत्तर आहे - ते परिस्थितीवर अवलंबून आहे. जर तुम्ही वारंवार मोजले तर तुम्ही मोजमापांमधील बदलांना जलद प्रतिसाद देऊ शकता, परंतु तुम्ही अधिक ऊर्जा, अधिक बँडविड्थ वापरता, अधिक डेटा तयार करता आणि त्यावर प्रक्रिया करण्यासाठी अधिक क्लाउड संसाधनांची आवश्यकता असते. तुम्हाला पुरेसे वारंवार मोजावे लागेल, परंतु खूप वारंवार नाही.
थर्मोस्टॅटसाठी, दर काही मिनिटांनी मोजणे कदाचित पुरेसे आहे कारण तापमान वारंवार बदलत नाही. जर तुम्ही दिवसातून एकदाच मोजले तर तुम्ही उन्हाळ्याच्या मध्यभागी रात्रीच्या तापमानासाठी तुमचे घर गरम करू शकता, तर जर तुम्ही प्रत्येक सेकंदाला मोजले तर तुम्हाला हजारो अनावश्यक डुप्लिकेट तापमान मोजमाप मिळतील जे वापरकर्त्याच्या इंटरनेट गती आणि बँडविड्थमध्ये खाऊन जातील (मर्यादित बँडविड्थ योजना असलेल्या लोकांसाठी समस्या), अधिक ऊर्जा वापरा जे रिमोट सेन्सर्ससारख्या बॅटरीवर चालणाऱ्या डिव्हाइससाठी समस्या असू शकते आणि प्रदात्याच्या क्लाउड संगणन संसाधनांच्या खर्चात वाढ करा.
जर तुम्ही अशा कारखान्यातील यंत्रसामग्रीभोवती डेटा मॉनिटर करत असाल की जर ते खराब झाले तर विनाशकारी नुकसान आणि लाखो डॉलर्सचे नुकसान होऊ शकते, तर सेकंदाला अनेक वेळा मोजणे आवश्यक असू शकते. बँडविड्थ वाया घालवणे चांगले आहे जेणेकरून टेलीमेट्री गमावली जाऊ नये जी सूचित करते की मशीन थांबवून दुरुस्त करणे आवश्यक आहे.
> 💁 अशा परिस्थितीत, तुम्ही इंटरनेटवरील अवलंबित्व कमी करण्यासाठी टेलीमेट्री प्रथम प्रक्रिया करण्यासाठी एज डिव्हाइस असण्याचा विचार करू शकता.
### कनेक्टिव्हिटी गमावणे
इंटरनेट कनेक्शन अविश्वसनीय असू शकते, आउटेज सामान्य आहेत. अशा परिस्थितीत IoT डिव्हाइसने काय करावे - डेटा गमवावा की कनेक्टिव्हिटी पुन्हा स्थापित होईपर्यंत तो संग्रहित करावा? पुन्हा, उत्तर आहे ते परिस्थितीवर अवलंबून आहे.
थर्मोस्टॅटसाठी डेटा कदाचित नवीन तापमान मोजमाप घेतल्यावर गमावला जाऊ शकतो. हीटिंग सिस्टमला 20 मिनिटांपूर्वी 20.5°C होते हे महत्त्वाचे नाही जर तापमान आता 19°C असेल, तर हीटिंग चालू किंवा बंद असावे हे ठरवण्यासाठी सध्याचे तापमान महत्त्वाचे आहे.
यंत्रसामग्रीसाठी तुम्हाला डेटा ठेवायचा असेल, विशेषतः जर तो ट्रेंड शोधण्यासाठी वापरला जात असेल. मशीन लर्निंग मॉडेल्स आहेत जे परिभाषित कालावधी (जसे की गेल्या तासाचा) डेटा पाहून आणि असामान्य डेटा शोधून डेटा प्रवाहांमध्ये विसंगती शोधू शकतात. हे प्रेडिक्टिव मेंटेनन्ससाठी वापरले जाते, असे संकेत शोधण्यासाठी की काहीतरी लवकरच खराब होऊ शकते जेणेकरून ते खराब होण्यापूर्वी तुम्ही दुरुस्त किंवा बदलू शकता. तुम्हाला मशीनसाठी प्रत्येक टेलीमेट्री पाठवायची असू शकते जेणेकरून ती विसंगती शोधण्यासाठी प्रक्रिया केली जाऊ शकते, त्यामुळे एकदा IoT डिव्हाइस पुन्हा कनेक्ट होऊ शकले की ते इंटरनेट आउटेज दरम्यान तयार केलेली सर्व टेलीमेट्री पाठवेल.
IoT डिव्हाइस डिझाइनर्सने विचार केला पाहिजे की IoT डिव्हाइस इंटरनेट आउटेज किंवा स्थानामुळे सिग्नल गमावल्यावर वापरले जाऊ शकते का. स्मार्ट थर्मोस्टॅटने काही मर्यादित निर्णय घेऊन हीटिंग नियंत्रित करणे शक्य असावे जर ते आउटेजमुळे क्लाउडला टेलीमेट्री पाठवू शकत नसेल.
[![कोणीतरी सेल रिसेप्शन नसलेल्या भूमिगत ठिकाणी फेरारी अपडेट करण्याचा प्रयत्न केल्यामुळे हे फेरारी खराब झाले](../../../../../translated_images/bricked-car.dc38f8efadc6c59d76211f981a521efb300939283dee468f79503aae3ec67615.mr.png)](https://twitter.com/internetofshit/status/1315736960082808832)
MQTT कनेक्टिव्हिटी गमावण्याचे व्यवस्थापन करण्यासाठी, डिव्हाइस आणि सर्व्हर कोडला संदेश वितरण सुनिश्चित करण्यासाठी जबाबदार असणे आवश्यक आहे, उदाहरणार्थ सर्व संदेश पाठवले जात असल्याची खात्री करण्यासाठी रिप्लाय टॉपिकवरील अतिरिक्त संदेशांद्वारे उत्तर दिले जाते आणि जर तसे नसेल तर ते नंतर पुनरुत्पादित करण्यासाठी मॅन्युअली रांगेत ठेवले जातात.
## कमांड्स
कमांड्स म्हणजे क्लाउडने डिव्हाइसला काहीतरी करण्याचे निर्देश देण्यासाठी पाठवलेले संदेश. बहुतेक वेळा यामध्ये अॅक्च्युएटरद्वारे काही प्रकारचे आउटपुट देणे समाविष्ट असते, परंतु ते डिव्हाइससाठी स्वतःच सूचना असू शकते, जसे की रीबूट करणे किंवा अतिरिक्त टेलीमेट्री गोळा करणे आणि कमांडच्या प्रतिसादात परत करणे.
![इंटरनेटशी जोडलेला थर्मोस्टॅट हीटिंग चालू करण्यासाठी कमांड प्राप्त करत आहे](../../../../../translated_images/commands.d6c06bbbb3a02cce95f2831a1c331daf6dedd4e470c4aa2b0ae54f332016e504.mr.png)
थर्मोस्टॅटला हीटिंग चालू करण्यासाठी क्लाउडकडून कमांड प्राप्त होऊ शकते. सर्व सेन्सर्समधील टेलीमेट्री डेटाच्या आधारे, जर क्लाउड सर्व्हिसने ठरवले की हीटिंग चालू असावे, तर ते संबंधित कमांड पाठवते.
### MQTT ब्रोकर्सवर कमांड्स पाठवा
आमच्या इंटरनेट नियंत्रित नाइटलाइटसाठी पुढील पायरी म्हणजे प्रकाश पातळीवर आधारित प्रकाश नियंत्रित करण्यासाठी IoT डिव्हाइसला कमांड पाठवण्यासाठी सर्व्हर कोड.
1. VS Code मध्ये सर्व्हर कोड उघडा
1. `client_telemetry_topic` च्या घोषणेनंतर खालील ओळ जोडा जेणेकरून कोणत्या टॉपिकवर कमांड्स पाठवायच्या ते परिभाषित करता येईल:
```python
server_command_topic = id + '/commands'
```
1. `handle_telemetry` फंक्शनच्या शेवटी खालील कोड जोडा:
```python
command = { 'led_on' : payload['light'] < 300 }
print("Sending message:", command)
client.publish(server_command_topic, json.dumps(command))
```
हे JSON संदेश कमांड टॉपिकवर पाठवते ज्यामध्ये `led_on` चे मूल्य खरे किंवा खोटे सेट केले जाते, प्रकाश 300 पेक्षा कमी आहे की नाही यावर आधारित. जर प्रकाश 300 पेक्षा कमी असेल, तर डिव्हाइसला LED चालू करण्याचा निर्देश देण्यासाठी खरे पाठवले जाते.
1. पूर्वीप्रमाणे कोड चालवा
1. तुमच्या भौतिक किंवा आभासी डिव्हाइसद्वारे शोधलेले प्रकाश स्तर समायोजित करा. प्राप्त होणारे संदेश आणि पाठवलेले कमांड्स टर्मिनलवर लिहिले जातील:
```output
(.venv) nightlight-server python app.py
Message received: {'light': 0}
Sending message: {'led_on': True}
Message received: {'light': 400}
Sending message: {'led_on': False}
```
> 💁 टेलीमेट्री आणि कमांड्स एकाच टॉपिकवर पाठवले जात आहेत. याचा अर्थ अनेक डिव्हाइसकडून टेलीमेट्री एकाच टेलीमेट्री टॉपिकवर दिसेल आणि अनेक डिव्हाइससाठी कमांड्स एकाच कमांड्स टॉपिकवर दिसतील. जर तुम्हाला विशिष्ट डिव्हाइसला कमांड पाठवायची असेल, तर तुम्ही अद्वितीय डिव्हाइस आयडीसह नाव दिलेले अनेक टॉपिक्स वापरू शकता, जसे की `/commands/device1`, `/commands/device2`. अशा प्रकारे डिव्हाइस फक्त त्या एका डिव्हाइससाठी असलेल्या संदेशांवर ऐकू शकते.
> 💁 तुम्ही हा कोड [code-commands/server](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/server) फोल्डरमध्ये शोधू शकता.
### IoT डिव्हाइसवर कमांड्स हाताळा
आता सर्व्हरकडून कमांड्स पाठवले जात आहेत, तुम्ही आता डिव्हाइसवर कोड जोडू शकता जेणेकरून ते कमांड्स हाताळतील आणि LED नियंत्रित करतील.
MQTT ब्रोकर्सकडून कमांड्स ऐकण्यासाठी खालील संबंधित चरण अनुसरण करा:
* [Arduino - Wio Terminal](wio-terminal-commands.md)
* [Single-board computer - Raspberry Pi/Virtual IoT device](single-board-computer-commands.md)
एकदा हा कोड लिहून चालू झाल्यावर, प्रकाश पातळी बदलून प्रयोग करा. सर्व्हर आणि डिव्हाइसकडून आउटपुट पहा आणि प्रकाश पातळी बदलल्यावर LED पहा.
### कनेक्टिव्हिटी गमावणे
क्लाउड सर्व्हिसने ऑफलाइन असलेल्या IoT डिव
या उपकरणांबद्दल विचार करा, ते कोणते संदेश पाठवत किंवा प्राप्त करत असतील? ते कोणते टेलीमेट्री पाठवतात? ते कोणते संदेश किंवा आदेश प्राप्त करत असतील? तुम्हाला वाटते का की ते सुरक्षित आहेत?
## व्याख्यानानंतरचा प्रश्नमंजूषा
[व्याख्यानानंतरचा प्रश्नमंजूषा](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/8)
## पुनरावलोकन आणि स्व-अभ्यास
MQTT बद्दल अधिक वाचा [MQTT Wikipedia पृष्ठावर](https://wikipedia.org/wiki/MQTT).
स्वतः MQTT ब्रोकर चालवून पाहा [Mosquitto](https://www.mosquitto.org) वापरून आणि तुमच्या IoT उपकरण आणि सर्व्हर कोडमधून त्याला कनेक्ट करा.
> 💁 टिप - Mosquitto डीफॉल्टनुसार अनामिक कनेक्शन (म्हणजे वापरकर्तानाव आणि पासवर्डशिवाय कनेक्ट करणे) परवानगी देत नाही, आणि ते चालत असलेल्या संगणकाच्या बाहेरून कनेक्शन परवानगी देत नाही.
> तुम्ही हे [`mosquitto.conf` कॉन्फिग फाइल](https://www.mosquitto.org/man/mosquitto-conf-5.html) वापरून सुधारू शकता, ज्यामध्ये खालीलप्रमाणे आहे:
>
> ```sh
> listener 1883 0.0.0.0
> allow_anonymous true
> ```
## असाइनमेंट
[MQTT इतर संवाद प्रोटोकॉल्सशी तुलना करा आणि त्यामधील फरक शोधा](assignment.md)
---
**अस्वीकरण**:
हा दस्तऐवज AI भाषांतर सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) वापरून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी कृपया लक्षात ठेवा की स्वयंचलित भाषांतरांमध्ये त्रुटी किंवा अचूकतेचा अभाव असू शकतो. मूळ भाषेतील दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून निर्माण होणाऱ्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार राहणार नाही.