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 o errorCode non corretta, 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.

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 alla QUERY

Il seguente snippet JSON mostra come restituire 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 o dispositivi>.
  • 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 elevata>"
  • 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 periodo di 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 <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 : La porta è aperta su <device(s)>. Chiudila 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 <l'articolo/gli articoli> 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. Sposta <l'articolo> 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 sleep mode. 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 al <device(s)> <manchi/manchino> 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 effettuato l'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, 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(s)>.
  • userCancelled : ok
  • valueOutOfRange : <device(s)> non può essere impostato 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 a uno stato 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 registra 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 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 segnalate 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. Sposta <l'articolo> 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>. 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":>