Este documento lista os erros e exceções oficialmente compatíveis para dispositivos
de casa inteligente. Use esses códigos de erros e exceções na resposta
da intent ou em notificações
se você tiver implementado isso. Assim, 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 vai mostrar aos usuários uma mensagem de erro genérica, por exemplo, "Desculpe, o dispositivo não está disponível no momento".
Erros
Retorne um código de erro quando um problema causar a falha de uma solicitação de execução ou consulta. Por exemplo, se uma fechadura estiver travada e não puder ser trancada ou destrancada, um erro sobre esse estado deverá 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 controladas por um hub, quando ele pedir para desligar todas as luzes, o provedor poderá retornar um erro no nível do dispositivo se uma única luz estiver off-line ou um erro 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 no nível global ou no nível do dispositivo.
Resumindo:
- Erro 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 no nível global
O snippet JSON a seguir mostra como retornar erros globais em uma resposta QUERY ou EXECUTE.
Um exemplo de erro global deviceOffline
devido ao hub é
offline:
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "errorCode": "deviceOffline", "status" : "ERROR" } }
Um exemplo de erro global inSoftwareUpdate
devido ao hub é
a atualização:
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "errorCode": "inSoftwareUpdate", "status" : "ERROR" } }
Erros no nível do dispositivo
Resposta de QUERY
O snippet JSON a seguir mostra como retornar erros no nível do dispositivo na resposta QUERY.
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "devices": { "device-id-1": { "errorCode": "deviceOffline", "status" : "ERROR" }, "device-id-2": { "errorCode": "deviceOffline", "status" : "ERROR" } } } }
Resposta EXECUTE
O snippet JSON a seguir 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 nível do 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 vão produzir a TTS associada no dispositivo.
- aboveMaximumLightEffectsDuration : É mais do que a duração máxima de uma hora. Tente de novo.
- aboveMaximumTimerDuration : Só posso definir <device(s)> por até <time period>
- actionNotAvailable : Não consigo fazer isso no momento.
- 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> já definido para a temperatura máxima.
- alreadyAtMin : <device(s)> <is/are> já definido para a temperatura mínima.
- alreadyClosed : Os <dispositivo(s)> já estão fechados.
- alreadyDisarmed : <device(s)> <is/are> already disarmed.
- alreadyDocked : <device(s)> <is/are> already docked.
- alreadyInState : <device(s)> <is/are> already in that state.
- alreadyLocked : Os <dispositivo(s)> já estão bloqueados.
- alreadyOff : Os <dispositivo(s)> já estão desligados.
- alreadyOn : O<dispositivo(s)> já <está/estão> ligado(s).
- alreadyOpen : Os<dispositivo(s)> já <estão/está> abertos.
- alreadyPaused : <device(s)> <is/are> already paused.
- alreadyStarted : <device(s)> <is/are> já iniciados.
- alreadyStopped : Os<dispositivo(s)> já <estão/está> desativados.
- alreadyUnlocked : <device(s)> <is/are> already unlocked.
- ambiguousZoneName : Desculpe, <device(s)> não consegue identificar a zona a que você se refere. Confira se elas têm nomes exclusivos e tente de novo.
- amountAboveLimit : É mais do que <device(s)> pode suportar.
- appLaunchFailed : Não foi possível iniciar o <nome do app> em <dispositivo(s)>.
- armFailure : Não foi possível ativar <device(s)>.
- armLevelNeeded : Não sei em que nível definir <device(s)>. Diga "Definir <dispositivo(s)> como <segurança baixa>" ou "Definir <dispositivo(s)> como <segurança alta>"
- authFailure : Não estou conseguindo acessar <device(s)>. Verifique o app para confirmar se <device/devices> <is/are> totalmente configurado(s).
- bagFull : <device(s)> <has/have> <a full bag/full bags>. Please empty <it/them> and try again.
- belowMinimumLightEffectsDuration : É menos do que a duração mínima de cinco minutos. Tente de novo.
- belowMinimumTimerDuration : Não é possível 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 o arme <device(s)>.
- cancelTooLate : É tarde demais para cancelar. Use <device(s)> ou o app.
- channelSwitchFailed : Não foi possível mudar para o canal <nome do canal>. Tente de novo mais tarde.
- chargerIssue : Parece que <device(s)> <has/have> <a charger issue/charger issues>.
- commandInsertFailed : Não foi possível processar comandos para <device(s)>.
- deadBattery : <device(s)> <has/have> <a dead battery/dead batteries>.
- degreesOutOfRange : Os graus solicitados estão fora do alcance de <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 : O <device(s)> está fazendo outra coisa no momento.
- deviceCharging : Parece que <device(s)> não consegue fazer isso porque (ha_shared.ItsTheyre size=$item.devices.total_device_count) carregando.
- deviceClogged : O <dispositivo(s)> está entupido.
- deviceCurrentlyDispensing : O<device(s)> já está liberando algo no momento.
- deviceDoorOpen : A porta está aberta em <dispositivo(s)>. Feche e tente de novo.
- deviceHandleClosed : A alça está fechada em <device(s)>. Abra e tente de novo.
- deviceJammingDetected : <device(s)> <is/are> jammed.
- deviceLidOpen : A tampa está aberta em <dispositivo(s)>. Feche e tente de novo.
- deviceNeedsRepair : <device(s)> <need(s)> to be repaired. Entre em contato com o provedor de serviços local.
- deviceNotDocked : O <dispositivo(s)> <não está/não estão> na base. Coloque <it/them> na base e tente de novo.
- deviceNotFound : Os <device(s)> não estão disponíveis. Tente configurar <it/them> novamente.
- deviceNotMounted : Parece que <device(s)> não pode fazer isso porque <it/they> <is/are>n't mounted.
- deviceNotReady : <device(s)> <is/are>n't ready.
- deviceStuck : <device(s)> <is/are> preso e precisa da sua ajuda.
- deviceTampered : <device(s)> <has/have> been tampered with.
- deviceThermalShutdown : Parece que <device(s)> foram desligados devido a temperaturas extremas.
- directResponseOnlyUnreachable : <device(s)> <doesn't/don't> support remote control.
- disarmFailure : Não foi possível desativar <device(s)>.
- discreteOnlyOpenClose : Em <device(s)>, só é possível abrir ou fechar completamente.
- dispenseAmountAboveLimit : <device(s)> não pode liberar uma quantidade tão grande.
- dispenseAmountBelowLimit : <device(s)> não libera pequenas quantidades.
- dispenseAmountRemainingExceeded : <device(s)> não tem <dispense item> suficiente para fazer isso.
- dispenseFractionalAmountNotSupported : <device(s)> não pode dispensar frações de <dispense item>.
- dispenseFractionalUnitNotSupported : Os <device(s)> não são compatíveis com frações dessa unidade para <dispense item>.
- dispenseUnitNotSupported : <device(s)> não aceita essa unidade para <dispense item>.
- doorClosedTooLong : Já faz um tempo que a porta do(s) <device(s)> está aberta. Abra a porta, confira se há algo dentro do micro-ondas e tente novamente.
- 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 : Os <device(s)> não chegam a esse ambiente. Coloque <it/them> no andar certo e tente de novo.
- functionNotSupported : Na verdade, <device(s)> <doesn't/don't> support that functionality.
- genericDispenseNotSupported : Preciso saber o que você quer dispensar. Tente de novo com o nome do item.
- hardError : Ocorreu um erro e não consigo controlar seu dispositivo doméstico.
- hardError : Ocorreu um erro e não consigo controlar seu dispositivo doméstico.
- inAutoMode : <device(s)> <is/are> atualmente definido como modo automático. Para mudar a temperatura, escolha outra opção.
- inAwayMode : <device(s)> <is/are> atualmente configurado no modo ausente. Para controlar seu termostato, escolha o modo "Em casa" manualmente usando o app Nest em um smartphone, tablet ou computador.
- inDryMode : <device(s)> <is/are> currently set to dry mode. Para mudar a temperatura, escolha outra opção.
- inEcoMode : <device(s)> <is/are> currently set to eco mode. Para mudar a temperatura, escolha outra opção.
- inFanOnlyMode : <device(s)> <is/are> currently set to fan-only mode. Para mudar a temperatura, escolha outra opção.
- inHeatOrCool : <device(s)> <is/are>n't in heat/cool mode.
- inHumidifierMode : <device(s)> <is/are> currently set to humidifier mode. Para mudar a temperatura, escolha outra opção.
- 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. Para mudar a temperatura, escolha outra opção.
- inSleepMode : <device(s)> <is/are> in sleep mode. Tente novamente mais tarde.
- inSoftwareUpdate : <device(s)> <is/are> currently in a software update.
- lockFailure : Não foi possível bloquear <device(s)>.
- lockedState : <device(s)> <is/are> currently locked.
- lockedToRange : Essa temperatura está fora do intervalo determinado em <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> já está(ão) definido(s) na velocidade máxima.
- minSettingReached : <device(s)> <is/are> já estão definidos como a configuração mais baixa.
- minSpeedReached : Os<dispositivo(s)> <já estão/está> definidos na velocidade mínima.
- monitoringServiceConnectionLost : <device(s)> <has/have> lost <its/their> connection to the monitoring service.
- needsAttachment : Parece que <device(s)> <is/are> sem um acessório obrigatório. Substitua e tente de novo.
- needsBin : Parece que <device(s)> <is/are> sem um recipiente. Substitua e tente de novo.
- needsPads : <device(s)> <need(s)> novos protetores.
- needsSoftwareUpdate : <device(s)> <need(s)> uma atualização de software.
- needsWater : <device(s)> <need(s)> água.
- networkProfileNotRecognized : Não reconheço "<perfil de rede>" em <dispositivo(s)>.
- networkSpeedTestInProgress : Já estou testando a <velocidade/velocidades> de <rede>.
- noAvailableApp : Desculpe, parece que o <nome do app> não está disponível.
- noAvailableChannel : Desculpe, parece que o canal <channel name> não está disponível.
- noChannelSubscription : Você não tem uma assinatura ativa do canal <channel name> no momento.
- noTimerExists : Parece que não há nenhum timer configurado em <device(s)>.
- notSupported : Esse modo não está disponível para <device(s)>.
- obstructionDetected : <device(s)> detectou uma obstrução.
- offline , deviceOffline : Parece que <device(s)> <is/are>n't disponível no momento.
- onRequiresMode : Especifique qual modo você quer ativar.
- passphraseIncorrect : Parece que o PIN está incorreto.
- percentOutOfRange : Não é possível definir <device(s)> como <percent>.
- pinIncorrect : (passphraseIncorrect)
- rainDetected : Não abri <device(s)> porque detectei chuva.
- rangeTooClose : Esses valores estão próximos demais para um intervalo de aquecer/refrigerar de <device(s)>. Escolha temperaturas mais distantes entre si.
- relinkRequired : Ocorreu um erro com sua conta. Use o app Google Home ou Google Assistente para vincular <device(s)> novamente.
-
remoteSetDisabled
:
- Parâmetro opcional
errorCodeReason
currentlyArmed
- Como o sistema de segurança já está ligado, você precisa usar <device(s)> ou o app para fazer alterações.remoteUnlockNotAllowed
- Sorry, I can't unlock <device(s)> remotely.remoteControlOff
- Essa ação está desativada no momento. Ative o controle remoto em <device(s)> e tente de novo.childSafetyModeActive
- Essa ação está desativada para <device(s)> enquanto o modo de segurança infantil está ativo.
- Parâmetro opcional
- roomsOnDifferentFloors : <device(s)> não chega a esses cômodos porque eles ficam em andares diferentes.
- safetyShutOff : <device(s)> <is/are> no modo de desativação de segurança. Por isso, <it/they> precisam ser ajustados manualmente.
- sceneCannotBeApplied : Não é possível aplicar <device(s)>.
- securityRestriction : <device(s)> <has/have> a security restriction.
- softwareUpdateNotAvailable : Não há atualizações de software disponíveis para <device(s)>.
- startRequiresTime : Para fazer isso, me diga por quanto tempo você quer que <device(s)> funcione.
- stillCoolingDown : <device(s)> <is/are> ainda estão esfriando.
- stillWarmingUp : <device(s)> <is/are> still warming up.
- streamUnavailable : Parece que o streaming não está disponível no momento em <device(s)>.
- streamUnplayable : Não consigo mostrar o streaming de <device(s)> no momento.
- tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Please fill <it/them> and try again.
- targetAlreadyReached : Parece que essa já é a temperatura atual.
- timerValueOutOfRange : Não é possível definir <device(s)> para esse período.
- tooManyFailedAttempts : Excesso de tentativas falhas. Acesse o app do dispositivo para concluir a ação.
- transientError : Algo deu errado ao controlar <device(s)>. Tente de novo.
- turnedOff , deviceTurnedOff : <device(s)> <is/are> off right now.
- unableToLocateDevice : Não foi possível localizar <device(s)>.
- unknownFoodPreset : O <device(s)> não é compatível com essa predefinição para alimentos.
- unlockFailure : Não foi possível desbloquear <device(s)>.
- unpausableState : Não é possível pausar <device(s)> no momento.
- userCancelled : ok
- valueOutOfRange : Não é possível definir <device(s)> para essa temperatura.
Relatórios de estado on-line e off-line
Quando um dispositivo estiver off-line, informe <code{"online": code="" dir="ltr" false}<="" translate="no"> para Report State em até cinco minutos após o comportamento do dispositivo. Por outro lado, quando um dispositivo volta a ficar on-line, você precisa informar <code{"online": code="" dir="ltr" translate="no" true}<=""> para Report State em até cinco minutos após o comportamento do dispositivo. Sempre que um dispositivo volta a ficar on-line, o parceiro precisa informar todos os estados atuais do dispositivo usando a APIreportStateAndNotification
.
Este exemplo mostra que um tipo de dispositivo light
está on-line e informa
todos os estados atuais do dispositivo.
"requestId": "test-request-id",
"agentUserId": "agent-user-1",
"payload":{
"devices": {
"states": {
"device-id-1": {
"brightness": 65,
"on": true,
"online": true
}
"notifications": {},
}
}
}
Exceções
Retorne uma exceção quando houver um problema ou alerta associado a um comando. O comando pode ser concluído ou falhar.
Se o comando for bem-sucedido (status = "SUCCESS"), informe as exceções
usando a característica StatusReport
(para dispositivos que não são o destino)
ou retornando um exceptionCode
apropriado (para o dispositivo de destino).
Por exemplo, se o filtro de fiapos da secadora estiver cheio, o usuário ainda poderá iniciar a secadora, mas talvez seja bom avisá-lo sobre isso. Da mesma forma, quando um dispositivo tem uma bateria fraca, mas não está descarregada, você ainda pode executar um comando, mas precisa informar que a bateria está fraca.
Se o comando falhar devido a exceções, o status será "EXCEPTIONS",
e as exceções serão informadas usando a característica StatusReport
.
Exceção não bloqueadora (SUCCESS) sobre o dispositivo de destino
Este exemplo é para trancar a porta:
A bateria da fechadura da porta da frente está 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 (SUCCESS) sobre outro dispositivo usando StatusReport
Este exemplo é para ativar um sistema de segurança: Ok, ativando 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 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 seguintes exceções vão produzir a TTS associada no 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 : Monóxido de carbono foi detectado em <house name>.
- 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 : Os <device(s)> não chegam a esse ambiente. Coloque <it/them> no andar certo e tente de novo.
- hardwareFailure : <device(s)> <has/have> a hardware problem.
- inSoftwareUpdate : <device(s)> <is/are> currently in a software update.
- isBypassed : <device(s)> <is/are> atualmente ignorados.
- lowBattery : <device(s)> <has/have> low battery.
- motionDetected : <device(s)> <detect(s)> movimento.
- needsPads : <device(s)> <need(s)> novos protetores.
- needsSoftwareUpdate : <device(s)> <need(s)> uma atualização de software.
- needsWater : <device(s)> <need(s)> água.
- networkJammingDetected : A conexão entre a rede doméstica e <device(s)> não está funcionando corretamente.
- noIssuesReported : <device(s)> não reportou problemas.
- roomsOnDifferentFloors : <device(s)> não chega a esses cômodos porque eles ficam em andares diferentes.
- runCycleFinished : <device(s)> <has/have> finished running.
- securityRestriction : <device(s)> <has/have> a security restriction.
- smokeDetected : Fumaça foi detectada em <nome da 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)> um vazamento de água.