10 KiB
Ρύθμιση χρονομέτρου - Εικονικό IoT Hardware και Raspberry Pi
Σε αυτό το μέρος του μαθήματος, θα καλέσετε τον serverless κώδικά σας για να κατανοήσετε την ομιλία και να ρυθμίσετε ένα χρονόμετρο στη εικονική IoT συσκευή ή το Raspberry Pi σας βάσει των αποτελεσμάτων.
Ρύθμιση χρονομέτρου
Το κείμενο που επιστρέφεται από την κλήση μετατροπής ομιλίας σε κείμενο πρέπει να σταλεί στον serverless κώδικά σας για να επεξεργαστεί από το LUIS, επιστρέφοντας τον αριθμό δευτερολέπτων για το χρονόμετρο. Αυτός ο αριθμός δευτερολέπτων μπορεί να χρησιμοποιηθεί για τη ρύθμιση ενός χρονομέτρου.
Τα χρονόμετρα μπορούν να ρυθμιστούν χρησιμοποιώντας την κλάση Python threading.Timer
. Αυτή η κλάση δέχεται χρόνο καθυστέρησης και μια συνάρτηση, και μετά τον χρόνο καθυστέρησης, η συνάρτηση εκτελείται.
Εργασία - στείλτε το κείμενο στη serverless συνάρτηση
-
Ανοίξτε το έργο
smart-timer
στο VS Code και βεβαιωθείτε ότι το εικονικό περιβάλλον είναι φορτωμένο στο τερματικό αν χρησιμοποιείτε εικονική IoT συσκευή. -
Πάνω από τη συνάρτηση
process_text
, δηλώστε μια συνάρτηση που ονομάζεταιget_timer_time
για να καλέσετε το REST endpoint που δημιουργήσατε:def get_timer_time(text):
-
Προσθέστε τον παρακάτω κώδικα σε αυτή τη συνάρτηση για να ορίσετε το URL που θα καλέσετε:
url = '<URL>'
Αντικαταστήστε το
<URL>
με το URL του REST endpoint που δημιουργήσατε στο προηγούμενο μάθημα, είτε στον υπολογιστή σας είτε στο cloud. -
Προσθέστε τον παρακάτω κώδικα για να ορίσετε το κείμενο ως ιδιότητα που περνάει ως JSON στην κλήση:
body = { 'text': text } response = requests.post(url, json=body)
-
Κάτω από αυτό, ανακτήστε τα
seconds
από το payload της απάντησης, επιστρέφοντας 0 αν η κλήση απέτυχε:if response.status_code != 200: return 0 payload = response.json() return payload['seconds']
Οι επιτυχείς HTTP κλήσεις επιστρέφουν έναν κωδικό κατάστασης στην περιοχή 200, και ο serverless κώδικάς σας επιστρέφει 200 αν το κείμενο επεξεργάστηκε και αναγνωρίστηκε ως πρόθεση ρύθμισης χρονομέτρου.
Εργασία - ρύθμιση χρονομέτρου σε background thread
-
Προσθέστε την παρακάτω δήλωση εισαγωγής στην κορυφή του αρχείου για να εισάγετε τη βιβλιοθήκη threading της Python:
import threading
-
Πάνω από τη συνάρτηση
process_text
, προσθέστε μια συνάρτηση για να μιλήσετε μια απάντηση. Προς το παρόν, αυτή απλώς θα γράφει στην κονσόλα, αλλά αργότερα σε αυτό το μάθημα θα μιλάει το κείμενο.def say(text): print(text)
-
Κάτω από αυτήν, προσθέστε μια συνάρτηση που θα καλείται από ένα χρονόμετρο για να ανακοινώσει ότι το χρονόμετρο ολοκληρώθηκε:
def announce_timer(minutes, seconds): announcement = 'Times up on your ' if minutes > 0: announcement += f'{minutes} minute ' if seconds > 0: announcement += f'{seconds} second ' announcement += 'timer.' say(announcement)
Αυτή η συνάρτηση λαμβάνει τον αριθμό λεπτών και δευτερολέπτων για το χρονόμετρο και δημιουργεί μια πρόταση που λέει ότι το χρονόμετρο ολοκληρώθηκε. Θα ελέγξει τον αριθμό λεπτών και δευτερολέπτων και θα περιλαμβάνει μόνο κάθε μονάδα χρόνου αν έχει αριθμό. Για παράδειγμα, αν ο αριθμός λεπτών είναι 0, τότε περιλαμβάνονται μόνο τα δευτερόλεπτα στο μήνυμα. Αυτή η πρόταση στη συνέχεια αποστέλλεται στη συνάρτηση
say
. -
Κάτω από αυτήν, προσθέστε την παρακάτω συνάρτηση
create_timer
για να δημιουργήσετε ένα χρονόμετρο:def create_timer(total_seconds): minutes, seconds = divmod(total_seconds, 60) threading.Timer(total_seconds, announce_timer, args=[minutes, seconds]).start()
Αυτή η συνάρτηση λαμβάνει τον συνολικό αριθμό δευτερολέπτων για το χρονόμετρο που θα σταλεί στην εντολή και τον μετατρέπει σε λεπτά και δευτερόλεπτα. Στη συνέχεια, δημιουργεί και ξεκινά ένα αντικείμενο χρονομέτρου χρησιμοποιώντας τον συνολικό αριθμό δευτερολέπτων, περνώντας τη συνάρτηση
announce_timer
και μια λίστα που περιέχει τα λεπτά και τα δευτερόλεπτα. Όταν το χρονόμετρο λήξει, θα καλέσει τη συνάρτησηannounce_timer
και θα περάσει τα περιεχόμενα αυτής της λίστας ως παραμέτρους - έτσι το πρώτο στοιχείο της λίστας περνάει ως η παράμετροςminutes
και το δεύτερο στοιχείο ως η παράμετροςseconds
. -
Στο τέλος της συνάρτησης
create_timer
, προσθέστε κάποιον κώδικα για να δημιουργήσετε ένα μήνυμα που θα ανακοινώνει στον χρήστη ότι το χρονόμετρο ξεκινά:announcement = '' if minutes > 0: announcement += f'{minutes} minute ' if seconds > 0: announcement += f'{seconds} second ' announcement += 'timer started.' say(announcement)
Και πάλι, αυτό περιλαμβάνει μόνο τη μονάδα χρόνου που έχει τιμή. Αυτή η πρόταση στη συνέχεια αποστέλλεται στη συνάρτηση
say
. -
Προσθέστε το παρακάτω στο τέλος της συνάρτησης
process_text
για να λάβετε τον χρόνο για το χρονόμετρο από το κείμενο και στη συνέχεια να δημιουργήσετε το χρονόμετρο:seconds = get_timer_time(text) if seconds > 0: create_timer(seconds)
Το χρονόμετρο δημιουργείται μόνο αν ο αριθμός δευτερολέπτων είναι μεγαλύτερος από 0.
-
Εκτελέστε την εφαρμογή και βεβαιωθείτε ότι η λειτουργία της εφαρμογής είναι επίσης ενεργή. Ρυθμίστε μερικά χρονόμετρα και η έξοδος θα δείξει ότι το χρονόμετρο ρυθμίστηκε και στη συνέχεια θα δείξει πότε λήγει:
pi@raspberrypi:~/smart-timer $ python3 app.py Set a two minute 27 second timer. 2 minute 27 second timer started. Times up on your 2 minute 27 second timer.
💁 Μπορείτε να βρείτε αυτόν τον κώδικα στον φάκελο code-timer/pi ή code-timer/virtual-iot-device.
😀 Το πρόγραμμα χρονομέτρου σας ήταν επιτυχές!
Αποποίηση ευθύνης:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης Co-op Translator. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.