Erros e exceções

Este documento lista os erros e exceções oficialmente compatíveis com dispositivos de casa inteligente. Use esses erros e códigos de exceção na resposta da intent ou nas notificações (link em inglês), se você as tiver implementado. Dessa forma, o Google Assistente alerta os usuários finais sobre problemas relacionados a um determinado comando ou estado do dispositivo. Se a resposta tiver formatação incorreta ou errorCode, o Google Assistente mostrará ao usuário uma mensagem de erro genérica, por exemplo, "O device não está disponível no momento".

Erros

Você precisará retornar um código de erro quando um problema fizer com que uma solicitação de execução ou consulta falhe. Por exemplo, se uma fechadura estiver emperrada e não puder ser trancada ou destrancada, um erro sobre esse estado será retornado ao usuário.

Os códigos de erro podem ser anexados no nível do dispositivo ou global. Por exemplo, se um usuário tiver muitas luzes de um provedor e for controlado por um hub, quando o usuário pedir para apagar todas as luzes, o provedor poderá retornar um erro no nível do dispositivo se uma única luz estiver off-line ou um erro de nível global se todo o hub estiver off-line e nenhuma luz puder ser controlada. Se todos os dispositivos estiverem off-line, não haverá diferença entre usar erros de nível global ou de dispositivo. Quando um dispositivo está off-line, é necessário informar o estado {"online": false} em reportState mesmo que você retorne o código de erro deviceOffline.

Resumindo:

  • Erro de nível global: todos os dispositivos na resposta têm o mesmo erro
  • Erro no nível local: resposta mista com casos de erro e sucesso

Erros de nível global

O snippet JSON a seguir mostra como retornar erros de nível global na resposta QUERY ou EXECUTE.

Um exemplo do erro de nível global deviceOffline porque o hub está off-line:

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

Um exemplo do erro de nível global inSoftwareUpdate devido ao hub está sendo atualizado:

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

Erros no dispositivo

Resposta de QUERY

O snippet JSON abaixo mostra como retornar erros no nível do dispositivo na resposta da QUERY.

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

EXECUTAR resposta

O snippet JSON abaixo mostra como retornar erros no nível do dispositivo na resposta 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
        }
      }
    ]
  }
}

Notificações com erros

Notificação proativa

O snippet JSON a seguir mostra como informar erros no nível do dispositivo em uma notificação proativa.

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

Resposta de acompanhamento

O snippet JSON a seguir mostra como informar erros no dispositivo em uma resposta de acompanhamento.

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

Lista de erros

Os erros a seguir produzirão o TTS associado no dispositivo.

  • aboveMaximLightEffectsDuration : É mais do que a duração máxima de 1 hora. Tente de novo.
  • aboveMaximTimerDuration : Só posso definir <device(s)> por até <time period>
  • actionNotAvailable : Desculpe, não consigo fazer isso no momento.
  • actionUnavailablewhileRunning : <device(s)> <is/are> em execução no momento, por isso não posso fazer nenhuma mudança.
  • alreadyArmed : <device(s)> <is/are> já armados.
  • alreadyAtMax : <device(s)> <is/are> já está definido para a temperatura máxima.
  • alreadyAtMin : <device(s)> <is/are> já configurado para a temperatura mínima.
  • já fechado : <device(s)> <is/are> já fechados.
  • alreadyDisarmed : <device(s)> <is/are> já desligados.
  • alreadyDocked : <device(s)> <is/are> já na base.
  • alreadyInState : <device(s)> <is/are> já neste estado.
  • já bloqueados : <device(s)> <is/are> já bloqueados.
  • alreadyOff : <device(s)> <is/are> já desligados.
  • alreadyOn : <device(s)> <is/are> já ligados.
  • jáOpen : <device(s)> <is/are> já abertos.
  • jáEm pausa : <device(s)> <is/are> já pausados.
  • alreadyStarted : <device(s)> <is/are> já iniciados.
  • jáSstop : <device(s)> <is/are> já parados.
  • alreadyUnlocked : <device(s)> <is/are> já desbloqueados.
  • ambZoneName : O <device(s)> não conseguiu identificar a zona que você quis dizer. Verifique se as zonas têm nomes exclusivos e tente de novo.
  • amountAboveLimit : Isso é mais do que <device(s)> é capaz de suportar.
  • appLaunchFailed : Não foi possível iniciar o <app name> nos <device(s)>.
  • armFailure : <device(s)> não foi possível ligar.
  • armLevelNeeded : Não sei em que nível definir <device(s)>. Diga "Definir <dispositivos> como <baixa segurança>" ou "Definir <dispositivos(s)> como <alta segurança>"
  • authFailure : Não consigo acessar <device(s)>. Verifique o app para verificar se seus <device/devices> <está/estão> totalmente configurados.
  • bagFull : <device(s)> <tem/tem> <sacola cheia/sacos cheios>. Esvazie <it/them> e tente novamente.
  • belowMinimumLightEffectsDuration : É menos do que a duração mínima de cinco minutos. Tente de novo.
  • belowMinimumTimerDuration : Não consigo definir <device(s)> por um período tão curto. Tente de novo.
  • binFull : <device(s)> <has/have> <a full bin/full bins>.
  • cancelArmingRestricted : Não foi possível cancelar a ativação de <device(s)>.
  • cancelTooLate : Ainda dá tempo de cancelar. Use <device(s)> ou o app.
  • channelSwitchFailed : Falha ao alternar para o canal <nome do canal>. Tente novamente mais tarde.
  • problema do carregador : Parece que <device(s)> <tem/tem> <um problema no carregador/problemas no carregador>.
  • commandInsertFailed : não foi possível processar comandos para <device(s)>.
  • deadBattery : <device(s)> <tem/têm> <pilha descarregada/baterias sem carga>.
  • degreeOutOfRange : Os graus solicitados estão fora do intervalo para <device(s)>.
  • deviceAlertNeedsAssistance : <device(s)> <tem/têm> um alerta ativo e <precisa(s)> da sua assistência.
  • deviceAtExtremeTemperature : <device(s)> <está/estão> a <uma temperatura extrema/temperaturas extremas>.
  • deviceBusy : Parece que <device(s)> já está fazendo algo no momento.
  • devicecarregamento : Parece que <device(s)> não consegue fazer isso porque (ha_shared.ItsArere size=$item.devices.total_device_count) está carregando.
  • deviceClogged : Parece que <device(s)> está entupido.
  • deviceCurrentDispensing : <device(s)> já está liberando algo no momento.
  • deviceDoorOpen : A porta está aberta em <device(s)>. Feche e tente novamente.
  • deviceHandleClosed : A alça está fechada em <device(s)>. Abra-a e tente novamente.
  • deviceJammingDetected : <device(s)> <está/estão> emperrados.
  • deviceLidOpen : A tampa está aberta em <device(s)>. Feche e tente novamente.
  • deviceNeedsRepair : <device(s)> <need(s)> de reparo. Entre em contato com ela.
  • deviceNotDocked : Parece que o dispositivo <device(s)> <isn't/aren't> está na base. Coloque <it/them> na base e tente de novo.
  • deviceNotFound : <device(s)> <is/are>não está disponível. Tente configurar <it/them> de novo.
  • deviceNotMounted : Parece que <device(s)> não pode fazer isso porque <it/they> <não/está> montado.
  • deviceNotReady : <device(s)> <is/are>não estão prontos.
  • deviceStuck : <device(s)> <is/are> travados e precisa da sua ajuda.
  • deviceTampered : <device(s)> <foi/foram> adulterado.
  • deviceThermalShutdown : Parece que <device(s)> foi desligado devido a temperaturas extremas.
  • directResponseOnlyUnreachable : <device(s)> <não/não> é compatível com o controle remoto.
  • disarmFailure : <device(s)> não foi possível desligar.
  • discreteOnlyOpenClose : Não é possível abrir ou fechar totalmente os <device(s)>.
  • dispenseAmountAboveLimit : <device(s)> não pode liberar uma quantidade tão grande.
  • dispenseAmountBelowLimit : <device(s)> não pode liberar uma quantidade tão pequena.
  • dispenseAmountAmountOvered : <device(s)> não tem <dispense item> suficiente para fazer isso.
  • dispenseFractionalAmountNotSupported : O <device(s)> não pode liberar frações de <dispense item>.
  • dispenseFractionalUnitNotsupported : <device(s)> não é compatível com frações dessa unidade para <dispense item>.
  • dispenseUnitNotsupported : <device(s)> não é compatível com essa unidade para <disense item>.
  • doorClosedTooLong : Já faz algum tempo que a porta de <device(s)> está aberta. Abra a porta, confira se tem algo dentro e tente de novo.
  • hourHeatOn de emergência : <device(s)> <está/are> no modo de aquecimento de emergência, portanto, <it/eles> precisam ser ajustados manualmente.
  • faultyBattery : <device(s)> <tem/têm> <uma bateria com defeito/baterias com defeito>.
  • floorUnreachable : <device(s)> não consegue chegar a esse ambiente. Mova <it/them> para o andar certo e tente novamente.
  • functionNotsupported : Na verdade, <device(s)> <não/não> oferecem suporte a essa funcionalidade.
  • generalDispenseNotsupported : Preciso saber o que você quer oferecer. Tente novamente com o nome do item.
  • hardError : Algo deu errado e não consigo controlar seu dispositivo doméstico.
  • hardError : Algo deu errado e não consigo controlar seu dispositivo doméstico.
  • inAutoMode : <device(s)> <is/are> no momento no modo automático. Para mudar a temperatura, é preciso alternar <it/them> para um modo diferente.
  • inAwayMode : <device(s)> <is/are> no momento no modo ausente. Para controlar o termostato, alterne manualmente para o modo "Em casa" usando o app Nest em um smartphone, tablet ou computador.
  • inDryMode : <device(s)> <is/are> no momento no modo desumidificador. Para mudar a temperatura, é preciso alternar <it/them> para um modo diferente.
  • inEcoMode : <device(s)> <is/are> no momento no modo econômico. Para mudar a temperatura, é preciso alternar <it/them> para um modo diferente.
  • inFanOnlyMode : <device(s)> <is/are> no momento no modo ventilador. Para mudar a temperatura, é preciso alternar <it/them> para um modo diferente.
  • inHeatOrCool : <device(s)> <está/estão>não no modo Aquecer/Resfriar.
  • inHumidifierMode : <device(s)> <is/are> no momento no modo umidificador. Para mudar a temperatura, é preciso alternar <it/them> para um modo diferente.
  • inOffMode : <device(s)> <is/are> desligados no momento. Para mudar a temperatura, você precisa alternar <it/them> para um modo diferente.
  • inPurifierMode : <device(s)> <is/are> no momento no modo purificador. Para mudar a temperatura, é preciso alternar <it/them> para um modo diferente.
  • inSleepMode : <device(s)> <is/are> no modo de espera. Tente de novo mais tarde.
  • inSoftwareUpdate : <device(s)> <is/are> em uma atualização de software.
  • lockFailure : não foi possível bloquear <device(s)>.
  • lockState : <device(s)> <is/are> bloqueado no momento.
  • lockToRange : Essa temperatura está fora do intervalo determinado em <device(s)>.
  • lowBattery : <device(s)> <tem/têm> bateria fraca.
  • maxSettingReached : <device(s)> <is/are> já está definido para a configuração mais alta.
  • maxSpeedReached : <device(s)> <is/are> já está definido para a velocidade máxima.
  • minSettingReached : <device(s)> <is/are> já está definido para a configuração mais baixa.
  • minSpeedReached : <device(s)> <is/are> já está definido para a velocidade mínima.
  • monitoringServiceConnectionLost : <device(s)> <has/have> perdeu <its/your> conexão com o serviço de monitoramento.
  • needAttachment : Parece que <device(s)> <is/are> não tem um anexo obrigatório. Substitua e tente novamente.
  • needBin : Parece que falta uma lixeira em <device(s)> <is/are>. Substitua e tente novamente.
  • needPads : <device(s)> <need(s)> novos pads.
  • needSoftwareUpdate : <device(s)> <precisa(s)> de uma atualização de software.
  • needWater : <device(s)> <need(s)> água.
  • networkProfileNotRecognitiond : Não reconheço "<network profile>" em <device(s)>.
  • networkSpeedTestInProgress : Já estou testando a <network> <speed/speeds>>.
  • noAvailableApp : Parece que <app name> não está disponível.
  • noAvailableChannel : Parece que o canal <channel name> não está disponível.
  • noChannelSubscription : Você não está inscrito no canal <channel name> no momento.
  • noTimerExists : Parece que não há nenhum timer definido em <device(s)>.
  • notsupported : Esse modo não está disponível para <device(s)>.
  • obstruçãoDetected : <device(s)> detectou uma obstrução.
  • offline , deviceoffline : Parece que <device(s)> <não/não está disponível no momento.
  • onRequiresMode : Especifique qual modo você quer ativar.
  • senha longa incorreta : Parece que esse PIN está incorreto.
  • percentOutOfRange : Não consigo definir <device(s)> como <percent>.
  • PINIncorreto : (senha incorreta)
  • rainDetected : Não abri <device(s)> porque foi detectada chuva.
  • rangeTooClose : Essas temperaturas estão muito próximas para um intervalo de calor/frio para <device(s)>. Escolha temperaturas mais distantes entre si.
  • relinkRequired : Parece que algo deu errado com sua conta. Use o app Google Home ou Google Assistente para vincular <device(s)> novamente.
  • remoteSetDisabled :
    • Parâmetro opcional errorCodeReason
    • currentlyArmed - Como a segurança já está ativada, você precisa usar <device(s)> ou o app para fazer alterações.
    • remoteUnlockNotAllowed - Desculpe, não consigo desbloquear <device(s)> remotamente.
    • remoteControlOff - Essa ação está desativada no momento. Ative o controle remoto em <device(s)> e tente novamente.
    • childSafetyModeActive - Essa ação será desativada para <device(s)> enquanto o modo de segurança infantil estiver ativo.
  • roomsOnDifferentFloors : <device(s)> não consegue acessar esses ambientes porque eles estão em andares diferentes.
  • safetyShutOff : <device(s)> <está/estão> no modo de desligamento de segurança, então <it/eles> precisarão ser ajustados manualmente.
  • SceneCannotBeApplied : Infelizmente, <device(s)> não pode(m) ser aplicado.
  • securityRestriction : <device(s)> <tem/têm> uma restrição de segurança.
  • softwareUpdateNotAvailable : Não há nenhuma atualização de software disponível para <device(s)>.
  • startRequiresTime : Para fazer isso, você precisa me dizer por quanto tempo você gostaria de executar <device(s)>.
  • aindaCoolingDown : <device(s)> <is/are> ainda em resfriamento.
  • tillWarmingUp : <device(s)> <is/are> ainda aquecendo.
  • streamUnavailable : Parece que a transmissão está indisponível em <device(s)>.
  • streamUnplayable : Não consigo reproduzir a transmissão de <device(s)> no momento.
  • tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Encha <it/them> e tente novamente.
  • targetAlreadyReached : Parece que essa já é a temperatura atual.
  • timerValueOutOfRange : <device(s)> não pode ser definido por esse período.
  • Too ManyFailedAttempts : Infelizmente muitas tentativas com falha. Acesse o app do dispositivo para concluir essa ação.
  • transitientError : Algo deu errado ao controlar <device(s)>. Tente novamente.
  • desativado , deviceTurnedOff : <device(s)> <is/are> desligados no momento.
  • ableToLocateDevice : Não foi possível localizar <device(s)>.
  • unknownFoodPreset : <device(s)> não é compatível com essa predefinição para alimentos.
  • UnlockFailure : <device(s)> não pôde ser desbloqueado.
  • unpausableState : <device(s)> não pode ser pausado no momento.
  • userCancelled : ok
  • valueOutOfRange : <device(s)> não pode ser definido para essa temperatura.

Exceções

Você precisará retornar uma exceção quando houver um problema ou alerta associado a um comando. O comando pode funcionar ou falhar.

Se o comando tiver sido bem-sucedido (status = "SUCCESS"), informe exceções usando a característica StatusReport (para dispositivos diferentes do destino) ou retornando um exceptionCode apropriado (para o dispositivo de destino).

Por exemplo, se a tela de lint da secadora estiver cheia, o usuário ainda poderá iniciar a secadora, mas talvez você queira avisar sobre esse estado. Da mesma forma, quando um dispositivo tem a bateria fraca que não está descarregada, ainda é possível executar um comando, mas é necessário informar que a bateria do dispositivo está baixa.

Se o comando falhar devido a exceções, o status vai ser "EXCEPTIONS", e as exceções precisam ser informadas usando a característica StatusReport.

Exceção sem bloqueio (SUCCESS) no dispositivo de destino

Este exemplo é para trancar a porta:

A trava da porta da frente está com a bateria fraca. Trancando a porta da frente.

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

Exceção sem bloqueio (SUCESSO) sobre outro dispositivo que usa StatusReport

Este exemplo é para ligar um sistema de segurança: Ok, ligando o sistema de segurança. A janela da frente está aberta.

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

Exceção de bloqueio sobre outro dispositivo usando o 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"
          }
        ]
      }
    }
  }
}

Lista de exceções

As exceções a seguir produzirão o TTS associado no dispositivo.

  • bagFull : <device(s)> <tem/tem> <sacola cheia/sacos cheios>. Esvazie <it/them> e tente novamente.
  • binFull : <device(s)> <has/have> <a full bin/full bins>.
  • carbonMonoxideDetected : Monóxido de carbono foi detectado em <nome da casa>.
  • deviceAtExtremeTemperature : <device(s)> <está/estão> a <uma temperatura extrema/temperaturas extremas>.
  • deviceJammingDetected : <device(s)> <está/estão> emperrados.
  • dispositivo movido : <device(s)> <was/were> movido.
  • deviceOpen : <device(s)> <is/are> abertos.
  • deviceTampered : <device(s)> <foi/foram> adulterado.
  • deviceUnplugged : <device(s)> <está/estão> desconectados.
  • floorUnreachable : <device(s)> não consegue chegar a esse ambiente. Mova <it/them> para o andar certo e tente novamente.
  • hardwareFailure : <device(s)> <tem/têm> um problema de hardware.
  • inSoftwareUpdate : <device(s)> <is/are> em uma atualização de software.
  • isBypassed : <device(s)> <is/are> ignorados no momento.
  • lowBattery : <device(s)> <tem/têm> bateria fraca.
  • motionDetected : <device(s)> <detect(s)> motion.
  • needPads : <device(s)> <need(s)> novos pads.
  • needSoftwareUpdate : <device(s)> <precisa(s)> de uma atualização de software.
  • needWater : <device(s)> <need(s)> água.
  • networkJammingDetected : a conexão de rede doméstica com <device(s)> não está funcionando corretamente.
  • noIssuesReported : <device(s)> não relatou problemas.
  • roomsOnDifferentFloors : <device(s)> não consegue acessar esses ambientes porque eles estão em andares diferentes.
  • runCycleFinished : <device(s)> <has/have> terminou de executar.
  • securityRestriction : <device(s)> <tem/têm> uma restrição de segurança.
  • fumaçaDetected : Fumaça foi detectada em <nome da casa>.
  • tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Encha <it/them> e tente novamente.
  • usingCellularBackup : <device(s)> <is/are> usando o backup celular.
  • WaterLeakDetected : <device(s)> <detect(s)> um vazamento de água.