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/bg/6-consumer/lessons/3-spoken-feedback/single-board-computer-set-t...

140 lines
9.2 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-28T09:06:23+00:00",
"source_file": "6-consumer/lessons/3-spoken-feedback/single-board-computer-set-timer.md",
"language_code": "bg"
}
-->
# Настройване на таймер - Виртуален IoT хардуер и Raspberry Pi
В тази част от урока ще извикате вашия serverless код, за да разберете речта, и ще настроите таймер на вашето виртуално IoT устройство или Raspberry Pi въз основа на резултатите.
## Настройване на таймер
Текстът, който се връща от извикването на преобразуване на реч в текст, трябва да бъде изпратен към вашия serverless код, за да бъде обработен от LUIS, който ще върне броя на секундите за таймера. Този брой секунди може да се използва за настройване на таймер.
Таймерите могат да бъдат настроени с помощта на класа `threading.Timer` в Python. Този клас приема време за забавяне и функция, която се изпълнява след изтичане на времето за забавяне.
### Задача - изпратете текста към serverless функцията
1. Отворете проекта `smart-timer` във VS Code и се уверете, че виртуалната среда е заредена в терминала, ако използвате виртуално IoT устройство.
1. Над функцията `process_text` декларирайте функция, наречена `get_timer_time`, за да извикате REST endpoint-а, който създадохте:
```python
def get_timer_time(text):
```
1. Добавете следния код към тази функция, за да дефинирате URL адреса за извикване:
```python
url = '<URL>'
```
Заменете `<URL>` с URL адреса на вашия REST endpoint, който създадохте в предишния урок, независимо дали е на вашия компютър или в облака.
1. Добавете следния код, за да зададете текста като свойство, предадено като JSON към извикването:
```python
body = {
'text': text
}
response = requests.post(url, json=body)
```
1. Под това извлечете `seconds` от payload-а на отговора, като върнете 0, ако извикването е неуспешно:
```python
if response.status_code != 200:
return 0
payload = response.json()
return payload['seconds']
```
Успешните HTTP извиквания връщат статус код в диапазона 200, а вашият serverless код връща 200, ако текстът е обработен и разпознат като намерение за настройване на таймер.
### Задача - настройване на таймер на фонов поток
1. Добавете следния import израз в началото на файла, за да импортирате библиотеката threading на Python:
```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).
😀 Вашата програма за таймер беше успешна!
---
**Отказ от отговорност**:
Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод.