You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/el/6-consumer/lessons/3-spoken-feedback/single-board-computer-set-t...

10 KiB

Ρύθμιση χρονομέτρου - Εικονικό IoT Hardware και Raspberry Pi

Σε αυτό το μέρος του μαθήματος, θα καλέσετε τον serverless κώδικά σας για να κατανοήσετε την ομιλία και να ρυθμίσετε ένα χρονόμετρο στη εικονική IoT συσκευή ή το Raspberry Pi σας βάσει των αποτελεσμάτων.

Ρύθμιση χρονομέτρου

Το κείμενο που επιστρέφεται από την κλήση μετατροπής ομιλίας σε κείμενο πρέπει να σταλεί στον serverless κώδικά σας για να επεξεργαστεί από το LUIS, επιστρέφοντας τον αριθμό δευτερολέπτων για το χρονόμετρο. Αυτός ο αριθμός δευτερολέπτων μπορεί να χρησιμοποιηθεί για τη ρύθμιση ενός χρονομέτρου.

Τα χρονόμετρα μπορούν να ρυθμιστούν χρησιμοποιώντας την κλάση Python threading.Timer. Αυτή η κλάση δέχεται χρόνο καθυστέρησης και μια συνάρτηση, και μετά τον χρόνο καθυστέρησης, η συνάρτηση εκτελείται.

Εργασία - στείλτε το κείμενο στη serverless συνάρτηση

  1. Ανοίξτε το έργο smart-timer στο VS Code και βεβαιωθείτε ότι το εικονικό περιβάλλον είναι φορτωμένο στο τερματικό αν χρησιμοποιείτε εικονική IoT συσκευή.

  2. Πάνω από τη συνάρτηση process_text, δηλώστε μια συνάρτηση που ονομάζεται get_timer_time για να καλέσετε το REST endpoint που δημιουργήσατε:

    def get_timer_time(text):
    
  3. Προσθέστε τον παρακάτω κώδικα σε αυτή τη συνάρτηση για να ορίσετε το URL που θα καλέσετε:

    url = '<URL>'
    

    Αντικαταστήστε το <URL> με το URL του REST endpoint που δημιουργήσατε στο προηγούμενο μάθημα, είτε στον υπολογιστή σας είτε στο cloud.

  4. Προσθέστε τον παρακάτω κώδικα για να ορίσετε το κείμενο ως ιδιότητα που περνάει ως JSON στην κλήση:

    body = {
        'text': text
    }
    
    response = requests.post(url, json=body)
    
  5. Κάτω από αυτό, ανακτήστε τα seconds από το payload της απάντησης, επιστρέφοντας 0 αν η κλήση απέτυχε:

    if response.status_code != 200:
        return 0
    
    payload = response.json()
    return payload['seconds']
    

    Οι επιτυχείς HTTP κλήσεις επιστρέφουν έναν κωδικό κατάστασης στην περιοχή 200, και ο serverless κώδικάς σας επιστρέφει 200 αν το κείμενο επεξεργάστηκε και αναγνωρίστηκε ως πρόθεση ρύθμισης χρονομέτρου.

Εργασία - ρύθμιση χρονομέτρου σε background thread

  1. Προσθέστε την παρακάτω δήλωση εισαγωγής στην κορυφή του αρχείου για να εισάγετε τη βιβλιοθήκη threading της Python:

    import threading
    
  2. Πάνω από τη συνάρτηση process_text, προσθέστε μια συνάρτηση για να μιλήσετε μια απάντηση. Προς το παρόν, αυτή απλώς θα γράφει στην κονσόλα, αλλά αργότερα σε αυτό το μάθημα θα μιλάει το κείμενο.

    def say(text):
        print(text)
    
  3. Κάτω από αυτήν, προσθέστε μια συνάρτηση που θα καλείται από ένα χρονόμετρο για να ανακοινώσει ότι το χρονόμετρο ολοκληρώθηκε:

    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.

  4. Κάτω από αυτήν, προσθέστε την παρακάτω συνάρτηση 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.

  5. Στο τέλος της συνάρτησης create_timer, προσθέστε κάποιον κώδικα για να δημιουργήσετε ένα μήνυμα που θα ανακοινώνει στον χρήστη ότι το χρονόμετρο ξεκινά:

    announcement = ''
    if minutes > 0:
        announcement += f'{minutes} minute '
    if seconds > 0:
        announcement += f'{seconds} second '    
    announcement += 'timer started.'
    say(announcement)
    

    Και πάλι, αυτό περιλαμβάνει μόνο τη μονάδα χρόνου που έχει τιμή. Αυτή η πρόταση στη συνέχεια αποστέλλεται στη συνάρτηση say.

  6. Προσθέστε το παρακάτω στο τέλος της συνάρτησης process_text για να λάβετε τον χρόνο για το χρονόμετρο από το κείμενο και στη συνέχεια να δημιουργήσετε το χρονόμετρο:

    seconds = get_timer_time(text)
    if seconds > 0:
        create_timer(seconds)
    

    Το χρονόμετρο δημιουργείται μόνο αν ο αριθμός δευτερολέπτων είναι μεγαλύτερος από 0.

  7. Εκτελέστε την εφαρμογή και βεβαιωθείτε ότι η λειτουργία της εφαρμογής είναι επίσης ενεργή. Ρυθμίστε μερικά χρονόμετρα και η έξοδος θα δείξει ότι το χρονόμετρο ρυθμίστηκε και στη συνέχεια θα δείξει πότε λήγει:

    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. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.