Errori ed eccezioni

Questo documento elenca gli errori e le eccezioni ufficialmente supportati per i dispositivi di domotica. Utilizza questi codici di errori ed eccezioni nella risposta all'intent o nelle notifiche se li hai implementati, 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 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 il fallimento di una richiesta di esecuzione o query. Ad esempio, se la serratura di una porta è 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 a livello globale. Ad esempio, se un utente ha molte lampadine di un fornitore e sono controllate da un hub, quando l'utente chiede di spegnere tutte le lampadine, il fornitore potrebbe restituire un errore a livello di dispositivo se una singola lampadina è offline o un errore a livello globale se l'intero hub è offline e non è possibile controllare nessuna lampadina. Se tutti i dispositivi sono offline, non c'è differenza tra l'utilizzo di errori a livello globale o a livello di dispositivo.

Quando un dispositivo è offline, devi segnalare {"online": false} a Report State entro 5 minuti dal comportamento del 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 di 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 al fatto che l'hub è offline:

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

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

{
  "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

Lo snippet JSON seguente mostra come restituire gli 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 produrranno il TTS associato sul dispositivo.

  • aboveMaximumLightEffectsDuration : È superiore alla durata massima di un'ora. Riprova.
  • aboveMaximumTimerDuration : Posso impostare <device(s)> solo per un massimo di <periodo di tempo>
  • 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 : Siamo spiacenti, non è stato possibile avviare <nome dell'app> su <dispositivo o dispositivi>.
  • armFailure : Impossibile attivare <device(s)>.
  • armLevelNeeded : Non so quale livello impostare per <device(s)>. Prova a dire "Imposta <dispositivo o dispositivi> su <sicurezza bassa>" o "Imposta <dispositivo o dispositivi> su <sicurezza alta>"
  • authFailure : Non riesco a raggiungere <device(s)>. Prova a controllare l'app per assicurarti che <device/devices> <is/are> completamente configurati.
  • 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 riesco a impostare <device(s)> per un tempo così breve. Riprova.
  • binFull : <device(s)> <has/have> <a full bin/full bins>.
  • cancelArmingRestricted : Mi dispiace, non è stato possibile annullare l'attivazione dell'antifurto per <device o dispositivi>.
  • cancelTooLate : Mi dispiace, è troppo tardi per annullare. Utilizza invece <device(s)> o l'app.
  • channelSwitchFailed : Impossibile passare al canale <nome del canale>. Riprova più tardi.
  • chargerIssue : Sembra che <device(s)> <has/have> <a charger issue/charger issues>.
  • commandInsertFailed : Impossibile elaborare i comandi per <device(s)>.
  • deadBattery : <device(s)> <has/have> <a dead battery/dead batteries>.
  • degreesOutOfRange : I gradi richiesti sono fuori dall'intervallo per <device(s)>.
  • 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 uso.
  • 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 <device(s)>. Chiudilo e riprova.
  • deviceHandleClosed : L'handle è chiuso su <device(s)>. Aprilo e riprova.
  • deviceJammingDetected : <device(s)> <is/are> jammed.
  • deviceLidOpen : Il coperchio è aperto su <device o dispositivi>. Chiudilo e riprova.
  • deviceNeedsRepair : <device(s)> <need(s)> da riparare. Contatta il rivenditore locale.
  • deviceNotDocked : Mi dispiace, sembra che <device(s)> <non sia/non siano> agganciati alla base. Inserisci <il dispositivo/i dispositivi> e riprova.
  • deviceNotFound : <device(s)> <is/are>n't available. Prova a configurare di nuovo <l'elemento in questione>.
  • deviceNotMounted : Mi dispiace, sembra che <device(s)> non possa farlo perché <it/they> <is/are>n't mounted.
  • 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 <device(s)> si sia spento a causa di temperature estreme.
  • directResponseOnlyUnreachable : <device(s)> <non supporta/supportano> il controllo remoto.
  • disarmFailure : Impossibile disarmare <device o dispositivi>.
  • discreteOnlyOpenClose : Mi dispiace, <device(s)> possono essere solo aperti o chiusi completamente.
  • dispenseAmountAboveLimit : <device(s)> non può erogare una quantità così elevata.
  • dispenseAmountBelowLimit : <device(s)> non può erogare una quantità così ridotta.
  • 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)> non supporta l'unità per <dispense item>.
  • doorClosedTooLong : È passato un po' di tempo dall'ultima apertura dello sportello di <device(s)>. 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. Spostalo sul piano giusto e riprova.
  • functionNotSupported : In realtà, <device(s)> <doesn't/don't> supporta questa funzionalità.
  • genericDispenseNotSupported : Devo sapere cosa vorresti erogare. Riprova dicendo il nome dell'articolo.
  • hardError : Mi dispiace, si è verificato un problema e non riesco a controllare il tuo dispositivo per la casa.
  • hardError : Mi dispiace, si è verificato un problema e non riesco a controllare il tuo 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 telefono, 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 modalità sospensione. Riprova più tardi.
  • inSoftwareUpdate : <device(s)> <is/are> currently in a software update.
  • lockFailure : Impossibile bloccare <device(s)>.
  • lockedState : <device(s)> <is/are> currently locked.
  • lockedToRange : La temperatura non rientra nell'intervallo bloccato su <device(s)>.
  • 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 al <device(s)> manchi un contenitore. Sostituiscilo e riprova.
  • needsPads : <device(s)> <need(s)> new pads.
  • needsSoftwareUpdate : <device(s)> <need(s)> an software update.
  • needsWater : <device(s)> <need(s)> water.
  • networkProfileNotRecognized : Mi dispiace, non riconosco "<network profile>" su <device(s)>.
  • networkSpeedTestInProgress : Sto già testando la rete <network> <speed/speeds>>.
  • noAvailableApp : Ci dispiace, sembra che <nome dell'app> non sia disponibile.
  • noAvailableChannel : Sembra che il canale <nome del canale> non sia disponibile.
  • noChannelSubscription : Al momento non hai un abbonamento al canale <nome del canale>.
  • noTimerExists : Mi dispiace, sembra che non ci siano timer impostati su <device(s)>.
  • notSupported : Siamo spiacenti, questa modalità non è disponibile per <device(s)>.
  • obstructionDetected : <device(s)> ha rilevato un'ostruzione.
  • offline , deviceOffline : Sembra che <device(s)> non sia/no siano disponibili al momento.
  • onRequiresMode : Specifica la modalità che vuoi attivare.
  • passphraseIncorrect : Mi dispiace, sembra che il PIN non sia corretto.
  • percentOutOfRange : Spiacenti, non posso impostare <device(s)> su <percent>.
  • pinIncorrect : (passphraseIncorrect)
  • rainDetected : Non ho aperto <device(s)> 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 : Ci dispiace, ma sembra che si sia 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 <device o dispositivi> da remoto.
    • remoteControlOff - Questa azione è attualmente disattivata. Attiva il controllo remoto su <device(s)> e riprova.
    • childSafetyModeActive - Questa azione è disattivata per <device(s)> 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 Safety Shut-Off Mode, so <it/they>'ll have to be adjusted by hand.
  • sceneCannotBeApplied : Siamo spiacenti, non è possibile applicare <device(s)>.
  • securityRestriction : <device(s)> <has/have> a security restriction.
  • softwareUpdateNotAvailable : Siamo spiacenti, non sono disponibili aggiornamenti software per <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 : Sembra che lo stream non sia al momento disponibile da <device(s)>.
  • streamUnplayable : Mi dispiace, al momento non posso riprodurre lo stream da <device(s)>.
  • tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Fill <it/them> and try again.
  • targetAlreadyReached : Mi dispiace, sembra che questa sia già la temperatura attuale.
  • timerValueOutOfRange : <device(s)> non può essere impostato per questo periodo di tempo.
  • tooManyFailedAttempts : Mi dispiace, 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 è stato possibile localizzare <device(s)>.
  • unknownFoodPreset : <device(s)> non supporta quel programma predefinito per alimenti.
  • unlockFailure : Impossibile sbloccare <device(s)>.
  • unpausableState : Al momento non è possibile mettere in pausa <device o dispositivi>.
  • userCancelled : ok
  • valueOutOfRange : <device(s)> non può essere impostato su questa temperatura.

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 il tratto StatusReport (per i dispositivi diversi dal target) o restituendo un exceptionCode appropriato (per il dispositivo target).

Ad esempio, se il filtro della lanugine dell'asciugatrice è pieno, l'utente può comunque avviarla, ma ti consigliamo di avvisarlo di questo stato. Analogamente, quando la batteria di un dispositivo è in esaurimento, ma non è scarica, puoi comunque eseguire un comando, ma devi comunicare che la batteria è in esaurimento.

Se il comando non va a buon fine a causa di eccezioni, lo stato deve essere "EXCEPTIONS" e le eccezioni devono essere registrate utilizzando l'attributo StatusReport.

Eccezione non bloccante (SUCCESS) relativa al dispositivo di destinazione

Questo esempio è per chiudere la 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 è per l'abilitazione di un sistema di sicurezza: Ok, abilito il sistema di sicurezza. La finestra anteriore è aperta.

{
  "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 di eccezioni

Le seguenti eccezioni produrranno il TTS associato 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. Spostalo 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)> an software update.
  • needsWater : <device(s)> <need(s)> water.
  • networkJammingDetected : la connessione della rete di casa a <device(s)> non funziona correttamente.
  • noIssuesReported : <device(s)> non ha segnalato problemi.
  • 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 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.