|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "71b5040e0b3472f1c0949c9b55f224c0",
|
|
|
"translation_date": "2025-08-27T21:09:52+00:00",
|
|
|
"source_file": "1-getting-started/lessons/4-connect-internet/README.md",
|
|
|
"language_code": "el"
|
|
|
}
|
|
|
-->
|
|
|
# Συνδέστε τη συσκευή σας στο Διαδίκτυο
|
|
|
|
|
|

|
|
|
|
|
|
> Σκίτσο-σημείωση από τη [Nitya Narasimhan](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). Η ενότητα παρουσιάστηκε σε 2 βίντεο - ένα μάθημα διάρκειας 1 ώρας και μία ώρα γραφείου για βαθύτερη ανάλυση και απαντήσεις σε ερωτήσεις.
|
|
|
|
|
|
[](https://youtu.be/O4dd172mZhs)
|
|
|
|
|
|
[](https://youtu.be/j-cVCzRDE2Q)
|
|
|
|
|
|
> 🎥 Κάντε κλικ στις παραπάνω εικόνες για να παρακολουθήσετε τα βίντεο
|
|
|
|
|
|
## Ερωτηματολόγιο πριν το μάθημα
|
|
|
|
|
|
[Ερωτηματολόγιο πριν το μάθημα](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/7)
|
|
|
|
|
|
## Εισαγωγή
|
|
|
|
|
|
Το **I** στο IoT σημαίνει **Internet** - η συνδεσιμότητα στο cloud και οι υπηρεσίες που επιτρέπουν πολλές από τις λειτουργίες των συσκευών IoT, από τη συλλογή μετρήσεων από τους αισθητήρες που είναι συνδεδεμένοι στη συσκευή, μέχρι την αποστολή μηνυμάτων για τον έλεγχο των ενεργοποιητών. Οι συσκευές IoT συνήθως συνδέονται σε μία υπηρεσία IoT στο cloud χρησιμοποιώντας ένα πρότυπο πρωτόκολλο επικοινωνίας, και αυτή η υπηρεσία συνδέεται με την υπόλοιπη εφαρμογή IoT σας, από υπηρεσίες AI για έξυπνες αποφάσεις σχετικά με τα δεδομένα σας, μέχρι εφαρμογές ιστού για έλεγχο ή αναφορές.
|
|
|
|
|
|
> 🎓 Τα δεδομένα που συλλέγονται από αισθητήρες και αποστέλλονται στο cloud ονομάζονται τηλεμετρία.
|
|
|
|
|
|
Οι συσκευές IoT μπορούν να λαμβάνουν μηνύματα από το cloud. Συχνά, αυτά τα μηνύματα περιέχουν εντολές - δηλαδή οδηγίες για την εκτέλεση μιας ενέργειας είτε εσωτερικά (όπως επανεκκίνηση ή ενημέρωση λογισμικού), είτε μέσω ενός ενεργοποιητή (όπως το άναμμα ενός φωτός).
|
|
|
|
|
|
Αυτή η ενότητα εισάγει ορισμένα από τα πρωτόκολλα επικοινωνίας που μπορούν να χρησιμοποιήσουν οι συσκευές IoT για να συνδεθούν στο cloud, καθώς και τους τύπους δεδομένων που μπορεί να στείλουν ή να λάβουν. Θα ασχοληθείτε πρακτικά με αυτά, προσθέτοντας έλεγχο μέσω Διαδικτύου στο νυχτερινό σας φως, μεταφέροντας τη λογική ελέγχου του LED σε κώδικα 'server' που εκτελείται τοπικά.
|
|
|
|
|
|
Σε αυτή την ενότητα θα καλύψουμε:
|
|
|
|
|
|
* [Πρωτόκολλα επικοινωνίας](../../../../../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 για να επικοινωνούν με το Διαδίκτυο. Τα πιο δημοφιλή βασίζονται σε μηνύματα δημοσίευσης/εγγραφής μέσω κάποιου είδους broker. Οι συσκευές IoT συνδέονται στον broker και δημοσιεύουν τηλεμετρία και εγγράφονται σε εντολές. Οι υπηρεσίες cloud επίσης συνδέονται στον broker και εγγράφονται σε όλα τα μηνύματα τηλεμετρίας και δημοσιεύουν εντολές είτε σε συγκεκριμένες συσκευές, είτε σε ομάδες συσκευών.
|
|
|
|
|
|

|
|
|
|
|
|
Το MQTT είναι το πιο δημοφιλές πρωτόκολλο επικοινωνίας για συσκευές IoT και καλύπτεται σε αυτή την ενότητα. Άλλα πρωτόκολλα περιλαμβάνουν τα AMQP και HTTP/HTTPS.
|
|
|
|
|
|
## Message Queueing Telemetry Transport (MQTT)
|
|
|
|
|
|
[MQTT](http://mqtt.org) είναι ένα ελαφρύ, ανοιχτό πρότυπο πρωτόκολλο ανταλλαγής μηνυμάτων που μπορεί να στέλνει μηνύματα μεταξύ συσκευών. Σχεδιάστηκε το 1999 για την παρακολούθηση αγωγών πετρελαίου, πριν κυκλοφορήσει ως ανοιχτό πρότυπο 15 χρόνια αργότερα από την IBM.
|
|
|
|
|
|
Το MQTT έχει έναν broker και πολλούς πελάτες. Όλοι οι πελάτες συνδέονται στον broker, και ο broker δρομολογεί μηνύματα στους σχετικούς πελάτες. Τα μηνύματα δρομολογούνται χρησιμοποιώντας ονομασμένα θέματα (topics), αντί να αποστέλλονται απευθείας σε έναν συγκεκριμένο πελάτη. Ένας πελάτης μπορεί να δημοσιεύσει σε ένα θέμα, και οποιοσδήποτε πελάτης εγγραφεί σε αυτό το θέμα θα λάβει το μήνυμα.
|
|
|
|
|
|

|
|
|
|
|
|
✅ Κάντε έρευνα. Εάν έχετε πολλές συσκευές IoT, πώς μπορείτε να διασφαλίσετε ότι ο broker MQTT μπορεί να διαχειριστεί όλα τα μηνύματα;
|
|
|
|
|
|
### Συνδέστε τη συσκευή IoT σας στο MQTT
|
|
|
|
|
|
Το πρώτο βήμα για την προσθήκη ελέγχου μέσω Διαδικτύου στο νυχτερινό σας φως είναι η σύνδεσή του σε έναν broker MQTT.
|
|
|
|
|
|
#### Εργασία
|
|
|
|
|
|
Συνδέστε τη συσκευή σας σε έναν broker MQTT.
|
|
|
|
|
|
Σε αυτό το μέρος της ενότητας, θα συνδέσετε το νυχτερινό σας φως IoT στο Διαδίκτυο για να επιτρέψετε τον απομακρυσμένο έλεγχο. Αργότερα σε αυτή την ενότητα, η συσκευή IoT σας θα στείλει ένα μήνυμα τηλεμετρίας μέσω MQTT σε έναν δημόσιο broker MQTT με το επίπεδο φωτός, όπου θα ληφθεί από κάποιον κώδικα server που θα γράψετε. Αυτός ο κώδικας θα ελέγξει το επίπεδο φωτός και θα στείλει ένα μήνυμα εντολής πίσω στη συσκευή, λέγοντάς της να ανάψει ή να σβήσει το LED.
|
|
|
|
|
|
Μια πραγματική περίπτωση χρήσης για μια τέτοια ρύθμιση θα μπορούσε να είναι η συλλογή δεδομένων από πολλούς αισθητήρες φωτός πριν αποφασιστεί να ανάψουν τα φώτα, σε έναν χώρο με πολλά φώτα, όπως ένα στάδιο. Αυτό θα μπορούσε να αποτρέψει την ενεργοποίηση των φώτων εάν μόνο ένας αισθητήρας καλυπτόταν από σύννεφα ή πουλί, αλλά οι άλλοι αισθητήρες ανίχνευαν αρκετό φως.
|
|
|
|
|
|
✅ Ποιες άλλες καταστάσεις θα απαιτούσαν την αξιολόγηση δεδομένων από πολλούς αισθητήρες πριν σταλούν εντολές;
|
|
|
|
|
|
Αντί να ασχοληθείτε με την πολυπλοκότητα της ρύθμισης ενός broker MQTT ως μέρος αυτής της εργασίας, μπορείτε να χρησιμοποιήσετε έναν δημόσιο δοκιμαστικό server που εκτελεί το [Eclipse Mosquitto](https://www.mosquitto.org), έναν ανοιχτού κώδικα broker MQTT. Αυτός ο δοκιμαστικός broker είναι δημόσια διαθέσιμος στο [test.mosquitto.org](https://test.mosquitto.org) και δεν απαιτεί τη δημιουργία λογαριασμού, καθιστώντας τον ένα εξαιρετικό εργαλείο για τη δοκιμή πελατών και servers MQTT.
|
|
|
|
|
|
> 💁 Αυτός ο δοκιμαστικός broker είναι δημόσιος και μη ασφαλής. Οποιοσδήποτε θα μπορούσε να ακούει τι δημοσιεύετε, οπότε δεν πρέπει να χρησιμοποιείται με δεδομένα που πρέπει να παραμείνουν ιδιωτικά.
|
|
|
|
|
|

|
|
|
|
|
|
Ακολουθήστε το σχετικό βήμα παρακάτω για να συνδέσετε τη συσκευή σας στον broker MQTT:
|
|
|
|
|
|
* [Arduino - Wio Terminal](wio-terminal-mqtt.md)
|
|
|
* [Υπολογιστής μονού πίνακα - Raspberry Pi/Εικονική συσκευή IoT](single-board-computer-mqtt.md)
|
|
|
|
|
|
### Μια βαθύτερη ματιά στο MQTT
|
|
|
|
|
|
Τα θέματα (topics) μπορούν να έχουν ιεραρχία, και οι πελάτες μπορούν να εγγραφούν σε διαφορετικά επίπεδα της ιεραρχίας χρησιμοποιώντας χαρακτήρες μπαλαντέρ. Για παράδειγμα, μπορείτε να στείλετε μηνύματα τηλεμετρίας θερμοκρασίας στο θέμα `/telemetry/temperature` και μηνύματα υγρασίας στο θέμα `/telemetry/humidity`, και στη συνέχεια στην εφαρμογή cloud σας να εγγραφείτε στο θέμα `/telemetry/*` για να λαμβάνετε και τα μηνύματα θερμοκρασίας και υγρασίας.
|
|
|
|
|
|
Τα μηνύματα μπορούν να σταλούν με ποιότητα υπηρεσίας (QoS), η οποία καθορίζει την εγγύηση λήψης του μηνύματος.
|
|
|
|
|
|
* Μία φορά το πολύ - το μήνυμα αποστέλλεται μόνο μία φορά και ο πελάτης και ο broker δεν λαμβάνουν επιπλέον μέτρα για την επιβεβαίωση της παράδοσης (fire and forget).
|
|
|
* Τουλάχιστον μία φορά - το μήνυμα επαναλαμβάνεται από τον αποστολέα πολλές φορές μέχρι να ληφθεί επιβεβαίωση (acknowledged delivery).
|
|
|
* Ακριβώς μία φορά - ο αποστολέας και ο παραλήπτης εμπλέκονται σε μια διαδικασία δύο επιπέδων για να διασφαλίσουν ότι μόνο ένα αντίγραφο του μηνύματος λαμβάνεται (assured delivery).
|
|
|
|
|
|
✅ Ποιες καταστάσεις μπορεί να απαιτούν ένα μήνυμα με διασφαλισμένη παράδοση αντί για ένα μήνυμα fire and forget;
|
|
|
|
|
|
Παρόλο που το όνομα είναι Message Queueing (MQTT), δεν υποστηρίζει ουσιαστικά ουρές μηνυμάτων. Αυτό σημαίνει ότι αν ένας πελάτης αποσυνδεθεί και επανασυνδεθεί, δεν θα λάβει μηνύματα που στάλθηκαν κατά τη διάρκεια της αποσύνδεσης, εκτός από αυτά που είχε ήδη αρχίσει να επεξεργάζεται μέσω της διαδικασίας QoS. Τα μηνύματα μπορούν να έχουν μια σημαία διατήρησης (retained flag). Αν αυτή η σημαία είναι ενεργοποιημένη, ο broker MQTT θα αποθηκεύσει το τελευταίο μήνυμα που στάλθηκε σε ένα θέμα με αυτή τη σημαία και θα το στείλει σε οποιονδήποτε πελάτη εγγραφεί αργότερα στο θέμα. Με αυτόν τον τρόπο, οι πελάτες θα λαμβάνουν πάντα το πιο πρόσφατο μήνυμα.
|
|
|
|
|
|
Το MQTT υποστηρίζει επίσης μια λειτουργία keep alive που ελέγχει αν η σύνδεση είναι ακόμα ενεργή κατά τη διάρκεια μεγάλων διαστημάτων μεταξύ μηνυμάτων.
|
|
|
|
|
|
> 🦟 [Mosquitto από το Eclipse Foundation](https://mosquitto.org) προσφέρει έναν δωρεάν broker MQTT που μπορείτε να εκτελέσετε μόνοι σας για να πειραματιστείτε με το MQTT, καθώς και έναν δημόσιο broker MQTT που μπορείτε να χρησιμοποιήσετε για να δοκιμάσετε τον κώδικά σας, φιλοξενούμενο στο [test.mosquitto.org](https://test.mosquitto.org).
|
|
|
|
|
|
Οι συνδέσεις MQTT μπορούν να είναι δημόσιες και ανοιχτές, ή κρυπτογραφημένες και ασφαλείς χρησιμοποιώντας ονόματα χρήστη και κωδικούς πρόσβασης, ή πιστοποιητικά.
|
|
|
|
|
|
> 💁 Το MQTT επικοινωνεί μέσω TCP/IP, το ίδιο υποκείμενο πρωτόκολλο δικτύου όπως το HTTP, αλλά σε διαφορετική θύρα. Μπορείτε επίσης να χρησιμοποιήσετε το MQTT μέσω websockets για να επικοινωνήσετε με εφαρμογές ιστού που εκτελούνται σε πρόγραμμα περιήγησης, ή σε περιπτώσεις όπου τα firewalls ή άλλοι κανόνες δικτύου μπλοκάρουν τις τυπικές συνδέσεις MQTT.
|
|
|
|
|
|
## Τηλεμετρία
|
|
|
|
|
|
Η λέξη τηλεμετρία προέρχεται από ελληνικές ρίζες που σημαίνουν μέτρηση από απόσταση. Η τηλεμετρία είναι η πράξη συλλογής δεδομένων από αισθητήρες και αποστολής τους στο cloud.
|
|
|
|
|
|
> 💁 Μία από τις πρώτες συσκευές τηλεμετρίας εφευρέθηκε στη Γαλλία το 1874 και έστελνε σε πραγματικό χρόνο δεδομένα καιρού και βάθους χιονιού από το Mont Blanc στο Παρίσι. Χρησιμοποιούσε φυσικά καλώδια, καθώς οι ασύρματες τεχνολογίες δεν ήταν διαθέσιμες εκείνη την εποχή.
|
|
|
|
|
|
Ας επιστρέψουμε στο παράδειγμα του έξυπνου θερμοστάτη από το Μάθημα 1.
|
|
|
|
|
|

|
|
|
|
|
|
Ο θερμοστάτης διαθέτει αισθητήρες θερμοκρασίας για τη συλλογή τηλεμετρίας. Πιθανότατα θα έχει έναν ενσωματωμένο αισθητήρα θερμοκρασίας και μπορεί να συνδέεται με πολλούς εξωτερικούς αισθητήρες θερμοκρασίας μέσω ενός ασύρματου πρωτοκόλλου όπως το [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` για να προσδιορίσει το δωμάτιο στο οποίο βρίσκεται |
|
|
|
|
|
|
Η υπηρεσία cloud μπορεί στη συνέχεια να χρησιμοποιήσει αυτά τα δεδομένα τηλεμετρίας για να λάβει αποφάσεις σχετικά με τις εντολές που θα στείλει για τον έλεγχο της θέρμανσης.
|
|
|
|
|
|
### Αποστολή τηλεμετρίας από τη συσκευή IoT σας
|
|
|
|
|
|
Το επόμενο βήμα για την προσθήκη ελέγχου μέσω Διαδικτύου στο νυχτερινό σας φως είναι η αποστολή της τηλεμετρίας του επιπέδου φωτός στον broker MQTT σε ένα θέμα τηλεμετρίας.
|
|
|
|
|
|
#### Εργασία - αποστολή τηλεμετρίας από τη συσκευή IoT σας
|
|
|
|
|
|
Στείλτε τηλεμετρία επιπέδου φωτός στον broker MQTT.
|
|
|
|
|
|
Τα δεδομένα αποστέλλονται κωδικοποιημένα ως JSON - συντομογραφία του JavaScript Object Notation, ένα πρότυπο για την κωδικοποίηση δεδομένων σε κείμενο χρησιμοποιώντας ζεύγη κλειδιού/τιμής.
|
|
|
|
|
|
✅ Αν δεν έχετε συναντήσει το JSON πριν, μπορείτε να μάθετε περισσότερα γι' αυτό στην [τεκμηρίωση του JSON.org](https://www.json.org/).
|
|
|
|
|
|
Ακολουθήστε το σχετικό βήμα παρακάτω για να στείλετε τηλεμετρία από τη συσκευή σας στον broker MQTT:
|
|
|
|
|
|
* [Arduino - Wio Terminal](wio-terminal-telemetry.md)
|
|
|
* [Υπολογιστής μονού πίνακα - Raspberry Pi/Εικονική συσκευή IoT](single-board-computer-telemetry.md)
|
|
|
|
|
|
### Λήψη τηλεμετρίας από τον broker MQTT
|
|
|
|
|
|
Δεν έχει νόημα να στέλνετε τηλεμετρία αν δεν υπάρχει κάτι στην άλλη άκρη για να την ακούσει. Η τηλεμετρία του επιπέδου φωτός χρειάζεται κάτι να την ακούει για να επεξεργαστεί τα δεδομένα. Αυτός ο 'server' κώδικας είναι ο τύπος κώδικα που θα αναπτύξετε σε μια υπηρεσία cloud ως μέρος μιας μεγαλύτερης εφαρμογής IoT, αλλά εδώ θα εκτελέσετε αυτόν τον κ
|
|
|
💁 Είστε ελεύθεροι να χρησιμοποιήσετε οποιοδήποτε Python IDE ή επεξεργαστή για αυτά τα μαθήματα αν έχετε κάποιο προτιμώμενο εργαλείο, αλλά τα μαθήματα θα παρέχουν οδηγίες βασισμένες στη χρήση του VS Code.
|
|
|
1. Εγκαταστήστε την επέκταση Pylance για το VS Code. Αυτή είναι μια επέκταση για το VS Code που παρέχει υποστήριξη για τη γλώσσα Python. Ανατρέξτε στην [τεκμηρίωση της επέκτασης Pylance](https://marketplace.visualstudio.com/items?WT.mc_id=academic-17441-jabenn&itemName=ms-python.vscode-pylance) για οδηγίες σχετικά με την εγκατάστασή της στο VS Code.
|
|
|
|
|
|
#### Ρύθμιση ενός εικονικού περιβάλλοντος Python
|
|
|
|
|
|
Ένα από τα ισχυρά χαρακτηριστικά της Python είναι η δυνατότητα εγκατάστασης [πακέτων pip](https://pypi.org) - αυτά είναι πακέτα κώδικα που έχουν γραφτεί από άλλους και δημοσιευτεί στο Διαδίκτυο. Μπορείτε να εγκαταστήσετε ένα πακέτο pip στον υπολογιστή σας με μία εντολή και στη συνέχεια να χρησιμοποιήσετε αυτό το πακέτο στον κώδικά σας. Θα χρησιμοποιήσετε το pip για να εγκαταστήσετε ένα πακέτο για επικοινωνία μέσω MQTT.
|
|
|
|
|
|
Από προεπιλογή, όταν εγκαθιστάτε ένα πακέτο, αυτό είναι διαθέσιμο παντού στον υπολογιστή σας, κάτι που μπορεί να οδηγήσει σε προβλήματα με τις εκδόσεις των πακέτων - όπως όταν μια εφαρμογή εξαρτάται από μια συγκεκριμένη έκδοση ενός πακέτου που δεν λειτουργεί σωστά όταν εγκαταστήσετε μια νεότερη έκδοση για μια άλλη εφαρμογή. Για να παρακάμψετε αυτό το πρόβλημα, μπορείτε να χρησιμοποιήσετε ένα [εικονικό περιβάλλον Python](https://docs.python.org/3/library/venv.html), ουσιαστικά ένα αντίγραφο της Python σε έναν αφιερωμένο φάκελο, και όταν εγκαθιστάτε πακέτα pip, αυτά εγκαθίστανται μόνο σε αυτόν τον φάκελο.
|
|
|
|
|
|
##### Εργασία - Ρύθμιση ενός εικονικού περιβάλλοντος Python
|
|
|
|
|
|
Ρυθμίστε ένα εικονικό περιβάλλον Python και εγκαταστήστε τα πακέτα pip για MQTT.
|
|
|
|
|
|
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 αντί για το Python 3.
|
|
|
|
|
|
1. Ενεργοποιήστε το εικονικό περιβάλλον:
|
|
|
|
|
|
* Στα Windows:
|
|
|
* Αν χρησιμοποιείτε το Command Prompt ή το Command Prompt μέσω του Windows Terminal, εκτελέστε:
|
|
|
|
|
|
```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. Εκτελέστε τις παρακάτω εντολές για να εγκαταστήσετε το πακέτο pip για το [Paho-MQTT](https://pypi.org/project/paho-mqtt/), μια δημοφιλή βιβλιοθήκη 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. Αυτό θα αναφερθεί στη γραμμή κατάστασης στο κάτω μέρος:
|
|
|
|
|
|

|
|
|
|
|
|
1. Αν το τερματικό του VS Code είναι ήδη ανοιχτό όταν ξεκινά το VS Code, δεν θα έχει ενεργοποιηθεί το εικονικό περιβάλλον σε αυτό. Το πιο εύκολο πράγμα που μπορείτε να κάνετε είναι να τερματίσετε το τερματικό χρησιμοποιώντας το κουμπί **Kill the active terminal instance**:
|
|
|
|
|
|

|
|
|
|
|
|
1. Εκκινήστε ένα νέο τερματικό στο VS Code επιλέγοντας *Terminal -> New Terminal*, ή πατώντας `` CTRL+` ``. Το νέο τερματικό θα φορτώσει το εικονικό περιβάλλον, με την κλήση για ενεργοποίηση να εμφανίζεται στο τερματικό. Το όνομα του εικονικού περιβάλλοντος (`.venv`) θα εμφανίζεται επίσης στην προτροπή:
|
|
|
|
|
|
```output
|
|
|
➜ nightlight-server source .venv/bin/activate
|
|
|
(.venv) ➜ nightlight
|
|
|
```
|
|
|
|
|
|
1. Ανοίξτε το αρχείο `app.py` από τον εξερευνητή του VS Code και προσθέστε τον παρακάτω κώδικα:
|
|
|
|
|
|
```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)
|
|
|
```
|
|
|
|
|
|
Αντικαταστήστε το `<ID>` στη γραμμή 6 με το μοναδικό ID που χρησιμοποιήσατε κατά τη δημιουργία του κώδικα της συσκευής σας.
|
|
|
|
|
|
⚠️ Αυτό **πρέπει** να είναι το ίδιο ID που χρησιμοποιήσατε στη συσκευή σας, αλλιώς ο κώδικας του διακομιστή δεν θα εγγραφεί ή δημοσιεύσει στο σωστό θέμα.
|
|
|
|
|
|
Αυτός ο κώδικας δημιουργεί έναν πελάτη MQTT με ένα μοναδικό όνομα και συνδέεται στον broker *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}
|
|
|
```
|
|
|
|
|
|
Το αρχείο app.py στο εικονικό περιβάλλον nightlight πρέπει να εκτελείται για να λαμβάνει το αρχείο app.py στο εικονικό περιβάλλον nightlight-server τα μηνύματα που αποστέλλονται.
|
|
|
|
|
|
> 💁 Μπορείτε να βρείτε αυτόν τον κώδικα στον φάκελο [code-server/server](../../../../../1-getting-started/lessons/4-connect-internet/code-server/server).
|
|
|
|
|
|
### Πόσο συχνά πρέπει να αποστέλλεται τηλεμετρία;
|
|
|
|
|
|
Μια σημαντική παράμετρος με την τηλεμετρία είναι πόσο συχνά πρέπει να μετράτε και να αποστέλλετε τα δεδομένα. Η απάντηση είναι - εξαρτάται. Αν μετράτε συχνά, μπορείτε να ανταποκριθείτε γρηγορότερα στις αλλαγές, αλλά χρησιμοποιείτε περισσότερη ενέργεια, περισσότερο εύρος ζώνης, δημιουργείτε περισσότερα δεδομένα και χρειάζεστε περισσότερους πόρους στο cloud για την επεξεργασία τους. Πρέπει να μετράτε αρκετά συχνά, αλλά όχι υπερβολικά συχνά.
|
|
|
|
|
|
Για έναν θερμοστάτη, η μέτρηση κάθε λίγα λεπτά είναι πιθανώς αρκετή, καθώς οι θερμοκρασίες δεν αλλάζουν τόσο συχνά. Αν μετράτε μόνο μία φορά την ημέρα, μπορεί να καταλήξετε να θερμαίνετε το σπίτι σας για τις θερμοκρασίες της νύχτας κατά τη διάρκεια μιας ηλιόλουστης ημέρας, ενώ αν μετράτε κάθε δευτερόλεπτο, θα έχετε χιλιάδες περιττές μετρήσεις που θα καταναλώσουν το εύρος ζώνης του χρήστη και θα αυξήσουν το κόστος επεξεργασίας και αποθήκευσης στο cloud.
|
|
|
|
|
|
Αν παρακολουθείτε δεδομένα γύρω από ένα μηχάνημα σε ένα εργοστάσιο που, αν αποτύχει, μπορεί να προκαλέσει καταστροφικές ζημιές και απώλειες εκατομμυρίων, τότε η μέτρηση πολλές φορές το δευτερόλεπτο μπορεί να είναι απαραίτητη. Είναι καλύτερο να σπαταλήσετε εύρος ζώνης παρά να χάσετε τηλεμετρία που δείχνει ότι ένα μηχάνημα χρειάζεται επισκευή πριν σπάσει.
|
|
|
|
|
|
> 💁 Σε αυτήν την περίπτωση, μπορεί να εξετάσετε τη χρήση μιας συσκευής edge για την επεξεργασία της τηλεμετρίας πρώτα, ώστε να μειώσετε την εξάρτηση από το Διαδίκτυο.
|
|
|
|
|
|
### Απώλεια συνδεσιμότητας
|
|
|
|
|
|
Οι συνδέσεις στο Διαδίκτυο μπορεί να είναι αναξιόπιστες, με συχνές διακοπές. Τι πρέπει να κάνει μια συσκευή IoT σε αυτές τις περιπτώσεις - να χάσει τα δεδομένα ή να τα αποθηκεύσει μέχρι να αποκατασταθεί η συνδεσιμότητα; Και πάλι, η απάντηση είναι ότι εξαρτάται.
|
|
|
|
|
|
Για έναν θερμοστάτη, τα δεδομένα μπορούν πιθανώς να χαθούν μόλις ληφθεί μια νέα μέτρηση θερμοκρασίας. Το σύστημα θέρμανσης δεν ενδιαφέρεται ότι πριν από 20 λεπτά η θερμοκρασία ήταν 20.5°C αν τώρα είναι 19°C, καθώς η τρέχουσα θερμοκρασία καθορίζει αν η θέρμανση πρέπει να είναι ενεργοποιημένη ή όχι.
|
|
|
|
|
|
Για μηχανήματα, μπορεί να θέλετε να διατηρήσετε τα δεδομένα, ειδικά αν χρησιμοποιούνται για την ανίχνευση τάσεων. Υπάρχουν μοντέλα μηχανικής μάθησης που μπορούν να ανιχνεύσουν ανωμαλίες σε ροές δεδομένων εξετάζοντας δεδομένα από μια καθορισμένη χρονική περίοδο (όπως την τελευταία ώρα) και εντοπίζοντας ανώμαλα δεδομένα. Αυτό χρησιμοποιείται συχνά για προγνωστική συντήρηση, εντοπίζοντας ενδείξεις ότι κάτι μπορεί να χαλάσει σύντομα, ώστε να μπορείτε να το επισκευάσετε ή να το αντικαταστήσετε πριν συμβεί αυτό. Μπορεί να θέλετε κάθε κομμάτι τηλεμετρίας για ένα μηχάνημα να αποστέλλεται, ώστε να μπορεί να επεξεργαστεί για ανίχνευση ανωμαλιών, οπότε μόλις η συσκευή IoT μπορέσει να επανασυνδεθεί, θα στείλει όλη την τηλεμετρία που δημιουργήθηκε κατά τη διάρκεια της διακοπής του Διαδικτύου.
|
|
|
|
|
|
Οι σχεδιαστές συσκευών IoT θα πρέπει επίσης να εξετάσουν αν η συσκευή IoT μπορεί να χρησιμοποιηθεί κατά τη διάρκεια μιας διακοπής του Διαδικτύου ή απώλειας σήματος λόγω τοποθεσίας. Ένας έξυπνος θερμοστάτης θα πρέπει να μπορεί να λαμβάνει κάποιες περιορισμένες αποφάσεις για τον έλεγχο της θέρμανσης αν δεν μπορεί να στείλει τηλεμετρία στο cloud λόγω διακοπής.
|
|
|
|
|
|
[](https://twitter.com/internetofshit/status/1315736960082808832)
|
|
|
|
|
|
Για να χειριστεί το MQTT μια απώλεια συνδεσιμότητας, ο κώδικας της συσκευής και του διακομιστή θα πρέπει να είναι υπεύθυνος για τη διασφάλιση της παράδοσης των μηνυμάτων αν αυτό είναι απαραίτητο, για παράδειγμα απαιτώντας όλα τα μηνύματα που αποστέλλονται να απαντώνται με επιπλέον μηνύματα σε ένα θέμα απάντησης, και αν όχι, να τοποθετούνται σε ουρά χειροκίνητα για να αναπαραχθούν αργότερα.
|
|
|
|
|
|
## Εντολές
|
|
|
|
|
|
Οι εντολές είναι μηνύματα που αποστέλλονται από το cloud σε μια συσκευή, δίνοντάς της οδηγίες να κάνει κάτι. Τις περισσότερες φορές αυτό περιλαμβάνει την παροχή κάποιου είδους εξόδου μέσω ενός ενεργοποιητή, αλλά μπορεί να είναι και μια οδηγία για την ίδια τη συσκευή, όπως να επανεκκινήσει ή να συλλέξει επιπλέον τηλεμετρία και να την επιστρέψει ως απάντηση στην εντολή.
|
|
|
|
|
|

|
|
|
|
|
|
Ένας θερμοστάτης θα μπορούσε να λάβει μια εντολή από το cloud να ενεργοποιήσει τη θέρμανση. Με βάση τα δεδομένα τηλεμετρίας από όλους τους αισθητήρες, αν η υπηρεσία cloud έχει αποφασίσει ότι η θέρμανση πρέπει να είναι ενεργοποιημένη, τότε στέλνει τη σχετική εντολή.
|
|
|
|
|
|
### Αποστολή εντολών στον broker 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` να ορίζεται σε true ή false ανάλογα με το αν το φως είναι μικρότερο από 300 ή όχι. Αν το φως είναι μικρότερο από 300, αποστέλλεται true για να δώσει εντολή στη συσκευή να ανάψει το LED.
|
|
|
|
|
|
1. Εκτελέστε τον κώδικα όπως πριν.
|
|
|
|
|
|
1. Ρυθμίστε τα επίπεδα φωτός
|
|
|
Για αυτές τις συσκευές, σκεφτείτε ποια μηνύματα μπορεί να στέλνουν ή να λαμβάνουν. Τι τηλεμετρία στέλνουν; Ποια μηνύματα ή εντολές μπορεί να λαμβάνουν; Πιστεύετε ότι είναι ασφαλείς;
|
|
|
|
|
|
## Κουίζ μετά τη διάλεξη
|
|
|
|
|
|
[Κουίζ μετά τη διάλεξη](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/8)
|
|
|
|
|
|
## Ανασκόπηση & Αυτομελέτη
|
|
|
|
|
|
Διαβάστε περισσότερα για το MQTT στη [σελίδα της Wikipedia για το MQTT](https://wikipedia.org/wiki/MQTT).
|
|
|
|
|
|
Δοκιμάστε να εκτελέσετε έναν MQTT broker μόνοι σας χρησιμοποιώντας το [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). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. |