Errores y excepciones

En este documento, se enumeran las excepciones y los errores admitidos oficialmente para los dispositivos de casa inteligente. Usa estos códigos de errores y excepciones en la respuesta del intent o en las notificaciones si lo implementaste para que Asistente de Google alerte a los usuarios finales sobre problemas relacionados con un comando o estado del dispositivo determinados. Si la respuesta contiene errorCode o un formato incorrecto, Asistente de Google mostrará un mensaje de error genérico a los usuarios, por ejemplo, "Lo siento, device no está disponible en este momento".

Errores

Deberías mostrar un código de error cuando un problema cause que falle una solicitud de ejecución o consulta. Por ejemplo, si la cerradura de una puerta está atascada y no se puede trabar o destrabar, se debería mostrar un error sobre este estado al usuario.

Los códigos de error se pueden adjuntar a nivel del dispositivo o a nivel global. Por ejemplo, si un usuario tiene muchas lámparas de un proveedor y las controla un concentrador, cuando solicita que se apaguen todas las luces, el proveedor puede mostrar un error a nivel del dispositivo si una sola luz está sin conexión, o un error a nivel global si toda la unidad central está sin conexión y no se pueden controlar las luces. Si todos los dispositivos están sin conexión, no hay diferencia entre usar errores a nivel global o a nivel del dispositivo. Cuando un dispositivo no tiene conexión, debes informar el estado {"online": false} en reportState, incluso si muestras el código de error deviceOffline.

Resumen:

  • Error de nivel global: Todos los dispositivos de la respuesta tienen el mismo error.
  • Error de nivel local: respuesta mixta con casos de éxito y errores

Errores a nivel global

En el siguiente fragmento de JSON, se muestra cómo mostrar errores de nivel global en la respuesta QUERY o EXECUTE.

Un ejemplo de error de nivel global deviceOffline debido al concentrador está sin conexión:

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

Un ejemplo del error de nivel global inSoftwareUpdate debido al concentrador se está actualizando:

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

Errores a nivel del dispositivo

Respuesta de QUERY

En el siguiente fragmento de JSON, se muestra cómo se muestran los errores a nivel del dispositivo en la respuesta de QUERY.

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

respuesta EXECUTE

En el siguiente fragmento de JSON, se muestra cómo se muestran los errores a nivel del dispositivo en la respuesta 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
        }
      }
    ]
  }
}

Notificaciones con errores

Notificación proactiva

En el siguiente fragmento de JSON, se muestra cómo informar errores a nivel del dispositivo en una notificación proactiva.

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

Respuesta de seguimiento

En el siguiente fragmento de JSON, se muestra cómo informar errores a nivel del dispositivo en una respuesta de seguimiento.

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

Los siguientes errores generarán el TTS asociado en el dispositivo.

  • aboveMaximumLightEffectsDuration : El valor supera la duración máxima de 1 hora. Vuelve a intentarlo.
  • aboveMaximumTimerDuration : Solo puedo configurar <device(s)> por un máximo de <time period>
  • actionNotAvailable : Lo siento, no puedo hacer eso en este momento.
  • actionUnavailable whileRunning : <device(s)> <is/are> se está ejecutando actualmente, por lo que no puedo realizar cambios.
  • ya armado : <device(s)> <is/are> ya está activado.
  • alreadyAtMax : <device(s)> <is/are> ya se estableció en la temperatura máxima.
  • yaAtMin : <device(s)> <is/are> ya se estableció en la temperatura mínima.
  • alreadyClosed : <device(s)> <is/are> ya está cerrado.
  • alreadyDisarmed : <device(s)> <is/are> ya desactivados.
  • Ya está conectado : <dispositivo(s)> <está/está> conectado?
  • yaInState : <device(s)> <is/are> ya tiene ese estado.
  • ya bloqueado : <device(s)> <is/are> ya está bloqueado.
  • yaOff : <device(s)> <is/are> ya está apagado.
  • ya está en : <dispositivo(s)> <está/está> encendido.
  • alreadyOpen : <device(s)> <is/are> ya está abierto.
  • ya en pausa : <device(s)> <is/are> ya se pausó.
  • alreadyStarted : <device(s)> <is/are> ya se inició.
  • alreadyStopped : <device(s)> <is/are> ya se detuvo.
  • alreadyUnlocked : <device(s)> <is/are> ya desbloqueado.
  • ambiguousZoneName : Lo sentimos, <device(s)> no puede identificar a qué zona te refieres. Asegúrate de que las zonas tengan nombres únicos y vuelve a intentarlo.
  • amountAboveLimit : Eso es más de lo que <device(s)> admite.
  • appLaunchFailed : Lo sentimos, no se pudo iniciar <nombre de la app> en <dispositivo(s)>.
  • armFailure : No se pudo activar <device(s)>.
  • armLevelNeeded : No sé bien a qué nivel establecer <device(s)>. Di "Establece <dispositivo(s)> en <seguridad baja>" o "Establece <dispositivo(s)> en <seguridad alta>"
  • authFailure : No puedo establecer conexión con <device(s)>. Verifica la app para asegurarte de que <device/devices> está completamente configurado.
  • bagFull : <device(s)> <tiene> <una bolsa completa/bolsa completa>. Vacía <it/there> y vuelve a intentarlo.
  • underMinimumLightEffectsDuration : La duración mínima es inferior a 5 minutos. Vuelve a intentarlo.
  • underMinimumTimerDuration : No puedo configurar <device(s)> por tan poco tiempo. Vuelve a intentarlo.
  • binFull : <device(s)> <tiene/tiene> <un contenedor completo>.
  • cancelArmingRestricted : Lo siento, no se pudo cancelar la activación de <device(s)>.
  • cancelTooLate : Lamentablemente, ya es demasiado tarde para cancelar. En su lugar, usa <device(s)> o la app.
  • channelSwitchFailed : No se pudo cambiar al canal <channel name>. Vuelve a intentarlo más tarde.
  • Problema con el cargador : Lo sentimos, parece que <dispositivo(s)> <tiene/tiene> <un problema con el cargador o el cargador>.
  • commandInsertFailed : No se pudieron procesar comandos para <device(s)>.
  • deadBattery : <device(s)> <tiene/tiene> <baterías agotadas/baterías agotadas>.
  • degreesOutOfRange : Los grados solicitados están fuera del rango para <device(s)>.
  • deviceAlertNeedsAssistance : <device(s)> <tiene/tiene> una alerta activa y <necesita> asistencia.
  • deviceAtExtremeTemperature : <dispositivo(s)> <está> a <una temperatura extrema o temperaturas extremas>.
  • deviceBusy : Lamentablemente, parece que <device(s)> ya está realizando una acción en este momento.
  • deviceloading : Lo sentimos, parece que <device(s)> no puede realizar esa acción porque se está cargando (ha_shared.ItsThatre size=$item.devices.total_device_count).
  • deviceClogged : Lo siento, parece que <device(s)> está obstruido.
  • deviceCurrentlyDispensing : <device(s)> ya está expendiendo algo en este momento.
  • deviceDoorOpen : La puerta está abierta en <device(s)>. Ciérrala y vuelve a intentarlo.
  • deviceHandleClosed : El controlador está cerrado en <device(s)>. Ábrelo y vuelve a intentarlo.
  • deviceJammingDetected : <device(s)> <están> atascados.
  • deviceLidOpen : La tapa está abierta en <device(s)>. Ciérrala y vuelve a intentarlo.
  • deviceNeedsRepair : <device(s)> <need(s)> que debe repararse. Comunícate con el proveedor de servicios local.
  • deviceNotDocked : Lo siento, parece que <device(s)> <isn't/aren't> está conectado. Conéctala y vuelve a intentarlo.
  • deviceNotFound : <device(s)> <is/are> no está disponible. Te recomendamos que vuelvas a configurarlo.
  • deviceNotMounted : Lo sentimos, parece que <device(s)> no puede hacer eso porque <it/they> <is/are> no está activado.
  • deviceNotReady : <device(s)> <is/are>no está listo.
  • deviceStuck : <device(s)> <is/are> se atascó y necesita tu ayuda.
  • deviceTampered : <deviceTampered> <se manipuló> <deviceTampered>.
  • deviceThermalShutdown : Lo siento, parece que <device(s)> se apagó debido a temperaturas extremas.
  • directResponseOnlyUnreachable : <device(s)> <no es compatible/no> con el control remoto.
  • disarmFailure : No se pudo desactivar <device(s)>.
  • discreteOnlyOpenClose : Lo sentimos, <device(s)> solo se puede abrir o cerrar por completo.
  • dispenseAmountAboveLimit : <device(s)> no puede expender tanta cantidad.
  • dispenseAmountBelowLimit : <device(s)> no puede expender tan poca cantidad.
  • dispenseAmountrestingExceeded : <device(s)> no tiene suficiente <dispense item> para hacer eso.
  • dispenseFractionalAmountNotSupported : <device(s)> no puede dispensar fracciones de <dispense item>.
  • dispenseFractionalUnitNotSupported : <device(s)> no admite fracciones de esa unidad para <dispense item>.
  • dispenseUnitNotSupported : <device(s)> no admite esa unidad para <dispense item>.
  • portClosedTooLong : Hace tiempo que no se abre la puerta de <device(s)>. Abre la puerta, asegúrate de que haya algo adentro y vuelve a intentarlo.
  • EmergencyHeatOn : <device(s)> <is/are> está en el modo de calefactor de emergencia, por lo que <it/there> deberá ajustarse manualmente.
  • Batería defectuosa : <dispositivo(s)> <tiene/tiene> <baterías defectuosas> o baterías defectuosas>.
  • floorUnreachable : <device(s)> no puede llegar a esa habitación. Mueve <it/that> al piso correcto y vuelve a intentarlo.
  • functionNotSupported : En realidad, <device(s)> <no> admite esa funcionalidad o no lo admite.
  • GenericDispenseNotSupported : Necesito saber qué quieres dispensar. Vuelve a intentarlo con el nombre del artículo.
  • hardError : Lo siento, se produjo un error y no puedo controlar el dispositivo de la casa.
  • hardError : Lo siento, se produjo un error y no puedo controlar el dispositivo de la casa.
  • inAutoMode : <device(s)> <is/are> está configurado actualmente en el modo automático. Para cambiar la temperatura, deberás usar un modo diferente para cada una.
  • inAwayMode : <device(s)> <is/are> está establecido actualmente en el modo Ausente. Para controlar el termostato, deberás cambiarlo manualmente al modo En casa con la app de Nest en un teléfono, una tablet o una computadora.
  • inDryMode : <device(s)> <is/are> está configurado actualmente en modo seco. Para cambiar la temperatura, deberás usar un modo diferente para cada una.
  • inEcoMode : <device(s)> <is/are> está configurado actualmente en el modo Eco. Para cambiar la temperatura, deberás usar un modo diferente para cada una.
  • inFanOnlyMode : <device(s)> <is/are> está configurado en el modo solo ventilador. Para cambiar la temperatura, deberás usar un modo diferente para cada una.
  • inHeatOrCool : <device(s)> <está/no> está en modo frío/calor.
  • inHumidifierMode : <device(s)> <is/are> está configurado actualmente en el modo humidificador. Para cambiar la temperatura, deberás usar un modo diferente para cada una.
  • inOffMode : <device(s)> <is/are> está apagado. Para cambiar la temperatura, deberás cambiar <it/then> a un modo diferente.
  • inPurifierMode : <device(s)> <is/are> está configurado actualmente en el modo purificador. Para cambiar la temperatura, deberás usar un modo diferente para cada una.
  • insleepMode : <device(s)> <están> en modo de suspensión. Vuelve a intentarlo más tarde.
  • inSoftwareUpdate : <device(s)> <is/are> en este momento en una actualización de software.
  • LockFailure : No se pudo bloquear <device(s)>.
  • lockState : <device(s)> <is/are> está bloqueado actualmente.
  • lockToRange : Esa temperatura está fuera del rango bloqueado en <device(s)>.
  • Batería baja : <dispositivo(s)> <tiene> batería baja.
  • maxSettingReached : <device(s)> <is/are> ya se estableció en la configuración más alta.
  • maxSpeedReached : <device(s)> <is/are> ya se estableció en la velocidad máxima.
  • minSettingReached : <device(s)> <is/are> ya se estableció en la configuración más baja.
  • minSpeedReached : <device(s)> <is/are> ya se estableció en la velocidad mínima.
  • monitoringServiceConnectionLost : <device(s)> <haya perdido> <su> conexión con el servicio de supervisión.
  • NeedAttachment : Parece que a <device(s)> <is/are> falta un archivo adjunto necesario. Reemplázala y vuelve a intentarlo.
  • NeedsBin : Parece que a <device(s)> <is/are> falta un contenedor. Reemplázala y vuelve a intentarlo.
  • necesPads : <device(s)> <need(s)> almohadillas nuevas.
  • needsSoftwareUpdate : <device(s)> <need(s)> a software update.
  • NeedsWater : <device(s)> <need(s)> agua.
  • networkProfileNotRecognized : Lo siento, no reconozco "<network profile>" en <device(s)>.
  • networkSpeedTestInProgress : Ya estoy probando la <network> <speed/speeds>>.
  • noAvailableApp : Lamentablemente, parece que <app name> no está disponible.
  • noAvailableChannel : Lo siento, parece que el canal <channel name> no está disponible.
  • noChannelSubscription : Lo sentimos, no estás suscrito al canal <channel name> en este momento.
  • noTimerExists : Lo siento, parece que no se estableció ningún temporizador en <device(s)>.
  • no compatible : Lo sentimos, ese modo no está disponible para <device(s)>.
  • obsionDetected : <device(s)> detectó una obstrucción.
  • sin conexión , deviceOffline : Lamentablemente, parece que <device(s)> <is/are> no está disponible en este momento.
  • onRequiresMode : Especifica el modo que quieres activar.
  • frase de contraseña incorrecta : Lo siento, parece que el PIN es incorrecto.
  • percentOutOfRange : Lo siento, no puedo establecer <device(s)> en <percent>.
  • PINIncorrect : (frase de contraseñaIncorrecto)
  • lluviaDetected : No abrí <device(s)> porque se detectó lluvia.
  • rangeTooClose : Estos valores están demasiado cerca para establecer un intervalo Calor • Frío para <device(s)>. Elige temperaturas más distantes.
  • relinkRequired : Lamentablemente, parece que se produjo un error con tu cuenta. Usa la app de Google Home o la de Asistente para volver a vincular <device(s)>.
  • remoteSetDisabled :
    • Parámetro opcional errorCodeReason
    • currentlyArmed - Lo sentimos, como la seguridad ya está activada, debes usar <device(s)> o la app para realizar cambios.
    • remoteUnlockNotAllowed - Lo siento, no puedo desbloquear <device(s)> de forma remota.
    • remoteControlOff: Esa acción está inhabilitada actualmente. Habilita el control remoto en <device(s)> y vuelve a intentarlo.
    • childSafetyModeActive - Esa acción se inhabilita para <device(s)> mientras el modo de seguridad infantil está activo.
  • roomOnDifferentFloors : <device(s)> no puede acceder a esas habitaciones porque están en pisos diferentes.
  • SafetyShutOff : <device(s)> <está/están> en modo de apagado seguro, por lo que <it/they> deberá ajustarse manualmente.
  • SceneCannotBeApplied : No se puede aplicar <device(s)>.
  • securityRestriction : <device(s)> <tiene> una restricción de seguridad.
  • softwareUpdateNotAvailable : No hay una actualización de software disponible en <device(s)>.
  • startRequiresTime : Para hacerlo, deberás decirme por cuánto tiempo quieres ejecutar <device(s)>.
  • tillCoolingDown : <device(s)> <is/are> sigue enfriando.
  • thisWarmingUp : <device(s)> <está/están> calentando.
  • streamUnavailable : Lamentablemente, parece que la transmisión no está disponible en <device(s)> por el momento.
  • streamUnplayable : Lo siento, no puedo reproducir la transmisión desde <device(s)> en este momento.
  • tankEmpty : <dispositivo(s)> <tiene/tiene> <un tanque vacío o tanque vacío>. Llénalo <it/ellos> y vuelve a intentarlo.
  • targetAlreadyReached : Lamentablemente, parece que esa ya es la temperatura actual.
  • timeValueOutOfRange : No se puede establecer <device(s)> para ese período.
  • Too ManyFailedAttempts : Lamentablemente, se produjeron demasiados intentos fallidos. Para completar la acción, ve a la app de tu dispositivo.
  • transientError : Se produjo un error al controlar <device(s)>. Vuelve a intentarlo.
  • desactivado , deviceTurnedOff : <device(s)> <están> apagados en este momento.
  • withoutToLocateDevice : No pude ubicar <device(s)>.
  • knownFoodPreset : <device(s)> no admite ese ajuste predeterminado de alimentos.
  • unlockFailure : No se pudo desbloquear <device(s)>.
  • unpausableState : No se puede pausar <device(s)> en este momento.
  • userCancelled : ok
  • valueOutOfRange : No se puede establecer <device(s)> en esa temperatura.

Excepciones

Debes mostrar una excepción cuando haya un problema o una alerta asociados con un comando. El comando podría completarse con éxito o fallar.

Si el comando tuvo éxito (estado = "SUCCESS"), informa excepciones con la característica StatusReport (para dispositivos que no sean el de destino) o mostrando un exceptionCode adecuado (para el dispositivo de destino).

Por ejemplo, si la pantalla de lint de la secadora está llena, el usuario puede iniciar la secadora de todos modos, pero es posible que quieras advertirle sobre este estado. De manera similar, cuando un dispositivo tiene una batería baja que no está vacía, puedes ejecutar un comando, pero debes informarle que la batería del dispositivo está baja.

Si el comando falla debido a excepciones, el estado debe ser "EXCEPTIONS" y las excepciones deben informarse mediante la característica StatusReport.

Excepción sin bloqueo (ÉXITO) sobre el dispositivo de destino

Este ejemplo se usa para trabar la puerta:

La cerradura de la puerta principal tiene poca batería. Trabando la puerta principal

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

Excepción sin bloqueo (ÉXITO) sobre otro dispositivo que usa StatusReport

Este ejemplo se usa para activar un sistema de seguridad: Se activará el sistema de seguridad. La ventana frontal está abierta.

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

Excepción de bloqueo sobre otro dispositivo con 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 excepciones

Las siguientes excepciones generarán el TTS asociado en el dispositivo.

  • bagFull : <device(s)> <tiene> <una bolsa completa/bolsa completa>. Vacía <it/there> y vuelve a intentarlo.
  • binFull : <device(s)> <tiene/tiene> <un contenedor completo>.
  • carbonMonoxideDetected : Se detectó monóxido de carbono en <nombre de la casa>.
  • deviceAtExtremeTemperature : <dispositivo(s)> <está> a <una temperatura extrema o temperaturas extremas>.
  • deviceJammingDetected : <device(s)> <están> atascados.
  • dispositivo movido : <dispositivo(s)> <se/se movió>.
  • deviceOpen : <device(s)> <is/are> abierto.
  • deviceTampered : <deviceTampered> <se manipuló> <deviceTampered>.
  • deviceUnwired : <device(s)> <is/are> desconectado.
  • floorUnreachable : <device(s)> no puede llegar a esa habitación. Mueve <it/that> al piso correcto y vuelve a intentarlo.
  • hardwareFailure : <device(s)> <tiene o tiene> un problema de hardware.
  • inSoftwareUpdate : <device(s)> <is/are> en este momento en una actualización de software.
  • isBypassed : <device(s)> <is/are> se omitió actualmente.
  • Batería baja : <dispositivo(s)> <tiene> batería baja.
  • MotionDetected : <device(s)> <detect(s)> movimiento.
  • necesPads : <device(s)> <need(s)> almohadillas nuevas.
  • needsSoftwareUpdate : <device(s)> <need(s)> a software update.
  • NeedsWater : <device(s)> <need(s)> agua.
  • networkJammingDetected : la conexión de red doméstica a <device(s)> no funciona correctamente.
  • noIssuesReported : <device(s)> no informó ningún problema.
  • roomOnDifferentFloors : <device(s)> no puede acceder a esas habitaciones porque están en pisos diferentes.
  • runCycleFinished : <device(s)> <ha/terminado> de ejecutarse.
  • securityRestriction : <device(s)> <tiene> una restricción de seguridad.
  • fireDetected : Se detectó humo en <house name>.
  • tankEmpty : <dispositivo(s)> <tiene/tiene> <un tanque vacío o tanque vacío>. Llénalo <it/ellos> y vuelve a intentarlo.
  • usingcellBackup : <device(s)> <is/are> usando respaldo celular.
  • waterLeakDetected : <device(s)> <detecta(s)> una fuga de agua.