スマートホーム セキュリティ システム ガイド
action.devices.types.SECURITYSYSTEM
- セキュリティ システムでは、監視と監視の解除を行えます。さらに複数のセキュリティ レベル(在宅、外出中など)での監視や、特定のセンサー(動きや開いている窓を検知するセンサーなど)に関する情報の報告も行えます。
このタイプのデバイスにはセキュリティ システムのアイコンが設定され、関連する類義語や別名が与えられます。
デバイスの機能
サービスがサポートする必要がある属性や状態、EXECUTE レスポンスと QUERY レスポンスを構築する方法など、実装の詳細については、対応するトレイトのドキュメントをご覧ください。
必須のトレイト
これらの特性とコマンドは、デバイスに該当する場合に必要です。デバイスがこれらのトレイトをサポートしていない場合は、QUERY レスポンスまたは EXECUTE レスポンスにエラーコード functionNotSupported
を入力します。詳細については、エラーと例外をご覧ください。
推奨されるトレイト
これらのトレイトは、デバイスに該当する場合に推奨されます。ただし、利用可能なすべてのトレイトの中から、既存の製品機能に最適な組み合わせを自由に選択できます。
品質要件
- レイテンシ: 2,000 ms 以下にする必要があります。
- 信頼性: 97% 以上である必要があります。
デバイスの例: シンプルなセキュリティ システム
このセクションでは、上記のデバイスタイプとトレイトに基づく一般的な「セキュリティ システム」を表すインテント ペイロードの例を示します。実装でトレイトを追加または削除する場合は、変更を反映するようにレスポンスを変更します。
SYNC レスポンスの例
{ "requestId": "6894439706274654512", "inputs": [ { "intent": "action.devices.SYNC" } ] }
{ "requestId": "6894439706274654512", "payload": { "agentUserId": "user123", "devices": [ { "id": "123", "type": "action.devices.types.SECURITYSYSTEM", "traits": [ "action.devices.traits.StatusReport", "action.devices.traits.ArmDisarm" ], "name": { "name": "Simple security system" }, "willReportState": true, "attributes": { "availableArmLevels": { "levels": [ { "level_name": "home_key", "level_values": [ { "level_synonym": [ "Home and Guarding", "level 1", "home", "SL1" ], "lang": "en" } ] }, { "level_name": "away_key", "level_values": [ { "level_synonym": [ "Away and Guarding", "level 2", "away", "SL2" ], "lang": "en" } ] } ], "ordered": true } }, "deviceInfo": { "manufacturer": "smart-home-inc", "model": "hs1234", "hwVersion": "3.2", "swVersion": "11.4" } } ] } }
QUERY レスポンスの例
{ "requestId": "6894439706274654514", "inputs": [ { "intent": "action.devices.QUERY", "payload": { "devices": [ { "id": "123" } ] } } ] }
{ "requestId": "6894439706274654514", "payload": { "devices": { "123": { "status": "SUCCESS", "online": true, "isArmed": true, "currentArmLevel": "home_key", "currentStatusReport": [ { "blocking": false, "deviceTarget": "123", "priority": 0, "statusCode": "lowBattery" } ] } } } }
EXECUTE コマンドの例
ArmDisarm
コマンド パラメータの詳細については、
action.devices.traits.ArmDisarm
リファレンスをご覧ください。
{ "requestId": "6894439706274654516", "inputs": [ { "intent": "action.devices.EXECUTE", "payload": { "commands": [ { "devices": [ { "id": "123" } ], "execution": [ { "command": "action.devices.commands.ArmDisarm", "params": { "arm": true, "armLevel": "away_key" } } ] } ] } } ] }
{ "requestId": "6894439706274654516", "payload": { "commands": [ { "ids": [ "123" ], "status": "SUCCESS", "states": { "online": true, "isArmed": true, "currentArmLevel": "away_key" } } ] } }
デバイスエラー
エラーと例外の全リストをご覧ください。起動例外を報告する
システムの起動または解除を試みるときに、StatusReport トレイトを介して報告する例外コードを使用して、追加のコンテキストを提供できます。例外は、ブロックまたは非ブロックとして報告できます。
- 「SUCCESS」ステータスで報告された非ブロッキング例外は、例外が作動または解除を妨げなかったことを示します。
- 「EXCEPTIONS」ステータスで報告されたブロック例外は、これらの例外が原因で作動または解除が停止されたことを示します。
セキュリティ システムによく関連する例外コードは次のとおりです。
doorOpen
: ドアが開いています。windowOpen
: ウィンドウが開いています。isOpen
: センサーが、何かが開いていることを検出しました(ただしそれがドアか窓かはわかりません)。
例: 非ブロッキング例外
この例は、窓が開いていると報告されても、セキュリティ システムが作動するという非ブロック例外を示しています。
ユーザー | セキュリティ システムを高セキュリティに設定して。 |
Google アシスタント | わかりました。正面の窓が開いています。セキュリティ システムを高セキュリティに設定します。 |
{
"requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
"inputs": [{
"intent": "action.devices.EXECUTE",
"payload": {
"commands": [{
"devices": [{
"id": "123"
}],
"execution": [{
"command": "action.devices.commands.ArmDisarm",
"params": {
"arm": true,
"armLevel": "L2"
}
}]
}]
}
}]
}
{
"requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
"payload": {
"commands": [
{
"ids": [
"123"
],
"status": "SUCCESS",
"states": {
"online": true,
"isArmed": true,
"currentArmLevel": "L2",
"currentStatusReport": [
{
"blocking": false,
"priority": 0,
"statusCode": "windowOpen",
"deviceTarget": "sensor_id1"
}
]
}
}
]
}
}
例: ブロッキング例外
ユーザー | セキュリティ システムを高セキュリティに設定して。 |
Google アシスタント | セキュリティ システムの制御中にエラーが発生しました。正面の窓が開いています。 |
{
"requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
"inputs": [{
"intent": "action.devices.EXECUTE",
"payload": {
"commands": [{
"devices": [{
"id": "123"
}],
"execution": [{
"command": "action.devices.commands.ArmDisarm",
"params": {
"arm": true,
"armLevel": "L2"
}
}]
}]
}
}]
}
{
"requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
"payload": {
"commands": [
{
"ids": [
"123"
],
"status": "EXCEPTIONS",
"states": {
"online": true,
"isArmed": false,
"currentArmLevel": "L2",
"currentStatusReport": [
{
"blocking": true,
"priority": 0,
"statusCode": "windowOpen",
"deviceTarget": "sensor_id1"
}
]
}
}
]
}
}
2 段階認証プロセスでの起動
起動フローでユーザーが2 要素認証ダイアログで PIN を入力する必要がある場合は、有効な例外(窓やドアが開いている場合など)がある場合にシステムの起動を続行するかどうかをユーザーに確認する必要があります。
このシナリオでは、PIN またはパスフレーズを入力した後、確認応答が両方必要になる場合があります。
例: 確認のチャレンジ
この例では、ユーザーはセキュリティ システムを作動しようとしたものの、玄関のドアが開いていることが検出されます。ユーザーは、玄関のドアが開いていても、セキュリティ システムを動作することを確認します。
ユーザー | セキュリティ システムを作動して。 |
Google アシスタント | 玄関のドアは開いています。 セキュリティ システムを作動してもよろしいですか? |
ユーザー | はい。 |
Google アシスタント | わかりました。セキュリティ システムを作動します。 |
最初のターンでは、ackNeeded
チャレンジで応答する必要があります。
{
"requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
"inputs": [{
"intent": "action.devices.EXECUTE",
"payload": {
"commands": [{
"devices": [{
"id": "123"
}],
"execution": [{
"command": "action.devices.commands.ArmDisarm",
"params": {
"arm": true
}
}]
}]
}
}]
}
{
"requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
"payload": {
"commands": [
{
"ids": [
"123"
],
"status": "ERROR",
"errorCode": "challengeNeeded",
"challengeNeeded": {
"type": "ackNeeded"
},
"states": {
"isArmed": true,
"currentArmLevel": "L2",
"currentStatusReport": [
{
"blocking": false,
"priority": 0,
"statusCode": "doorOpen",
"deviceTarget": "456"
}
]
}
}
]
}
}
Google からお客様への後続のリクエストには、ack
の結果が含まれます。
{
"requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
"inputs": [{
"intent": "action.devices.EXECUTE",
"payload": {
"commands": [{
"devices": [{
"id": "123"
}],
"execution": [{
"command": "action.devices.commands.ArmDisarm",
"params": {
"arm": true
},
"challenge": {
"ack": true
}
}]
}]
}
}]
}
{
"requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
"payload": {
"commands": [
{
"ids": [
"123"
],
"status": "SUCCESS",
"states": {
"isArmed": true
}
}
]
}
}
例: PIN と確認の確認
この例では、PIN 入力が必要なセキュリティ システムを作動しようとしているユーザーを示しています。システムは、前後の窓が開いていることを検出し、アラームの起動を続行することをユーザーに確認を求めます。
ユーザー | 監視レベルを外出に設定します。 |
Google アシスタント | PIN を入力してください。 |
ユーザー | 1234 です。 |
Google アシスタント | 正面の窓と裏の窓が開いているようです。セキュリティ システムを外出モードに設定してもよろしいですか? |
ユーザー | はい。 |
Google アシスタント | わかりました。セキュリティ システムを「留守宅監視中」に設定します。 |
最初のターンでは、標準の pinNeeded
チャレンジで応答する必要があります。
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.ArmDisarm", "params": { "arm": true } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["456"], "status": "ERROR", "errorCode": "challengeNeeded", "challengeNeeded": { "type": "pinNeeded" } }] } }
その後、Google から、提供された PIN を含むリクエストが送信されます。2 回目のターンをサポートするには、ターゲット アームレベルやブロック例外を含む現在のステータス レポートなどの追加情報を含めて、ackNeeded
チャレンジで応答する必要があります。
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [...], "execution": [{ "command": "action.devices.commands.ArmDisarm", "params": { "arm": true, "armLevel": "away" }, "challenge": { "pin": "1234" } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["456"], "status": "ERROR", "states": { "targetArmLevel": "away", "currentStatusReport": [{ "blocking": true, "priority": 1, "deviceTarget": "front_window_id", "statusCode": "deviceOpen" }, { "blocking": true, "priority": 1, "deviceTarget": "back_window_id", "statusCode": "deviceOpen" } ] }, "errorCode": "challengeNeeded", "challengeNeeded": { "type": "ackNeeded" } }] } }
Google からお客様に送信される後続のリクエストには、ack
の結果のみが含まれ、最初のターンで提供された PIN は含まれません。
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [...], "execution": [{ "command": "action.devices.commands.ArmDisarm", "params": { "arm": true, "armLevel": "away" }, "challenge": { "ack": true } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [ { "ids": [ "123" ], "status": "SUCCESS", "states": { "isArmed": true } } ] } }