Errores y excepciones

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

Errores

Debes devolver un código de error cuando un problema provoque que falle una solicitud de ejecución o consulta. Por ejemplo, si una cerradura está trabada y no se puede abrir ni cerrar, se debe 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 luces de un proveedor y se controlan con un concentrador, cuando el usuario pide que se apaguen todas las luces, el proveedor puede devolver un error a nivel del dispositivo si una sola luz está sin conexión o un error a nivel global si todo el concentrador 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.

Resumen:

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

Errores a nivel global

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

A continuación, se muestra un ejemplo del error deviceOffline a nivel global debido a que la central está sin conexión:

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

A continuación, se muestra un ejemplo del error inSoftwareUpdate a nivel global debido a la actualización del centro:

{
  "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 devolver 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 de EXECUTE

En el siguiente fragmento de código JSON, se muestra cómo devolver errores a nivel del dispositivo en la respuesta de 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 código 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 la TTS asociada en el dispositivo.

  • aboveMaximumLightEffectsDuration : El valor es superior a 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 realizar esa acción en este momento.
  • actionUnavailableWhileRunning : <device(s)> <is/are> currently running, so I can't make any changes.
  • alreadyArmed : <device(s)> <is/are> already armed.
  • alreadyAtMax : Los dispositivos <device(s)> ya están configurados en la temperatura máxima.
  • alreadyAtMin : El dispositivo o los dispositivos ya están configurados en la temperatura mínima.
  • alreadyClosed : Los <dispositivos> ya están cerrados.
  • alreadyDisarmed : Los dispositivos <is/are> ya están desactivados.
  • alreadyDocked : Los <dispositivos> ya están conectados.
  • alreadyInState : <device(s)> <is/are> already in that state.
  • alreadyLocked : Los dispositivos <device(s)> ya están bloqueados.
  • alreadyOff : <device(s)> <is/are> already off.
  • alreadyOn : <device(s)> <is/are> already on.
  • alreadyOpen : <device(s)> <is/are> already open.
  • alreadyPaused : Los <dispositivos> ya están pausados.
  • alreadyStarted : Los<dispositivos> <ya se iniciaron/ya se iniciaron>.
  • alreadyStopped : Los <dispositivos> ya están detenidos.
  • alreadyUnlocked : Los <dispositivos> ya están desbloqueados.
  • ambiguousZoneName : Lo siento, <device(s)> no puede identificar la zona a la que haces referencia. Asegúrate de que las zonas tengan nombres únicos y vuelve a intentarlo.
  • amountAboveLimit : Esa cantidad supera el límite máximo que admite <device(s)>.
  • 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 en qué nivel configurar <device(s)>. Prueba diciendo "Establece <dispositivo(s)> en <seguridad baja>" o "Establece <dispositivo(s)> en <seguridad alta>".
  • authFailure : No puedo establecer conexión con <device(s)>. Verifica que la app esté completamente configurada.
  • bagFull : El<dispositivo/los dispositivos> <tiene/tienen> <una bolsa llena/bolsas llenas>. Vacía <la/las> bolsa(s) y vuelve a intentarlo.
  • belowMinimumLightEffectsDuration : El valor es inferior a la duración mínima de 5 minutos. Vuelve a intentarlo.
  • belowMinimumTimerDuration : No puedo establecer <device(s)> por tan poco tiempo. Vuelve a intentarlo.
  • binFull : <device(s)> <has/have> <a full bin/full bins>.
  • cancelArmingRestricted : Lo siento, no pude cancelar el armado de <device(s)>.
  • cancelTooLate : Lo sentimos, ya es demasiado tarde para cancelar. En su lugar, usa <dispositivo(s)> o la app.
  • channelSwitchFailed : Lo sentimos, no se pudo cambiar al canal <nombre del canal>. Vuelve a intentarlo más tarde.
  • chargerIssue : Lo siento, parece que <device(s)> <has/have> <a charger issue/charger issues>.
  • commandInsertFailed : No se pueden procesar los comandos para <device(s)>.
  • deadBattery : <device(s)> <has/have> <a dead battery/dead batteries>.
  • degreesOutOfRange : Los grados solicitados están fuera del rango de <device(s)>.
  • deviceAlertNeedsAssistance : Los <dispositivos> tienen una alerta activa y <necesitan> tu asistencia.
  • deviceAtExtremeTemperature : <device(s)> <is/are> at <an extreme temperature/extreme temperatures>.
  • deviceBusy : Lo siento, pero parece que <device(s)> ya está realizando una tarea en este momento.
  • deviceCharging : Lo siento, al parecer <device(s)> no puede realizar esa acción porque (ha_shared.ItsTheyre size=$item.devices.total_device_count) cargando.
  • deviceClogged : Lo siento, pero parece que <device(s)> está tapado.
  • deviceCurrentlyDispensing : <device(s)> ya está dispensando algo en este momento.
  • deviceDoorOpen : La puerta de <device(s)> está abierta. Cierra la puerta y vuelve a intentarlo.
  • deviceHandleClosed : El controlador está cerrado en <device(s)>. Ábrelo y vuelve a intentarlo.
  • deviceJammingDetected : <device(s)> <is/are> jammed.
  • deviceLidOpen : La tapa de <dispositivo(s)> está abierta. Cierra la tapa y vuelve a intentarlo.
  • deviceNeedsRepair : Se debe reparar <device(s)>. Comunícate con tu proveedor de servicios local.
  • deviceNotDocked : Lo siento, pero parece que <device(s)> <isn't/aren't> conectado. Conéctalo y vuelve a intentarlo.
  • deviceNotFound : <device(s)> <is/are>n't available. Te recomiendo que <la/las> vuelvas a configurar.
  • deviceNotMounted : Lo siento, parece que <device(s)> no puede realizar esa acción porque <it/they> no está instalado.
  • deviceNotReady : Los dispositivos <device(s)> no están listos.
  • deviceStuck : El dispositivo <está/están> atascado y necesita tu ayuda.
  • deviceTampered : Se manipuló <device(s)>.
  • deviceThermalShutdown : Lo sentimos, parece que <device(s)> se apagó debido a temperaturas extremas.
  • directResponseOnlyUnreachable : <device(s)> <doesn't/don't> support remote control.
  • disarmFailure : No se pudo desactivar <device(s)>.
  • discreteOnlyOpenClose : Lo siento, <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.
  • dispenseAmountRemainingExceeded : <device(s)> no tiene suficiente <dispense item> para hacerlo.
  • dispenseFractionalAmountNotSupported : Los dispositivos <device(s)> no pueden 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>.
  • doorClosedTooLong : Hace bastante tiempo que no se abre la puerta de <device(s)>. Ábrela, asegúrate de que haya algo dentro y vuelve a intentarlo.
  • emergencyHeatOn : <device(s)> <is/are> en el modo calefactor de emergencia, por lo que <it/they> debe ajustarse manualmente.
  • faultyBattery : <device(s)> <has/have> <a faulty battery/faulty batteries>.
  • floorUnreachable : <device(s)> no puede llegar a esa habitación. Muévelo al piso correcto y vuelve a intentarlo.
  • functionNotSupported : En realidad, <device(s)> <doesn't/don't> admiten esa funcionalidad.
  • genericDispenseNotSupported : Necesito saber qué quieres dispensar. Vuelve a intentarlo con el nombre del elemento.
  • 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> actualmente configurado(s) en modo automático. Para cambiar la temperatura, deberás usar otro modo.
  • inAwayMode : <device(s)> <is/are> actualmente configurado en modo Ausente. Para controlar el termostato, debes cambiarlo manualmente al modo En casa con la app de Nest desde un teléfono, una tablet o una computadora.
  • inDryMode : <device(s)> <is/are> actualmente configurado en modo de secado. Para cambiar la temperatura, deberás usar otro modo.
  • inEcoMode : <device(s)> <is/are> actualmente configurado en modo de ahorro. Para cambiar la temperatura, deberás usar otro modo.
  • inFanOnlyMode : <device(s)> <is/are> actualmente configurado(s) en el modo solo ventilador. Para cambiar la temperatura, deberás usar otro modo.
  • inHeatOrCool : <device(s)> <is/are>n't in heat/cool mode.
  • inHumidifierMode : <device(s)> <is/are> actualmente configurado(s) en el modo Humidificador. Para cambiar la temperatura, deberás usar otro modo.
  • inOffMode : <device(s)> <is/are> actualmente apagado/s. Para cambiar la temperatura, deberás cambiar <it/them> a otro modo.
  • inPurifierMode : <device(s)> <is/are> actualmente en modo de purificación. Para cambiar la temperatura, deberás usar otro modo.
  • inSleepMode : <device(s)> <is/are> in sleep mode. Vuelve a intentarlo más tarde.
  • inSoftwareUpdate : <device(s)> <is/are> currently in a software update.
  • lockFailure : No se pudo bloquear <device(s)>.
  • lockedState : <device(s)> <is/are> currently locked.
  • lockedToRange : Esa temperatura está fuera del intervalo que se fijó en <device(s)>.
  • lowBattery : <device(s)> <has/have> low battery.
  • maxSettingReached : Los dispositivos <device(s)> ya están configurados en el ajuste más alto.
  • maxSpeedReached : <device(s)> <is/are> already set to the maximum speed.
  • minSettingReached : <device(s)> <is/are> already set to the lowest setting.
  • minSpeedReached : Los dispositivos <ya están/ya están> configurados en la velocidad mínima.
  • monitoringServiceConnectionLost : <device(s)> <has/have> lost <its/their> connection to the monitoring service.
  • needsAttachment : Lo siento, parece que a <device(s)> le <is/are> falta una pieza necesaria. Reemplázalo y vuelve a intentarlo.
  • needsBin : Lo siento, parece que a <device(s)> le falta un contenedor. Reemplázalo y vuelve a intentarlo.
  • needsPads : <device(s)> <need(s)> nuevas almohadillas.
  • needsSoftwareUpdate : <device(s)> <need(s)> a software update.
  • needsWater : <device(s)> <need(s)> agua.
  • networkProfileNotRecognized : Lo siento, no reconozco "<perfil de red>" en <dispositivo(s)>.
  • networkSpeedTestInProgress : Ya estoy probando la <velocidad/velocidades> de <red>.
  • noAvailableApp : Lo sentimos, parece que <nombre de la app> no está disponible.
  • noAvailableChannel : Lo sentimos, parece que el canal <nombre del canal> no está disponible.
  • noChannelSubscription : Lo sentimos, no tienes una suscripción al canal <nombre del canal> en este momento.
  • noTimerExists : Lo siento, parece que no hay ningún temporizador configurado en <device(s)>.
  • notSupported : Lo sentimos, ese modo no está disponible para <device(s)>.
  • obstructionDetected : <device(s)> detected an obstruction.
  • offline , deviceOffline : Lo sentimos, parece que <device(s)> no está disponible en este momento.
  • onRequiresMode : Especifica el modo que quieres activar.
  • passphraseIncorrect : Lo siento, parece que el PIN es incorrecto.
  • percentOutOfRange : Lo siento, no puedo establecer <device(s)> en <percent>.
  • pinIncorrect : (passphraseIncorrect)
  • rainDetected : No abrí <device(s)> porque se detectó lluvia.
  • rangeTooClose : Esos valores son demasiado próximos para establecer un intervalo frío/calor en <dispositivo(s)>. Elige temperaturas más distantes.
  • relinkRequired : Lo sentimos, pero 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 se activó la protección, debes usar <device(s)> o la app para hacer cambios.
    • remoteUnlockNotAllowed: Lo siento, no puedo desbloquear <device(s)> de forma remota.
    • remoteControlOff: Actualmente, esa acción está inhabilitada. Habilita el control remoto en <device(s)> y vuelve a intentarlo.
    • childSafetyModeActive: Esa acción está inhabilitada para <device(s)> mientras el modo de seguridad para niños está activado.
  • roomsOnDifferentFloors : Los <dispositivos> no llegan a esas habitaciones porque están en pisos diferentes.
  • safetyShutOff : <device(s)> <is/are> en modo de apagado seguro, por lo que <it/they> debe ajustarse manualmente.
  • sceneCannotBeApplied : Lo sentimos, no se puede aplicar <device(s)>.
  • securityRestriction : <device(s)> <has/have> a security restriction.
  • softwareUpdateNotAvailable : Lo sentimos, no hay actualizaciones de software disponibles en <device(s)>.
  • startRequiresTime : Para hacer eso, tendrás que decirme cuánto tiempo quieres que funcione <device(s)>.
  • stillCoolingDown : Los<dispositivos> <están/siguen> enfriándose.
  • stillWarmingUp : <device(s)> <is/are> still warming up.
  • streamUnavailable : Lo sentimos, parece que la transmisión no está disponible en <device(s)>.
  • streamUnplayable : Lo siento, en este momento, no puedo reproducir la transmisión desde <device(s)>.
  • tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Please fill <it/them> and try again.
  • targetAlreadyReached : Lo siento, parece que esa ya es la temperatura actual.
  • timerValueOutOfRange : <device(s)> no se puede configurar para ese período.
  • tooManyFailedAttempts : Lo sentimos, se registraron demasiados intentos fallidos. Ve a la app del dispositivo para completar la acción.
  • transientError : Lo sentimos, se produjo un error al controlar <device(s)>. Vuelve a intentarlo.
  • turnedOff , deviceTurnedOff : Los dispositivos <is/are> apagados en este momento.
  • unableToLocateDevice : No pude encontrar <device(s)>.
  • unknownFoodPreset : <device(s)> no admite ese ajuste predeterminado.
  • unlockFailure : No se pudieron desbloquear los dispositivos <device(s)>.
  • unpausableState : <device(s)> no se puede pausar en este momento.
  • userCancelled : ok
  • valueOutOfRange : No se puede establecer <dispositivo(s)> en esa temperatura.

Informes de estado en línea y sin conexión

Cuando un dispositivo está sin conexión, debes informar <code{"online": code="" dir="ltr" false}<="" translate="no"> a Report State en un plazo de cinco minutos después del comportamiento del dispositivo. Por el contrario, cuando un dispositivo vuelve a estar en línea, debes informar <code{"online": code="" dir="ltr" translate="no" true}<=""> a Report State en un plazo de cinco minutos después del comportamiento del dispositivo. Cada vez que un dispositivo vuelva a estar en línea, el socio debe informar todos los estados actuales del dispositivo con la API de reportStateAndNotification. En este ejemplo, se muestra que un tipo de dispositivo light está en línea y registra todos los estados actuales del dispositivo.
"requestId": "test-request-id",
  "agentUserId": "agent-user-1",
    "payload":{
      "devices": {
        "states": {
          "device-id-1": {
            "brightness": 65,
            "on": true,
            "online": true
          }
          "notifications": {},
        }
      }
    }

Excepciones

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

Si el comando se ejecutó correctamente (status = "SUCCESS"), informa las excepciones con el rasgo StatusReport (para dispositivos que no sean el objetivo) o devolviendo un exceptionCode adecuado (para el dispositivo objetivo).

Por ejemplo, si el filtro de pelusa de la secadora está lleno, el usuario puede iniciar la secadora, pero es posible que desees advertirle sobre este estado. Del mismo modo, cuando un dispositivo tiene batería baja, pero no está agotada, puedes ejecutar un comando, pero debes informarle al usuario 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 con el rasgo StatusReport.

Excepción no bloqueante (SUCCESS) sobre el dispositivo de destino

Este ejemplo es para trabar la puerta:

La batería de la cerradura de la puerta principal está baja. 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 que no genera bloqueo (SUCCESS) sobre otro dispositivo que usa StatusReport

Este ejemplo es para activar un sistema de seguridad: De acuerdo, activaré el sistema de seguridad. La ventana delantera 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 que usa 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 : El<dispositivo/los dispositivos> <tiene/tienen> <una bolsa llena/bolsas llenas>. Vacía <la/las> bolsa(s) 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 <an extreme temperature/extreme temperatures>.
  • deviceJammingDetected : <device(s)> <is/are> jammed.
  • deviceMoved : Se movió <device(s)>.
  • deviceOpen : <device(s)> <is/are> open.
  • deviceTampered : Se manipuló <device(s)>.
  • deviceUnplugged : <device(s)> <is/are> unplugged.
  • floorUnreachable : <device(s)> no puede llegar a esa habitación. Muévelo al piso correcto y vuelve a intentarlo.
  • hardwareFailure : <device(s)> <has/have> a hardware problem.
  • inSoftwareUpdate : <device(s)> <is/are> currently in a software update.
  • isBypassed : Actualmente, se omiten <device(s)>.
  • lowBattery : <device(s)> <has/have> low battery.
  • motionDetected : <device(s)> <detect(s)> motion.
  • needsPads : <device(s)> <need(s)> nuevas almohadillas.
  • needsSoftwareUpdate : <device(s)> <need(s)> a software update.
  • needsWater : <device(s)> <need(s)> agua.
  • networkJammingDetected : No funciona correctamente la conexión entre la red doméstica y <device(s)>.
  • noIssuesReported : <device(s)> no informó ningún problema.
  • roomsOnDifferentFloors : Los <dispositivos> no llegan a esas habitaciones porque están en pisos diferentes.
  • runCycleFinished : <device(s)> <has/have> finished running.
  • securityRestriction : <device(s)> <has/have> a security restriction.
  • smokeDetected : Se detectó humo en <nombre de la 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)> una fuga de agua.
</code{"online":></code{"online":>