智慧型住宅保全系統指南
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 特徵回報 例外狀況可以回報為封鎖或非封鎖。
- 報告含有「成功」的非封鎖例外狀況狀態表示 例外狀況並未妨礙啟動或解除
- 傳回「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"
}
]
}
}
]
}
}
使用雙重驗證啟動系統
如果啟動流程需要使用者透過 「雙重驗證」對話方塊 您必須確認,當其啟動狀態時,是否要繼續啟動系統 例外狀況 (例如窗戶或門開啟時)。
這類情況可能需要「同時」輸入 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 碼的保全系統。 系統偵測到正面和後側視窗已開啟,並要求使用者確認 啟動的 Pod
使用者 | 主動出擊, |
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 碼的要求。為了提供支援
第二次輪到,您應該以 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 } } ] } }