Guida ai sistemi di sicurezza per la smart home

action.devices.types.SECURITYSYSTEM - I sistemi di sicurezza possono essere abilitati e disabilitati. Possono essere abilitati a più livelli di sicurezza (ad esempio, a casa e fuori) e possono segnalare informazioni su determinati sensori, ad esempio un sensore che rileva movimenti o una finestra aperta.

Questo tipo indica che al dispositivo viene visualizzata l'icona del sistema di sicurezza e alcune informazioni correlate sinonimi e alias.

Funzionalità del dispositivo

Consulta la documentazione sui trait corrispondente per dettagli di implementazione, come gli attributi e gli stati che il servizio dovrebbe supportare e come creare risposte EXECUTE e QUERY.

Trait obbligatori

Questi trait e comandi sono obbligatori, se applicabili al tuo dispositivo. Se il tuo dispositivo non supporta queste funzionalità, inserisci il codice di errore di functionNotSupported in una risposta QUERY o EXECUTE. Consulta: Errori ed eccezioni per saperne di più.

Questi trait sono consigliati, se applicabili al tuo dispositivo. Tuttavia, puoi combinare tutte le caratteristiche disponibili per associarle al meglio a quelle esistenti. funzionalità del prodotto.

Requisiti di qualità

  • Latenza: deve essere inferiore o uguale a 2000 ms.
  • Affidabilità: deve essere superiore o uguale al 97%.

Dispositivo di esempio: sistema di sicurezza semplice

Questa sezione contiene esempi di payload per intent che rappresentano un "sistema di sicurezza" comune in base al tipo di dispositivo e alle caratteristiche di cui sopra. Se aggiungi o rimuovi i trait nell'implementazione, modificare le tue risposte di conseguenza per riflettere tali cambiamenti.

Esempio di risposta SYNC

Richiedi
di Gemini Advanced.
{
  "requestId": "6894439706274654512",
  "inputs": [
    {
      "intent": "action.devices.SYNC"
    }
  ]
}
Risposta
{
  "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"
        }
      }
    ]
  }
}

Esempio di risposta QUERY

Richiedi
di Gemini Advanced.
{
  "requestId": "6894439706274654514",
  "inputs": [
    {
      "intent": "action.devices.QUERY",
      "payload": {
        "devices": [
          {
            "id": "123"
          }
        ]
      }
    }
  ]
}
Risposta
{
  "requestId": "6894439706274654514",
  "payload": {
    "devices": {
      "123": {
        "status": "SUCCESS",
        "online": true,
        "isArmed": true,
        "currentArmLevel": "home_key",
        "currentStatusReport": [
          {
            "blocking": false,
            "deviceTarget": "123",
            "priority": 0,
            "statusCode": "lowBattery"
          }
        ]
      }
    }
  }
}

Esempi di comandi EXECUTE

ArmDisarm

Per ulteriori dettagli sui parametri del comando, consulta action.devices.traits.ArmDisarm riferimento.

Richiedi
di Gemini Advanced.
{
  "requestId": "6894439706274654516",
  "inputs": [
    {
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [
          {
            "devices": [
              {
                "id": "123"
              }
            ],
            "execution": [
              {
                "command": "action.devices.commands.ArmDisarm",
                "params": {
                  "arm": true,
                  "armLevel": "away_key"
                }
              }
            ]
          }
        ]
      }
    }
  ]
}
Risposta
{
  "requestId": "6894439706274654516",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "isArmed": true,
          "currentArmLevel": "away_key"
        }
      }
    ]
  }
}

ERRORI dispositivo

Consulta l'elenco completo errori ed eccezioni.

Segnala eccezioni di attivazione

Quando provi ad abilitare o disabilitare il sistema, puoi fornire ulteriori contesto tramite codici di eccezione che segnali tramite il tratto StatusReport. Le eccezioni possono essere segnalate come blocchi o non bloccanti.

  • Eccezioni non bloccanti segnalate con "SUCCESS" indicano che l'eccezione non ha impedito l'abilitazione o la disabilitazione.
  • Eccezioni di blocco segnalate con il valore "EXCEPTIONS" indica che l'abilitazione o la disabilitazione è stata interrotta a causa di queste eccezioni.

I codici di eccezione comunemente associati ai sistemi di sicurezza includono:

  • doorOpen: c'è una porta aperta.
  • windowOpen: c'è una finestra aperta.
  • isOpen: un sensore rileva che qualcosa è aperto, ma non sa se si tratta di una porta o di una finestra).
di Gemini Advanced.

Esempio: eccezione non bloccante

Questo esempio mostra un'eccezione non di blocco in cui il sistema di sicurezza viene abilitato anche se una finestra viene segnalata come aperta.

Utente Imposta il sistema di sicurezza su sicurezza elevata.
Assistente Google Ok, la finestra anteriore è aperta. Abilito il sistema di sicurezza su Alta sicurezza.
Richiedi
di Gemini Advanced.
{
    "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"
            }
          }]
        }]
      }
    }]
  }
Risposta
{
    "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"
              }
            ]
          }
        }
      ]
    }
  }

Esempio: eccezione di blocco

Utente Imposta il sistema di sicurezza su sicurezza elevata.
Assistente Google Si è verificato un errore per controllare il sistema di sicurezza. La finestra anteriore è aperta.
Richiedi
di Gemini Advanced.
{
    "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"
            }
          }]
        }]
      }
    }]
  }
Risposta 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"
              }
            ]
          }
        }
      ]
    }
  }

Abilitazione con autenticazione a due fattori

Se il flusso di attivazione richiede agli utenti di inserire un PIN tramite una finestra di dialogo per l'autenticazione a due fattori, devi confermare se il cliente vuole continuare ad abilitare il sistema quando sono attive eccezioni (ad es. quando una finestra o una porta è aperta).

Questo scenario potrebbe richiedere sia un PIN sia una passphrase, seguito da una conferma.

Esempio: sfida di riconoscimento

Questo esempio mostra un utente che tenta di abilitare il sistema di sicurezza, ma la porta principale è stata rilevata come aperta. L'utente riconosce che l'account di sicurezza il sistema deve essere abilitato anche se la porta principale è aperta.

Utente Abilita il sistema di sicurezza.
Assistente Google La porta d'ingresso è aperta. Abilitare il sistema di sicurezza?
Utente Sì.
Assistente Google Ok, attivo il un sistema di sicurezza sicuro.

Nel primo turno, devi rispondere con una sfida ackNeeded.

Richiesta 1
di Gemini Advanced.
{
    "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
            }
          }]
        }]
      }
    }]
  }
Risposta 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"
              }
            ]
          }
        }
      ]
    }
  }

La successiva richiesta da parte di Google conterrà il risultato di ack.

Richiesta 2
di Gemini Advanced.
{
    "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
            }
          }]
        }]
      }
    }]
  }
Risposta
{
    "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
    "payload": {
      "commands": [
        {
          "ids": [
            "123"
          ],
          "status": "SUCCESS",
          "states": {
            "isArmed": true
          }
        }
      ]
    }
  }

Esempio: verifica tramite PIN e accettazione

Questo esempio mostra un utente che tenta di abilitare il sistema di sicurezza che richiede l'inserimento del PIN. Il sistema rileva che i finestrini anteriore e posteriore sono aperti e chiede all'utente di confermare che l'abilitazione debba procedere.

Utente Abilita a Fuori.
Assistente Google Qual è il PIN?
Utente 1234.
Assistente Google A quanto pare, il finestrino anteriore e il finestrino posteriore siano aperti. Vuoi continuare? abilitare il sistema di sicurezza?
Utente Sì.
Assistente Google Ok, abilitando il sistema di sicurezza per spegnere

Nel primo turno, devi rispondere con una sfida pinNeeded standard.

Richiesta 1
di Gemini Advanced.
{
  "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
          }
        }]
      }]
    }
  }]
}
Risposta
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["456"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "pinNeeded"
      }
    }]
  }
}

Google risponde quindi a una richiesta contenente il PIN fornito. Per supportare Nel secondo turno, devi rispondere con una sfida ackNeeded con informazioni aggiuntive, tra cui il livello del gruppo target e il report sullo stato corrente con di blocco note.

Richiesta 2
di Gemini Advanced.
{
  "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"
          }
        }]
      }]
    }
  }]
}
Risposta
{
  "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"
      }
    }]
  }
}

La successiva richiesta da parte di Google conterrà solo il risultato di ack, e non il PIN fornito al primo turno.

Richiesta 3
di Gemini Advanced.
{
  "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
          }
        }]
      }]
    }
  }]
}
Risposta
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "isArmed": true
        }
      }
    ]
  }
}