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ù.
Trait consigliati
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
{ "requestId": "6894439706274654512", "inputs": [ { "intent": "action.devices.SYNC" } ] }
{ "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
{ "requestId": "6894439706274654514", "inputs": [ { "intent": "action.devices.QUERY", "payload": { "devices": [ { "id": "123" } ] } } ] }
{ "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.
{ "requestId": "6894439706274654516", "inputs": [ { "intent": "action.devices.EXECUTE", "payload": { "commands": [ { "devices": [ { "id": "123" } ], "execution": [ { "command": "action.devices.commands.ArmDisarm", "params": { "arm": true, "armLevel": "away_key" } } ] } ] } } ] }
{ "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).
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. |
{
"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"
}
}]
}]
}
}]
}
{
"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. |
{
"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"
}
}]
}]
}
}]
}
{
"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
.
{
"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
}
}]
}]
}
}]
}
{
"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
.
{
"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
}
}]
}]
}
}]
}
{
"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.
{ "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 } }] }] } }] }
{ "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.
{ "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" } }] }] } }] }
{ "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.
{ "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 } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [ { "ids": [ "123" ], "status": "SUCCESS", "states": { "isArmed": true } } ] } }