Akıllı ev işlemlerinin nasıl geliştirileceğini öğrenebileceğiniz yeni adres olan Google Home Geliştirici Merkezi'ne hoş geldiniz. Not: Actions Console'da işlem derlemeye devam edersiniz.

Akıllı Ev Güvenliği Sistemi Kılavuzu

action.devices.types.SECURITYSYSTEM - Güvenlik sistemleri etkinleştirilebilir veya devre dışı bırakılabilir. Birden fazla güvenlik düzeyinde etkinleştirilebilir (ör. evde ve dışarıda) ve belirli sensörlerle ilgili bilgileri (ör. hareketi algılayan bir sensör veya açık bir pencere) bildirebilirler.

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

Cihaz özellikleri

Hizmetinizin desteklemesi gereken özellikler ve durumlar, 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

Cihazınız için geçerliyse bu özellikler ve komutlar gerekir.

Cihazınız için geçerliyse bu özellikler önerilir. Bununla birlikte, mevcut ürün işlevlerinizle en iyi şekilde eşleşmesi için mevcut tüm özelliklerle karıştırıp eşleştirebilirsiniz.

Kalite gereksinimleri

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

Örnek cihaz: Basit güvenlik sistemi

Bu bölümde, yukarıdaki cihaz türüne ve özelliklere dayalı olarak ortak bir "Güvenlik Sistemi"ni temsil eden örnek yük yükleri yer alır. Uygulamanıza özellik ekler veya mevcut özellikleri kaldırırsanız bu değişiklikleri yansıtacak şekilde yanıtlarınızı uygun ş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ı

Kol Alarmı

Komut parametreleri hakkında ek ayrıntılar 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ın ve istisnaların tam listesini inceleyin.

Etkinleştirme istisnalarını bildir

Sistemi etkinleştirmeye veya devre dışı bırakmaya çalışırken Durum Raporu özelliği aracılığıyla bildirdiğiniz istisna kodları aracılığıyla ek bağlam sağlayabilirsiniz. İstisnalar, engelleme veya engellememe olarak bildirilebilir.

  • "BAŞARILI" durumu ile bildirilen engelleme dışı istisnalar, istisnanın silahlanmayı veya devre dışı bırakmayı engellemediğini gösterir.
  • "İSTİSNALAR" durumuyla bildirilen engelleme istisnaları, bu istisnalardan dolayı silahlanma veya devre dışı bırakma işleminin durdurulduğunu gösterir.

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

  • doorOpen: Kapı açık.
  • windowOpen: Bir pencere açıktır.
  • isOpen: Sensör, bir şeyin açık olduğunu algılar (ancak bunun bir kapı veya pencere olup olmadığını bilemez).

Örnek: Engel koymayan istisna

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

Kullanıcı Güvenlik sistemini yüksek güvenlik değerine ayarlayın.
Google Asistan Tamam, ön pencere açık. Güvenlik sistemi yüksek güvenlikte 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üvenlik değerine 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"
          }
        }]
      }]
    }
  }]
}
Yanıt 2
{
  "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"
            }
          ]
        }
      }
    ]
  }
}

İki faktörlü kimlik doğrulama ile etkinleştiriliyor

Güvenlik akışınız kullanıcıların iki faktörlü kimlik doğrulama iletişim kutusu üzerinden PIN girmesini gerektiriyorsa etkin istisnalar olduğunda sistemi etkinleştirmeye devam etmek isteyip istemediklerini belirtmeniz gerekir (ör. bir pencere veya kapı açıksa).

Bu senaryoda hem PIN hem de parola girişi ve ardından onay gerekebilir.

Örnek: Onay sorgulaması

Bu örnekte, güvenlik sistemini etkinleştirmeye çalışan ancak ön kapının açık olduğu tespit edilen bir kullanıcı gösterilmektedir. Kullanıcı, ön kapı açık olsa bile güvenlik sisteminin etkinleştirileceğ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 sistemini etkinleştireceğim.

İlk aşamada 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 gönderdiği sonraki istek ack sonucunu içerir.

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 yarışması

Bu örnekte, PIN girişi gerektiren güvenlik sistemini açmaya çalışan bir kullanıcı gösterilmektedir. Sistem, ön ve arka pencerelerin açık olduğunu tespit eder ve kullanıcıdan zırhın devam etmesi gerektiğini onaylamasını ister.

Kullanıcı Rahat olun.
Google Asistan PIN'iniz nedir?
Kullanıcı 1234.
Google Asistan Ön pencere ve arka pencere açık görünüyor. Güvenlik sistemini kapatmaya devam etmek istediğinizden emin misiniz?
Kullanıcı Evet.
Google Asistan Tamam, güvenlik sistemini dışarıda bırakıyorum

İlk adımda standart bir pinNeeded meydan okuması ile yanıt vermeniz gerekir.

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

Ardından Google, sağlanan PIN'i içeren bir istek gönderir. İkinci dönüşü desteklemek için hedef kol düzeyi ve engelleme istisnaları bulunan geçerli durum raporu dahil ek bilgilerle bir ackNeeded yarışmasıyla 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 gönderdiği sonraki istek, yalnızca ack sonucunu içerecek ve ilk aşamada sağlanan PIN'i içermeyecektir.

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