# Ελέγξτε το νυχτερινό σας φως μέσω του Διαδικτύου - Εικονικό IoT Υλικό και Raspberry Pi Η συσκευή IoT πρέπει να προγραμματιστεί ώστε να επικοινωνεί με το *test.mosquitto.org* χρησιμοποιώντας το MQTT για να στέλνει τιμές τηλεμετρίας με την ανάγνωση του αισθητήρα φωτός και να λαμβάνει εντολές για τον έλεγχο του LED. Σε αυτό το μέρος του μαθήματος, θα συνδέσετε το Raspberry Pi ή την εικονική συσκευή IoT σας με έναν MQTT broker. ## Εγκατάσταση του πακέτου πελάτη MQTT Για να επικοινωνήσετε με τον MQTT broker, πρέπει να εγκαταστήσετε μια βιβλιοθήκη MQTT μέσω pip είτε στο Pi σας είτε στο εικονικό περιβάλλον σας, αν χρησιμοποιείτε εικονική συσκευή. ### Εργασία Εγκαταστήστε το πακέτο pip 1. Ανοίξτε το έργο του νυχτερινού φωτός στο VS Code. 1. Αν χρησιμοποιείτε εικονική συσκευή IoT, βεβαιωθείτε ότι το τερματικό εκτελεί το εικονικό περιβάλλον. Αν χρησιμοποιείτε Raspberry Pi, δεν θα χρησιμοποιήσετε εικονικό περιβάλλον. 1. Εκτελέστε την παρακάτω εντολή για να εγκαταστήσετε το πακέτο MQTT μέσω pip: ```sh pip3 install paho-mqtt ``` ## Προγραμματίστε τη συσκευή Η συσκευή είναι έτοιμη για προγραμματισμό. ### Εργασία Γράψτε τον κώδικα της συσκευής. 1. Προσθέστε την παρακάτω εισαγωγή στην κορυφή του αρχείου `app.py`: ```python import paho.mqtt.client as mqtt ``` Η βιβλιοθήκη `paho.mqtt.client` επιτρέπει στην εφαρμογή σας να επικοινωνεί μέσω MQTT. 1. Προσθέστε τον παρακάτω κώδικα μετά τους ορισμούς του αισθητήρα φωτός και του LED: ```python id = '' client_name = id + 'nightlight_client' ``` Αντικαταστήστε το `` με ένα μοναδικό ID που θα χρησιμοποιηθεί ως όνομα για αυτόν τον πελάτη της συσκευής και αργότερα για τα θέματα που αυτή η συσκευή δημοσιεύει και εγγράφεται. Ο broker *test.mosquitto.org* είναι δημόσιος και χρησιμοποιείται από πολλούς ανθρώπους, συμπεριλαμβανομένων άλλων μαθητών που εργάζονται σε αυτήν την εργασία. Έχοντας ένα μοναδικό όνομα πελάτη MQTT και μοναδικά ονόματα θεμάτων διασφαλίζεται ότι ο κώδικάς σας δεν θα συγκρουστεί με άλλους. Θα χρειαστείτε επίσης αυτό το ID όταν δημιουργείτε τον κώδικα του διακομιστή αργότερα σε αυτήν την εργασία. > 💁 Μπορείτε να χρησιμοποιήσετε έναν ιστότοπο όπως το [GUIDGen](https://www.guidgen.com) για να δημιουργήσετε ένα μοναδικό ID. Το `client_name` είναι ένα μοναδικό όνομα για αυτόν τον πελάτη MQTT στον broker. 1. Προσθέστε τον παρακάτω κώδικα κάτω από αυτόν τον νέο κώδικα για να δημιουργήσετε ένα αντικείμενο πελάτη MQTT και να συνδεθείτε με τον MQTT broker: ```python mqtt_client = mqtt.Client(client_name) mqtt_client.connect('test.mosquitto.org') mqtt_client.loop_start() print("MQTT connected!") ``` Αυτός ο κώδικας δημιουργεί το αντικείμενο πελάτη, συνδέεται με τον δημόσιο MQTT broker και ξεκινά έναν βρόχο επεξεργασίας που εκτελείται σε ένα νήμα παρασκηνίου, ακούγοντας μηνύματα σε οποιαδήποτε εγγεγραμμένα θέματα. 1. Εκτελέστε τον κώδικα με τον ίδιο τρόπο που εκτελέσατε τον κώδικα από το προηγούμενο μέρος της εργασίας. Αν χρησιμοποιείτε εικονική συσκευή IoT, βεβαιωθείτε ότι η εφαρμογή CounterFit εκτελείται και ότι ο αισθητήρας φωτός και το LED έχουν δημιουργηθεί στις σωστές ακίδες. ```output (.venv) ➜ nightlight python app.py MQTT connected! Light level: 0 Light level: 0 ``` > 💁 Μπορείτε να βρείτε αυτόν τον κώδικα στον φάκελο [code-mqtt/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-mqtt/virtual-device) ή στον φάκελο [code-mqtt/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-mqtt/pi). 😀 Έχετε συνδέσει επιτυχώς τη συσκευή σας με έναν MQTT broker. --- **Αποποίηση ευθύνης**: Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.