Hướng dẫn về hệ thống an ninh nhà thông minh

action.devices.types.SECURITYSYSTEM – Có thể bật và tắt hệ thống an ninh. Bạn có thể kích hoạt chế độ bảo vệ ở nhiều cấp độ bảo mật (ví dụ: ở nhà và vắng nhà) và báo cáo thông tin về một số cảm biến nhất định, chẳng hạn như cảm biến phát hiện chuyển động hoặc cửa sổ đang mở.

Loại này cho biết thiết bị nhận được biểu tượng Hệ thống bảo mật và một số từ đồng nghĩa và bí danh liên quan.

Khả năng của thiết bị

Hãy tham khảo tài liệu về đặc điểm tương ứng để biết thông tin chi tiết về cách triển khai, chẳng hạn như các thuộc tính và trạng thái mà dịch vụ của bạn cần hỗ trợ, cũng như cách tạo phản hồi EXECUTE và QUERY.

Các đặc điểm bắt buộc

Bạn bắt buộc phải có các đặc điểm và lệnh này (nếu có trên thiết bị của bạn). Nếu thiết bị của bạn không hỗ trợ các đặc điểm này, hãy nhập mã lỗi functionNotSupported trong phản hồi QUERY hoặc EXECUTE. Hãy xem phần Lỗi và ngoại lệ để biết thêm thông tin.

Bạn nên sử dụng các đặc điểm này nếu thiết bị của bạn có hỗ trợ. Tuy nhiên, bạn có thể tự do kết hợp tất cả các đặc điểm có sẵn để phù hợp nhất với chức năng sản phẩm hiện có.

Yêu cầu về chất lượng

  • Độ trễ: phải nhỏ hơn hoặc bằng 2000 mili giây.
  • Độ tin cậy: phải lớn hơn hoặc bằng 97%.

Thiết bị mẫu: Hệ thống bảo mật đơn giản

Phần này chứa các tải trọng ý định mẫu đại diện cho một "Hệ thống bảo mật" phổ biến dựa trên loại thiết bị và các đặc điểm ở trên. Nếu bạn thêm hoặc xoá các đặc điểm trong quá trình triển khai, hãy sửa đổi các phản hồi cho phù hợp để phản ánh những thay đổi đó.

Phản hồi SYNC mẫu

Yêu cầu
{
  "requestId": "6894439706274654512",
  "inputs": [
    {
      "intent": "action.devices.SYNC"
    }
  ]
}
Phản hồi
{
  "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"
        }
      }
    ]
  }
}

Phản hồi QUERY mẫu

Yêu cầu
{
  "requestId": "6894439706274654514",
  "inputs": [
    {
      "intent": "action.devices.QUERY",
      "payload": {
        "devices": [
          {
            "id": "123"
          }
        ]
      }
    }
  ]
}
Phản hồi
{
  "requestId": "6894439706274654514",
  "payload": {
    "devices": {
      "123": {
        "status": "SUCCESS",
        "online": true,
        "isArmed": true,
        "currentArmLevel": "home_key",
        "currentStatusReport": [
          {
            "blocking": false,
            "deviceTarget": "123",
            "priority": 0,
            "statusCode": "lowBattery"
          }
        ]
      }
    }
  }
}

Lệnh EXECUTE mẫu

ArmDisarm

Để biết thêm thông tin chi tiết về các tham số lệnh, hãy xem tài liệu tham khảo về action.devices.traits.ArmDisarm.

Yêu cầu
{
  "requestId": "6894439706274654516",
  "inputs": [
    {
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [
          {
            "devices": [
              {
                "id": "123"
              }
            ],
            "execution": [
              {
                "command": "action.devices.commands.ArmDisarm",
                "params": {
                  "arm": true,
                  "armLevel": "away_key"
                }
              }
            ]
          }
        ]
      }
    }
  ]
}
Phản hồi
{
  "requestId": "6894439706274654516",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "isArmed": true,
          "currentArmLevel": "away_key"
        }
      }
    ]
  }
}

LỖI thiết bị

Xem danh sách đầy đủ lỗi và ngoại lệ.

Báo cáo ngoại lệ về việc kích hoạt

Khi tìm cách kích hoạt hoặc huỷ kích hoạt hệ thống, bạn có thể cung cấp thêm ngữ cảnh thông qua mã ngoại lệ mà bạn báo cáo thông qua đặc điểm StatusReport. Bạn có thể báo cáo ngoại lệ là chặn hoặc không chặn.

  • Ngoại lệ không chặn được báo cáo với trạng thái "THÀNH CÔNG" cho biết ngoại lệ đó không ngăn chặn việc kích hoạt hoặc huỷ kích hoạt.
  • Ngoại lệ chặn được báo cáo với trạng thái "EXCEPTIONS" (NGOẠI LỆ) cho biết việc kích hoạt hoặc huỷ kích hoạt đã bị dừng do các ngoại lệ này.

Sau đây là một số mã ngoại lệ thường liên quan đến hệ thống bảo mật:

  • doorOpen: Cửa đang mở.
  • windowOpen: Một cửa sổ đang mở.
  • isOpen: Cảm biến phát hiện thấy có gì đó đang mở (nhưng không biết đó là cửa hay cửa sổ).

Ví dụ: Trường hợp ngoại lệ không chặn

Ví dụ này cho thấy một ngoại lệ không chặn trong đó hệ thống bảo mật được kích hoạt mặc dù cửa sổ được báo cáo là đang mở.

Người dùng Đặt hệ thống an ninh ở mức an ninh cao.
Trợ lý Google Được rồi, cửa sổ phía trước đang mở. Tôi đang đặt hệ thống an ninh ở mức an ninh cao.
Yêu cầu
{
    "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"
            }
          }]
        }]
      }
    }]
  }
Phản hồi
{
    "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"
              }
            ]
          }
        }
      ]
    }
  }

Ví dụ: Chặn ngoại lệ

Người dùng Đặt hệ thống an ninh ở mức an ninh cao.
Trợ lý Google Đã xảy ra lỗi khi kiểm soát hệ thống bảo mật. Cửa sổ trước đang mở.
Yêu cầu
{
    "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"
            }
          }]
        }]
      }
    }]
  }
Phản hồi 2
{
    "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"
              }
            ]
          }
        }
      ]
    }
  }

Bảo vệ bằng tính năng xác thực hai yếu tố

Nếu quy trình kích hoạt của bạn yêu cầu người dùng nhập mã PIN thông qua hộp thoại xác thực hai yếu tố, thì bạn phải xác nhận xem họ có muốn tiếp tục kích hoạt hệ thống khi có ngoại lệ đang hoạt động hay không (ví dụ: khi cửa sổ hoặc cửa đang mở).

Tình huống này có thể yêu cầu cả mục nhập mã PIN hoặc cụm mật khẩu, theo sau là thông báo xác nhận.

Ví dụ: Thử thách xác nhận

Ví dụ này cho thấy người dùng đang cố gắng kích hoạt hệ thống bảo mật, nhưng cửa trước được phát hiện là đang mở. Người dùng xác nhận rằng hệ thống bảo mật phải được kích hoạt ngay cả khi cửa trước đang mở.

Người dùng Bật hệ thống an ninh.
Trợ lý Google Cửa trước đang mở. Bạn có chắc chắn muốn kích hoạt hệ thống bảo mật không?
Người dùng Có.
Trợ lý Google Được rồi, tôi đang bật hệ thống an ninh.

Ở lượt đầu tiên, bạn nên phản hồi bằng một thử thách ackNeeded.

Yêu cầu 1
{
    "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
            }
          }]
        }]
      }
    }]
  }
Phản hồi 2
{
    "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"
              }
            ]
          }
        }
      ]
    }
  }

Yêu cầu tiếp theo của Google gửi cho bạn sẽ chứa kết quả ack.

Yêu cầu 2
{
    "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
            }
          }]
        }]
      }
    }]
  }
Phản hồi
{
    "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
    "payload": {
      "commands": [
        {
          "ids": [
            "123"
          ],
          "status": "SUCCESS",
          "states": {
            "isArmed": true
          }
        }
      ]
    }
  }

Ví dụ: Thử thách xác nhận và mã PIN

Ví dụ này cho thấy một người dùng đang cố gắng kích hoạt hệ thống bảo mật yêu cầu nhập mã PIN. Hệ thống phát hiện thấy cửa sổ trước và sau đang mở và yêu cầu người dùng xác nhận việc kích hoạt chế độ bảo vệ.

Người dùng Bật chuông báo động khi vắng nhà.
Trợ lý Google Mã PIN của bạn là gì?
Người dùng 1234.
Trợ lý Google Có vẻ như cửa sổ trước và cửa sổ sau đang mở. Bạn có chắc chắn muốn tiếp tục kích hoạt chế độ báo động khi vắng nhà không?
Người dùng Có.
Trợ lý Google Được rồi, tôi sẽ bật hệ thống an ninh ở chế độ vắng nhà

Ở lượt đầu tiên, bạn nên phản hồi bằng một thử thách pinNeeded tiêu chuẩn.

Yêu cầu 1
{
  "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
          }
        }]
      }]
    }
  }]
}
Phản hồi
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["456"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "pinNeeded"
      }
    }]
  }
}

Sau đó, Google sẽ gửi một yêu cầu chứa mã PIN đã cung cấp. Để hỗ trợ lượt đi thứ hai, bạn nên trả lời bằng một thử thách ackNeeded có thêm thông tin, bao gồm cả cấp độ cánh tay mục tiêu và báo cáo trạng thái hiện tại với các trường hợp ngoại lệ chặn.

Yêu cầu 2
{
  "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"
          }
        }]
      }]
    }
  }]
}
Phản hồi
{
  "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"
      }
    }]
  }
}

Yêu cầu tiếp theo của Google cho bạn sẽ chỉ chứa kết quả ack, chứ không phải mã PIN được cung cấp ở lượt đầu tiên.

Yêu cầu 3
{
  "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
          }
        }]
      }]
    }
  }]
}
Phản hồi
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "isArmed": true
        }
      }
    ]
  }
}