# നിങ്ങളുടെ IoT ഡിവൈസ് ക്ലൗഡുമായി ബന്ധിപ്പിക്കുക - വിർച്വൽ IoT ഹാർഡ്‌വെയർ এবং റാസ്‌പ്ബെറി പൈ പാഠത്തിന്റെ ഈ ഭാഗത്തിൽ, നിങ്ങൾ നിങ്ങളുടെ വിർച്വൽ IoT ഡിവൈസോ റാസ്‌പ്ബെറി പൈനോ നിങ്ങളുടെ IoT ഹബുമായി ബന്ധിപ്പിച്ച് ടെലിമെട്രി അയയ്ക്കാനും കമാൻഡുകൾ സ്വീകരിക്കാനും പഠിക്കും. ## നിങ്ങളുടെ ഡിവൈസ് IoT ഹബുമായി ബന്ധിപ്പിക്കുക അടുത്ത ഘട്ടം നിങ്ങളുടെ ഡിവൈസിനെ IoT ഹബുമായി ബന്ധിപ്പിക്കുകയാണ്. ### ടാസ്‌ക് - IoT ഹബുമായി ബന്ധിപ്പിക്കുക 1. VS Code-ൽ `soil-moisture-sensor` ഫോൾഡർ തുറക്കുക. നിങ്ങൾ വിർച്വൽ IoT ഡിവൈസ്സ് ഉപയോഗിക്കുന്നുവെങ്കിൽ ടെർമിനലിൽ വിർച്വൽ എൻവയൺമെന്റ് പ്രവർത്തിക്കുന്നതായിരിക്കണം. 1. ചില അധിക പിപ്പ് പാക്കേജുകൾ ഇൻസ്റ്റാൾ ചെയ്യുക: ```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) ഉപയോഗിച്ച് വിവർത്തനം ചെയ്തിരിക്കുന്നു. ഞങ്ങൾaccuracy ഉദ്ദേശിക്കുമ്പോഴും, സ്വയമേധയാ വിവർത്തനങ്ങളിൽ പിഴവുകൾ അല്ലെങ്കിൽ ഭാഗികമായ അakurതകൾ ഉണ്ടായിരിക്കാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. ലേഖനത്തിന്റെ മാതൃഭാഷയിലെ യഥാർത്ഥ ഡോക്യൂമെന്റ് സത്യമായ ഉറവിടമായി കണക്കാക്കേണ്ടതാണ്. പ്രധാന വിവരങ്ങൾക്ക്, പ്രൊഫഷണൽ മനുഷ്യ വിവർത്തനം ശുപാർശ ചെയ്യപ്പെടുന്നു. ഈ വിവർത്തനം ഉപയോഗിക്കുന്നതിലൂടെ സൃഷ്ടിക്കുന്ന യാതൊരു തെറ്റിദ്ധാരണക്കും ഞങ്ങൾ ഉത്തരവാദികളല്ല.