명령어 처리

<ph type="x-smartling-placeholder">

기기에서 맞춤 코드를 실행하려면 다음 안내를 따르세요. 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, 켜 줘.

LED를 연결한 경우 에 대한 응답으로 LED를 켜는 방법을 알아보려면 계속 읽으세요. 실행할 수 있습니다 아직 설치하지 않은 경우 다음 섹션을 건너뛰어 트레잇과 핸들러를 더 추가합니다.

다음 단계 - Raspberry Pi

수신되는 명령어를 처리하는 방법을 알게 되었으므로 이제 샘플 코드를 수정합니다. LED를 켜세요 이 기능을 사용하려면 일부 추가 하드웨어가 Raspberry Pi입니다.

GPIO 패키지 가져오기

GPIO (범용 입력/출력) 핀에 대한 소프트웨어 액세스를 간소화하기 위해 Raspberry Pi를 설치하려면 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가 켜집니다.

이는 시작에 불과합니다. 더 많은 트레잇 및 핸들러를 추가하는 방법을 알아봅니다.