6.4 KiB
Stel een timer in - Virtuele IoT-hardware en Raspberry Pi
In dit deel van de les roep je je serverloze code aan om de spraak te begrijpen en stel je een timer in op je virtuele IoT-apparaat of Raspberry Pi op basis van de resultaten.
Stel een timer in
De tekst die terugkomt van de spraak-naar-tekst-aanroep moet naar je serverloze code worden gestuurd om door LUIS te worden verwerkt, waarbij het aantal seconden voor de timer wordt teruggegeven. Dit aantal seconden kan worden gebruikt om een timer in te stellen.
Timers kunnen worden ingesteld met behulp van de Python-klasse threading.Timer
. Deze klasse neemt een wachttijd en een functie, en na de wachttijd wordt de functie uitgevoerd.
Taak - stuur de tekst naar de serverloze functie
-
Open het
smart-timer
-project in VS Code en zorg ervoor dat de virtuele omgeving is geladen in de terminal als je een virtueel IoT-apparaat gebruikt. -
Boven de functie
process_text
, declareer een functie genaamdget_timer_time
om het REST-eindpunt dat je hebt gemaakt aan te roepen:def get_timer_time(text):
-
Voeg de volgende code toe aan deze functie om de URL te definiëren die moet worden aangeroepen:
url = '<URL>'
Vervang
<URL>
door de URL van je REST-eindpunt dat je in de vorige les hebt gebouwd, ofwel op je computer of in de cloud. -
Voeg de volgende code toe om de tekst als een eigenschap door te geven in JSON-formaat bij de aanroep:
body = { 'text': text } response = requests.post(url, json=body)
-
Haal hieronder de
seconds
op uit de response payload en geef 0 terug als de aanroep is mislukt:if response.status_code != 200: return 0 payload = response.json() return payload['seconds']
Succesvolle HTTP-aanroepen geven een statuscode in het bereik van 200 terug, en je serverloze code geeft 200 terug als de tekst is verwerkt en herkend als de intentie om een timer in te stellen.
Taak - stel een timer in op een achtergrondthread
-
Voeg de volgende importverklaring toe bovenaan het bestand om de threading-bibliotheek van Python te importeren:
import threading
-
Voeg boven de functie
process_text
een functie toe om een reactie uit te spreken. Voor nu zal deze alleen naar de console schrijven, maar later in deze les zal deze de tekst uitspreken.def say(text): print(text)
-
Voeg hieronder een functie toe die door een timer wordt aangeroepen om aan te kondigen dat de timer is voltooid:
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)
Deze functie neemt het aantal minuten en seconden voor de timer en bouwt een zin om te zeggen dat de timer is voltooid. Het controleert het aantal minuten en seconden en neemt alleen elke tijdseenheid op als deze een waarde heeft. Bijvoorbeeld, als het aantal minuten 0 is, worden alleen seconden opgenomen in het bericht. Deze zin wordt vervolgens naar de functie
say
gestuurd. -
Voeg hieronder de volgende functie
create_timer
toe om een timer te maken:def create_timer(total_seconds): minutes, seconds = divmod(total_seconds, 60) threading.Timer(total_seconds, announce_timer, args=[minutes, seconds]).start()
Deze functie neemt het totale aantal seconden voor de timer dat in het commando wordt verzonden en zet dit om in minuten en seconden. Vervolgens maakt en start het een timerobject met het totale aantal seconden, waarbij de functie
announce_timer
en een lijst met de minuten en seconden worden doorgegeven. Wanneer de timer afloopt, zal het de functieannounce_timer
aanroepen en de inhoud van deze lijst als parameters doorgeven - dus het eerste item in de lijst wordt doorgegeven als de parameterminutes
en het tweede item als de parameterseconds
. -
Voeg aan het einde van de functie
create_timer
wat code toe om een bericht te bouwen dat aan de gebruiker wordt uitgesproken om aan te kondigen dat de timer begint:announcement = '' if minutes > 0: announcement += f'{minutes} minute ' if seconds > 0: announcement += f'{seconds} second ' announcement += 'timer started.' say(announcement)
Ook hier worden alleen de tijdseenheden opgenomen die een waarde hebben. Deze zin wordt vervolgens naar de functie
say
gestuurd. -
Voeg het volgende toe aan het einde van de functie
process_text
om de tijd voor de timer uit de tekst te halen en vervolgens de timer te maken:seconds = get_timer_time(text) if seconds > 0: create_timer(seconds)
De timer wordt alleen gemaakt als het aantal seconden groter is dan 0.
-
Voer de app uit en zorg ervoor dat de functie-app ook actief is. Stel enkele timers in en de uitvoer zal laten zien dat de timer wordt ingesteld en vervolgens laten zien wanneer deze afloopt:
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.
💁 Je kunt deze code vinden in de map code-timer/pi of code-timer/virtual-iot-device.
😀 Je timerprogramma was een succes!
Disclaimer:
Dit document is vertaald met behulp van de AI-vertalingsservice Co-op Translator. Hoewel we streven naar nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.