トレイトとハンドラをさらに追加する

トレイトは、必要に応じていくつでもデバイスモデルに追加できます。これらのトレイトは 1 つのデバイスタイプに限定されるものではなく、自由に使うことができます。

トレイトを追加して受信コマンドを処理する手順は次のとおりです。

  1. 追加するトレイトを決定します。

  2. pushtotalk.py ファイルを開きます。

    cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/grpc
    nano pushtotalk.py
  3. action.devices.commands.OnOff コマンドを処理する既存のコードブロックの下に次のコードブロックを追加します(既存のコードブロックは削除しないでください)。

    @device_handler.command('action.devices.commands.command-name')
    def my-function(parameter-name):
        if conditional:
            logging.info('Something happened.')
        else:
            logging.info('Something else happened.')
    
  4. 上記のコードブロックの各変数に必要な情報を調べます。

    command-nameステップ 1 の特定のトレイトのページ(ColorTemperature など)に移動します。デバイスのコマンドの表にあるコマンドを使用します。
    my-function必要に応じてハンドラ関数に名前を付けます。
    parameter-nameトレイトページの [Device COMMANDS] 表を再度確認します。各コマンドには 1 つ以上のパラメータが関連付けられています。これらは EXECUTE リクエスト JSON の "params" にリストされます。正確なパラメータ名を使用してください。これらのパラメータの一部は、他のパラメータを含むオブジェクトであるため、トップレベル オブジェクトのみを使用してください。
    conditionalハンドラコードで厳密に条件を使用する必要はありませんが、デバイスでコマンドを実行する方法を区別すると、条件がわかりやすくなる場合があります。

    BrightnessColorTemperature のトレイトの例を次に示します。

    @device_handler.command('action.devices.commands.BrightnessAbsolute')
    def brightnessCheck(brightness):
        if brightness > 50:
            logging.info('brightness > 50')
        else:
            logging.info('brightness <= 50')
    
    @device_handler.command('action.devices.commands.ColorAbsolute')
    def color(color):
        if color.get('name') == "blue":
            logging.info('color is blue')
        else:
            logging.info('color is not blue')
    
  5. ステップ 1 で追加したトレイトでデバイスモデルを更新します。

  6. 変更したソースコードを実行します。

    cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/grpc
    python pushtotalk.py
  7. Enter キーを押した後、クエリを試します。

    例:

    明るさを 65% に設定して。

    青にして。

次のステップ

カスタム デバイス アクションを登録する