# Συνδέστε τη συσκευή IoT σας με το cloud - Εικονικό Υλικό IoT και Raspberry Pi Σε αυτό το μέρος του μαθήματος, θα συνδέσετε την εικονική συσκευή IoT ή το Raspberry Pi σας με το IoT Hub, για να στέλνετε τηλεμετρία και να λαμβάνετε εντολές. ## Συνδέστε τη συσκευή σας με το IoT Hub Το επόμενο βήμα είναι να συνδέσετε τη συσκευή σας με το IoT Hub. ### Εργασία - σύνδεση με το IoT Hub 1. Ανοίξτε τον φάκελο `soil-moisture-sensor` στο VS Code. Βεβαιωθείτε ότι το εικονικό περιβάλλον εκτελείται στο τερματικό, αν χρησιμοποιείτε εικονική συσκευή IoT. 1. Εγκαταστήστε μερικά επιπλέον πακέτα Pip: ```sh pip3 install azure-iot-device ``` Το `azure-iot-device` είναι μια βιβλιοθήκη για την επικοινωνία με το IoT Hub. 1. Προσθέστε τις παρακάτω εισαγωγές στην κορυφή του αρχείου `app.py`, κάτω από τις υπάρχουσες εισαγωγές: ```python from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse ``` Αυτός ο κώδικας εισάγει το SDK για την επικοινωνία με το IoT Hub. 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 Hub και να το συνδέσετε: ```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 ``` ## Αποστολή τηλεμετρίας Τώρα που η συσκευή σας είναι συνδεδεμένη, μπορείτε να στείλετε τηλεμετρία στο IoT Hub αντί για τον διαμεσολαβητή MQTT. ### Εργασία - αποστολή τηλεμετρίας 1. Προσθέστε τον παρακάτω κώδικα μέσα στη βρόχο `while True`, ακριβώς πριν από την εντολή sleep: ```python message = Message(json.dumps({ 'soil_moisture': soil_moisture })) device_client.send_message(message) ``` Αυτός ο κώδικας δημιουργεί ένα `Message` του IoT Hub που περιέχει την ένδειξη υγρασίας εδάφους ως συμβολοσειρά JSON και το στέλνει στο IoT Hub ως μήνυμα από τη συσκευή προς το cloud. ## Διαχείριση εντολών Η συσκευή σας πρέπει να διαχειρίζεται μια εντολή από τον κώδικα του διακομιστή για τον έλεγχο του ρελέ. Αυτή αποστέλλεται ως αίτημα άμεσης μεθόδου. ## Εργασία - διαχείριση αιτήματος άμεσης μεθόδου 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 Hub καλεί μια άμεση μέθοδο. Κάθε άμεση μέθοδος έχει ένα όνομα, και αυτός ο κώδικας αναμένει μια μέθοδο που ονομάζεται `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 Hub. 1. Προσθέστε τον παρακάτω κώδικα κάτω από αυτόν τον ορισμό συνάρτησης: ```python device_client.on_method_request_received = handle_method_request ``` Αυτός ο κώδικας ενημερώνει τον πελάτη του IoT Hub να καλεί τη συνάρτηση `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 Hub σας! --- **Αποποίηση ευθύνης**: Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.