명령어 처리

Google 어시스턴트의 명령어에 대한 응답으로 기기에서 맞춤 코드를 실행하려면 다음 안내를 따르세요.

샘플 실행

이제 특성을 정의하고 모델을 업데이트했으므로 Google 어시스턴트가 적절한 쿼리를 위해 사용/사용 중지 명령어를 다시 전송하고 있는지 확인합니다.

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

다음 쿼리를 실행합니다.

Hey 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 어시스턴트에서 요청을 보내고 응답을 수신합니다.

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 특성 스키마의 일부입니다. 현재 이 코드는 콘솔에 출력을 출력합니다. 이 코드를 수정하여 프로젝트에서 원하는 작업을 할 수 있습니다. process_event()print 명령어 아래에 다음 블록을 추가합니다.

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

이전과 동일한 쿼리를 사용합니다.

Hey Google, 켜 줘.

Raspberry Pi에 LED를 연결한 경우 OnOff 명령어에 응답하여 LED를 켜는 방법을 알아보세요. 그렇지 않은 경우 다음 섹션을 건너뛰어 더 많은 트레잇 및 핸들러를 추가하는 방법을 알아보세요.

다음 단계 - Raspberry Pi

이제 수신 명령어를 처리하는 방법을 알았으니 LED를 켜도록 샘플 코드를 수정합니다. Raspberry Pi를 사용하는 경우 추가 하드웨어가 필요합니다.

GPIO 패키지 가져오기

Raspberry Pi에서 범용 입력/출력 (GPIO) 핀에 대한 소프트웨어 액세스를 간소화하려면 가상 환경에 RPi.GPIO 패키지를 설치합니다.

pip install RPi.GPIO

샘플 수정

hotword.py 파일을 엽니다.

nano hotword.py

hotword.py 파일에서 RPi.GPIO 모듈을 가져와 Pi의 GPIO 핀을 제어합니다. 다음 문을 다른 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()에 추가한 코드를 수정합니다. on 명령어가 수신되면 핀을 높은 로직 상태로 설정합니다. off 명령어가 수신되면 핀을 낮은 로직 상태로 설정합니다.

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

이전과 동일한 쿼리를 사용합니다. LED가 켜집니다.

이 외에도 더 많은 기능이 포함되어 있습니다. 트레잇 및 핸들러를 더 추가하는 방법을 알아봅니다.