9.2 KiB
Настройване на таймер - Виртуален IoT хардуер и Raspberry Pi
В тази част от урока ще извикате вашия serverless код, за да разберете речта, и ще настроите таймер на вашето виртуално IoT устройство или Raspberry Pi въз основа на резултатите.
Настройване на таймер
Текстът, който се връща от извикването на преобразуване на реч в текст, трябва да бъде изпратен към вашия serverless код, за да бъде обработен от LUIS, който ще върне броя на секундите за таймера. Този брой секунди може да се използва за настройване на таймер.
Таймерите могат да бъдат настроени с помощта на класа threading.Timer
в Python. Този клас приема време за забавяне и функция, която се изпълнява след изтичане на времето за забавяне.
Задача - изпратете текста към 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, който създадохте в предишния урок, независимо дали е на вашия компютър или в облака. -
Добавете следния код, за да зададете текста като свойство, предадено като 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, ако текстът е обработен и разпознат като намерение за настройване на таймер.
Задача - настройване на таймер на фонов поток
-
Добавете следния import израз в началото на файла, за да импортирате библиотеката 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.
😀 Вашата програма за таймер беше успешна!
Отказ от отговорност:
Този документ е преведен с помощта на AI услуга за превод Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод.