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

action.devices.traits.StartStop - このトレイトはデバイスの起動と停止に対応しています。

デバイスの起動と停止は、電源のオン / オフと似た機能を提供します。このトレイトを継承するデバイスは、電源投入時と起動時で異なる動作をします。たとえば、洗濯機の中には、実際に動作を開始する前に電源を入れて設定を変更できるものがあります。

単にオンとオフの状態を持つデバイスとは異なり、起動と停止を行うことができるデバイスの中には、動作中に一時停止できるものもあります。一時停止できるデバイスは動作を停止しますが、再開すると一時停止したときと同じ状態が続きます。一時停止解除は、デバイスの現在の状態に関係のない、起動 / 再起動とは異なります。こちらは最初から動作を開始します。

一部のデバイスは特定ゾーンでの実行をサポートしています。たとえばスプリンクラーには複数の散水ゾーンがあり、特定のゾーンに別々に散水する機能をサポートできますが、掃除機は特定の部屋の清掃をサポートできます。

デバイスの属性

属性 定義
pausable 動作中にデバイスを一時停止できるかどうかを示すブール値。
availableZones デバイスがゾーンをサポートしている場合、必須。サポートされているゾーン名を示す文字列の配列。文字列はユーザー設定に従ってローカライズする必要があります。このリストは固定ではありません。ユーザーは好きな名前を通知できます。

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.WASHER',
        traits: [
          'action.devices.traits.StartStop'
        ],
        name: {
          defaultNames: ['Sirius Cybernetics Corporation Washer 3421'],
          name: 'Washer',
          nicknames: ['clothes washer']
        },
        willReportState: false,
        attributes: {
          pausable: true,
          availableZones: ['kitchen', 'living room', 'master bedroom']
        },
        deviceInfo: {
          manufacturer: 'AAA Cybernetics Corporation',
          model: '233451',
          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.WASHER",
        "traits": [
          "action.devices.traits.StartStop"
        ],
        "name": {
          "defaultNames": [
            "Sirius Cybernetics Corporation Washer 3421"
          ],
          "name": "Washer",
          "nicknames": [
            "clothes washer"
          ]
        },
        "willReportState": false,
        "attributes": {
          "pausable": true,
          "availableZones": [
            "kitchen",
            "living room",
            "master bedroom"
          ]
        },
        "deviceInfo": {
          "manufacturer": "AAA Cybernetics Corporation",
          "model": "233451",
          "hwVersion": "3.2",
          "swVersion": "11.4"
        },
        "customData": {
          "fooValue": 74,
          "barValue": true,
          "bazValue": "lambtwirl"
        }
      }
    ]
  }
}
検証ツール

デバイスのステータス

ステータス 定義
isRunning ブール値。デバイスが現在動作中かどうかを示します。
isPaused ブール値。デバイスが明示的に一時停止されているかどうかを示します。一時停止は、isRunning が false だが、再開できることを意味します。
activeZones 省略可。availableZones のリストの中から、デバイスが現在動作しているゾーンを示す文字列の配列。

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,
          isPaused: true,
          isRunning: false,
          activeZones: ['kitchen']
        }
      }
    }
  };
});

// ...

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

デバイスのコマンド

コマンド パラメータ / 定義
action.devices.commands.StartStop

start ブール値。コマンドが起動の場合は true、停止の場合は false。

zone 省略可。実行を開始するゾーンを示す文字列(ゾーン内での停止はサポートされていません)。

action.devices.commands.PauseUnpause

pause ブール値。コマンドが一時停止の場合は true、一時停止解除の場合は false。

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

「洗濯機を起動して」
リクエスト
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123",
          "customData": {
            "fooValue": 74,
            "barValue": true,
            "bazValue": "sheepdip"
          }
        }],
        "execution": [{
          "command": "action.devices.commands.StartStop",
          "params": {
            "start": 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: {
          isRunning: true,
          isPaused: false
        }
      }]
    }
  };
});

// ...

exports.smarthome = functions.https.onRequest(app);
JSONレスポンス
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "isRunning": true,
          "isPaused": false
        }
      }
    ]
  }
}
「キッチンに掃除機をかけて」
リクエスト
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123",
          "customData": {
            "fooValue": 74,
            "barValue": true,
            "bazValue": "sheepdip"
          }
        }],
        "execution": [{
          "command": "action.devices.commands.StartStop",
          "params": {
            "start": true,
            "zone": "kitchen"
          }
        }]
      }]
    }
  }]
}
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: {
          isRunning: true,
          isPaused: false,
          activeZones: ['kitchen']
        }
      }]
    }
  };
});

// ...

exports.smarthome = functions.https.onRequest(app);
JSONレスポンス
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "isRunning": true,
          "isPaused": false,
          "activeZones": [
            "kitchen"
          ]
        }
      }
    ]
  }
}
「掃除機を止めて」
リクエスト
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123",
          "customData": {
            "fooValue": 74,
            "barValue": true,
            "bazValue": "sheepdip"
          }
        }],
        "execution": [{
          "command": "action.devices.commands.PauseUnpause",
          "params": {
            "pause": 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: {
          isRunning: true,
          isPaused: true
        }
      }]
    }
  };
});

// ...

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

デバイスエラー

エラーと例外の全リストをご覧ください。

unpausableState - ユーザーが一時停止可能なトレイトを持つデバイスを一時停止しようとしましたが、デバイスは一時停止できない状態にあります。