コマンドを処理する

Google アシスタントのコマンドに応じてデバイスでカスタムコードを実行する手順は次のとおりです。

サンプルの実行

トレイトを定義してモデルを更新したので、適切なクエリに対して Google アシスタントがオン/オフ コマンドを返していることを確認します。

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

以下のクエリを試します。

OK 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

前と同じクエリを使用します。

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

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