Akıllı Ev Güvenlik Sistemi Kılavuzu

action.devices.types.SECURITYSYSTEM - Güvenlik sistemleri etkinleştirilebilir ve devre dışı bırakılabilir. Birden fazla güvenlik seviyesinde (ör. evde ve dışarıda) etkinleştirilebilirler ve hareket algılayan sensör veya açık pencere gibi belirli sensörler hakkında bilgi bildirebilirler.

Bu tür, cihazın Güvenlik Sistemi simgesini ve bazı ilgili eş anlamlı kelimeleri ve diğer adları aldığını gösterir.

Cihazın özellikleri

Hizmetinizin desteklemesi gereken özellikler ve durumlar ile EXECUTE ve QUERY yanıtlarının nasıl oluşturulacağı gibi uygulama ayrıntıları için ilgili özellik dokümanlarına bakın.

Gerekli özellikler

Bu özellikler ve komutlar, cihazınız için geçerliyse gereklidir. Cihazınız bu özellikleri desteklemiyorsa QUERY veya EXECUTE yanıtına functionNotSupported hata kodunu girin. Daha fazla bilgi için Hatalar ve istisnalar bölümüne bakın.

Bu özellikler, cihazınız için geçerliyse önerilir. Ancak tüm özellikleri, mevcut ürün işlevlerinize en uygun şekilde dilediğiniz gibi birleştirip kullanabilirsiniz.

Örnek cihaz: Basit güvenlik sistemi

Bu bölümde, yukarıdaki cihaz türüne ve özelliklerine göre yaygın bir "Güvenlik Sistemi" temsil eden örnek amaçlı yükler yer almaktadır. Uygulamanıza özellik ekler veya kaldırırsanız yanıtlarınızı bu değişiklikleri yansıtacak şekilde düzenleyin.

Örnek SYNC yanıtı

İstek
{
  "requestId": "6894439706274654512",
  "inputs": [
    {
      "intent": "action.devices.SYNC"
    }
  ]
}
Yanıt
{
  "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"
        }
      }
    ]
  }
}

Örnek QUERY yanıtı

İstek
{
  "requestId": "6894439706274654514",
  "inputs": [
    {
      "intent": "action.devices.QUERY",
      "payload": {
        "devices": [
          {
            "id": "123"
          }
        ]
      }
    }
  ]
}
Yanıt
{
  "requestId": "6894439706274654514",
  "payload": {
    "devices": {
      "123": {
        "status": "SUCCESS",
        "online": true,
        "isArmed": true,
        "currentArmLevel": "home_key",
        "currentStatusReport": [
          {
            "blocking": false,
            "deviceTarget": "123",
            "priority": 0,
            "statusCode": "lowBattery"
          }
        ]
      }
    }
  }
}

Örnek EXECUTE komutları

ArmDisarm

Komut parametreleri hakkında daha fazla bilgi için action.devices.traits.ArmDisarm referansına bakın.

İstek
{
  "requestId": "6894439706274654516",
  "inputs": [
    {
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [
          {
            "devices": [
              {
                "id": "123"
              }
            ],
            "execution": [
              {
                "command": "action.devices.commands.ArmDisarm",
                "params": {
                  "arm": true,
                  "armLevel": "away_key"
                }
              }
            ]
          }
        ]
      }
    }
  ]
}
Yanıt
{
  "requestId": "6894439706274654516",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "isArmed": true,
          "currentArmLevel": "away_key"
        }
      }
    ]
  }
}

Cihaz HATALARI

Hatalar ve istisnalar listesinin tamamını inceleyin.

Silahlandırma istisnalarını bildirme

Sistemi etkinleştirmeye veya devre dışı bırakmaya çalışırken StatusReport özelliği üzerinden bildirdiğiniz istisna kodları aracılığıyla ek bağlam sağlayabilirsiniz. İstisnalar, engelleyici veya engelleyici olmayan olarak bildirilebilir.

  • "BAŞARILI" durumuyla bildirilen engelleyici olmayan istisnalar, istisnanın silahlandırmayı veya silahsızlandırmayı engellemediğini gösterir.
  • "İSTİSNALAR" durumuyla bildirilen engelleme istisnaları, bu istisnalar nedeniyle silahlandırma veya silahsızlandırmanın durdurulduğunu gösterir.

Güvenlik sistemleriyle yaygın olarak ilişkilendirilen istisna kodları şunlardır:

  • doorOpen: Bir kapı açık.
  • windowOpen: Bir pencere açıktır.
  • isOpen: Bir sensör, bir şeyin açık olduğunu algılıyor (ancak bunun kapı mı yoksa pencere mi olduğunu bilmiyor).

Örnek: Engellemeyen istisna

Bu örnekte, bir pencere açık olarak bildirilmesine rağmen güvenlik sisteminin etkinleştirildiği, engelleyici olmayan bir istisna gösterilmektedir.

Kullanıcı Güvenlik sistemini yüksek güvenliğe ayarlayın.
Google Asistan Tamam, ön pencere açık. Güvenlik sistemi yüksek güvenliğe ayarlanıyor.
İstek
{
    "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"
            }
          }]
        }]
      }
    }]
  }
Yanıt
{
    "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"
              }
            ]
          }
        }
      ]
    }
  }

Örnek: Engelleme istisnası

Kullanıcı Güvenlik sistemini yüksek güvenliğe ayarlayın.
Google Asistan Güvenlik sistemi kontrol edilirken bir hata oluştu. Ön pencere açık.
İstek
{
    "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"
            }
          }]
        }]
      }
    }]
  }
Response 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"
              }
            ]
          }
        }
      ]
    }
  }

İki faktörlü kimlik doğrulama ile koruma

Kurma akışınızda kullanıcıların iki faktörlü kimlik doğrulama iletişim kutusu aracılığıyla PIN girmesi gerekiyorsa etkin istisnalar olduğunda (ör. bir pencere veya kapı açıkken) sistemi kurmaya devam etmek isteyip istemediklerini onaylamaları gerekir.

Bu senaryoda, onaylamanın ardından hem PIN hem de geçiş ifadesi girişi yapılması gerekebilir.

Örnek: Onaylama zorluğu

Bu örnekte, güvenlik sistemini etkinleştirmeye çalışan bir kullanıcı gösterilmektedir ancak ön kapının açık olduğu tespit edilmektedir. Kullanıcı, ön kapı açık olsa bile güvenlik sisteminin etkinleştirilmesi gerektiğini kabul eder.

Kullanıcı Güvenlik sistemini etkinleştirin.
Google Asistan Ön kapı açık. Güvenlik sistemini etkinleştirmek istediğinizden emin misiniz?
Kullanıcı Evet.
Google Asistan Tamam, güvenlik sistemi etkinleştiriliyor.

İlk turda ackNeeded zorlukla yanıt vermelisiniz.

İstek 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
            }
          }]
        }]
      }
    }]
  }
Response 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"
              }
            ]
          }
        }
      ]
    }
  }

Google'ın size göndereceği sonraki istekte ack sonucu yer alır.

İstek 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
            }
          }]
        }]
      }
    }]
  }
Yanıt
{
    "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
    "payload": {
      "commands": [
        {
          "ids": [
            "123"
          ],
          "status": "SUCCESS",
          "states": {
            "isArmed": true
          }
        }
      ]
    }
  }

Örnek: PIN ve onaylama zorluğu

Bu örnekte, PIN girişi gerektiren güvenlik sistemini etkinleştirmeye çalışan bir kullanıcı gösterilmektedir. Sistem, ön ve arka pencerelerin açık olduğunu algılar ve kullanıcıdan alarmın kurulması gerektiğini onaylamasını ister.

Kullanıcı Dışarıda modunda etkinleştirin.
Google Asistan PIN kodunuz nedir?
Kullanıcı 1234.
Google Asistan Ön ve arka pencereler açık görünüyor. Güvenlik sistemini "uzakta" modunda kurmaya devam etmek istediğinizden emin misiniz?
Kullanıcı Evet.
Google Asistan Tamam, güvenlik sistemini evde değil modunda etkinleştir

İlk turda standart bir pinNeeded meydan okumasıyla yanıt vermelisiniz.

İstek 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
          }
        }]
      }]
    }
  }]
}
Yanıt
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["456"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "pinNeeded"
      }
    }]
  }
}

Google daha sonra, sağlanan PIN'i içeren bir istek gönderir. İkinci dönüşü desteklemek için hedef kol seviyesi ve engelleme istisnalarını içeren mevcut durum raporu gibi ek bilgilerle birlikte ackNeeded zorluğuyla yanıt vermelisiniz.

İstek 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"
          }
        }]
      }]
    }
  }]
}
Yanıt
{
  "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'ın size göndereceği sonraki istekte yalnızca ack sonucu yer alır. İlk turda sağlanan PIN yer almaz.

3. İstek
{
  "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
          }
        }]
      }]
    }
  }]
}
Yanıt
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "isArmed": true
        }
      }
    ]
  }
}