Errori ed eccezioni

Questo documento elenca gli errori e le eccezioni ufficialmente supportati per i dispositivi per la smart home. Utilizza questi codici di errore ed eccezione nella risposta dell'intent o nelle notifiche se le hai implementate, in modo che l'Assistente Google avvisi gli utenti finali dei problemi relativi a un determinato comando o stato del dispositivo. Se la risposta contiene una formattazione errata o errorCode, l'Assistente Google mostra agli utenti un messaggio di errore generico, ad esempio "Spiacenti, dispositivo non è al momento disponibile".

Errori

Devi restituire un codice di errore quando un problema causa l'esito negativo di una richiesta di esecuzione o di query. Ad esempio, se una serratura è bloccata e non può essere chiusa o aperta, all'utente deve essere restituito un errore relativo a questo stato.

I codici di errore possono essere allegati a livello di dispositivo o globale. Ad esempio, se un utente ha molte luci di un fornitore e sono controllate da un hub, quando l'utente chiede di spegnere tutte le luci, il fornitore potrebbe restituire un errore a livello di dispositivo se una singola luce è offline o un errore a livello globale se l'intero hub è offline e non è possibile controllare le luci. Se tutti i dispositivi sono offline, non c'è alcuna differenza tra l'utilizzo di errori a livello globale o a livello di dispositivo.

In sintesi:

  • Errore a livello globale: tutti i dispositivi nella risposta presentano lo stesso errore
  • Errore a livello locale: risposta mista con casi di errore e successo

Errori a livello globale

Il seguente snippet JSON mostra come restituire errori a livello globale nella risposta QUERY o EXECUTE.

Un esempio di errore a livello globale deviceOffline dovuto all'hub è offline:

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "errorCode": "deviceOffline",
    "status" : "ERROR"
  }
}

Un esempio di errore a livello globale inSoftwareUpdate dovuto all'hub è l'aggiornamento:

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "errorCode": "inSoftwareUpdate",
    "status" : "ERROR"
  }
}

Errori a livello di dispositivo

Risposta QUERY

Il seguente snippet JSON mostra come restituire gli errori a livello di dispositivo nella risposta QUERY.

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "devices": {
      "device-id-1": {
        "errorCode": "deviceOffline",
        "status" : "ERROR"
      },
      "device-id-2": {
        "errorCode": "deviceOffline",
        "status" : "ERROR"
      }
    }
  }
}

Risposta EXECUTE

Il seguente snippet JSON mostra come restituire errori a livello di dispositivo nella risposta EXECUTE.

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [
      {
        "ids": [
          "device-id-1"
        ],
        "status": "ERROR",
        "errorCode": "deviceOffline"
      },
      {
        "ids": [
          "device-id-2"
        ],
        "status": "SUCCESS",
        "states": {
          "on": true,
          "online": true
        }
      }
    ]
  }
}

Notifiche con errori

Notifica proattiva

Il seguente snippet JSON mostra come segnalare gli errori a livello di dispositivo in una notifica proattiva.

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "agentUserId": "agent-user-id-1",
  "eventId": "unique-event-id-1",
  "payload": {
    "devices": {
      "notifications": {
        "device-id-1": {
          "RunCycle": {
            "priority": 0,
            "status": "FAILURE",
            "errorCode": "deviceDoorOpen"
          }
        }
      }
    }
  }
}

Risposta di follow-up

Il seguente snippet JSON mostra come segnalare gli errori a livello di dispositivo in una risposta di follow-up.

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "agentUserId": "agent-user-id-1",
  "eventId": "unique-event-id-1",
  "payload": {
    "devices": {
      "notifications": {
        "device-id-1": {
          "LockUnlock": {
            "priority": 0,
            "followUpResponse": {
              "status": "FAILURE",
              "errorCode": "deviceJammingDetected",
              "followUpToken": "PLACEHOLDER"
            }
          }
        }
      }
    }
  }
}

Elenco errori

I seguenti errori genereranno la sintesi vocale associata sul dispositivo.

  • aboveMaximumLightEffectsDuration : È superiore alla durata massima di un'ora. Riprova.
  • aboveMaximumTimerDuration : Posso impostare <device(s)> solo per un massimo di <time period>
  • actionNotAvailable : Mi dispiace, non posso farlo adesso.
  • actionUnavailableWhileRunning : <device(s)> <is/are> currently running, so I can't make any changes.
  • alreadyArmed : <device(s)> <is/are> already armed.
  • alreadyAtMax : <device(s)> <is/are> already set to the maximum temperature.
  • alreadyAtMin : <device(s)> <is/are> already set to the minimum temperature.
  • alreadyClosed : <device(s)> <is/are> already closed.
  • alreadyDisarmed : <device(s)> <is/are> already disarmed.
  • alreadyDocked : <device(s)> <is/are> already docked.
  • alreadyInState : <device(s)> <is/are> already in that state.
  • alreadyLocked : <device(s)> <is/are> already locked.
  • alreadyOff : <device(s)> <is/are> already off.
  • alreadyOn : <device(s)> <is/are> already on.
  • alreadyOpen : <device(s)> <is/are> already open.
  • alreadyPaused : <device(s)> <is/are> already paused.
  • alreadyStarted : <device(s)> <is/are> already started.
  • alreadyStopped : <device(s)> <is/are> already stopped.
  • alreadyUnlocked : <device(s)> <is/are> already unlocked.
  • ambiguousZoneName : Mi dispiace, <device(s)> non riesce a identificare la zona a cui ti riferisci. Assicurati che le zone abbiano nomi univoci e riprova.
  • amountAboveLimit : È una quantità superiore rispetto a quella supportata da <device(s)>.
  • appLaunchFailed : Spiacenti, non è stato possibile avviare <nome app> su <dispositivo/i>.
  • armFailure : Impossibile attivare <device(s)>.
  • armLevelNeeded : Non ho capito bene quale livello devo impostare per <dispositivo/i>. Prova a dire "Imposta <dispositivo/i> su <bassa sicurezza>" o "Imposta <dispositivo/i> su <alta sicurezza>".
  • authFailure : Non riesco a raggiungere <device(s)>. Prova a controllare l'app per verificare che <device/devices> <is/are> completamente configurato/i.
  • bagFull : <device(s)> <has/have> <a full bag/full bags>. Please empty <it/them> and try again.
  • belowMinimumLightEffectsDuration : È inferiore alla durata minima di 5 minuti. Riprova.
  • belowMinimumTimerDuration : Non posso impostare <device(s)> per un periodo di tempo così breve. Riprova.
  • binFull : <device(s)> <has/have> <a full bin/full bins>.
  • cancelArmingRestricted : Mi dispiace, non ho potuto annullare l'inserimento dell'allarme di <device(s)>.
  • cancelTooLate : Mi dispiace, è troppo tardi per annullare. Usa <dispositivo/i> o l'app.
  • channelSwitchFailed : Mi dispiace, non riesco a passare al canale <channel name>. Riprova più tardi.
  • chargerIssue : Mi dispiace, sembra che si sia verificato un problema con il caricabatterie di <device(s)>.
  • commandInsertFailed : Impossibile elaborare i comandi per <dispositivo/i>.
  • deadBattery : <device(s)> <has/have> <a dead battery/dead batteries>.
  • degreesOutOfRange : I gradi richiesti sono fuori dall'intervallo per <dispositivo/i>.
  • deviceAlertNeedsAssistance : <device(s)> <has/have> an active alert and <need(s)> your assistance.
  • deviceAtExtremeTemperature : <device(s)> <is/are> at <an extreme temperature/extreme temperatures>.
  • deviceBusy : Mi dispiace, sembra che <device(s)> sia già in funzione.
  • deviceCharging : Mi dispiace, sembra che <device(s)> non possa farlo perché (ha_shared.ItsTheyre size=$item.devices.total_device_count) in carica.
  • deviceClogged : Mi dispiace, sembra che <device(s)> sia intasato.
  • deviceCurrentlyDispensing : <device(s)> sta già erogando qualcosa.
  • deviceDoorOpen : Lo sportello è aperto su <dispositivo/i>. Chiudilo e riprova.
  • deviceHandleClosed : La maniglia è chiusa su <dispositivo/i>. Aprila e riprova.
  • deviceJammingDetected : <device(s)> <is/are> jammed.
  • deviceLidOpen : Il coperchio di <dispositivo/i> è aperto. Chiudilo e riprova.
  • deviceNeedsRepair : <device(s)> <need(s)> to be repaired. Contatta il rivenditore locale.
  • deviceNotDocked : Mi dispiace, sembra che <device(s)> <isn't/aren't> docked. Inserisci <it/them> nella base e riprova.
  • deviceNotFound : <device(s)> <is/are>n't available. Prova a riconfigurare <it/them>.
  • deviceNotMounted : Mi dispiace, sembra che <device(s)> non possa farlo perché <it/they> <is/are>n't montato.
  • deviceNotReady : <device(s)> <is/are>n't ready.
  • deviceStuck : <device(s)> <is/are> stuck and needs your help.
  • deviceTampered : <device(s)> <has/have> been tampered with.
  • deviceThermalShutdown : Mi dispiace, sembra che <dispositivo/i> si sia/no spento/i a causa delle temperature estreme.
  • directResponseOnlyUnreachable : <device(s)> <doesn't/don't> support remote control.
  • disarmFailure : Impossibile disattivare <dispositivo/i>.
  • discreteOnlyOpenClose : Mi dispiace, <device(s)> può essere solo aperto o chiuso completamente.
  • dispenseAmountAboveLimit : <device(s)> non può erogare una quantità così elevata.
  • dispenseAmountBelowLimit : <device(s)> non può erogare una quantità così bassa.
  • dispenseAmountRemainingExceeded : <device(s)> non ha abbastanza <dispense item> per farlo.
  • dispenseFractionalAmountNotSupported : <device(s)> non può erogare frazioni di <dispense item>.
  • dispenseFractionalUnitNotSupported : <device(s)> non supporta frazioni di questa unità per <dispense item>.
  • dispenseUnitNotSupported : <device(s)> doesn't support that unit for <dispense item>.
  • doorClosedTooLong : Lo sportello di <dispositivo/i > è chiuso da un po'. Apri lo sportello, assicurati che ci sia qualcosa all'interno e riprova.
  • emergencyHeatOn : <device(s)> <is/are> in Emergency Heat Mode, so <it/they>'ll have to be adjusted by hand.
  • faultyBattery : <device(s)> <has/have> <a faulty battery/faulty batteries>.
  • floorUnreachable : <device(s)> non riesce ad arrivare in quella stanza. Sposta <it/them> sul piano giusto e riprova.
  • functionNotSupported : In realtà, <device(s)> <doesn't/don't> support that functionality.
  • genericDispenseNotSupported : Devo sapere cosa vorresti erogare. Riprova dicendo il nome dell'elemento.
  • hardError : Mi spiace, si è verificato un problema e non riesco a controllare il dispositivo per la casa.
  • hardError : Mi spiace, si è verificato un problema e non riesco a controllare il dispositivo per la casa.
  • inAutoMode : <device(s)> <is/are> currently set to auto mode. Per cambiare la temperatura, devi impostare <it/them > su un'altra modalità.
  • inAwayMode : <device(s)> <is/are> currently set to away mode. Per controllare il termostato, devi attivare manualmente la modalità A casa utilizzando l'app Nest su smartphone, tablet o computer.
  • inDryMode : <device(s)> <is/are> currently set to dry mode. Per cambiare la temperatura, devi impostare <it/them > su un'altra modalità.
  • inEcoMode : <device(s)> <is/are> currently set to eco mode. Per cambiare la temperatura, devi impostare <it/them > su un'altra modalità.
  • inFanOnlyMode : <device(s)> <is/are> currently set to fan-only mode. Per cambiare la temperatura, devi impostare <it/them > su un'altra modalità.
  • inHeatOrCool : <device(s)> <is/are>n't in heat/cool mode.
  • inHumidifierMode : <device(s)> <is/are> currently set to humidifier mode. Per cambiare la temperatura, devi impostare <it/them > su un'altra modalità.
  • inOffMode : <device(s)> <is/are> currently off. To change the temperature, you'll need to switch <it/them> to a different mode.
  • inPurifierMode : <device(s)> <is/are> currently set to purifier mode. Per cambiare la temperatura, devi impostare <it/them > su un'altra modalità.
  • inSleepMode : <device(s)> <is/are> in sleep mode. Riprova più tardi.
  • inSoftwareUpdate : <device(s)> <is/are> currently in a software update.
  • lockFailure : Impossibile bloccare <dispositivo/i>.
  • lockedState : <device(s)> <is/are> currently locked.
  • lockedToRange : La temperatura non rientra nell'intervallo bloccato su <dispositivo/i>.
  • lowBattery : <device(s)> <has/have> low battery.
  • maxSettingReached : <device(s)> <is/are> already set to the highest setting.
  • maxSpeedReached : <device(s)> <is/are> already set to the maximum speed.
  • minSettingReached : <device(s)> <is/are> already set to the lowest setting.
  • minSpeedReached : <device(s)> <is/are> already set to the minimum speed.
  • monitoringServiceConnectionLost : <device(s)> <has/have> lost <its/their> connection to the monitoring service.
  • needsAttachment : Mi dispiace, sembra che a <device(s)> manchi un accessorio necessario. Sostituiscilo e riprova.
  • needsBin : Mi dispiace, sembra che a <device(s)> manchi un contenitore. Sostituiscilo e riprova.
  • needsPads : <device(s)> <need(s)> new pads.
  • needsSoftwareUpdate : <device(s)> <need(s)> a software update.
  • needsWater : <device(s)> <need(s)> water.
  • networkProfileNotRecognized : Mi dispiace, non riconosco "<network profile>" su <device(s)>.
  • networkSpeedTestInProgress : Sto già testando la <network> <speed/speeds>.
  • noAvailableApp : Mi dispiace, sembra che <app name> non sia disponibile.
  • noAvailableChannel : Mi dispiace, sembra che il canale <nome del canale> non sia disponibile.
  • noChannelSubscription : Mi dispiace, al momento non disponi di un abbonamento al canale <nome del canale>.
  • noTimerExists : Mi dispiace, sembra che non ci siano timer impostati su <device(s)>.
  • notSupported : Spiacenti, questa modalità non è disponibile per <device(s)>.
  • obstructionDetected : <device(s)> ha rilevato un'ostruzione.
  • offline , deviceOffline : Mi dispiace, sembra che <device(s)> non sia/siano al momento disponibile/i.
  • onRequiresMode : Specifica la modalità che vuoi attivare.
  • passphraseIncorrect : Mi dispiace, il PIN non è corretto.
  • percentOutOfRange : Spiacenti, non posso impostare <device(s)> su <percent>.
  • pinIncorrect : (passphraseIncorrect)
  • rainDetected : Non ho aperto <dispositivo/i> perché è stata rilevata pioggia.
  • rangeTooClose : Queste temperature sono troppo vicine tra di loro per costituire un intervallo Caldo-Freddo per <device(s)>. Scegli temperature più distanziate.
  • relinkRequired : Mi dispiace, si è verificato un problema con il tuo account. Usa l'app Google Home o dell'assistente per ricollegare <device(s)>.
  • remoteSetDisabled :
    • Parametro facoltativo errorCodeReason
    • currentlyArmed - Mi dispiace, il sistema di sicurezza è già abilitato, quindi per fare qualsiasi modifica devi utilizzare <device(s)> o l'app.
    • remoteUnlockNotAllowed - Mi dispiace, non posso sbloccare <dispositivo/i> da remoto.
    • remoteControlOff - Al momento questa azione è disattivata. Attiva il controllo remoto su <dispositivo/i> e riprova.
    • childSafetyModeActive - Questa azione è disattivata per <dispositivo/i> quando è attiva la modalità protezione bambini.
  • roomsOnDifferentFloors : <device(s)> non riesce ad arrivare in quelle stanze perché sono su piani diversi.
  • safetyShutOff : <device(s)> <is/are> in modalità di spegnimento di sicurezza, pertanto <it/they>'ll have to be adjusted by hand.
  • sceneCannotBeApplied : Spiacenti, <device(s)> non può essere applicato.
  • securityRestriction : <device(s)> <has/have> a security restriction.
  • softwareUpdateNotAvailable : Spiacenti, non è disponibile alcun aggiornamento software su <device(s)>.
  • startRequiresTime : Per poterlo fare devi dirmi quanto tempo impostare per <device(s)>.
  • stillCoolingDown : <device(s)> <is/are> still cooling down.
  • stillWarmingUp : <device(s)> <is/are> still warming up.
  • streamUnavailable : Mi spiace, sembra che lo stream da <device(s)> non sia disponibile al momento.
  • streamUnplayable : Mi spiace, al momento non posso riprodurre lo stream da <device(s)>.
  • tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Please fill <it/them> and try again.
  • targetAlreadyReached : Mi spiace, sembra che questa sia già la temperatura attuale.
  • timerValueOutOfRange : Impossibile impostare <device(s)> per questo periodo di tempo.
  • tooManyFailedAttempts : Mi spiace, troppi tentativi non riusciti. Usa l'app del dispositivo per completare l'azione.
  • transientError : Spiacenti, si è verificato un problema durante il controllo di <device(s)>. Riprova.
  • turnedOff , deviceTurnedOff : <device(s)> <is/are> off right now.
  • unableToLocateDevice : Non sono riuscito a localizzare <dispositivo/i>.
  • unknownFoodPreset : <device(s)> non supporta questo programma predefinito per alimenti.
  • unlockFailure : Impossibile sbloccare <device(s)>.
  • unpausableState : Al momento non è possibile mettere in pausa <device(s)>.
  • userCancelled : ok
  • valueOutOfRange : Impossibile impostare <device(s)> su questa temperatura.

Report sullo stato online e offline

Quando un dispositivo è offline, devi segnalare <code{"online": code="" dir="ltr" false}<="" translate="no"> a Report State entro cinque minuti dal comportamento del dispositivo. Al contrario, quando un dispositivo torna online, devi segnalare <code{"online": code="" dir="ltr" translate="no" true}<=""> a Report State entro cinque minuti dal comportamento del dispositivo. Ogni volta che un dispositivo torna online, il partner deve segnalare tutti gli stati attuali del dispositivo utilizzando l'API reportStateAndNotification. Questo esempio mostra che un tipo di dispositivo light è online e segnala tutti gli stati attuali del dispositivo.
"requestId": "test-request-id",
  "agentUserId": "agent-user-1",
    "payload":{
      "devices": {
        "states": {
          "device-id-1": {
            "brightness": 65,
            "on": true,
            "online": true
          }
          "notifications": {},
        }
      }
    }

Eccezioni

Devi restituire un'eccezione quando si verifica un problema o un avviso associato a un comando. Il comando potrebbe avere esito positivo o negativo.

Se il comando è andato a buon fine (status = "SUCCESS"), segnala le eccezioni utilizzando la caratteristica StatusReport (per i dispositivi diversi da quello di destinazione) o restituendo un exceptionCode appropriato (per il dispositivo di destinazione).

Ad esempio, se il filtro della lanugine dell'asciugatrice è pieno, l'utente può comunque avviare l'asciugatrice, ma potresti volerlo avvisare di questo stato. Allo stesso modo, quando un dispositivo ha una batteria in esaurimento, ma non completamente scarica, puoi comunque eseguire un comando, ma devi comunicare all'utente che la batteria del dispositivo è in esaurimento.

Se il comando non va a buon fine a causa di eccezioni, lo stato deve essere "EXCEPTIONS" (ECCEZIONI) e le eccezioni devono essere segnalate utilizzando il tratto StatusReport.

Eccezione non bloccante (SUCCESS) relativa al dispositivo di destinazione

Questo esempio riguarda la chiusura della porta:

La batteria della serratura della porta principale è in esaurimento. Chiudo a chiave la porta principale.

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["device-id-1"],
      "status": "SUCCESS",
      "states": {
        "on": true,
        "online": true,
        "isLocked": true,
        "isJammed": false,
        "exceptionCode": "lowBattery"
      }
    }]
  }
}

Eccezione non bloccante (SUCCESS) relativa a un altro dispositivo che utilizza StatusReport

Questo esempio riguarda l'attivazione di un sistema di sicurezza: Ok, abilito il sistema di sicurezza. Il finestrino anteriore è aperto.

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["device-id-1"],
      "status": "SUCCESS",
      "states": {
        "on": true,
        "online": true,
        "isArmed": true,
        "currentArmLevel": "L2",
        "currentStatusReport": [{
          "blocking": false,
          "deviceTarget": "sensor_id1",
          "priority": 0,
          "statusCode": "deviceOpen"
        }]
      }
    }]
  }
}

Eccezione di blocco relativa a un altro dispositivo che utilizza StatusReport

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "devices": {
      "device-id-1": {
        "on": true,
        "online": true,
        "status": "EXCEPTIONS",
        "currentStatusReport": [{
            "blocking": true,
            "deviceTarget": "device-id-1",
            "priority": 0,
            "statusCode": "lowBattery"
          },
          {
            "blocking": true,
            "deviceTarget": "front_window_id",
            "priority": 1,
            "statusCode": "deviceOpen"
          },
          {
            "blocking": true,
            "deviceTarget": "back_window_id",
            "priority": 1,
            "statusCode": "deviceOpen"
          }
        ]
      }
    }
  }
}

Elenco delle eccezioni

Le seguenti eccezioni produrranno la sintesi vocale associata sul dispositivo.

  • bagFull : <device(s)> <has/have> <a full bag/full bags>. Please empty <it/them> and try again.
  • binFull : <device(s)> <has/have> <a full bin/full bins>.
  • carbonMonoxideDetected : È stato rilevato monossido di carbonio in <nome della casa>.
  • deviceAtExtremeTemperature : <device(s)> <is/are> at <an extreme temperature/extreme temperatures>.
  • deviceJammingDetected : <device(s)> <is/are> jammed.
  • deviceMoved : <device(s)> <was/were> moved.
  • deviceOpen : <device(s)> <is/are> open.
  • deviceTampered : <device(s)> <has/have> been tampered with.
  • deviceUnplugged : <device(s)> <is/are> unplugged.
  • floorUnreachable : <device(s)> non riesce ad arrivare in quella stanza. Sposta <it/them> sul piano giusto e riprova.
  • hardwareFailure : <device(s)> <has/have> a hardware problem.
  • inSoftwareUpdate : <device(s)> <is/are> currently in a software update.
  • isBypassed : <device(s)> <is/are> currently bypassed.
  • lowBattery : <device(s)> <has/have> low battery.
  • motionDetected : <device(s)> <detect(s)> motion.
  • needsPads : <device(s)> <need(s)> new pads.
  • needsSoftwareUpdate : <device(s)> <need(s)> a software update.
  • needsWater : <device(s)> <need(s)> water.
  • networkJammingDetected : la connessione della rete di casa a <device(s)> non funziona correttamente.
  • noIssuesReported : <device(s)> reported no issues.
  • roomsOnDifferentFloors : <device(s)> non riesce ad arrivare in quelle stanze perché sono su piani diversi.
  • runCycleFinished : <device(s)> <has/have> finished running.
  • securityRestriction : <device(s)> <has/have> a security restriction.
  • smokeDetected : È stato rilevato fumo in <nome della casa>.
  • tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Please fill <it/them> and try again.
  • usingCellularBackup : <device(s)> <is/are> using cellular backup.
  • waterLeakDetected : <device(s)> <detect(s)> una perdita d'acqua.
</code{"online":></code{"online":>