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 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à per il dispositivo
Consulta la documentazione relativa al 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 obbligatori
Questi tratti e comandi sono obbligatori, se applicabili al tuo
dispositivo. Se il tuo dispositivo non supporta questi tratti, 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 tutti i tratti disponibili per adattarli al meglio alle funzionalità del prodotto esistenti.
Dispositivo di esempio: sistema di sicurezza semplice
Questa sezione contiene esempi di payload di intent che rappresentano un "Sistema di sicurezza" comune in base al tipo di dispositivo e alle caratteristiche sopra indicati. 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
riferimento action.devices.traits.ArmDisarm.
{ "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": "PENDING", "states": { "online": true, "isArmed": true, "currentArmLevel": "away_key" } } ] } }
ERRORI del dispositivo
Consulta l'elenco completo di errori ed eccezioni.Segnalare le eccezioni di inserimento
Quando tenti di abilitare o disabilitare il sistema, puoi fornire un contesto aggiuntivo tramite i codici di eccezione che segnali tramite il tratto 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 porta è 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 risulta aperta.
| Utente | Imposta il sistema di sicurezza su Protezione alta. |
| Assistente Google | Ok, il finestrino anteriore è aperto. Attivazione del 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 della protezione 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 presenti eccezioni attive (ad esempio, quando una finestra o una porta è aperta).
Questo scenario potrebbe richiedere l'inserimento sia di un PIN o di una passphrase, seguito da una conferma.
Esempio: sfida di ringraziamento
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 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 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: richiesta di PIN e 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 anteriore e posteriore sono aperti e chiede all'utente di confermare che l'inserimento dell'antifurto deve procedere.
| Utente | Abilita a 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, sto attivando 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 braccio target e il report sullo stato attuale 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 nel 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 } } ] } }