Errores y excepciones

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

Errores

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

Los códigos de error se pueden adjuntar a nivel del dispositivo o a nivel global. Por ejemplo, si un usuario tiene muchas luces de un proveedor y se controla mediante un concentrador, cuando el usuario solicite apagar todas las luces, el proveedor puede mostrar un error a nivel del dispositivo si una sola luz está sin conexión, o un error de nivel global si todo el concentrador está sin conexión y no se puede controlar ninguna luz. 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 está sin conexión, debes informar el estado {"online": false} en reportState, incluso si muestras el código de error deviceOffline.

En resumen, haz lo siguiente:

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

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.

Este es un ejemplo de error de nivel global deviceOffline que se debe a que el concentrador está sin conexión:

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

Este es un ejemplo de error de nivel global inSoftwareUpdate debido a la actualización del concentrador:

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

En el siguiente fragmento de JSON, se muestra cómo mostrar 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 producirán el TTS asociado en el dispositivo.

  • TopLightEffectsDuration : El valor es superior a la duración máxima de 1 hora. Vuelve a intentarlo.
  • alrededor de maxTimerDuration : Solo puedo configurar <device(s)> para un máximo de <time period>.
  • actionNotAvailable : Lo siento, no puedo hacer eso en este momento.
  • actionAVAILABLERunning : Hay <dispositivo(s)> <está(s)> actualmente en ejecución, por lo que no puedo hacer ningún cambio.
  • ya armed : <device(s)> <is/are> ya está activado.
  • alreadyAtMax : <device(s)> <is/are> ya está en la temperatura máxima.
  • alreadyAtMin : <device(s)> <is/are> ya se estableció en la temperatura mínima.
  • alreadyClosed : El elemento <device(s)> ya está cerrado.
  • alreadyDisarmed : <device(s)> <is/are> ya está desactivado.
  • Ya a la estación de carga : El/los dispositivo(s)> <está/está> conectado a la estación de carga
  • alreadyInState : <device(s)> <is/are> ya está en ese estado.
  • Ya bloqueado : El/los dispositivo(s)> ya está(n) bloqueado(s).
  • alreadyOff : <device(s)> <is/are> ya está apagado.
  • alreadyOn : El parámetro <device(s)> ya está activado.
  • alreadyOpen : <device(s)> <is/are> ya está abierto.
  • alreadypause : <device(s)> <is/are> already paused.
  • alreadyStarted : <device(s)> <is/are> already started.
  • alreadyDetenido : El<dispositivo(s)> <está/está> detenido.
  • alreadyUnlocked : El elemento <device(s)> ya está desbloqueado.
  • ambiguousZoneName : Lamentablemente, <device(s)> no puede identificar la zona a la que te refieres. Asegúrate de que tus zonas tengan nombres únicos y vuelve a intentarlo.
  • amountAboveLimit : Es más de lo que <device(s)> puede admitir.
  • appLaunchFailed : no se pudo iniciar <nombre de la app> en <dispositivos>.
  • armFailure : No se pudo activar <device(s)>.
  • armLevelNeeded : No sé a qué nivel establecer <device(s)>. Di "Establecer <dispositivo(s)> en <seguridad baja>" o "Configurar <dispositivo(s)> en <seguridad alta>"
  • authFailure : Parece que no puedo establecer conexión con <device(s)>. Revisa la app para asegurarte de que tus <device/devices> estén completamente configurados.
  • bagFull : <dispositivo(s)> <has/have> <a bolsa completa/bolsas completas>. Vacía <it/ellos> y vuelve a intentarlo.
  • underMinimumLightEffectsDuration : El valor debe ser inferior a la duración mínima de 5 minutos. Vuelve a intentarlo.
  • underMinimumTimerDuration : No puedo configurar <device(s)> por un tiempo tan corto. Vuelve a intentarlo.
  • binFull : <device(s)> <has/have> <a full bin/full bins>.
  • cancelArmingRestricted : No se pudo cancelar la activación de <device(s)>.
  • cancelTooLate : Lo sentimos, ya es demasiado tarde para cancelar. Usa <device(s)> o la app.
  • channelSwitchFailed : No se pudo cambiar al canal <nombre del canal>. Vuelve a intentarlo más tarde.
  • cargadorIssue : Parece que <dispositivo(s)> <has/have> <a problema con el cargador/problemas con el cargador>.
  • CommandInsertFailed : No se pudieron procesar los comandos de <device(s)>.
  • deadBatería : <dispositivo(s)> <tiene/tiene> <batería sin carga/baterías sin carga>.
  • gradosOutOfRange : Los grados solicitados están fuera del rango de <dispositivo(s)>.
  • deviceAlertNeedsAssistance : <device(s)> <tiene/tiene> una alerta activa y <necesita(s)> su asistencia.
  • deviceAtExtremeTemperature : <device(s)> <is/are> at <una temperatura extrema/temperaturas extremas>.
  • deviceBusy : Lamentablemente, parece que <device(s)> ya está realizando una acción en este momento.
  • deviceloading : Lamentablemente, parece que <device(s)> no puede hacer eso porque (ha_shared.Its Asíre size=$item.devices.total_device_count) se está cargando.
  • deviceClogged : Parece que <device(s)> está tapado.
  • 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 : La manija está cerrada en <device(s)>. Ábrela y vuelve a intentarlo.
  • deviceJammingDetected : <device(s)> <is/are> atascado
  • deviceLidOpen : La tapa está abierta en <device(s)>. Ciérrala y vuelve a intentarlo.
  • deviceNeedsRepair : Se debe reparar<device(s)> <need(s)>. Comunícate con tu proveedor de servicios local.
  • deviceNotDocked : Parece que <device(s)> <no está/no está> conectado. Conéctalos <it/ellos> y vuelve a intentarlo.
  • deviceNotFound : <device(s)> <is/are>no está disponible. Te recomiendo que reintentes configurarlos.
  • deviceNotMounted : Lamentablemente, parece que <device(s)> no puede realizar esa acción porque <it/they> <is/are>no está activado.
  • deviceNotReady : <el/los dispositivo(s)> <está/no>no está listo.
  • deviceStuck : <device(s)> <is/are> atascado y necesita tu ayuda
  • deviceTampered : Se alteró <device(s)> <has/have>.
  • deviceThermalShutdown : Parece que <device(s)> se apagó debido a temperaturas extremas.
  • directResponseOnlyUnreachable : <el(los) dispositivo(s)> <no admite/no> admite el control remoto.
  • disarmFailure : No se pudo desactivar <device(s)>.
  • discreteOnlyOpenClose : Lamentablemente, <device(s)> solo se puede abrir o cerrar por completo.
  • dispenseAmountAboveLimit : <device(s)> no puede expender tanta cantidad.
  • dispenseAmountunderLimit : <device(s)> no puede expender una cantidad tan pequeña.
  • dispenseAmountRemainingExceeded : <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 es compatible con esa unidad para <dispense item>.
  • puertaClosedTooLong : Hace tiempo que no se abrió la puerta de <device(s)>. Ábrela, asegúrate de que haya algo adentro y vuelve a intentarlo.
  • EmergencyHeatOn : <device(s)> <is/are> está en modo calefactor de emergencia, por lo que <it/they> debe ajustarse de forma manual.
  • Defectuosa batería : <dispositivo(s)> <tiene/tiene> <batería defectuosa/baterías defectuosas>.
  • floorUnreachable : <device(s)> no puede llegar a esa habitación. Muévelos al piso correcto y vuelve a intentarlo.
  • functionNotSupported : En realidad, <device(s)> <no es compatible o no> admite esa funcionalidad.
  • GenericDispenseNotSupported : Necesito saber qué quieres expender. Vuelve a intentarlo con el nombre del elemento.
  • hardError : Se produjo un error y no puedo controlar el dispositivo de la casa.
  • hardError : Se produjo un error y no puedo controlar el dispositivo de la casa.
  • inAutoMode : En este momento, <device(s)> <is/are> está configurado en modo automático. Si quieres cambiar la temperatura, deberás usar <it/ellos> en otro modo.
  • inAwayMode : Se estableció el modo Ausente de <dispositivo(s)>. 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 : En este momento, <device(s)> <is/are> está configurado en modo seco. Si quieres cambiar la temperatura, deberás usar <it/ellos> en otro modo.
  • inEcoMode : En este momento, <device(s)> <is/are> está configurado en modo eco. Si quieres cambiar la temperatura, deberás usar <it/ellos> en otro modo.
  • inFanOnlyMode : Se configuró<device(s)> <is/are> en modo solo ventilador. Si quieres cambiar la temperatura, deberás usar <it/ellos> en otro modo.
  • inHeatOrCool :<los dispositivos> no están en modo frío/calor.
  • inHumidifierMode : El parámetro<is/are> <device(s)> está actualmente en modo humidificador. Si quieres cambiar la temperatura, deberás usar <it/ellos> en otro modo.
  • inOffMode : <device(s)> <is/are> está desactivado en este momento. Para cambiar la temperatura, deberás usar <it/ellos> en un modo diferente.
  • inPurifierMode : El parámetro<is/are> de <device(s)> está actualmente configurado en modo purificador. Si quieres cambiar la temperatura, deberás usar <it/ellos> en otro modo.
  • insleepMode : <device(s)> <is/are> está en modo de suspensión. Vuelve a intentarlo más tarde.
  • inSoftwareUpdate : <device(s)> <is/are> está en una actualización de software.
  • lockFailure : No se pudo bloquear <device(s)>.
  • blockState : Actualmente, <device(s)> está bloqueado.
  • lockToRange : Esa temperatura está fuera del rango bloqueado en <device(s)>.
  • batería baja : <dispositivo(s)> <tiene/tiene> batería baja.
  • maxSettingReached : el parámetro <device(s)> ya está establecido en el parámetro de configuración más alto
  • maxSpeedReached : <device(s)> <is/are> ya está en la velocidad máxima.
  • minSettingReached : El parámetro <is/are> ya se estableció en el parámetro de configuración más bajo.
  • minSpeedReached : <device(s)> <is/are> ya está establecido en la velocidad mínima.
  • monitoringServiceConnectionLost : <device(s)> <has/have> perdió <its/their> conexión con el servicio de supervisión.
  • NeedAttachment : Lamentablemente, parece que a <device(s)> <is/are> le falta un archivo adjunto obligatorio. Colócalo y vuelve a intentarlo.
  • needBin : Lamentablemente, parece que a <device(s)> <is/are> le falta un contenedor. Colócalo y vuelve a intentarlo.
  • NeedPads : <device(s)> <need(s)> new pads
  • needSoftwareUpdate : <device(s)> <necesita(s)> una actualización de software.
  • necesitasWater : <dispositivo(s)> <necesita(s)> agua.
  • networkProfileNotRecognized : Lo siento, no reconozco "<network profile>" en <device(s)>.
  • networkSpeedTestInProgress : Ya estoy probando la <network> <speed/speeds>>.
  • noAvailableApp : Lamentablemente, parece que <nombre de la app> no está disponible.
  • noAvailableChannel : Parece que el canal <nombre del canal> no está disponible.
  • noChannelSubscription : Lamentablemente, no te suscribiste al canal <nombre del canal> en este momento.
  • noTimerExists : Lamentablemente, parece que no hay ningún temporizador establecido en <device(s)>.
  • notSupported : Lamentablemente, ese modo no está disponible para <device(s)>.
  • obstrucciónDetected : <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 qué modo quieres activar.
  • frase de contraseña incorrecta : Lo sentimos, parece que el PIN es incorrecto.
  • percentOutOfRange : No puedo establecer <device(s)> en <percent>.
  • pinIncorrect : (frase de contraseña incorrecta)
  • rainDetected : No abrí <device(s)> porque se detectó lluvia.
  • rangoTooClose : Estos valores están demasiado cerca para establecer un rango Calor • Frío en <device(s)>. Elige temperaturas más distantes.
  • relinkRequired : Parece que se produjo un error con tu cuenta. Usa la app de Google Home o la del Asistente para volver a vincular <device(s)>.
  • remoteSetDisabled :
    • Parámetro opcional errorCodeReason
    • currentlyArmed - Como ya se activó la seguridad, 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 - Esta acción está inhabilitada para <device(s)> mientras el modo de seguridad para niños está activado.
  • room(sOnDifferentFloors) :<device(s)> no puede llegar a esas habitaciones porque están en pisos diferentes.
  • SafetyShutOff : <device(s)> <is/are> está en Modo de apagado seguro, por lo que <it/they> debe ajustarse de forma manual.
  • SceneCannotBeApplied : Lamentablemente, no se puede aplicar <device(s)>.
  • securityRestriction : <device(s)> <tiene/tienen> una restricción de seguridad
  • softwareUpdateNotAvailable : No hay ninguna actualización de software disponible en <device(s)>.
  • startRequiresTime : Para realizar esa acción, deberás indicarme durante cuánto tiempo quieres que se ejecute <device(s)>.
  • Aún enfriamientoDown : <device(s)> <is/are> aún se está enfriando.
  • nowWarmingUp : <device(s)> <is/are> aún se está preparando.
  • streamAvailable : Lamentablemente, parece que la transmisión no está disponible en <device(s)>.
  • streamUnplayable : En este momento, no puedo reproducir la transmisión desde <device(s)>.
  • tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Llene <it/there> y vuelva a intentarlo.
  • targetAlreadyReached : Lo siento, parece que esa es la temperatura actual.
  • timerValueOutOfRange : No se puede establecer <device(s)> para ese período de tiempo.
  • TooManyFailedFaileds : Lo sentimos, se produjeron demasiados intentos fallidos. Ve a la app de tu dispositivo para completar esa acción.
  • transientError : Se produjo un error al controlar <device(s)>. Vuelve a intentarlo.
  • OffOff , deviceTurnedOff : <device(s)> <is/are> está apagado en este momento.
  • invalidToLocateDevice : No pude localizar <device(s)>.
  • UnknownFoodPreset : <device(s)> no admite ese ajuste predeterminado.
  • 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 fue exitoso (estado = "SUCCESS"), informa las excepciones mediante 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 pelusa de la secadora está llena, el usuario aún puede iniciarla, pero es posible que quieras advertirle sobre este estado. Del mismo modo, cuando un dispositivo tiene la 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 se deben informar mediante la característica StatusReport.

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

Este ejemplo sirve para trabar la puerta:

La cerradura de la puerta principal tiene poca batería. Bloqueando 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 (SUCCESS) sobre otro dispositivo que utiliza StatusReport

Por ejemplo, para activar un sistema de seguridad. Bien, activando 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 producirán el TTS asociado en el dispositivo.

  • bagFull : <dispositivo(s)> <has/have> <a bolsa completa/bolsas completas>. Vacía <it/ellos> y vuelve a intentarlo.
  • binFull : <device(s)> <has/have> <a full bin/full bins>.
  • carbonMonoxideDetected : Se detectó monóxido de carbono en <nombre de la casa>.
  • deviceAtExtremeTemperature : <device(s)> <is/are> at <una temperatura extrema/temperaturas extremas>.
  • deviceJammingDetected : <device(s)> <is/are> atascado
  • deviceMove : Se movió<device(s)> <was/were>.
  • deviceOpen : <device(s)> <is/are> open
  • deviceTampered : Se alteró <device(s)> <has/have>.
  • deviceUnplugged : <device(s)> <is/are> desconectada
  • floorUnreachable : <device(s)> no puede llegar a esa habitación. Muévelos al piso correcto y vuelve a intentarlo.
  • hardwareFailure : <device(s)> <tiene/tiene> un problema de hardware.
  • inSoftwareUpdate : <device(s)> <is/are> está en una actualización de software.
  • isBypassed : Se omite actualmente<device(s)> <is/are>.
  • batería baja : <dispositivo(s)> <tiene/tiene> batería baja.
  • motionDetected : <device(s)> <detect(s)> movimiento.
  • NeedPads : <device(s)> <need(s)> new pads
  • needSoftwareUpdate : <device(s)> <necesita(s)> una actualización de software.
  • necesitasWater : <dispositivo(s)> <necesita(s)> agua.
  • networkJammingDetected : La conexión de red doméstica a <device(s)> no funciona correctamente.
  • noIssuesReported : <device(s)> no informó problemas.
  • room(sOnDifferentFloors) :<device(s)> no puede llegar a esas habitaciones porque están en pisos diferentes.
  • runCycleCompleted : <device(s)> <has/have> terminó de ejecutarse.
  • securityRestriction : <device(s)> <tiene/tienen> una restricción de seguridad
  • humoDetected : Se detectó humo en <nombre de la casa>.
  • tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Llene <it/there> y vuelva a intentarlo.
  • con CellBackup : <device(s)> <is/are> usando respaldo celular
  • waterLeakDetected : <device(s)> <detect(s)> una fuga de agua.