6.4 KiB
Imposta un timer - Hardware IoT virtuale e Raspberry Pi
In questa parte della lezione, chiamerai il tuo codice serverless per comprendere il discorso e impostare un timer sul tuo dispositivo IoT virtuale o Raspberry Pi in base ai risultati.
Imposta un timer
Il testo che viene restituito dalla chiamata di riconoscimento vocale deve essere inviato al tuo codice serverless per essere elaborato da LUIS, ottenendo così il numero di secondi per il timer. Questo numero di secondi può essere utilizzato per impostare un timer.
I timer possono essere impostati utilizzando la classe threading.Timer
di Python. Questa classe accetta un tempo di ritardo e una funzione, ed esegue la funzione dopo il tempo di ritardo.
Attività - invia il testo alla funzione serverless
-
Apri il progetto
smart-timer
in VS Code e assicurati che l'ambiente virtuale sia caricato nel terminale se stai utilizzando un dispositivo IoT virtuale. -
Sopra la funzione
process_text
, dichiara una funzione chiamataget_timer_time
per chiamare l'endpoint REST che hai creato:def get_timer_time(text):
-
Aggiungi il seguente codice a questa funzione per definire l'URL da chiamare:
url = '<URL>'
Sostituisci
<URL>
con l'URL del tuo endpoint REST che hai costruito nella lezione precedente, sia sul tuo computer che nel cloud. -
Aggiungi il seguente codice per impostare il testo come una proprietà passata come JSON alla chiamata:
body = { 'text': text } response = requests.post(url, json=body)
-
Sotto questo, recupera i
seconds
dal payload della risposta, restituendo 0 se la chiamata non è riuscita:if response.status_code != 200: return 0 payload = response.json() return payload['seconds']
Le chiamate HTTP riuscite restituiscono un codice di stato nella gamma 200, e il tuo codice serverless restituisce 200 se il testo è stato elaborato e riconosciuto come intento di impostazione del timer.
Attività - imposta un timer su un thread in background
-
Aggiungi la seguente istruzione di importazione all'inizio del file per importare la libreria Python threading:
import threading
-
Sopra la funzione
process_text
, aggiungi una funzione per pronunciare una risposta. Per ora, questa scriverà semplicemente sulla console, ma più avanti in questa lezione pronuncerà il testo.def say(text): print(text)
-
Sotto questa, aggiungi una funzione che verrà chiamata da un timer per annunciare che il timer è terminato:
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)
Questa funzione prende il numero di minuti e secondi del timer e costruisce una frase per dire che il timer è terminato. Controlla il numero di minuti e secondi e include solo ciascuna unità di tempo se ha un valore. Ad esempio, se il numero di minuti è 0, vengono inclusi solo i secondi nel messaggio. Questa frase viene quindi inviata alla funzione
say
. -
Sotto questa, aggiungi la seguente funzione
create_timer
per creare un timer:def create_timer(total_seconds): minutes, seconds = divmod(total_seconds, 60) threading.Timer(total_seconds, announce_timer, args=[minutes, seconds]).start()
Questa funzione prende il numero totale di secondi per il timer che verrà inviato nel comando e lo converte in minuti e secondi. Quindi crea e avvia un oggetto timer utilizzando il numero totale di secondi, passando la funzione
announce_timer
e una lista contenente i minuti e i secondi. Quando il timer scade, chiamerà la funzioneannounce_timer
e passerà il contenuto di questa lista come parametri: quindi il primo elemento della lista viene passato come parametrominutes
e il secondo elemento come parametroseconds
. -
Alla fine della funzione
create_timer
, aggiungi del codice per costruire un messaggio da pronunciare all'utente per annunciare che il timer sta iniziando:announcement = '' if minutes > 0: announcement += f'{minutes} minute ' if seconds > 0: announcement += f'{seconds} second ' announcement += 'timer started.' say(announcement)
Anche in questo caso, include solo l'unità di tempo che ha un valore. Questa frase viene quindi inviata alla funzione
say
. -
Aggiungi il seguente codice alla fine della funzione
process_text
per ottenere il tempo per il timer dal testo, quindi crea il timer:seconds = get_timer_time(text) if seconds > 0: create_timer(seconds)
Il timer viene creato solo se il numero di secondi è maggiore di 0.
-
Esegui l'app e assicurati che l'applicazione della funzione sia in esecuzione. Imposta alcuni timer e l'output mostrerà che il timer è stato impostato e poi mostrerà quando scade:
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.
💁 Puoi trovare questo codice nella cartella code-timer/pi o code-timer/virtual-iot-device.
😀 Il tuo programma timer è stato un successo!
Disclaimer:
Questo documento è stato tradotto utilizzando il servizio di traduzione automatica Co-op Translator. Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un traduttore umano. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.