Akıllı Ev Güvenlik Sistemi Rehberi

action.devices.types.SECURITYSYSTEM - Güvenlik sistemleri etkinleştirilebilir ve devre dışı bırakılabilir. Bunlar birden fazla güvenlik seviyesinde (örneğin, evde ve dışarıda) etkinleştirilebilir ve hareket algılayan sensör veya açık pencere gibi belirli sensörlerle ilgili bilgileri rapor edebilir.

Bu tür, cihazın Güvenlik Sistemi simgesini ve bazı alakalı eş anlamlıları ve takma adları aldığını gösterir.

Cihaz ö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 belgelerine bakın.

Gerekli özellikler

Bu özellikler ve komutlar (varsa) cihazınız için gereklidir. Cihazınız bu özellikleri desteklemiyorsa bir QUERY veya EXECUTE yanıtında 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. Bununla birlikte, mevcut ürün işlevselliğinizle en iyi şekilde eşleşmesi için mevcut tüm özellikleri karıştırıp eşleştirebilirsiniz.

Kalite gereksinimleri

  • Gecikme: 2.000 ms'den az veya bu değere eşit olmalıdır.
  • Güvenilirlik: %97'den fazla veya buna eşit olmalıdır.

Örnek cihaz: Basit güvenlik sistemi

Bu bölümde, yukarıdaki cihaz türüne ve özelliklere göre ortak bir "Güvenlik Sistemi"ni temsil eden örnek amaç yükleri yer almaktadır. Uygulamanıza özellikler ekler veya mevcut özellikleri kaldırırsanız yanıtlarınızı bu değişiklikleri yansıtacak şekilde değiştirin.

Ö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 ek bilgiler 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 ERRORS

Hataların ve istisnaların tam listesini inceleyin.

Devre dışı bırakma istisnalarını bildir

Sistemi etkinleştirmeye veya devre dışı bırakmaya çalışırken StatusReport özelliğini kullanarak bildirdiğiniz istisna kodları aracılığıyla ek bağlam sağlayabilirsiniz. İstisnalar, engelleyen veya engellenmeyen durum olarak bildirilebilir.

  • "BAŞARILI" durumuyla bildirilen engellemeyen istisnalar, istisnanın devre dışı bırakmayı veya devre dışı bırakmayı engellemediğini gösterir.
  • "İSTİSNALAR" durumuyla bildirilen engelleme istisnaları, etkinleştirme veya devre dışı bırakma işleminin bu istisnalar nedeniyle durdurulduğunu gösterir.

Genellikle güvenlik sistemleriyle ilişkilendirilen istisna kodları şunlardır:

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

Örnek: Engellemeyen istisna

Bu örnekte, bir pencere açık olarak bildirilse bile güvenlik sisteminin etkinleştirildiği, engellemeyen bir istisna gösterilmektedir.

Kullanıcı Güvenlik sistemini yüksek güvenliğe ayarla.
Google Asistan Tamam, ön pencere açık. Güvenlik sistemi yüksek güvenlik modunda etkinleştiriliyor.
İ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 ayarla.
Google Asistan Güvenlik sistemi kontrol edilirken 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"
            }
          }]
        }]
      }
    }]
  }
Yanıt 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 etkinleştirme

Etkinleştirme akışınız, kullanıcıların iki faktörlü kimlik doğrulama iletişim kutusu aracılığıyla bir PIN girmelerini gerektiriyorsa etkin istisnalar olduğunda (örneğin, bir pencere veya kapı açık olduğunda) kullanıcıların sistemi etkinleştirmeye devam etmek isteyip istemediklerini onaylamanız gerekir.

Bu senaryoda PIN veya parola girişi her ikisi için onay ve ardından onay gerekebilir.

Örnek: Onay görevi

Bu örnekte, bir kullanıcının güvenlik sistemini etkinleştirmeye çalıştığı ancak bir ön kapının açık olduğu algılandığı gösterilmektedir. Kullanıcı, ön kapı açık olsa bile güvenlik sisteminin etkinleştirilmesi gerektiğini onaylar.

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 sistemini etkinleştiriyorum.

İlk adımda ackNeeded meydan okumasıyla yanıt vermelisiniz.

1. İ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
            }
          }]
        }]
      }
    }]
  }
Yanıt 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 ilettiği bu sonraki istekte ack sonucu yer alır.

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

Örnek: PIN ve onay görevi

Bu örnekte, güvenlik sistemini etkinleştirmeye çalışan ve PIN girilmesini zorunlu kılan bir kullanıcı gösterilmektedir. Sistem, ön ve arka pencerelerin açık olduğunu algılar ve kullanıcıdan etkinleştirme işleminin devam etmesi gerektiğini onaylar.

Kullanıcı Uzakta moduna geç.
Google Asistan PIN kodunuz nedir?
Kullanıcı 1234.
Google Asistan Ön ve arka pencerenin açık olduğu anlaşılıyor. Güvenlik sistemini devre dışı bırakmaya devam etmek istediğinizden emin misiniz?
Kullanıcı Evet.
Google Asistan Tamam, güvenlik sistemini dışarıda bırakıyorum

İlk sırada standart pinNeeded sorgulamasıyla yanıt vermelisiniz.

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

Daha sonra Google, sağlanan PIN'i içeren bir talebi takip eder. İkinci dönüşü desteklemek için hedef kol düzeyi ve engelleme istisnaları içeren mevcut durum raporu dahil olmak üzere ek bilgiler içeren bir ackNeeded sorgulaması ile yanıt vermeniz gerekir.

2. İ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": {
            "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 ilettiği bu sonraki istekte yalnızca ack sonucu bulunacak, ilk dönüşte sağlanan PIN istenmeyecektir.

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
        }
      }
    ]
  }
}