명령어 처리

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

샘플 실행

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

googlesamples-assistant-pushtotalk

Enter 키를 누르고 다음 쿼리를 시도합니다.

사용 설정

콘솔 출력에 다음 문이 표시됩니다. 그렇지 않으면 문제 해결 안내를 참조하세요.

INFO:root:Recording audio request.
INFO:root:End of audio request detected
INFO:root:Transcript of user request: "turn on".
INFO:root:Playing assistant response.
INFO:root:Turning device on
INFO:root:Waiting for device executions to complete.
INFO:root:Finished playing assistant response.

소스 코드에서 이러한 구문이 출력되는 위치를 확인할 수 있습니다.

소스 코드 가져오기

이제 자체 프로젝트를 시작할 준비가 되었습니다.

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

명령어 핸들러 찾기

샘플 코드의 pushtotalk.py 파일은 SDK를 사용하여 Google 어시스턴트에서 요청을 보내고 응답을 수신합니다.

cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/grpc
nano pushtotalk.py

다음 핸들러 정의를 검색합니다.

device_handler = device_helpers.DeviceRequestHandler(device_id)

@device_handler.command('action.devices.commands.OnOff')
def onoff(on):
    if on:
        logging.info('Turning device on')
    else:
        logging.info('Turning device off')

onoff()의 코드는 action.devices.commands.OnOff 명령어를 처리합니다. 이 명령어는 OnOff 특성 스키마의 일부입니다.

현재 onoff() 정의는 콘솔에 출력을 로깅합니다. 또한 device_helpers.py의 도우미 함수를 사용하여 응답 JSON을 파싱하고 사용하기 쉽도록 명령어 매개변수를 변수에 저장합니다. 이 코드를 수정하여 프로젝트에서 원하는 작업을 할 수 있습니다.

LED 키트가 있다면 계속 읽으면서 OnOff 명령어에 응답하여 LED를 켜는 방법을 알아보세요. 그렇지 않으면 다음 섹션을 건너뛰어 더 많은 트레잇 및 핸들러를 추가하는 방법을 알아보세요.

다음 단계 - Raspberry Pi

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

GPIO 패키지 가져오기

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

pip install RPi.GPIO

샘플 수정

pushtotalk.py 파일을 엽니다.

cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/grpc
nano pushtotalk.py

pushtotalk.py 파일에서 RPi.GPIO 모듈을 가져와 Pi의 GPIO 핀을 제어합니다. 다음 문을 다른 import 문 근처에 배치합니다.

import RPi.GPIO as GPIO

코드를 수정하여 처음에는 출력 핀을 낮은 로직 상태로 설정합니다. on 명령어가 수신되면 핀을 높은 로직 상태로 설정합니다. off 명령어가 수신되면 핀을 낮은 로직 상태로 설정합니다.

device_handler = device_helpers.DeviceRequestHandler(device_id)
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT, initial=GPIO.LOW)

@device_handler.command('action.devices.commands.OnOff')
def onoff(on):
    if on:
        logging.info('Turning device on')
        GPIO.output(25, 1)
    else:
        logging.info('Turning device off')
        GPIO.output(25, 0)

변경사항을 저장하고 파일을 닫습니다.

샘플 실행

수정된 샘플 코드를 실행합니다.

python pushtotalk.py

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

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