Guida al sistema di sicurezza per la smart home
action.devices.types.SECURITYSYSTEM - I sistemi di sicurezza possono essere attivati e disattivati. Possono essere attivati a più livelli di sicurezza (ad esempio, in modalità A casa e Fuori casa) e possono segnalare informazioni su determinati sensori, ad esempio un sensore che rileva il movimento o una finestra aperta.
Questo tipo indica che il dispositivo riceve l'icona del sistema di sicurezza e alcuni sinonimi e alias correlati.
Funzionalità del dispositivo
Consulta la documentazione del tratto corrispondente per i dettagli di implementazione, come gli attributi e gli stati che il tuo servizio deve supportare e come creare risposte EXECUTE e QUERY.
Tratti richiesti
Questi tratti e comandi sono obbligatori, se applicabili al tuo
dispositivo. Se il tuo dispositivo non supporta queste caratteristiche, inserisci il codice di errore
functionNotSupported in una risposta QUERY o EXECUTE. Per saperne di più, consulta la sezione Errori ed eccezioni.
Tratti consigliati
Queste caratteristiche sono consigliate, se applicabili al tuo dispositivo. Tuttavia, puoi combinare tutte le caratteristiche disponibili per trovare la corrispondenza migliore con le funzionalità del prodotto esistenti.
Dispositivo di esempio: sistema di sicurezza semplice
Questa sezione contiene payload di intent di esempio che rappresentano un "Sistema di sicurezza" comune in base al tipo e alle caratteristiche del dispositivo riportati sopra. Se aggiungi o rimuovi caratteristiche nell'implementazione, modifica le risposte di conseguenza per riflettere queste modifiche.
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" } ] } } } }
Comandi EXECUTE di esempio
ArmDisarm
Per ulteriori dettagli sui parametri del comando,
consulta il
action.devices.traits.ArmDisarm
di 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 del dispositivo
Consulta l'elenco completo di errori ed eccezioni.Report sulle eccezioni di inserimento
Quando tenti di attivare o disattivare il sistema, puoi fornire un contesto aggiuntivo tramite i codici di eccezione che segnali tramite l'attributo StatusReport. Le eccezioni possono essere segnalate come bloccanti o non bloccanti.
- Le eccezioni non bloccanti segnalate con lo stato "SUCCESS" indicano che l'eccezione non ha impedito l'inserimento o il disinserimento dell'allarme.
- Le eccezioni di blocco segnalate con lo stato "ECCEZIONI" indicano che l'inserimento o il disinserimento è stato interrotto a causa di queste eccezioni.
I codici di eccezione comunemente associati ai sistemi di sicurezza includono:
doorOpen: Una portiera è aperta.windowOpen: è aperta una finestra.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 bloccante in cui il sistema di sicurezza è inserito anche se una finestra viene segnalata come aperta.
| Utente | Imposta il sistema di sicurezza su Protezione alta. |
| Assistente Google | Ok, il finestrino anteriore è aperto. Abilito il sistema di sicurezza su Protezione alta. |
{
"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 Protezione alta. |
| Assistente Google | Si è verificato un errore durante il controllo del sistema di sicurezza. Il finestrino anteriore è aperto. |
{
"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"
}
]
}
}
]
}
}Inserimento dell'allarme con l'autenticazione a due fattori
Se il flusso di inserimento dell'allarme richiede agli utenti di inserire un PIN tramite una finestra di dialogo di autenticazione a due fattori, devi confermare se vogliono continuare a inserire l'allarme quando sono presentieccezioni attive (ad esempio, quando una finestra o una porta è aperta).
Questo scenario potrebbe richiedere sia l'inserimento di un PIN o di una passphrase, seguito da una conferma.
Esempio: Acknowledgement challenge
Questo esempio mostra un utente che tenta di attivare il sistema di sicurezza, ma viene rilevata una porta d'ingresso aperta. L'utente riconosce che il sistema di sicurezza deve essere attivato anche se la porta d'ingresso è aperta.
| Utente | Abilita il sistema di sicurezza. |
| Assistente Google | La porta d'ingresso è aperta. Vuoi attivare il sistema di sicurezza? |
| Utente | Sì. |
| Assistente Google | Ok, abilito il sistema di sicurezza. |
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 richiesta successiva di Google conterrà il risultato 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: PIN e richiesta di conferma
Questo esempio mostra un utente che tenta di attivare il sistema di sicurezza che richiede l'inserimento del PIN. Il sistema rileva che i finestrini anteriori e posteriori sono aperti e chiede all'utente di confermare che l'inserimento dell'antifurto deve procedere.
| Utente | Abilita Fuori. |
| Assistente Google | Qual è il tuo PIN? |
| Utente | 1234. |
| Assistente Google | Sembra che il finestrino anteriore e quello posteriore siano aperti. Vuoi continuare ad attivare il sistema di sicurezza in modalità Assente? |
| Utente | Sì. |
| Assistente Google | Ok, abilito il sistema di sicurezza in modalità Assente. |
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 invia quindi una richiesta contenente il PIN fornito. Per supportare
il secondo turno, devi rispondere con una sfida ackNeeded con
informazioni aggiuntive, tra cui il livello di armamento target e l'attuale report sullo stato con
eccezioni di blocco.
{ "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 richiesta successiva di Google conterrà solo il risultato ack,
e non il PIN fornito al primo tentativo.
{ "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 } } ] } }