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

action.devices.traits.Toggles - このトレイトは、2 つの状態のうち一方しかない設定を持つデバイスに使用します。すなわち、デバイスで利用可能なすべてのトグル型のカスタム設定に使用できます。

これらの設定は、オン / オフまたはアクティブ / 非アクティブを切り替える物理的なボタン、HTML のチェックボックス、その他の有効 / 無効を切り替える要素を表すことができます。設定に 3 つ以上の状態がある場合、どちらも選択されていない状態がある場合、Modes トレイトで表す方が適しています。こちらは、複数状態があるダイヤル、ラジオボタン(物理または HTML)、明らかにオン / オフではない状態(たとえば「AM / FM」や「暖かい / 冷たい」)に相当します。

このトレイトは、ユーザーが設定できる 1 つ以上の独立したトグルに対応しています。一般に、これらのトグルは、デバイスの他の動作からリンクされていない機能に使用するべきです。デバイス自体の電源をオンあるいはオフにするなどのリンクされた動作では、より限定的なトレイトを使用する必要があります(たとえば、トレイト TemperatureSettingthermostatMode)。

デバイスの属性

属性 定義
availableToggles 以下のものが含まれます。
  • name 文字列。トグルの内部名。コマンドとステータスで使用されます。これは、ユーザー フレンドリーな名前とは限らず、すべての言語に共通です。現時点では、リファレンスにある名前を使用する必要があります。カスタム名はまだサポートされていません。
  • name_values 名前とサポートされている言語が含まれています。
    • name_synonym 文字列(複数)。サポートされている言語で記述された、ユーザー フレンドリーなトグルの名前。必要に応じて最初の名前が TTS で使用されます。現時点では、リファレンスにある同義名を使用する必要があります。カスタム名はまだサポートされていません。
    • lang 文字列。名前でサポートされている言語(サポートされている言語 / 言語コードを参照)。
以下は冷蔵庫の例です。
"availableToggles": [{
    "name": "cool",
    "name_values": [ {  "name_synonym": [ "supercool", "super cooling", ... ],
          "lang": "en"  }, … ]
  },
  {
    "name": "quiet",
    "name_values": [ {  "name_synonym": [ "noiseless", "silent", ...  ],
          "lang": "en"  }, … ]
  }
]

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.DRYER',
        traits: [
          'action.devices.traits.Toggles'
        ],
        name: {
          defaultNames: ['AAA Super Dryer'],
          name: 'Washer',
          nicknames: ['clothes dryer']
        },
        willReportState: false,
        attributes: {
          availableToggles: [{
            name: 'sterilization',
            name_values: [{
              name_synonym: ['bio-clean', 'ultrasound'],
              lang: 'en'
            }]
          }, {
            name: 'energysaving',
            name_values: [{
              name_synonym: ['normal', 'medium', 'high'],
              lang: 'en'
            }]
          }]
        },
        deviceInfo: {
          manufacturer: 'AAA Corporation',
          model: '492134',
          hwVersion: '3.2',
          swVersion: '11.4'
        },
        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.DRYER",
        "traits": [
          "action.devices.traits.Toggles"
        ],
        "name": {
          "defaultNames": [
            "AAA Super Dryer"
          ],
          "name": "Washer",
          "nicknames": [
            "clothes dryer"
          ]
        },
        "willReportState": false,
        "attributes": {
          "availableToggles": [
            {
              "name": "sterilization",
              "name_values": [
                {
                  "name_synonym": [
                    "bio-clean",
                    "ultrasound"
                  ],
                  "lang": "en"
                }
              ]
            },
            {
              "name": "energysaving",
              "name_values": [
                {
                  "name_synonym": [
                    "normal",
                    "medium",
                    "high"
                  ],
                  "lang": "en"
                }
              ]
            }
          ]
        },
        "deviceInfo": {
          "manufacturer": "AAA Corporation",
          "model": "492134",
          "hwVersion": "3.2",
          "swVersion": "11.4"
        },
        "customData": {
          "fooValue": 74,
          "barValue": true,
          "bazValue": "lambtwirl"
        }
      }
    ]
  }
}
検証ツール

デバイスのステータス

ステータス 定義
currentToggleSettings トグルごとに 1 つの要素をブール値として含むオブジェクトの配列。言語ごとに 1 つのオブジェクト。次に例を示します。

"currentToggleSettings": {
     "sterilization": true,
     "energysaving": false
}

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: {
          on: true,
          online: true,
          currentToggleSettings: {
            sterilization: true
          }
        },
        456: {
          on: true,
          online: true,
          currentToggleSettings: {
            sterilization: false
          }
        }
      }
    }
  };
});

// ...

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

デバイスのコマンド

コマンド パラメータ / 定義
action.devices.commands.SetToggles updateToggleSettings 各トグルに設定する新しいブール値を含むオブジェクト

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.SetToggles",
          "params": {
            "updateToggleSettings": {
              "sterilization": true
            }
          }
        }]
      }]
    }
  }]
}
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: {
           currentToggleSettings: {
             sterilization: true,
             energysaving: false
           }
        }
      }]
    }
  };
});

// ...

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