Обрабатывать команды

Следуйте этим инструкциям, чтобы выполнять собственный код на вашем устройстве в ответ на команды Google Ассистента.

Запустите образец

Теперь, когда вы определили признак и обновили модель, убедитесь, что Google Assistant отправляет обратно команду включения/выключения для соответствующего запроса.

googlesamples-assistant-hotword --device-model-id my-model

Попробуйте следующий запрос:

Ок, Google, включи.

В выводе консоли вы должны увидеть следующие утверждения. Если нет, см. инструкции по устранению неполадок .

ON_RECOGNIZING_SPEECH_FINISHED:
  {'text': 'turn on'}
ON_DEVICE_ACTION:
  {'inputs': [{'payload': {'commands': [{'execution': [{'command': 'action.devices.commands.OnOff',
  'params': {'on': True}}], 'devices': [{'id': 'E56D39D894C2704108758EA748C71255'}]}]},
  'intent': 'action.devices.EXECUTE'}], 'requestId': '4785538375947649081'}
Do command action.devices.commands.OnOff with params {'on': True}

Вы найдете, где эти утверждения напечатаны в исходном коде.

Получить исходный код

Теперь вы готовы начать свой собственный проект:

git clone https://github.com/googlesamples/assistant-sdk-python

Найдите обработчик команды

Файл hotword.py в примере кода использует SDK для отправки запросов и получения ответов от Google Assistant.

cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/library
nano hotword.py

Найдите следующее определение обработчика:

def process_event(event):

В настоящее время эта функция выводит имя каждого события действия устройства и любые параметры с помощью следующей строки:

print('Do command', command, 'with params', str(params))

Этот код обрабатывает команду action.devices.commands.OnOff . Эта команда является частью схемы признака OnOff . В настоящее время этот код просто выводит вывод на консоль. Вы можете изменить этот код, чтобы делать в своем проекте все, что захотите. Добавьте следующий блок под командой print в process_event() .

print('Do command', command, 'with params', str(params)) # Add the following:
if command == "action.devices.commands.OnOff":
    if params['on']:
        print('Turning the LED on.')
    else:
        print('Turning the LED off.')

Запустите измененный исходный код напрямую, чтобы увидеть результат.

python hotword.py --device-model-id my-model

Используйте тот же запрос, что и раньше:

Ок, Google, включи.

Если вы подключили светодиод к Raspberry Pi, продолжайте читать, чтобы узнать, как зажечь светодиод в ответ на команду OnOff. Если вы этого не сделали, пропустите следующий раздел, чтобы узнать, как добавить дополнительные свойства и обработчики .

Следующие шаги — Raspberry Pi

Теперь, когда вы знаете, как обрабатывать входящую команду, измените пример кода, чтобы зажечь светодиод. Если вы используете Raspberry Pi, для этого потребуется дополнительное оборудование.

Импортируйте пакет GPIO.

Чтобы упростить программный доступ к контактам ввода-вывода общего назначения (GPIO) на Raspberry Pi, установите пакет RPi.GPIO в виртуальной среде.

pip install RPi.GPIO

Изменить образец

Откройте файл hotword.py .

nano hotword.py

В файл hotword.py импортируйте модуль RPi.GPIO для управления выводами GPIO на Pi. Поместите следующий оператор рядом с другими операторами import :

import RPi.GPIO as GPIO

Измените код, чтобы изначально установить выходной контакт в низкое логическое состояние. Сделайте это в функции main() перед обработкой событий:

with Assistant(credentials, device_model_id) as assistant:
    events = assistant.start()

    device_id = assistant.device_id
    print('device_model_id:', device_model_id)
    print('device_id:', device_id + '\n')
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(25, GPIO.OUT, initial=GPIO.LOW)
        ...

Измените код, который вы добавили process_event() . Когда получена команда включения, установите вывод в высокое логическое состояние. Когда получена команда выключения, установите вывод в низкое логическое состояние.

if command == "action.devices.commands.OnOff":
    if params['on']:
        print('Turning the LED on.')
        GPIO.output(25, 1)
    else:
        print('Turning the LED off.')
        GPIO.output(25, 0)

Сохраните изменения и закройте файл.

Запустите образец

Запустите измененный пример кода.

python hotword.py --device-model-id my-model

Используйте тот же запрос, что и раньше. Светодиод должен загореться.

Это только начало. Узнайте, как добавить больше свойств и обработчиков .