Erreurs et exceptions

Ce document liste les erreurs et exceptions officiellement prises en charge pour les appareils de maison connectée. Veuillez utiliser ces codes d'erreur et d'exception dans la réponse d'intent ou dans les notifications si vous les avez implémentées afin que l'Assistant Google avertisse les utilisateurs finaux des problèmes liés à une commande ou à un état de l'appareil donnés. Si la réponse contient un formatage incorrect ou errorCode, l'Assistant Google affiche un message d'erreur générique, par exemple "Désolé, l'appareil n'est pas disponible pour le moment".

Erreurs

Vous devez renvoyer un code d'erreur lorsqu'un problème entraîne l'échec d'une requête d'exécution ou de requête. Par exemple, si une serrure de porte est bloquée et ne peut pas être verrouillée ni déverrouillée, une erreur concernant cet état doit être renvoyée à l'utilisateur.

Les codes d'erreur peuvent être associés au niveau de l'appareil ou de manière globale. Par exemple, si un utilisateur possède de nombreuses ampoules d'un même fournisseur et qu'elles sont contrôlées par un hub, lorsque l'utilisateur demande à éteindre toutes ses ampoules, le fournisseur peut renvoyer une erreur au niveau de l'appareil si une seule ampoule est hors connexion, ou une erreur au niveau global si l'ensemble du hub est hors connexion et qu'aucune ampoule ne peut être contrôlée. Si tous les appareils sont hors connexion, il n'y a aucune différence entre les erreurs au niveau global et au niveau de l'appareil.

Lorsqu'un appareil est hors connexion, vous devez signaler {"online": false} à Report State dans les cinq minutes suivant le comportement de l'appareil.

En résumé :

  • Erreur au niveau global: tous les appareils de la réponse présentent la même erreur
  • Erreur au niveau local: réponse mixte avec des cas d'erreur et de réussite

Erreurs au niveau global

L'extrait JSON suivant montre comment renvoyer des erreurs au niveau global dans la réponse QUERY ou EXECUTE.

Exemple d'erreur deviceOffline au niveau global en raison de l'indisponibilité du hub:

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

Exemple d'erreur inSoftwareUpdate au niveau global en raison de la mise à jour du hub:

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

Erreurs au niveau de l'appareil

Réponse QUERY

L'extrait JSON suivant montre comment renvoyer des erreurs au niveau de l'appareil dans la réponse QUERY.

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

Réponse EXECUTE

L'extrait de code JSON suivant montre comment renvoyer des erreurs au niveau de l'appareil dans la réponse 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
        }
      }
    ]
  }
}

Notifications avec erreurs

Notification proactive

L'extrait JSON suivant montre comment signaler des erreurs au niveau de l'appareil dans une notification proactive.

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

Réponse de suivi

L'extrait JSON suivant montre comment signaler des erreurs au niveau de l'appareil dans une réponse de suivi.

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

Liste d'erreurs

Les erreurs suivantes génèrent la synthèse vocale associée sur l'appareil.

  • aboveMaximumLightEffectsDuration  : La durée est supérieure au maximum autorisé (une heure). Veuillez réessayer.
  • aboveMaximumTimerDuration  : Je ne peux définir <device(s)> que pour une durée maximale de <time period>.
  • actionNotAvailable  : Désolé, je ne peux pas faire ça pour le moment.
  • 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> already set to the maximum temperature.
  • alreadyAtMin  : <device(s)> <is/are> already set to the minimum temperature.
  • alreadyClosed  : <device(s)> <is/are> already closed.
  • alreadyDisarmed  : <device(s)> <is/are> already disarmed.
  • alreadyDocked  : <device(s)> <is/are> already docked.
  • alreadyInState  : <device(s)> <is/are> déjà dans cet état.
  • alreadyLocked  : <device(s)> <is/are> already locked.
  • alreadyOff  : <device(s)> <is/are> already off.
  • alreadyOn  : <device(s)> <is/are> already on.
  • alreadyOpen  : <device(s)> <is/are> already open.
  • alreadyPaused  : <device(s)> <is/are> already paused.
  • alreadyStarted  : <device(s)> <is/are> already started.
  • alreadyStopped  : <device(s)> <is/are> already stopped.
  • alreadyUnlocked  : <device(s)> <is/are> already unlocked.
  • ambiguousZoneName : Désolé, <device(s)> ne parvient pas à identifier la zone dont vous parlez. Veuillez vérifier que vos zones portent des noms uniques, puis réessayer.
  • amountAboveLimit  : La quantité est supérieure à celle que <device(s)> peut accepter.
  • appLaunchFailed  : Désolé, le lancement de <nom de l'application> sur <appareil(s)> a échoué.
  • armFailure  : Impossible d'activer <device(s)>.
  • armLevelNeeded : Je ne sais pas à quel niveau définir <device(s)>. Essayez de dire "Définir <appareil(s)> sur <faible sécurité>" ou "Définir <appareil(s)> sur <haute sécurité>".
  • authFailure  : Je ne parviens pas à joindre <device(s)>. Vérifiez l'application pour vous assurer que votre ou vos <device/devices> sont entièrement configurés.
  • bagFull : <device(s)> <has/have> <a full bag/full bags>. Please empty <it/them> and try again.
  • belowMinimumLightEffectsDuration  : la durée est inférieure à la durée minimale de cinq minutes. Veuillez réessayer.
  • belowMinimumTimerDuration  : Je ne peux pas définir <device(s)> pour une durée aussi courte. Veuillez réessayer.
  • binFull  : <device(s)> <has/have> <a full bin/full bins>.
  • cancelArmingRestricted  : Désolé, je n'ai pas pu annuler l'activation de <device(s)>.
  • cancelTooLate  : Désolé, il est trop tard pour annuler. Utilisez plutôt <device(s)> ou l'application.
  • channelSwitchFailed  : Désolé, nous n'avons pas pu changer de chaîne vers <nom de la chaîne>. Veuillez réessayer plus tard.
  • chargerIssue : Désolé, il semble que <device(s)> <has/have> <a charger issue/charger issues>.
  • commandInsertFailed  : Impossible de traiter les commandes pour <device(s)>.
  • deadBattery : <device(s)> <has/have> <a dead battery/dead batteries>.
  • degreesOutOfRange  : Les degrés demandés sont en dehors de la plage pour <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  : Désolé, il semble que <device(s)> soit déjà en train d'effectuer une action.
  • deviceCharging  : Désolé, il semble que <device(s)> ne puisse pas effectuer cette action, car (ha_shared.ItsTheyre size=$item.devices.total_device_count) est en charge.
  • deviceClogged  : Désolé, il semble que <device(s)> soit bouché.
  • deviceCurrentlyDispensing  : <device(s)> est déjà en train de distribuer quelque chose.
  • deviceDoorOpen  : La porte est ouverte sur <device(s)>. Veuillez la fermer et réessayer.
  • deviceHandleClosed  : La poignée est fermée sur <device(s)>. Veuillez l'ouvrir et réessayer.
  • deviceJammingDetected  : <device(s)> <is/are> jammed.
  • deviceLidOpen  : Le capot est ouvert sur <device(s)>. Veuillez le fermer et réessayer.
  • deviceNeedsRepair  : <device(s)> <need(s)> to be repaired. Veuillez contacter votre concessionnaire réparateur local.
  • deviceNotDocked  : Désolé, il semble que <device(s)> <isn't/aren't> sur sa station d'accueil. Veuillez placer <l'appareil/les appareils> sur la station d'accueil et réessayer.
  • deviceNotFound  : <device(s)> <is/are>n't available. Vous pouvez essayer de les configurer à nouveau.
  • deviceNotMounted  : Désolé, il semble que <device(s)> ne puisse pas effectuer cette action, car <it/they> <is/are>n't mounted.
  • deviceNotReady  : <device(s)> <is/are>n't ready.
  • deviceStuck  : <device(s)> <is/are> stuck and needs your help.
  • deviceTampered  : <device(s)> <has/have> been tampered with.
  • deviceThermalShutdown  : Malheureusement, il semble que <device(s)> se soit éteint en raison de températures extrêmes.
  • directResponseOnlyUnreachable  : <device(s)> <doesn't/don't> support remote control.
  • disarmFailure  : Impossible de désarmer <device(s)>.
  • discreteOnlyOpenClose  : Désolé, <device(s)> ne peut être ouvert ou fermé que complètement.
  • dispenseAmountAboveLimit  : <device(s)> ne peut pas distribuer une si grande quantité.
  • dispenseAmountBelowLimit  : <device(s)> ne peut pas distribuer une si petite quantité.
  • dispenseAmountRemainingExceeded  : <device(s)> ne dispose pas d'assez de <dispense item> pour effectuer cette opération.
  • dispenseFractionalAmountNotSupported  : <device(s)> ne peut pas distribuer des fractions de <dispense item>.
  • dispenseFractionalUnitNotSupported  : <device(s)> n'accepte pas les fractions de cette unité pour <dispense item>.
  • dispenseUnitNotSupported  : L'unité <dispense unit> n'est pas compatible avec <dispense item> sur <device(s)>.
  • doorClosedTooLong  : Cela fait un certain temps que la porte de <device(s)> n'a pas été ouverte. Veuillez ouvrir la porte, vérifier qu'il y a bien quelque chose à l'intérieur, puis réessayer.
  • 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  : <device(s)> ne peut pas atteindre cette pièce. Veuillez les déplacer jusqu'à l'étage concerné et réessayer.
  • functionNotSupported  : En fait, <device(s)> <doesn't/don't> support that functionality.
  • genericDispenseNotSupported : J'ai besoin de savoir ce que vous souhaitez distribuer. Veuillez réessayer en précisant le nom de l'article.
  • hardError : Malheureusement, une erreur s'est produite. Je ne peux donc pas contrôler votre appareil.
  • hardError : Malheureusement, une erreur s'est produite. Je ne peux donc pas contrôler votre appareil.
  • inAutoMode  : <device(s)> <is/are> actuellement défini sur le mode automatique. Pour modifier la température, vous devez changer de mode.
  • inAwayMode  : <device(s)> <is/are> currently set to away mode. Pour contrôler votre thermostat, vous devez le passer manuellement en mode Chez moi depuis l'application Nest sur votre téléphone, tablette ou ordinateur.
  • inDryMode  : <device(s)> <is/are> currently set to dry mode. Pour modifier la température, vous devez changer de mode.
  • inEcoMode  : <device(s)> <is/are> currently set to eco mode. Pour modifier la température, vous devez changer de mode.
  • inFanOnlyMode  : <device(s)> <is/are> currently set to fan-only mode. Pour modifier la température, vous devez changer de mode.
  • inHeatOrCool : <device(s)> <is/are>n't in heat/cool mode.
  • inHumidifierMode  : <device(s)> <is/are> currently set to humidifier mode. Pour modifier la température, vous devez changer de mode.
  • 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. Pour modifier la température, vous devez changer de mode.
  • inSleepMode  : <device(s)> <is/are> in sleep mode. Veuillez réessayer plus tard.
  • inSoftwareUpdate  : <device(s)> <is/are> currently in a software update.
  • lockFailure  : L'appareil ou les appareils <device(s)> n'ont pas pu être verrouillés.
  • lockedState  : <device(s)> <is/are> currently locked.
  • lockedToRange  : La température se situe en dehors de la plage définie pour <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> already set to the maximum speed.
  • minSettingReached  : <device(s)> <is/are> already set to the lowest setting.
  • minSpeedReached  : <device(s)> <is/are> already set to the minimum speed.
  • monitoringServiceConnectionLost  : <device(s)> <has/have> lost <its/their> connection to the monitoring service.
  • needsAttachment  : Désolé, il semble qu'il manque une pièce indispensable sur <device(s)>. Veuillez le remettre en place et réessayer.
  • needsBin  : Désolé, il semble qu'il manque un bac sur <device(s)>. Veuillez le remettre en place et réessayer.
  • needsPads  : <device(s)> <need(s)> new pads.
  • needsSoftwareUpdate  : <device(s)> <need(s)> une mise à jour logicielle.
  • needsWater  : <device(s)> <need(s)> water.
  • networkProfileNotRecognized  : Désolé, je ne reconnais pas "<network profile>" sur <device(s)>.
  • networkSpeedTestInProgress  : Je teste déjà le <réseau> <vitesse/vitesses>>.
  • noAvailableApp  : Désolé, il semble que <nom de l'application> ne soit pas disponible.
  • noAvailableChannel  : Désolé, il semble que la chaîne <nom de la chaîne> ne soit pas disponible.
  • noChannelSubscription  : Désolé, vous n'êtes pas abonné à la chaîne <nom de la chaîne> pour le moment.
  • noTimerExists  : Désolé, il semble qu'aucun minuteur ne soit défini sur <device(s)>.
  • notSupported  : Désolé, ce mode n'est pas disponible pour <device(s)>.
  • obstructionDetected  : <device(s)> a détecté un obstacle.
  • offline , deviceOffline : Désolé, il semble que <device(s)> <is/are>n'est pas disponible pour le moment.
  • onRequiresMode  : Veuillez spécifier le mode que vous souhaitez activer.
  • passphraseIncorrect  : Désolé, il semble que ce code soit incorrect.
  • percentOutOfRange : Désolé, je ne peux pas définir <device(s)> sur <percent>.
  • pinIncorrect  : (passphraseIncorrect)
  • rainDetected  : Je n'ai pas ouvert <device(s)>, car de la pluie a été détectée.
  • rangeTooClose  : Ces températures sont trop proches pour constituer une plage de chauffage/climatisation pour <device(s)>. Choisissez des températures plus éloignées.
  • relinkRequired  : Désolé, il semble qu'un problème soit survenu avec votre compte. Veuillez utiliser l'application Assistant ou Google Home pour associer de nouveau <appareil(s)>.
  • remoteSetDisabled  :
    • Paramètre facultatif errorCodeReason
    • currentlyArmed - Pardon, la sécurité étant déjà activée, vous devez utiliser <device(s)> ou l'application pour apporter des modifications.
    • remoteUnlockNotAllowed - Désolé, je ne peux pas déverrouiller <device(s)> à distance.
    • remoteControlOff : Cette action est actuellement désactivée. Veuillez activer la commande à distance sur <appareil(s)>, puis réessayer.
    • childSafetyModeActive : Cette action est désactivée pour <device(s)> lorsque le mode Sécurité enfant est activé.
  • roomsOnDifferentFloors  : <device(s)> ne peut pas atteindre ces pièces, car elles sont situées à différents étages.
  • safetyShutOff : <device(s)> <is/are> in Safety Shut-Off Mode, so <it/they>'ll have to be adjusted by hand.
  • sceneCannotBeApplied  : Désolé, <device(s)> ne peut pas être appliqué.
  • securityRestriction  : <device(s)> <has/have> a security restriction.
  • softwareUpdateNotAvailable  : Désolé, aucune mise à jour logicielle n'est disponible sur <device(s)>.
  • startRequiresTime  : Pour cela, vous devez me dire combien de temps vous souhaitez exécuter <device(s)>.
  • stillCoolingDown  : <device(s)> <is/are> still cooling down.
  • stillWarmingUp  : <device(s)> <is/are> still warming up.
  • streamUnavailable  : Désolé, il semble que le flux vidéo ne soit pas disponible pour le moment sur <device(s)>.
  • streamUnplayable  : Désolé, je ne peux pas lire le flux depuis <device(s)> pour le moment.
  • tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Please fill <it/them> and try again.
  • targetAlreadyReached  : Désolé, il semble que ce soit déjà la température actuelle.
  • timerValueOutOfRange  : <device(s)> ne peut pas être défini sur cette durée.
  • TooManyFailedAttempts  : Désolé, vous avez dépassé le nombre de tentatives infructueuses autorisé. Veuillez accéder à l'application de votre appareil pour effectuer cette action.
  • transientError  : Désolé, un problème est survenu lors du contrôle de <device(s)>. Veuillez réessayer.
  • turnedOff, deviceTurnedOff  : <device(s)> <is/are> off right now.
  • unableToLocateDevice : Impossible de localiser <device(s)>.
  • unknownFoodPreset  : L'appareil <device(s)> n'est pas compatible avec ce préréglage.
  • unlockFailure  : Impossible de déverrouiller <device(s)>.
  • unpausableState  : Impossible de mettre <device(s)> en pause pour le moment.
  • userCancelled : ok
  • valueOutOfRange  : Impossible de régler <device(s)> sur cette température.

Exceptions

Vous devez renvoyer une exception lorsqu'un problème ou une alerte est associé à une commande. La commande peut réussir ou échouer.

Si la commande a réussi (état = "SUCCESS"), signalez les exceptions à l'aide de la caractéristique StatusReport (pour les appareils autres que la cible) ou en renvoyant un exceptionCode approprié (pour l'appareil cible).

Par exemple, si le filtre à peluches du sèche-linge est plein, l'utilisateur peut toujours démarrer son sèche-linge, mais vous pouvez l'avertir de cet état. De même, lorsqu'un appareil a une batterie faible mais pas vide, vous pouvez toujours exécuter une commande, mais vous devez l'informer que la batterie de l'appareil est faible.

Si la commande échoue en raison d'exceptions, l'état doit être "EXCEPTIONS", et les exceptions doivent être signalées à l'aide de la caractéristique StatusReport.

Exception non bloquante (SUCCÈS) concernant l'appareil cible

Cet exemple concerne le verrouillage de la porte:

La batterie de la serrure de la porte d'entrée est faible. Je verrouille la porte d'entrée.

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

Exception non bloquante (SUCCÈS) concernant un autre appareil à l'aide de StatusReport

Cet exemple concerne l'activation d'un système de sécurité: OK, j'active le système de sécurité. La fenêtre de devant est ouverte.

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

Exception de blocage concernant un autre appareil à l'aide de 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"
          }
        ]
      }
    }
  }
}

Liste d'exceptions

Les exceptions suivantes génèrent la synthèse vocale associée sur l'appareil.

  • 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  : Du monoxyde de carbone a été détecté dans <nom de la maison>.
  • 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  : <device(s)> ne peut pas atteindre cette pièce. Veuillez les déplacer jusqu'à l'étage concerné et réessayer.
  • hardwareFailure  : <device(s)> <has/have> a hardware problem.
  • inSoftwareUpdate  : <device(s)> <is/are> currently in a software update.
  • isBypassed  : <device(s)> <is/are> actuellement contournés.
  • lowBattery : <device(s)> <has/have> low battery.
  • motionDetected  : <device(s)> <detect(s)> motion.
  • needsPads  : <device(s)> <need(s)> new pads.
  • needsSoftwareUpdate  : <device(s)> <need(s)> une mise à jour logicielle.
  • needsWater  : <device(s)> <need(s)> water.
  • networkJammingDetected  : la connexion au réseau domestique de <device(s)> ne fonctionne pas correctement.
  • noIssuesReported  : <device(s)> n'a signalé aucun problème.
  • roomsOnDifferentFloors  : <device(s)> ne peut pas atteindre ces pièces, car elles sont situées à différents étages.
  • runCycleFinished  : <device(s)> <has/have> finished running.
  • securityRestriction  : <device(s)> <has/have> a security restriction.
  • smokeDetected  : De la fumée a été détectée dans <nom de la maison>.
  • 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)> une fuite d'eau.