スマートホーム Scene トレイトのスキーマ

action.devices.traits.Scene - このドキュメントで説明するシーンは、仮想デバイスとして実装され、名前で有効化される、「パートナー」のシーンです。たとえば、パートナーがコマンドのワンタッチ グルーピング(複数のライトにそれぞれ色を設定する、さまざまなセキュリティ機能を順番につなげるなど、動作を組み合わせる)機能をユーザーに提供する場合、その構成は SYNC によって名前の付いた「シーン」として公開できます。アシスタントにより、次のようなシーンが単純なアクティベーション文法で使用可能になります。

  • 「パーティー モードを始めて」
  • 「ミッドナイト シーンを有効にして」

仮想オブジェクトとして、明確化のためにシーンを部屋に配置することもできます。

  • 「キッチンでパーティー タイムを始めて」
  • 「寝室で常夜灯モードを有効にして」

シーンと物理ターゲットの違いの 1 つは、アシスタントが自動的にシーンコマンドに複数の効果を適用し、ユーザーが複数のパートナーにまたがってシーンをトリガーできるようになることです。たとえば、ユーザーが 2 つのパートナーに「パーティー モード」のシーンを持っていて、1 つはセキュリティ用、もう 1 つはライト用の場合、「パーティー モードを有効にして」と言うと両方がトリガーされます。

シーンは、近日公開するカスタム文法のためのパーソナル アクションとうまくやり取りできます(たとえば「パーティー モードを有効にして」→「パーティーを始めよう」)。

シーンには、デフォルトの「B 社のシーン」といった名前ではなく、必ずユーザー指定の名前を付ける必要があります。各シーンは、独自の名前(複数可)を持つ独自の仮想デバイスです。ユーザー指定の名前が SYNC から返される場合があります。

デバイスの属性

属性 定義
sceneReversible ブール値。元に戻すことができるシーンであることを示す。これは、ステータスの変更後も以前のステータスを記憶しているシーンにのみ使用します。当然ながら、特定の動作を起こすシーンは不可逆です。鳴った鐘の音は止められません。true の場合、「パーティー モードを無効にして」は期待どおりに機能します。

SYNC リクエストとレスポンスの例

リクエスト
{
    "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
    "inputs": [{
      "intent": "action.devices.SYNC"
    }]
}
Node.jsレスポンス
'use strict';

const {smarthome} = require('actions-on-google');
const functions = require('firebase-functions');

const app = smarthome();

app.onSync((body, headers) => {
  return {
    requestId: body.requestId,
    payload: {
      agentUserId: '1836.15267389',
      devices: [{
        id: '123',
        type: 'action.devices.types.SCENE',
        traits: [
          'action.devices.traits.Scene'
        ],
        name: {
          defaultNames: [],
          name: 'Party Mode',
          nicknames: []
        },
        willReportState: false, // should be false, as there's no state
        attributes: {
          sceneReversible: true
        },
        // Note -- probably no device info for virtual devices.
        customData: {
          fooValue: 74,
          barValue: true,
          bazValue: 'lambtwirl'
        }
      }]
    }
  };
});

// ...

exports.smarthome = functions.https.onRequest(app);
JSONレスポンス
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "agentUserId": "1836.15267389",
    "devices": [
      {
        "id": "123",
        "type": "action.devices.types.SCENE",
        "traits": [
          "action.devices.traits.Scene"
        ],
        "name": {
          "defaultNames": [],
          "name": "Party Mode",
          "nicknames": []
        },
        "willReportState": false,
        "attributes": {
          "sceneReversible": true
        },
        "customData": {
          "fooValue": 74,
          "barValue": true,
          "bazValue": "lambtwirl"
        }
      }
    ]
  }
}
検証ツール

デバイスのステータス

なし

QUERY リクエストとレスポンスの例

リクエスト
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": 'action.devices.QUERY',
    "payload": {
      "devices": [{
        "id": "123",
        "customData": {
          "fooValue": 74,
          "barValue": true,
          "bazValue": "foo"
        }
      }]
    }
  }]
}
Node.jsレスポンス
'use strict';

const {smarthome} = require('actions-on-google');
const functions = require('firebase-functions');

const app = smarthome();

app.onQuery((body, headers) => {
  return {
    requestId: body.requestId,
    payload: {
      devices: {
        123: {
          online: true
        }
      }
    }
  };
});

// ...

exports.smarthome = functions.https.onRequest(app);
JSONレスポンス
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "devices": {
      "123": {
        "online": true
      }
    }
  }
}

デバイスのコマンド

コマンド パラメータ / 定義
action.devices.commands.ActivateScene deactivate ブール値。シーンが可逆であり、元に戻す必要がある場合は true です。

EXECUTE リクエストとレスポンスの例

リクエスト
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123",
          "customData": {
            "fooValue": 74,
            "barValue": true,
            "bazValue": "lambtwirl"
          }
        }],
        "execution": [{
          "command": "action.devices.commands.ActivateScene",
          "params": {
            "deactivate": false
          }
        }]
      }]
    }
  }]
}
Node.jsレスポンス
'use strict';

const {smarthome} = require('actions-on-google');
const functions = require('firebase-functions');

const app = smarthome();

app.onExecute((body, headers) => {
  return {
    requestId: body.requestId,
    payload: {
      commands: [{
        ids: ['123'],
        status: 'SUCCESS',
        states: {
          // Note -- scenes are stateless.
        }
      }]
    }
  };
});

// ...

exports.smarthome = functions.https.onRequest(app);
JSONレスポンス
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {}
      }
    ]
  }
}