|
4 weeks ago | |
---|---|---|
.. | ||
README.md | 4 weeks ago | |
assignment.md | 4 weeks ago |
README.md
Δεδομένα τοποθεσίας καταστήματος
Σχεδιαστική σημείωση από τη Nitya Narasimhan. Κάντε κλικ στην εικόνα για μεγαλύτερη έκδοση.
Ερωτηματολόγιο πριν την ενότητα
Ερωτηματολόγιο πριν την ενότητα
Εισαγωγή
Στην προηγούμενη ενότητα, μάθατε πώς να χρησιμοποιείτε έναν αισθητήρα GPS για να καταγράφετε δεδομένα τοποθεσίας. Για να χρησιμοποιήσετε αυτά τα δεδομένα ώστε να οπτικοποιήσετε την τοποθεσία ενός φορτηγού γεμάτου τρόφιμα και το ταξίδι του, πρέπει να τα στείλετε σε μια υπηρεσία IoT στο cloud και στη συνέχεια να τα αποθηκεύσετε κάπου.
Σε αυτήν την ενότητα θα μάθετε για τους διάφορους τρόπους αποθήκευσης δεδομένων IoT και πώς να αποθηκεύετε δεδομένα από την υπηρεσία IoT σας χρησιμοποιώντας serverless κώδικα.
Σε αυτήν την ενότητα θα καλύψουμε:
- Δομημένα και μη δομημένα δεδομένα
- Αποστολή δεδομένων GPS σε IoT Hub
- Διαδρομές hot, warm και cold
- Διαχείριση συμβάντων GPS με serverless κώδικα
- Λογαριασμοί αποθήκευσης Azure
- Σύνδεση του serverless κώδικα με την αποθήκευση
Δομημένα και μη δομημένα δεδομένα
Τα υπολογιστικά συστήματα επεξεργάζονται δεδομένα, τα οποία έρχονται σε διάφορες μορφές και μεγέθη. Μπορεί να είναι από απλούς αριθμούς, μεγάλα κείμενα, βίντεο και εικόνες, έως δεδομένα IoT. Τα δεδομένα συνήθως χωρίζονται σε δύο κατηγορίες - δομημένα δεδομένα και μη δομημένα δεδομένα.
-
Δομημένα δεδομένα είναι δεδομένα με καλά καθορισμένη, αυστηρή δομή που δεν αλλάζει και συνήθως αντιστοιχούν σε πίνακες δεδομένων με σχέσεις. Ένα παράδειγμα είναι τα προσωπικά στοιχεία ενός ατόμου, όπως το όνομα, η ημερομηνία γέννησης και η διεύθυνση.
-
Μη δομημένα δεδομένα είναι δεδομένα χωρίς καλά καθορισμένη, αυστηρή δομή, συμπεριλαμβανομένων δεδομένων που μπορεί να αλλάζουν συχνά τη δομή τους. Ένα παράδειγμα είναι έγγραφα όπως γραπτά κείμενα ή υπολογιστικά φύλλα.
✅ Κάντε μια έρευνα: Μπορείτε να σκεφτείτε άλλα παραδείγματα δομημένων και μη δομημένων δεδομένων;
💁 Υπάρχουν επίσης ημιδομημένα δεδομένα που είναι δομημένα αλλά δεν ταιριάζουν σε σταθερούς πίνακες δεδομένων.
Τα δεδομένα IoT συνήθως θεωρούνται μη δομημένα δεδομένα.
Φανταστείτε ότι προσθέτετε συσκευές IoT σε έναν στόλο οχημάτων για μια μεγάλη εμπορική φάρμα. Μπορεί να θέλετε να χρησιμοποιήσετε διαφορετικές συσκευές για διαφορετικούς τύπους οχημάτων. Για παράδειγμα:
- Για γεωργικά οχήματα όπως τρακτέρ, θέλετε δεδομένα GPS για να βεβαιωθείτε ότι εργάζονται στα σωστά χωράφια.
- Για φορτηγά μεταφοράς τροφίμων σε αποθήκες, θέλετε δεδομένα GPS καθώς και δεδομένα ταχύτητας και επιτάχυνσης για να βεβαιωθείτε ότι ο οδηγός οδηγεί με ασφάλεια, καθώς και δεδομένα ταυτότητας οδηγού και έναρξης/λήξης για συμμόρφωση με τους τοπικούς νόμους για τις ώρες εργασίας.
- Για φορτηγά ψυγεία, θέλετε επίσης δεδομένα θερμοκρασίας για να βεβαιωθείτε ότι τα τρόφιμα δεν ζεσταίνονται ή κρυώνουν υπερβολικά και χαλάνε κατά τη μεταφορά.
Αυτά τα δεδομένα μπορεί να αλλάζουν συνεχώς. Για παράδειγμα, αν η συσκευή IoT βρίσκεται στην καμπίνα ενός φορτηγού, τότε τα δεδομένα που στέλνει μπορεί να αλλάζουν καθώς αλλάζει το τρέιλερ, για παράδειγμα στέλνοντας δεδομένα θερμοκρασίας μόνο όταν χρησιμοποιείται τρέιλερ ψυγείου.
✅ Τι άλλα δεδομένα IoT μπορεί να καταγραφούν; Σκεφτείτε τα είδη φορτίων που μπορούν να μεταφέρουν τα φορτηγά, καθώς και δεδομένα συντήρησης.
Αυτά τα δεδομένα ποικίλλουν από όχημα σε όχημα, αλλά όλα στέλνονται στην ίδια υπηρεσία IoT για επεξεργασία. Η υπηρεσία IoT πρέπει να μπορεί να επεξεργάζεται αυτά τα μη δομημένα δεδομένα, αποθηκεύοντάς τα με τρόπο που να επιτρέπει την αναζήτηση ή ανάλυση, αλλά να λειτουργεί με διαφορετικές δομές δεδομένων.
Αποθήκευση SQL vs NoSQL
Οι βάσεις δεδομένων είναι υπηρεσίες που σας επιτρέπουν να αποθηκεύετε και να αναζητάτε δεδομένα. Οι βάσεις δεδομένων χωρίζονται σε δύο τύπους - SQL και NoSQL.
Βάσεις δεδομένων SQL
Οι πρώτες βάσεις δεδομένων ήταν Συστήματα Διαχείρισης Σχεσιακών Βάσεων Δεδομένων (RDBMS), ή σχεσιακές βάσεις δεδομένων. Αυτές είναι επίσης γνωστές ως βάσεις δεδομένων SQL λόγω της γλώσσας Structured Query Language (SQL) που χρησιμοποιείται για την αλληλεπίδραση με αυτές για την προσθήκη, αφαίρεση, ενημέρωση ή αναζήτηση δεδομένων. Αυτές οι βάσεις δεδομένων αποτελούνται από ένα σχήμα - ένα καλά καθορισμένο σύνολο πινάκων δεδομένων, παρόμοιο με ένα υπολογιστικό φύλλο. Κάθε πίνακας έχει πολλαπλές ονομασμένες στήλες. Όταν εισάγετε δεδομένα, προσθέτετε μια γραμμή στον πίνακα, τοποθετώντας τιμές σε κάθε στήλη. Αυτό διατηρεί τα δεδομένα σε μια πολύ αυστηρή δομή - αν και μπορείτε να αφήσετε στήλες κενές, αν θέλετε να προσθέσετε μια νέα στήλη πρέπει να το κάνετε στη βάση δεδομένων, συμπληρώνοντας τιμές για τις υπάρχουσες γραμμές. Αυτές οι βάσεις δεδομένων είναι σχεσιακές - δηλαδή ένας πίνακας μπορεί να έχει σχέση με έναν άλλο.
Για παράδειγμα, αν αποθηκεύατε τα προσωπικά στοιχεία ενός χρήστη σε έναν πίνακα, θα είχατε κάποιο είδος εσωτερικού μοναδικού ID ανά χρήστη που χρησιμοποιείται σε μια γραμμή σε έναν πίνακα που περιέχει το όνομα και τη διεύθυνση του χρήστη. Αν στη συνέχεια θέλατε να αποθηκεύσετε άλλες λεπτομέρειες για αυτόν τον χρήστη, όπως τις αγορές του, σε έναν άλλο πίνακα, θα είχατε μια στήλη στον νέο πίνακα για το ID του χρήστη. Όταν αναζητάτε έναν χρήστη, μπορείτε να χρησιμοποιήσετε το ID του για να λάβετε τα προσωπικά του στοιχεία από έναν πίνακα και τις αγορές του από έναν άλλο.
Οι βάσεις δεδομένων SQL είναι ιδανικές για την αποθήκευση δομημένων δεδομένων και για όταν θέλετε να βεβαιωθείτε ότι τα δεδομένα ταιριάζουν με το σχήμα σας.
✅ Αν δεν έχετε χρησιμοποιήσει SQL πριν, αφιερώστε λίγο χρόνο για να διαβάσετε σχετικά με αυτήν στη σελίδα SQL στη Wikipedia.
Μερικές γνωστές βάσεις δεδομένων SQL είναι οι Microsoft SQL Server, MySQL και PostgreSQL.
✅ Κάντε μια έρευνα: Διαβάστε για μερικές από αυτές τις βάσεις δεδομένων SQL και τις δυνατότητές τους.
Βάσεις δεδομένων NoSQL
Οι βάσεις δεδομένων NoSQL ονομάζονται NoSQL επειδή δεν έχουν την ίδια αυστηρή δομή με τις βάσεις δεδομένων SQL. Είναι επίσης γνωστές ως βάσεις δεδομένων εγγράφων καθώς μπορούν να αποθηκεύουν μη δομημένα δεδομένα όπως έγγραφα.
💁 Παρά το όνομά τους, ορισμένες βάσεις δεδομένων NoSQL σας επιτρέπουν να χρησιμοποιείτε SQL για την αναζήτηση δεδομένων.
Οι βάσεις δεδομένων NoSQL δεν έχουν προκαθορισμένο σχήμα που να περιορίζει τον τρόπο αποθήκευσης δεδομένων, αντίθετα μπορείτε να εισάγετε οποιαδήποτε μη δομημένα δεδομένα, συνήθως χρησιμοποιώντας έγγραφα JSON. Αυτά τα έγγραφα μπορούν να οργανωθούν σε φακέλους, παρόμοια με αρχεία στον υπολογιστή σας. Κάθε έγγραφο μπορεί να έχει διαφορετικά πεδία από άλλα έγγραφα - για παράδειγμα, αν αποθηκεύατε δεδομένα IoT από τα γεωργικά σας οχήματα, κάποια μπορεί να έχουν πεδία για δεδομένα επιταχυνσιόμετρου και ταχύτητας, ενώ άλλα μπορεί να έχουν πεδία για τη θερμοκρασία στο τρέιλερ. Αν προσθέτατε έναν νέο τύπο φορτηγού, όπως ένα με ενσωματωμένες ζυγαριές για την παρακολούθηση του βάρους των προϊόντων που μεταφέρονται, τότε η συσκευή IoT σας θα μπορούσε να προσθέσει αυτό το νέο πεδίο και να αποθηκευτεί χωρίς αλλαγές στη βάση δεδομένων.
Μερικές γνωστές βάσεις δεδομένων NoSQL περιλαμβάνουν τις Azure CosmosDB, MongoDB και CouchDB.
✅ Κάντε μια έρευνα: Διαβάστε για μερικές από αυτές τις βάσεις δεδομένων NoSQL και τις δυνατότητές τους.
Σε αυτήν την ενότητα, θα χρησιμοποιήσετε αποθήκευση NoSQL για να αποθηκεύσετε δεδομένα IoT.
Αποστολή δεδομένων GPS σε IoT Hub
Στην προηγούμενη ενότητα καταγράψατε δεδομένα GPS από έναν αισθητήρα GPS συνδεδεμένο στη συσκευή IoT σας. Για να αποθηκεύσετε αυτά τα δεδομένα IoT στο cloud, πρέπει να τα στείλετε σε μια υπηρεσία IoT. Και πάλι, θα χρησιμοποιήσετε το Azure IoT Hub, την ίδια υπηρεσία IoT cloud που χρησιμοποιήσατε στο προηγούμενο έργο.
Εργασία - αποστολή δεδομένων GPS σε IoT Hub
-
Δημιουργήστε ένα νέο IoT Hub χρησιμοποιώντας το δωρεάν επίπεδο.
⚠️ Μπορείτε να ανατρέξετε στις οδηγίες για τη δημιουργία ενός IoT Hub από το έργο 2, ενότητα 4 αν χρειαστεί.
Θυμηθείτε να δημιουργήσετε μια νέα Ομάδα Πόρων. Ονομάστε τη νέα Ομάδα Πόρων
gps-sensor
και το νέο IoT Hub ένα μοναδικό όνομα βασισμένο στοgps-sensor
, όπωςgps-sensor-<το όνομά σας>
.💁 Αν έχετε ακόμα το IoT Hub από το προηγούμενο έργο, μπορείτε να το επαναχρησιμοποιήσετε. Θυμηθείτε να χρησιμοποιήσετε το όνομα αυτού του IoT Hub και την Ομάδα Πόρων στην οποία βρίσκεται όταν δημιουργείτε άλλες υπηρεσίες.
-
Προσθέστε μια νέα συσκευή στο IoT Hub. Ονομάστε αυτήν τη συσκευή
gps-sensor
. Αποκτήστε τη συμβολοσειρά σύνδεσης για τη συσκευή. -
Ενημερώστε τον κώδικα της συσκευής σας ώστε να στέλνει τα δεδομένα GPS στο νέο IoT Hub χρησιμοποιώντας τη συμβολοσειρά σύνδεσης της συσκευής από το προηγούμενο βήμα.
⚠️ Μπορείτε να ανατρέξετε στις οδηγίες για τη σύνδεση της συσκευής σας με το IoT από το έργο 2, ενότητα 4 αν χρειαστεί.
-
Όταν στέλνετε τα δεδομένα GPS, κάντε το ως JSON στη παρακάτω μορφή:
{ "gps" : { "lat" : <latitude>, "lon" : <longitude> } }
-
Στείλτε δεδομένα GPS κάθε λεπτό ώστε να μην εξαντλήσετε την ημερήσια κατανομή μηνυμάτων.
Αν χρησιμοποιείτε το Wio Terminal, θυμηθείτε να προσθέσετε όλες τις απαραίτητες βιβλιοθήκες και να ρυθμίσετε την ώρα χρησιμοποιώντας έναν NTP server. Ο κώδικάς σας θα πρέπει επίσης να βεβαιωθεί ότι έχει διαβάσει όλα τα δεδομένα από τη σειριακή θύρα πριν στείλει την τοποθεσία GPS, χρησιμοποιώντας τον υπάρχοντα κώδικα από την προηγούμενη ενότητα. Χρησιμοποιήστε τον παρακάτω κώδικα για να κατασκευάσετε το έγγραφο JSON:
DynamicJsonDocument doc(1024);
doc["gps"]["lat"] = gps.location.lat();
doc["gps"]["lon"] = gps.location.lng();
Αν χρησιμοποιείτε μια Εικονική συσκευή IoT, θυμηθείτε να εγκαταστήσετε όλες τις απαραίτητες βιβλιοθήκες χρησιμοποιώντας ένα εικονικό περιβάλλον.
Για το Raspberry Pi και την Εικονική συσκευή IoT, χρησιμοποιήστε τον υπάρχοντα κώδικα από την προηγούμενη ενότητα για να λάβετε τις τιμές γεωγραφικού πλάτους και μήκους και στη συνέχεια στείλτε τις στη σωστή μορφή JSON με τον παρακάτω κώδικα:
message_json = { "gps" : { "lat":lat, "lon":lon } }
print("Sending telemetry", message_json)
message = Message(json.dumps(message_json))
💁 Μπορείτε να βρείτε αυτόν τον κώδικα στους φακέλους code/wio-terminal, code/pi ή code/virtual-device.
Εκτελέστε τον κώδικα της συσκευής σας και βεβαιωθείτε ότι τα μηνύματα ρέουν στο IoT Hub χρησιμοποιώντας την εντολή CLI az iot hub monitor-events
.
Διαδρομές hot, warm και cold
Τα δεδομένα που ρέουν από μια συσκευή IoT στο cloud δεν επεξεργάζονται πάντα σε πραγματικό χρόνο. Κάποια δεδομένα χρειάζονται επεξεργασία σε πραγματικό χρόνο, άλλα μπορούν να επεξεργαστούν λίγο αργότερα και άλλα μπορούν να επεξεργαστούν πολύ αργότερα. Η ροή δεδομένων σε διαφορετικές υπηρεσίες που επεξεργάζονται τα δεδομένα σε διαφορετικούς χρόνους αναφέρεται ως διαδρομές hot, warm και cold.
Διαδρομή hot
Η διαδρομή hot αναφέρεται σε δεδομένα που πρέπει να επεξεργαστούν σε πραγματικό χρόνο ή σχεδόν σε πραγματικό χρόνο. Θα χρησιμοποιούσατε δεδομένα διαδρομής hot για ειδοποιήσεις, όπως ειδοποιήσεις ότι ένα όχημα πλησιάζει σε μια αποθήκη ή ότι η θερμοκρασία σε ένα φορτηγό ψυγείο είναι πολύ υψηλή.
Για να χρησιμοποιήσετε δεδομένα διαδρομής hot, ο κώδικάς σας θα ανταποκρίνεται σε συμβάντα μόλις ληφθούν από τις υπηρεσίες cloud σας.
Διαδρομή warm
Η διαδρομή warm αναφέρεται σε δεδομένα που μπορούν να επεξεργαστούν λίγο μετά τη λήψη τους, για παράδειγμα για αναφορές ή αναλύσεις βραχυπρόθεσμου χρόνου. Θα χρησιμοποιούσατε δεδομένα διαδρομής warm για ημερήσιες αναφορές σχετικά με τη χιλιομετρική απόσταση των οχημάτων, χρησιμοποιώντας δεδομένα που συλλέχθηκαν την προηγούμενη ημέρα.
Τα δεδομένα διαδρομής warm αποθηκεύονται μόλις ληφθούν από την υπηρεσία cloud μέσα σε κάποιο είδος αποθήκευσης που μπορεί να προσπελαστεί γρήγορα.
Διαδρομή cold
Η διαδρομή cold αναφέρεται σε ιστορικά δεδομένα, αποθηκεύοντας δεδομένα για μακροχρόνια χρήση ώστε να επεξεργαστούν όποτε χρειαστεί. Για παράδειγμα, θα μπορούσατε να χρησιμοποιήσετε τη διαδρομή cold για να λάβετε ετήσιες αναφορές χιλιομετρικής απόστασης για οχήματα ή να εκτελέσετε αναλύσεις σε διαδρομές για να βρείτε την πιο βέλτιστη διαδρομή για μεί
⚠️ Μπορείτε να ανατρέξετε στις οδηγίες για τη δημιουργία ενός Azure Functions Project από το project 2, μάθημα 5 αν χρειαστεί.
-
Προσθέστε έναν ενεργοποιητή συμβάντων IoT Hub που χρησιμοποιεί το συμβατό με Event Hub endpoint του IoT Hub.
⚠️ Μπορείτε να ανατρέξετε στις οδηγίες για τη δημιουργία ενός ενεργοποιητή συμβάντων IoT Hub από το έργο 2, μάθημα 5 αν χρειαστεί.
-
Ορίστε τη συμβολοσειρά σύνδεσης του συμβατού με Event Hub endpoint στο αρχείο
local.settings.json
και χρησιμοποιήστε το κλειδί για αυτή την καταχώρηση στο αρχείοfunction.json
. -
Χρησιμοποιήστε την εφαρμογή Azurite ως τοπικό εξομοιωτή αποθήκευσης.
-
Εκτελέστε την εφαρμογή των λειτουργιών σας για να βεβαιωθείτε ότι λαμβάνει συμβάντα από τη συσκευή GPS σας. Βεβαιωθείτε ότι η συσκευή IoT σας λειτουργεί επίσης και στέλνει δεδομένα GPS.
Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}}
Λογαριασμοί Αποθήκευσης Azure
Οι Λογαριασμοί Αποθήκευσης Azure είναι μια υπηρεσία γενικής αποθήκευσης που μπορεί να αποθηκεύσει δεδομένα με διάφορους τρόπους. Μπορείτε να αποθηκεύσετε δεδομένα ως blobs, σε ουρές, σε πίνακες ή ως αρχεία, και όλα αυτά ταυτόχρονα.
Αποθήκευση Blob
Η λέξη Blob σημαίνει μεγάλα δυαδικά αντικείμενα, αλλά έχει γίνει ο όρος για οποιαδήποτε μη δομημένα δεδομένα. Μπορείτε να αποθηκεύσετε οποιαδήποτε δεδομένα στην αποθήκευση blob, από έγγραφα JSON που περιέχουν δεδομένα IoT, έως αρχεία εικόνων και ταινιών. Η αποθήκευση blob έχει την έννοια των containers, δηλαδή ονομασμένων "κάδων" όπου μπορείτε να αποθηκεύσετε δεδομένα, παρόμοια με πίνακες σε μια σχεσιακή βάση δεδομένων. Αυτά τα containers μπορούν να έχουν έναν ή περισσότερους φακέλους για την αποθήκευση blobs, και κάθε φάκελος μπορεί να περιέχει άλλους φακέλους, παρόμοια με τον τρόπο που αποθηκεύονται τα αρχεία στον σκληρό δίσκο του υπολογιστή σας.
Θα χρησιμοποιήσετε την αποθήκευση blob σε αυτό το μάθημα για να αποθηκεύσετε δεδομένα IoT.
✅ Κάντε λίγη έρευνα: Διαβάστε για την Αποθήκευση Blob Azure
Αποθήκευση Πινάκων
Η αποθήκευση πινάκων σας επιτρέπει να αποθηκεύετε ημιδομημένα δεδομένα. Η αποθήκευση πινάκων είναι στην πραγματικότητα μια βάση δεδομένων NoSQL, οπότε δεν απαιτεί έναν προκαθορισμένο ορισμό πινάκων, αλλά έχει σχεδιαστεί για να αποθηκεύει δεδομένα σε έναν ή περισσότερους πίνακες, με μοναδικά κλειδιά για τον ορισμό κάθε γραμμής.
✅ Κάντε λίγη έρευνα: Διαβάστε για την Αποθήκευση Πινάκων Azure
Αποθήκευση Ουρών
Η αποθήκευση ουρών σας επιτρέπει να αποθηκεύετε μηνύματα μεγέθους έως 64KB σε μια ουρά. Μπορείτε να προσθέσετε μηνύματα στο τέλος της ουράς και να τα διαβάσετε από την αρχή. Οι ουρές αποθηκεύουν μηνύματα επ' αόριστον, εφόσον υπάρχει διαθέσιμος χώρος αποθήκευσης, επιτρέποντας την αποθήκευση μηνυμάτων μακροπρόθεσμα και την ανάγνωσή τους όταν χρειάζεται. Για παράδειγμα, αν θέλετε να εκτελέσετε μια μηνιαία εργασία για την επεξεργασία δεδομένων GPS, μπορείτε να προσθέτετε δεδομένα στην ουρά κάθε μέρα για έναν μήνα και στο τέλος του μήνα να επεξεργαστείτε όλα τα μηνύματα από την ουρά.
✅ Κάντε λίγη έρευνα: Διαβάστε για την Αποθήκευση Ουρών Azure
Αποθήκευση Αρχείων
Η αποθήκευση αρχείων είναι η αποθήκευση αρχείων στο cloud, και οποιεσδήποτε εφαρμογές ή συσκευές μπορούν να συνδεθούν χρησιμοποιώντας πρότυπα πρωτόκολλα της βιομηχανίας. Μπορείτε να γράψετε αρχεία στην αποθήκευση αρχείων και στη συνέχεια να τα προσαρτήσετε ως δίσκο στον υπολογιστή σας.
✅ Κάντε λίγη έρευνα: Διαβάστε για την Αποθήκευση Αρχείων Azure
Συνδέστε τον serverless κώδικά σας με την αποθήκευση
Η εφαρμογή λειτουργιών σας τώρα χρειάζεται να συνδεθεί με την αποθήκευση blob για να αποθηκεύσει τα μηνύματα από το IoT Hub. Υπάρχουν 2 τρόποι για να το κάνετε αυτό:
- Μέσα στον κώδικα της λειτουργίας, συνδεθείτε με την αποθήκευση blob χρησιμοποιώντας το Python SDK για την αποθήκευση blob και γράψτε τα δεδομένα ως blobs.
- Χρησιμοποιήστε μια σύνδεση εξόδου λειτουργίας για να συνδέσετε την τιμή επιστροφής της λειτουργίας με την αποθήκευση blob και να αποθηκεύσετε αυτόματα το blob.
Σε αυτό το μάθημα, θα χρησιμοποιήσετε το Python SDK για να δείτε πώς να αλληλεπιδράσετε με την αποθήκευση blob.
Τα δεδομένα θα αποθηκευτούν ως JSON blob με την εξής μορφή:
{
"device_id": <device_id>,
"timestamp" : <time>,
"gps" :
{
"lat" : <latitude>,
"lon" : <longitude>
}
}
Εργασία - συνδέστε τον serverless κώδικά σας με την αποθήκευση
-
Δημιουργήστε έναν λογαριασμό αποθήκευσης Azure. Ονομάστε τον κάτι όπως
gps<το όνομά σας>
.⚠️ Μπορείτε να ανατρέξετε στις οδηγίες για τη δημιουργία ενός λογαριασμού αποθήκευσης από το έργο 2, μάθημα 5 αν χρειαστεί.
Αν έχετε ήδη έναν λογαριασμό αποθήκευσης από το προηγούμενο έργο, μπορείτε να τον επαναχρησιμοποιήσετε.
💁 Θα μπορείτε να χρησιμοποιήσετε τον ίδιο λογαριασμό αποθήκευσης για να αναπτύξετε την εφαρμογή Azure Functions σας αργότερα σε αυτό το μάθημα.
-
Εκτελέστε την παρακάτω εντολή για να λάβετε τη συμβολοσειρά σύνδεσης για τον λογαριασμό αποθήκευσης:
az storage account show-connection-string --output table \ --name <storage_name>
Αντικαταστήστε το
<storage_name>
με το όνομα του λογαριασμού αποθήκευσης που δημιουργήσατε στο προηγούμενο βήμα. -
Προσθέστε μια νέα καταχώρηση στο αρχείο
local.settings.json
για τη συμβολοσειρά σύνδεσης του λογαριασμού αποθήκευσης, χρησιμοποιώντας την τιμή από το προηγούμενο βήμα. Ονομάστε τηνSTORAGE_CONNECTION_STRING
. -
Προσθέστε τα παρακάτω στο αρχείο
requirements.txt
για να εγκαταστήσετε τα πακέτα Pip για την αποθήκευση Azure:azure-storage-blob
Εγκαταστήστε τα πακέτα από αυτό το αρχείο στο εικονικό σας περιβάλλον.
Αν λάβετε κάποιο σφάλμα, αναβαθμίστε την έκδοση του Pip στο εικονικό σας περιβάλλον στην τελευταία έκδοση με την παρακάτω εντολή και δοκιμάστε ξανά:
pip install --upgrade pip
-
Στο αρχείο
__init__.py
για τονiot-hub-trigger
, προσθέστε τις παρακάτω δηλώσεις εισαγωγής:import json import os import uuid from azure.storage.blob import BlobServiceClient, PublicAccess
Το σύστημα module
json
θα χρησιμοποιηθεί για την ανάγνωση και εγγραφή JSON, το σύστημα moduleos
θα χρησιμοποιηθεί για την ανάγνωση της συμβολοσειράς σύνδεσης, και το σύστημα moduleuuid
θα χρησιμοποιηθεί για τη δημιουργία ενός μοναδικού ID για την ανάγνωση GPS.Το πακέτο
azure.storage.blob
περιέχει το Python SDK για την εργασία με την αποθήκευση blob. -
Πριν από τη μέθοδο
main
, προσθέστε την παρακάτω βοηθητική συνάρτηση:def get_or_create_container(name): connection_str = os.environ['STORAGE_CONNECTION_STRING'] blob_service_client = BlobServiceClient.from_connection_string(connection_str) for container in blob_service_client.list_containers(): if container.name == name: return blob_service_client.get_container_client(container.name) return blob_service_client.create_container(name, public_access=PublicAccess.Container)
Το Python blob SDK δεν έχει βοηθητική μέθοδο για τη δημιουργία ενός container αν δεν υπάρχει. Αυτός ο κώδικας θα φορτώσει τη συμβολοσειρά σύνδεσης από το αρχείο
local.settings.json
(ή τις Ρυθμίσεις Εφαρμογής μόλις αναπτυχθεί στο cloud), στη συνέχεια θα δημιουργήσει μια κλάσηBlobServiceClient
από αυτό για να αλληλεπιδράσει με τον λογαριασμό αποθήκευσης blob. Στη συνέχεια, επαναλαμβάνει όλα τα containers για τον λογαριασμό αποθήκευσης blob, αναζητώντας ένα με το παρεχόμενο όνομα - αν βρει ένα, θα επιστρέψει μια κλάσηContainerClient
που μπορεί να αλληλεπιδράσει με το container για να δημιουργήσει blobs. Αν δεν βρει κανένα, τότε το container δημιουργείται και επιστρέφεται ο client για το νέο container.Όταν δημιουργείται το νέο container, παρέχεται δημόσια πρόσβαση για την αναζήτηση των blobs στο container. Αυτό θα χρησιμοποιηθεί στο επόμενο μάθημα για την οπτικοποίηση των δεδομένων GPS σε έναν χάρτη.
-
Σε αντίθεση με την υγρασία του εδάφους, με αυτόν τον κώδικα θέλουμε να αποθηκεύσουμε κάθε συμβάν, οπότε προσθέστε τον παρακάτω κώδικα μέσα στον βρόχο
for event in events:
στη συνάρτησηmain
, κάτω από τη δήλωσηlogging
:device_id = event.iothub_metadata['connection-device-id'] blob_name = f'{device_id}/{str(uuid.uuid1())}.json'
Αυτός ο κώδικας λαμβάνει το ID της συσκευής από τα μεταδεδομένα του συμβάντος και στη συνέχεια το χρησιμοποιεί για να δημιουργήσει ένα όνομα blob. Τα blobs μπορούν να αποθηκευτούν σε φακέλους, και το ID της συσκευής θα χρησιμοποιηθεί για το όνομα του φακέλου, ώστε κάθε συσκευή να έχει όλα τα συμβάντα GPS της σε έναν φάκελο. Το όνομα του blob είναι αυτός ο φάκελος, ακολουθούμενος από ένα όνομα εγγράφου, διαχωρισμένο με κάθετες γραμμές, παρόμοια με διαδρομές σε Linux και macOS (παρόμοια και με Windows, αλλά τα Windows χρησιμοποιούν ανάστροφες κάθετες γραμμές). Το όνομα του εγγράφου είναι ένα μοναδικό ID που δημιουργείται χρησιμοποιώντας το module
uuid
της Python, με τον τύπο αρχείουjson
.Για παράδειγμα, για το ID συσκευής
gps-sensor
, το όνομα blob μπορεί να είναιgps-sensor/a9487ac2-b9cf-11eb-b5cd-1e00621e3648.json
. -
Προσθέστε τον παρακάτω κώδικα κάτω από αυτό:
container_client = get_or_create_container('gps-data') blob = container_client.get_blob_client(blob_name)
Αυτός ο κώδικας λαμβάνει τον client του container χρησιμοποιώντας τη βοηθητική κλάση
get_or_create_container
και στη συνέχεια λαμβάνει ένα αντικείμενο client blob χρησιμοποιώντας το όνομα blob. Αυτοί οι clients blob μπορούν να αναφέρονται σε υπάρχοντα blobs ή, όπως σε αυτή την περίπτωση, σε νέα blobs. -
Προσθέστε τον παρακάτω κώδικα μετά από αυτό:
event_body = json.loads(event.get_body().decode('utf-8')) blob_body = { 'device_id' : device_id, 'timestamp' : event.iothub_metadata['enqueuedtime'], 'gps': event_body['gps'] }
Αυτό δημιουργεί το σώμα του blob που θα γραφτεί στην αποθήκευση blob. Είναι ένα έγγραφο JSON που περιέχει το ID της συσκευής, την ώρα που η τηλεμετρία στάλθηκε στο IoT Hub, και τις συντεταγμένες GPS από την τηλεμετρία.
💁 Είναι σημαντικό να χρησιμοποιήσετε την ώρα που το μήνυμα προστέθηκε στην ουρά (enqueued time) αντί για την τρέχουσα ώρα, ώστε να λάβετε την ώρα που το μήνυμα στάλθηκε. Το μήνυμα μπορεί να παραμείνει στο hub για κάποιο χρονικό διάστημα πριν ανακτηθεί, αν η Εφαρμογή Λειτουργιών δεν εκτελείται.
-
Προσθέστε τον παρακάτω κώδικα μετά από αυτό:
logging.info(f'Writing blob to {blob_name} - {blob_body}') blob.upload_blob(json.dumps(blob_body).encode('utf-8'))
Αυτός ο κώδικας καταγράφει ότι ένα blob πρόκειται να γραφτεί με τις λεπτομέρειές του και στη συνέχεια ανεβάζει το σώμα του blob ως το περιεχόμενο του νέου blob.
-
Εκτελέστε την Εφαρμογή Λειτουργιών. Θα δείτε blobs να γράφονται για όλα τα συμβάντα GPS στην έξοδο:
[2021-05-21T01:31:14.325Z] Python EventHub trigger processed an event: {"gps": {"lat": 47.73092, "lon": -122.26206}} ... [2021-05-21T01:31:14.351Z] Writing blob to gps-sensor/4b6089fe-ba8d-11eb-bc7b-1e00621e3648.json - {'device_id': 'gps-sensor', 'timestamp': '2021-05-21T00:57:53.878Z', 'gps': {'lat': 47.73092, 'lon': -122.26206}}
💁 Βεβαιωθείτε ότι δεν εκτελείτε τον παρατηρητή συμβάντων IoT Hub ταυτόχρονα.
💁 Μπορείτε να βρείτε αυτόν τον κώδικα στον φάκελο code/functions.
Εργασία - επαληθεύστε τα ανεβασμένα blobs
-
Για να δείτε τα blobs που δημιουργήθηκαν, μπορείτε είτε να χρησιμοποιήσετε το Azure Storage Explorer, ένα δωρεάν εργαλείο που σας επιτρέπει να βλέπετε και να διαχειρίζεστε τους λογαριασμούς αποθήκευσής σας, είτε μέσω CLI.
-
Για να χρησιμοποιήσετε το CLI, πρώτα θα χρειαστείτε ένα κλειδί λογαριασμού. Εκτελέστε την παρακάτω εντολή για να λάβετε αυτό το κλειδί:
az storage account keys list --output table \ --account-name <storage_name>
Αντικαταστήστε το
<storage_name>
με το όνομα του λογαριασμού αποθήκευσης.Αντιγράψτε την τιμή του
key1
. -
Εκτελέστε την παρακάτω εντολή για να καταγράψετε τα blobs στο container:
az storage blob list --container-name gps-data \ --output table \ --account-name <storage_name> \ --account-key <key1>
Αντικαταστήστε το
<storage_name>
με το όνομα του λογαριασμού αποθήκευσης και το<key1>
με την τιμή τουkey1
που αντιγράψατε στο προηγούμενο βήμα.Αυτό θα καταγράψει όλα τα blobs στο container:
Name Blob Type Blob Tier Length Content Type Last Modified Snapshot ---------------------------------------------------- ----------- ----------- -------- ------------------------ ------------------------- ---------- gps-sensor/1810d55e-b9cf-11eb-9f5b-1e00621e3648.json BlockBlob Hot 45 application/octet-stream 2021-05-21T00:54:27+00:00 gps-sensor/18293e46-b9cf-11eb-9f5b-1e00621e3648.json BlockBlob Hot 45 application/octet-stream 2021-05-21T00:54:28+00:00 gps-sensor/1844549c-b9cf-11eb-9f5b-1e00621e3648.json BlockBlob Hot 45 application/octet-stream 2021-05-21T00:54:28+00:00 gps-sensor/1894d714-b9cf-11eb-9f5b-1e00621e3648.json BlockBlob Hot 45 application/octet-stream 2021-05-21T00:54:28+00:00
-
Κατεβάστε ένα από τα blobs χρησιμοποιώντας την παρακάτω εντολή:
az storage blob download --container-name gps-data \ --account-name <storage_name> \ --account-key <key1> \ --name <blob_name> \ --file <file_name>
Αντικαταστήστε το
<storage_name>
με το όνομα του λογαριασμού αποθήκευσης και το<key1>
με την τιμή τουkey1
που αντιγράψατε στο προηγούμενο βήμα.Αντικαταστήστε το
<blob_name>
με το πλήρες όνομα από τη στήληName
της εξόδου του προηγούμενου βήματος, συμπεριλαμβανομένου του ονόματος του φακέλου. Αντικαταστήστε το<file_name>
με το όνομα ενός τοπικού αρχείου για να αποθηκεύσετε το blob.
Μόλις κατεβεί, μπορείτε να ανοίξετε το αρχείο JSON στο VS Code και θα δείτε το blob που περιέχει τις λεπτομέρειες τοποθεσίας GPS:
{"device_id": "gps-sensor", "timestamp": "2021-05-21T00:57:53.878Z", "gps": {"lat": 47.73092, "lon": -122.26206}}
-
Εργασία - αναπτύξτε την Εφαρμογή Λειτουργιών σας στο cloud
Τώρα που η Εφαρμογή Λειτουργιών σας λειτουργεί, μπορείτε να την αναπτύξετε στο cloud.
-
Δημιουργήστε μια νέα εφαρμογή Azure Functions, χρησιμοποιώντας τον λογαριασμό αποθήκευσης που δημιουργήσατε νωρίτερα. Ονομάστε την κάτι όπως
gps-sensor-
και προσθέστε έναν μοναδικό αναγνωριστικό στο τέλος, όπως κάποιες τυχαίες λέξεις ή το όνομά σας.⚠️ Μπορείτε να ανατρέξετε στις οδηγίες για τη δημιουργία μιας Εφαρμογής Λειτουργιών από το έργο 2, μάθημα 5 αν χρειαστεί.
-
Ανεβάστε τις τιμές
IOT_HUB_CONNECTION_STRING
καιSTORAGE_CONNECTION_STRING
στις Ρυθμίσεις Εφαρ
⚠️ Μπορείτε να ανατρέξετε στις οδηγίες για την ανάπτυξη της εφαρμογής Functions από το έργο 2, μάθημα 5 αν χρειαστεί.
🚀 Πρόκληση
Τα δεδομένα GPS δεν είναι απόλυτα ακριβή, και οι ανιχνευόμενες τοποθεσίες μπορεί να αποκλίνουν κατά μερικά μέτρα, αν όχι περισσότερο, ειδικά σε τούνελ και περιοχές με ψηλά κτίρια.
Σκεφτείτε πώς η δορυφορική πλοήγηση θα μπορούσε να ξεπεράσει αυτό το πρόβλημα. Ποια δεδομένα διαθέτει το σύστημα πλοήγησής σας που θα του επέτρεπαν να κάνει καλύτερες προβλέψεις για την τοποθεσία σας;
Κουίζ μετά τη διάλεξη
Ανασκόπηση & Αυτομελέτη
- Διαβάστε για τα δομημένα δεδομένα στη σελίδα για το Μοντέλο Δεδομένων στη Wikipedia
- Διαβάστε για τα ημιδομημένα δεδομένα στη σελίδα για τα Ημιδομημένα Δεδομένα στη Wikipedia
- Διαβάστε για τα αδόμητα δεδομένα στη σελίδα για τα Αδόμητα Δεδομένα στη Wikipedia
- Διαβάστε περισσότερα για το Azure Storage και τους διαφορετικούς τύπους αποθήκευσης στην τεκμηρίωση του Azure Storage
Εργασία
Διερευνήστε τις συνδέσεις λειτουργιών
Αποποίηση ευθύνης:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης Co-op Translator. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.