Guida ai sistemi 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, A casa e Fuori) 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 Sistema di sicurezza e alcuni sinonimi e alias correlati.
Funzionalità del dispositivo
Consulta la documentazione del tratto corrispondente per dettagli sull'implementazione, ad esempio 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 queste caratteristiche, inserisci il codice di errore difunctionNotSupported
in una risposta QUERY o EXECUTE. Per ulteriori informazioni, consulta la sezione Errori ed eccezioni.
Tratti consigliati
Questi tratti sono consigliati, se applicabili al tuo dispositivo. Tuttavia, puoi combinare tutti i tratti disponibili in base alle tue esigenze per ottenere la funzionalità del prodotto migliore.
Requisiti di qualità
- Latenza: deve essere inferiore o uguale a 2000 ms.
- Attendibilità: deve essere superiore o uguale al 97%.
Dispositivo di esempio: sistema di sicurezza semplice
Questa sezione contiene esempi di payload dell'intent che rappresentano un "impianto di sicurezza" comune basato sul tipo di dispositivo e sui tratti sopra indicati. Se aggiungi o rimuovi tratti 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 la documentazione di riferimento di
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": "SUCCESS", "states": { "online": true, "isArmed": true, "currentArmLevel": "away_key" } } ] } }
ERRORI del dispositivo
Consulta l'elenco completo di errori ed eccezioni.Segnalare eccezioni all'abilitazione
Quando provi ad armare o disarmare il sistema, puoi fornire un contesto aggiuntivo tramite i codici di eccezione che registri tramite l'attributo StatusReport. Le eccezioni possono essere segnalate come bloccanti o non bloccanti.
- Le eccezioni non bloccanti registrate con lo stato "SUCCESS" indicano che l'eccezione non ha impedito l'abilitazione o la disattivazione dell'antifurto.
- Le eccezioni di blocco registrate con lo stato "ECCESSONI" indicano che l'attivazione o la disattivazione è stata interrotta a causa di queste eccezioni.
I codici di eccezione comunemente associati ai sistemi di sicurezza includono:
doorOpen
: una porta è aperta.windowOpen
: 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 bloccante in cui il sistema di sicurezza è attivo anche se una finestra è segnalata come aperta.
Utente | Imposta il sistema di sicurezza su Protezione alta. |
Assistente Google | Ok, il finestrino anteriore è aperto. Il sistema di sicurezza è stato impostato 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. 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"
}
]
}
}
]
}
}
Attivazione con autenticazione a due fattori
Se il flusso di inserimento dell'antifurto richiede agli utenti di inserire un PIN tramite una finestra di dialogo di autenticazione a due fattori, devi confermare se vogliono continuare ad armare il sistema quando sono attive delle eccezioni (ad esempio quando una finestra o una porta è aperta).
Questo scenario potrebbe richiedere entrambi l'inserimento di un PIN o di una passphrase, seguito da un riconoscimento.
Esempio: verifica di conferma
Questo esempio mostra un utente che tenta di attivare il sistema di sicurezza, ma la porta di casa è rilevata come aperta. L'utente riconosce che il sistema di sicurezza deve essere attivato anche se la porta di casa è aperta.
Utente | Abilita il sistema di sicurezza. |
Assistente Google | La porta d'ingresso è aperta. Vuoi attivare l\'impianto di sicurezza? |
Utente | Sì. |
Assistente Google | Ok, attivo il sistema di sicurezza. |
Al 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: verifica tramite 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 anteriori e posteriori sono aperti e chiede all'utente di confermare che l'attivazione dell'antifurto debba procedere.
Utente | Allontana il braccio. |
Assistente Google | Qual è il tuo PIN? |
Utente | 1234. |
Assistente Google | Sembra che la finestra anteriore e quella posteriore siano aperte. Vuoi continuare ad armare il sistema di sicurezza in modalità Assenza? |
Utente | Sì. |
Assistente Google | Ok, attivo il sistema di sicurezza in modalità Assenza. |
Al 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 una richiesta contenente il PIN fornito. Per supportare
il secondo turno, devi rispondere con una verifica ackNeeded
con
informazioni aggiuntive, tra cui il livello del gruppo di destinazione e il report sullo stato corrente 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 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 } } ] } }