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

9.3 KiB

Установите таймер - Виртуальное IoT-устройство и Raspberry Pi

В этой части урока вы вызовете свой серверless-код для распознавания речи и установите таймер на вашем виртуальном IoT-устройстве или Raspberry Pi на основе полученных результатов.

Установите таймер

Текст, возвращаемый из вызова преобразования речи в текст, необходимо отправить в ваш серверless-код для обработки с помощью LUIS, чтобы получить количество секунд для таймера. Это количество секунд можно использовать для установки таймера.

Таймеры можно устанавливать с помощью класса Python threading.Timer. Этот класс принимает время задержки и функцию, которая будет выполнена после истечения времени задержки.

Задача - отправить текст в серверless-функцию

  1. Откройте проект smart-timer в VS Code и убедитесь, что виртуальная среда загружена в терминале, если вы используете виртуальное IoT-устройство.

  2. Над функцией process_text объявите функцию get_timer_time для вызова REST-эндпоинта, который вы создали:

    def get_timer_time(text):
    
  3. Добавьте следующий код в эту функцию, чтобы определить URL для вызова:

    url = '<URL>'
    

    Замените <URL> на URL вашего REST-эндпоинта, который вы создали на прошлом уроке, либо на вашем компьютере, либо в облаке.

  4. Добавьте следующий код, чтобы установить текст как свойство, передаваемое в формате JSON при вызове:

    body = {
        'text': text
    }
    
    response = requests.post(url, json=body)
    
  5. Ниже этого извлеките seconds из полезной нагрузки ответа, возвращая 0, если вызов не удался:

    if response.status_code != 200:
        return 0
    
    payload = response.json()
    return payload['seconds']
    

    Успешные HTTP-вызовы возвращают статус-код в диапазоне 200, а ваш серверless-код возвращает 200, если текст был обработан и распознан как намерение установки таймера.

Задача - установить таймер в фоновом потоке

  1. Добавьте следующий оператор импорта в начало файла, чтобы импортировать библиотеку Python threading:

    import threading
    
  2. Над функцией process_text добавьте функцию для озвучивания ответа. Пока она будет просто выводить текст в консоль, но позже в этом уроке она будет озвучивать текст.

    def say(text):
        print(text)
    
  3. Ниже добавьте функцию, которая будет вызвана таймером для объявления о завершении таймера:

    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.

  4. Ниже добавьте следующую функцию 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.

  5. В конец функции create_timer добавьте код для формирования сообщения, которое будет озвучено пользователю, чтобы объявить о начале таймера:

    announcement = ''
    if minutes > 0:
        announcement += f'{minutes} minute '
    if seconds > 0:
        announcement += f'{seconds} second '    
    announcement += 'timer started.'
    say(announcement)
    

    Опять же, сообщение включает только те единицы времени, которые имеют значение. Это предложение затем отправляется в функцию say.

  6. Добавьте следующее в конец функции process_text, чтобы получить время для таймера из текста, а затем создать таймер:

    seconds = get_timer_time(text)
    if seconds > 0:
        create_timer(seconds)
    

    Таймер создается только если количество секунд больше 0.

  7. Запустите приложение и убедитесь, что функция приложения также запущена. Установите несколько таймеров, и вывод покажет, что таймер установлен, а затем покажет, когда он истекает:

    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. Несмотря на наши усилия по обеспечению точности, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникающие в результате использования данного перевода.