# अपने IoT डिवाइस को क्लाउड से कनेक्ट करें - वर्चुअल IoT हार्डवेयर और रास्पबेरी पाई इस पाठ के इस भाग में, आप अपने वर्चुअल IoT डिवाइस या रास्पबेरी पाई को IoT हब से कनेक्ट करेंगे, ताकि टेलीमेट्री भेज सकें और कमांड प्राप्त कर सकें। ## अपने डिवाइस को IoT हब से कनेक्ट करें अगला कदम है अपने डिवाइस को IoT हब से कनेक्ट करना। ### कार्य - IoT हब से कनेक्ट करें 1. VS Code में `soil-moisture-sensor` फ़ोल्डर खोलें। सुनिश्चित करें कि यदि आप वर्चुअल IoT डिवाइस का उपयोग कर रहे हैं तो टर्मिनल में वर्चुअल एनवायरनमेंट चल रहा हो। 1. कुछ अतिरिक्त Pip पैकेज इंस्टॉल करें: ```sh pip3 install azure-iot-device ``` `azure-iot-device` एक लाइब्रेरी है जो आपके IoT हब से संवाद करने के लिए उपयोग होती है। 1. निम्नलिखित इम्पोर्ट्स को `app.py` फ़ाइल के शीर्ष पर, मौजूदा इम्पोर्ट्स के नीचे जोड़ें: ```python from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse ``` यह कोड आपके IoT हब से संवाद करने के लिए SDK को इम्पोर्ट करता है। 1. `import paho.mqtt.client as mqtt` लाइन को हटा दें क्योंकि अब इस लाइब्रेरी की आवश्यकता नहीं है। सभी MQTT कोड, जिसमें टॉपिक नाम, `mqtt_client` का उपयोग करने वाला कोड और `handle_command` शामिल हैं, हटा दें। `while True:` लूप को रखें, बस इस लूप से `mqtt_client.publish` लाइन को हटा दें। 1. इम्पोर्ट स्टेटमेंट्स के नीचे निम्नलिखित कोड जोड़ें: ```python connection_string = "" ``` `` को उस कनेक्शन स्ट्रिंग से बदलें जिसे आपने इस पाठ में पहले डिवाइस के लिए प्राप्त किया था। > 💁 यह सबसे अच्छा तरीका नहीं है। कनेक्शन स्ट्रिंग्स को कभी भी सोर्स कोड में स्टोर नहीं करना चाहिए, क्योंकि इसे सोर्स कोड कंट्रोल में चेक किया जा सकता है और कोई भी इसे देख सकता है। हम इसे यहां सरलता के लिए कर रहे हैं। आदर्श रूप से आपको कुछ ऐसा उपयोग करना चाहिए जैसे एनवायरनमेंट वेरिएबल और [`python-dotenv`](https://pypi.org/project/python-dotenv/) जैसा टूल। आप इसके बारे में आगामी पाठ में अधिक जानेंगे। 1. इस कोड के नीचे, निम्नलिखित को जोड़ें ताकि एक डिवाइस क्लाइंट ऑब्जेक्ट बनाया जा सके जो IoT हब से संवाद कर सके, और इसे कनेक्ट करें: ```python device_client = IoTHubDeviceClient.create_from_connection_string(connection_string) print('Connecting') device_client.connect() print('Connected') ``` 1. इस कोड को चलाएं। आप देखेंगे कि आपका डिवाइस कनेक्ट हो गया है। ```output pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py Connecting Connected Soil moisture: 379 ``` ## टेलीमेट्री भेजें अब जब आपका डिवाइस कनेक्ट हो गया है, तो आप MQTT ब्रॉकर के बजाय IoT हब को टेलीमेट्री भेज सकते हैं। ### कार्य - टेलीमेट्री भेजें 1. निम्नलिखित कोड को `while True` लूप के अंदर, स्लीप से ठीक पहले जोड़ें: ```python message = Message(json.dumps({ 'soil_moisture': soil_moisture })) device_client.send_message(message) ``` यह कोड एक IoT हब `Message` बनाता है जिसमें मिट्टी की नमी की रीडिंग JSON स्ट्रिंग के रूप में होती है, और इसे डिवाइस से क्लाउड संदेश के रूप में IoT हब को भेजता है। ## कमांड हैंडल करें आपके डिवाइस को सर्वर कोड से एक कमांड हैंडल करने की आवश्यकता है ताकि रिले को नियंत्रित किया जा सके। यह एक डायरेक्ट मेथड रिक्वेस्ट के रूप में भेजा जाता है। ## कार्य - डायरेक्ट मेथड रिक्वेस्ट हैंडल करें 1. `while True` लूप से पहले निम्नलिखित कोड जोड़ें: ```python def handle_method_request(request): print("Direct method received - ", request.name) if request.name == "relay_on": relay.on() elif request.name == "relay_off": relay.off() ``` यह एक मेथड, `handle_method_request`, को परिभाषित करता है जिसे तब कॉल किया जाएगा जब IoT हब द्वारा एक डायरेक्ट मेथड कॉल किया जाएगा। प्रत्येक डायरेक्ट मेथड का एक नाम होता है, और यह कोड एक मेथड को अपेक्षित करता है जिसे `relay_on` कहा जाता है ताकि रिले को चालू किया जा सके, और `relay_off` ताकि रिले को बंद किया जा सके। > 💁 इसे एक ही डायरेक्ट मेथड रिक्वेस्ट में भी लागू किया जा सकता है, जिसमें रिले की इच्छित स्थिति को एक पेलोड में पास किया जा सकता है जिसे मेथड रिक्वेस्ट के साथ पास किया जा सकता है और `request` ऑब्जेक्ट से उपलब्ध कराया जा सकता है। 1. डायरेक्ट मेथड्स को एक प्रतिक्रिया की आवश्यकता होती है ताकि कॉलिंग कोड को बताया जा सके कि उन्हें हैंडल किया गया है। `handle_method_request` फंक्शन के अंत में निम्नलिखित कोड जोड़ें ताकि रिक्वेस्ट के लिए एक प्रतिक्रिया बनाई जा सके: ```python method_response = MethodResponse.create_from_method_request(request, 200) device_client.send_method_response(method_response) ``` यह कोड डायरेक्ट मेथड रिक्वेस्ट को HTTP स्टेटस कोड 200 के साथ प्रतिक्रिया भेजता है, और इसे IoT हब को वापस भेजता है। 1. इस फंक्शन डिफिनिशन के नीचे निम्नलिखित कोड जोड़ें: ```python device_client.on_method_request_received = handle_method_request ``` यह कोड IoT हब क्लाइंट को बताता है कि जब एक डायरेक्ट मेथड कॉल किया जाए तो `handle_method_request` फंक्शन को कॉल करें। > 💁 आप इस कोड को [code/pi](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/pi) या [code/virtual-device](../../../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/code/virtual-device) फ़ोल्डर में पा सकते हैं। 😀 आपका मिट्टी की नमी सेंसर प्रोग्राम IoT हब से कनेक्ट हो गया है! **अस्वीकरण**: यह दस्तावेज़ AI अनुवाद सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।