スマートホームの Modes RunCycle トレイトのスキーマ

action.devices.traits.RunCycle - このトレイトは、操作の継続時間を照会できるデバイスに使用します。たとえば、洗濯機、乾燥機、食器洗い機など、周期的に作動する装置が該当します。このようなデバイスは動作開始時に合計サイクル数を報告し、稼働中はデバイスの現在のサイクルを報告します。これにより、次のようなクエリが可能になります。

  • 乾燥機のサイクルは?
  • 食器洗い機の残りのサイクル数は?
  • 乾燥機はいま何をしている?
  • 洗濯はいつ始まる?

ただし、デバイスによってはサイクル以外の形式で経過時間が維持されている場合があります。サイクル形式でなくても、一定の時間動作するデバイスは残り時間を報告できます。サイクルが一定でない場合にも対応できます(例: 食器洗い機が必ずしもすべてのサイクルを使用するとは限りません)。たとえば、「あとどのくらい掃除機を使える?」と聞くと、 残り時間に合わせた単位で時間量を返します。これは上記のデバイスにも当てはまります。「私の服はあとどのくらいで乾く?」と聞くと、 残り時間を分単位で返します。

デバイスから情報が返されると、アシスタントの TTS レスポンスがそのデータを使用して最適な回答を生成します(例: 食器洗い機は稼働中。あと 20 分ほどで終了します)。

RunCycle は現在読み取り専用のトレイトです。コマンドはなく、照会するステータスのみがあります。将来的には、サイクルの再実行やスキップに対応したメカニズムになる可能性があります(この機能は、スプリンクラーには効果的ですが、洗濯機には不向きかもしれません)。

デバイスの属性

なし

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.RunCycle'
        ],
        name: {
          defaultNames: ['AAA Super Dryer'],
          name: 'Washer',
          nicknames: ['clothes dryer']
        },
        willReportState: false,
        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.RunCycle"
        ],
        "name": {
          "defaultNames": [
            "AAA Super Dryer"
          ],
          "name": "Washer",
          "nicknames": [
            "clothes dryer"
          ]
        },
        "willReportState": false,
        "deviceInfo": {
          "manufacturer": "AAA Corporation",
          "model": "492134",
          "hwVersion": "3.2",
          "swVersion": "11.4"
        },
        "customData": {
          "fooValue": 74,
          "barValue": true,
          "bazValue": "lambtwirl"
        }
      }
    ]
  }
}
検証ツール

デバイスのステータス

ステータス 定義
currentCycle 現在実行中のサイクル。言語のキーが付いた文字列のオブジェクト。
nextCycle 省略可。次に実行するサイクル。言語のキーが付いた文字列のオブジェクト。
lang 上記のサイクルの言語コード(サポートされている言語 / 言語コードを参照)。
currentTotalRemainingTime 処理の残り時間を表す整数(秒単位)。
currentCycleRemainingTime 現在のサイクルの残り時間を表す整数(秒単位)。
例:
"currentRunCycle":[
  {
    "currentCycle": "rinse",
    "nextCycle": "spin",
    "lang": "en"
  },
  {
    "currentCycle": "spülen",
    "nextCycle": "drehen",
    "lang": "de"
  }],
"currentTotalRemainingTime": 1212,
"currentCycleRemainingTime": 301

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

洗濯機はいま何をしている?

回答: 洗濯機は現在すすぎ中です。あと 5 分ほどで終わります。すべて終わるまでに 20 分ほどかかります。
リクエスト
{
  "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: {
          currentRunCycle: [{
            currentCycle: 'rinse',
            nextCycle: 'spin',
            lang: 'en'
          }],
          currentTotalRemainingTime: 1212,
          currentCycleRemainingTime: 301
        }
      }
    }
  };
});

// ...

exports.smarthome = functions.https.onRequest(app);
JSONレスポンス
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "devices": {
      "123": {
        "currentRunCycle": [
          {
            "currentCycle": "rinse",
            "nextCycle": "spin",
            "lang": "en"
          }
        ],
        "currentTotalRemainingTime": 1212,
        "currentCycleRemainingTime": 301
      }
    }
  }
}

デバイスのコマンド

なし