You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/sr/6-consumer/lessons/3-spoken-feedback/single-board-computer-set-t...

140 lines
8.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "64ad4ddb4de81a18b7252e968f10b404",
"translation_date": "2025-08-28T12:47:56+00:00",
"source_file": "6-consumer/lessons/3-spoken-feedback/single-board-computer-set-timer.md",
"language_code": "sr"
}
-->
# Поставите тајмер - Виртуелни IoT хардвер и Raspberry Pi
У овом делу лекције, позваћете свој серверлес код да разумете говор и поставите тајмер на вашем виртуелном IoT уређају или Raspberry Pi-ју на основу резултата.
## Поставите тајмер
Текст који се враћа из позива за претварање говора у текст треба да се пошаље вашем серверлес коду да га обради LUIS, враћајући број секунди за тајмер. Овај број секунди може се користити за постављање тајмера.
Тајмери се могу поставити помоћу Python класе `threading.Timer`. Ова класа узима време кашњења и функцију, а након времена кашњења, функција се извршава.
### Задатак - пошаљите текст серверлес функцији
1. Отворите пројекат `smart-timer` у VS Code-у и уверите се да је виртуелно окружење учитано у терминалу ако користите виртуелни IoT уређај.
1. Изнад функције `process_text`, декларишите функцију названу `get_timer_time` за позивање REST крајње тачке коју сте креирали:
```python
def get_timer_time(text):
```
1. Додајте следећи код у ову функцију да дефинишете URL који треба позвати:
```python
url = '<URL>'
```
Замените `<URL>` са URL-ом ваше REST крајње тачке коју сте изградили у претходној лекцији, било на вашем рачунару или у облаку.
1. Додајте следећи код да поставите текст као својство које се шаље као JSON у позив:
```python
body = {
'text': text
}
response = requests.post(url, json=body)
```
1. Испод овога, преузмите `seconds` из одговора, враћајући 0 ако позив није успео:
```python
if response.status_code != 200:
return 0
payload = response.json()
return payload['seconds']
```
Успешни HTTP позиви враћају статусни код у опсегу 200, а ваш серверлес код враћа 200 ако је текст обрађен и препознат као намера за постављање тајмера.
### Задатак - поставите тајмер у позадинском процесу
1. Додајте следећу изјаву за увоз на врху датотеке да увезете Python библиотеку threading:
```python
import threading
```
1. Изнад функције `process_text`, додајте функцију за изговарање одговора. За сада ће само писати на конзолу, али касније у овој лекцији ће изговарати текст.
```python
def say(text):
print(text)
```
1. Испод овога додајте функцију која ће бити позвана од стране тајмера да објави да је тајмер завршен:
```python
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`.
1. Испод овога, додајте следећу функцију `create_timer` за креирање тајмера:
```python
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`.
1. На крај функције `create_timer`, додајте код за креирање поруке која ће бити изговорена кориснику да објави да тајмер почиње:
```python
announcement = ''
if minutes > 0:
announcement += f'{minutes} minute '
if seconds > 0:
announcement += f'{seconds} second '
announcement += 'timer started.'
say(announcement)
```
Опет, укључује само временске јединице које имају вредност. Ова реченица се затим шаље функцији `say`.
1. Додајте следеће на крај функције `process_text` да добијете време за тајмер из текста, а затим креирате тајмер:
```python
seconds = get_timer_time(text)
if seconds > 0:
create_timer(seconds)
```
Тајмер се креира само ако је број секунди већи од 0.
1. Покрените апликацију и уверите се да је функцијска апликација такође покренута. Поставите неке тајмере, а излаз ће показати да је тајмер постављен, а затим ће показати када истекне:
```output
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](../../../../../6-consumer/lessons/3-spoken-feedback/code-timer/pi) или [code-timer/virtual-iot-device](../../../../../6-consumer/lessons/3-spoken-feedback/code-timer/virtual-iot-device).
😀 Ваш програм за тајмер је био успешан!
---
**Одрицање од одговорности**:
Овај документ је преведен коришћењем услуге за превођење помоћу вештачке интелигенције [Co-op Translator](https://github.com/Azure/co-op-translator). Иако се трудимо да обезбедимо тачност, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.