6.1 KiB
Nastavite časovnik - Virtualna IoT strojna oprema in Raspberry Pi
V tem delu lekcije boste poklicali svojo strežniško kodo, da razumete govor, in nastavili časovnik na svoji virtualni IoT napravi ali Raspberry Pi glede na rezultate.
Nastavite časovnik
Besedilo, ki ga dobite iz klica za pretvorbo govora v besedilo, je treba poslati vaši strežniški kodi, da ga obdela LUIS, ki vrne število sekund za časovnik. To število sekund lahko uporabite za nastavitev časovnika.
Časovnike lahko nastavite z uporabo razreda Python threading.Timer
. Ta razred sprejme čas zakasnitve in funkcijo, ki se izvede po preteku zakasnitve.
Naloga - pošljite besedilo strežniški funkciji
-
Odprite projekt
smart-timer
v VS Code in se prepričajte, da je virtualno okolje naloženo v terminalu, če uporabljate virtualno IoT napravo. -
Nad funkcijo
process_text
deklarirajte funkcijo z imenomget_timer_time
, ki bo poklicala REST končno točko, ki ste jo ustvarili:def get_timer_time(text):
-
Dodajte naslednjo kodo tej funkciji, da definirate URL, ki ga je treba poklicati:
url = '<URL>'
Zamenjajte
<URL>
z URL-jem vaše REST končne točke, ki ste jo zgradili v prejšnji lekciji, bodisi na svojem računalniku bodisi v oblaku. -
Dodajte naslednjo kodo, da nastavite besedilo kot lastnost, ki se pošlje kot JSON v klic:
body = { 'text': text } response = requests.post(url, json=body)
-
Pod tem pridobite
seconds
iz odzivnega paketa, pri čemer vrnite 0, če je klic spodletel:if response.status_code != 200: return 0 payload = response.json() return payload['seconds']
Uspešni HTTP klici vrnejo statusno kodo v območju 200, vaša strežniška koda pa vrne 200, če je bilo besedilo obdelano in prepoznano kot namen za nastavitev časovnika.
Naloga - nastavite časovnik v ozadju
-
Na vrhu datoteke dodajte naslednjo uvozno izjavo, da uvozite knjižnico Python
threading
:import threading
-
Nad funkcijo
process_text
dodajte funkcijo za izgovor odgovora. Za zdaj bo ta funkcija samo pisala v konzolo, kasneje v tej lekciji pa bo izgovarjala besedilo.def say(text): print(text)
-
Pod to funkcijo dodajte funkcijo, ki jo bo poklical časovnik, da naznani, da je časovnik končan:
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)
Ta funkcija sprejme število minut in sekund za časovnik ter sestavi stavek, ki pove, da je časovnik končan. Preveri število minut in sekund ter vključi vsako časovno enoto le, če ima vrednost. Na primer, če je število minut 0, so v sporočilu vključene samo sekunde. Ta stavek se nato pošlje funkciji
say
. -
Pod to funkcijo dodajte naslednjo funkcijo
create_timer
, da ustvarite časovnik:def create_timer(total_seconds): minutes, seconds = divmod(total_seconds, 60) threading.Timer(total_seconds, announce_timer, args=[minutes, seconds]).start()
Ta funkcija sprejme skupno število sekund za časovnik, ki bo poslano v ukazu, in ga pretvori v minute in sekunde. Nato ustvari in zažene objekt časovnika z uporabo skupnega števila sekund, pri čemer posreduje funkcijo
announce_timer
in seznam, ki vsebuje minute in sekunde. Ko časovnik poteče, bo poklical funkcijoannounce_timer
in posredoval vsebino tega seznama kot parametre - tako bo prvi element na seznamu posredovan kot parameterminutes
, drugi element pa kot parameterseconds
. -
Na konec funkcije
create_timer
dodajte nekaj kode za sestavo sporočila, ki ga bo uporabnik slišal, da naznani začetek časovnika:announcement = '' if minutes > 0: announcement += f'{minutes} minute ' if seconds > 0: announcement += f'{seconds} second ' announcement += 'timer started.' say(announcement)
Tudi tukaj je vključena le časovna enota, ki ima vrednost. Ta stavek se nato pošlje funkciji
say
. -
Na konec funkcije
process_text
dodajte naslednje, da pridobite čas za časovnik iz besedila in nato ustvarite časovnik:seconds = get_timer_time(text) if seconds > 0: create_timer(seconds)
Časovnik se ustvari le, če je število sekund večje od 0.
-
Zaženite aplikacijo in se prepričajte, da aplikacija funkcij prav tako deluje. Nastavite nekaj časovnikov, in izpis bo pokazal, da je časovnik nastavljen, nato pa bo pokazal, kdaj poteče:
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.
💁 To kodo lahko najdete v mapi code-timer/pi ali code-timer/virtual-iot-device.
😀 Vaš program za časovnik je bil uspešen!
Omejitev odgovornosti:
Ta dokument je bil preveden z uporabo storitve za prevajanje z umetno inteligenco Co-op Translator. Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem maternem jeziku je treba obravnavati kot avtoritativni vir. Za ključne informacije priporočamo profesionalni človeški prevod. Ne prevzemamo odgovornosti za morebitne nesporazume ali napačne razlage, ki bi nastale zaradi uporabe tega prevoda.