スマートホーム セキュリティ システム ガイド
action.devices.types.SECURITYSYSTEM
- セキュリティ システムによる監視の開始と解除を行うことができます。複数のセキュリティ レベル(在宅と外出など)で監視させることができ、動きや開いている窓を検知するセンサーなど、特定のセンサーに関する情報を報告できます。
このタイプのデバイスにはセキュリティ システム アイコンと、関連する類義語と別名が与えられます。
デバイスの機能
サービスがサポートする必要がある属性や状態、EXECUTE および QUERY レスポンスの作成方法など、実装の詳細については、対応するトレイトのドキュメントをご覧ください。
必要なトレイト
デバイスに適用可能な場合は、これらのトレイトとコマンドが必要です。デバイスがこれらのトレイトをサポートしていない場合は、QUERY または EXECUTE レスポンスに functionNotSupported
のエラーコードを入力します。詳細については、エラーと例外をご覧ください。
推奨されるトレイト
デバイスに応じて、これらのトレイトをおすすめします。 ただし、既存のプロダクトの機能に合わせて、利用可能なすべてのトレイトを自由に組み合わせることができます。
品質要件
- レイテンシ: 2000 ミリ秒以下。
- 信頼性: 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": "SUCCESS", "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 } } ] } }