8.6 KiB
Поставите тајмер - Виртуелни IoT хардвер и Raspberry Pi
У овом делу лекције, позваћете свој серверлес код да разумете говор и поставите тајмер на вашем виртуелном IoT уређају или Raspberry Pi-ју на основу резултата.
Поставите тајмер
Текст који се враћа из позива за претварање говора у текст треба да се пошаље вашем серверлес коду да га обради LUIS, враћајући број секунди за тајмер. Овај број секунди може се користити за постављање тајмера.
Тајмери се могу поставити помоћу Python класе threading.Timer
. Ова класа узима време кашњења и функцију, а након времена кашњења, функција се извршава.
Задатак - пошаљите текст серверлес функцији
-
Отворите пројекат
smart-timer
у VS Code-у и уверите се да је виртуелно окружење учитано у терминалу ако користите виртуелни IoT уређај. -
Изнад функције
process_text
, декларишите функцију названуget_timer_time
за позивање REST крајње тачке коју сте креирали:def get_timer_time(text):
-
Додајте следећи код у ову функцију да дефинишете URL који треба позвати:
url = '<URL>'
Замените
<URL>
са URL-ом ваше REST крајње тачке коју сте изградили у претходној лекцији, било на вашем рачунару или у облаку. -
Додајте следећи код да поставите текст као својство које се шаље као JSON у позив:
body = { 'text': text } response = requests.post(url, json=body)
-
Испод овога, преузмите
seconds
из одговора, враћајући 0 ако позив није успео:if response.status_code != 200: return 0 payload = response.json() return payload['seconds']
Успешни HTTP позиви враћају статусни код у опсегу 200, а ваш серверлес код враћа 200 ако је текст обрађен и препознат као намера за постављање тајмера.
Задатак - поставите тајмер у позадинском процесу
-
Додајте следећу изјаву за увоз на врху датотеке да увезете Python библиотеку threading:
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.
😀 Ваш програм за тајмер је био успешан!
Одрицање од одговорности:
Овај документ је преведен коришћењем услуге за превођење помоћу вештачке интелигенције Co-op Translator. Иако се трудимо да обезбедимо тачност, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.