コマンドを処理する

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 が点灯するはずです。

これはまだ序盤です。次に、トレイトとハンドラをさらに追加する方法を学びましょう。