Erreurs et exceptions

Ce document liste les erreurs et exceptions officiellement prises en charge pour les appareils de maison connectée. Veuillez utiliser les codes d'erreur et d'exception fournis dans la réponse de l'intent ou dans les notifications si vous l'avez implémenté, afin que l'Assistant Google alerte les utilisateurs finaux en cas de problème lié à une commande ou à l'état de l'appareil. 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 de code JSON suivant montre comment signaler les 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 de code 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.
  • au-dessus de MaximumMinuteurDuration : 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> est déjà réglé sur la température maximale.
  • alreadyAtMin : <device(s)> <is/are> est déjà réglé sur la température minimale.
  • 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.
  • alreadySended : <device(s)> <is/are> est déjà arrêté.
  • 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 n'arrive pas à me connecter à <device(s)>. Vérifiez dans l'application que votre <device/devices> <est/sont> entièrement configuré.
  • 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 <device(s)> ou l'appli.
  • 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 de <device(s)>.
  • deviceAlertNeedsAssistance : <device(s)> <a/ont> une alerte active et <besoin(s)> de votre aide.
  • deviceAtExtremeTemperature : <device(s)> <is/are> à <une température extrême/des températures extrêmes>.
  • 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> est bloqué.
  • deviceLidOpen  : Le capot de l'<appareil ou les appareils> est ouvert. 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)> <n'est pas/ne sont pas> sur la station d'accueil. Veuillez placer <l'appareil/les appareils> sur la station d'accueil et réessayer.
  • deviceNotFound : <device(s)> <is/are>n'est pas disponible. Vous pouvez essayer de les configurer à nouveau.
  • deviceNotMounted : Désolé, il semble que <device(s)> ne peut pas faire cela, car <it/ulated> <is/are>n'est pas installé.
  • deviceNotReady : <device(s)> <is/are>n'est pas prêt.
  • 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.
  • disAmountAboveLimit : <device(s)> ne peut pas distribuer une si grande quantité.
  • disAmountbelowLimit : <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.
  • distribuerFractionalAmountNotSupported : <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>.
  • floorUnreach : <device(s)> ne peut pas accéder à cette pièce. Veuillez les déplacer <it/them> au bon étage 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 indiquant le nom de l'élément.
  • 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> est actuellement défini sur le mode Absent. 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 <it/them> de 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> est actuellement réglé sur le mode humidificateur. Pour modifier la température, vous devez changer <it/them> de changer de mode.
  • inOffMode : <device(s)> <est/sont> actuellement éteints. Pour modifier la température, vous devez changer de 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> est déjà défini sur le paramètre le plus bas.
  • 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 remplacer et réessayer.
  • needsBin  : Désolé, il semble qu'il manque un bac sur <device(s)>. Veuillez le remettre en place et réessayer.
  • needPads : <device(s)> <need(s)> new pads.
  • needsSoftwareUpdate  : <device(s)> <need(s)> une mise à jour logicielle.
  • needWater : <device(s)> <besoin(s)> d'eau.
  • networkProfileNotrecognized : Désolé, je ne reconnais pas "<network profile>" sur <device(s)>.
  • networkSpeedTestInProgress  : Je teste déjà la <network> <speed/speeds>>.
  • noAvailableApp : Désolé, il semble que <app name> 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 <channel name> 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.
  • onRequiredsMode : Veuillez spécifier le mode que vous souhaitez activer.
  • secrèteIncorrect : Désolé, il semble que ce code est 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'une erreur s'est produite 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 actif.
  • roomsOnDifferentFloors : <device(s)> ne peut pas accéder à ces salles, car elles se trouvent à des étages différents.
  • 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)>.
  • toujoursCoolingDown : <device(s)> <is/are> encore en train de refroidir.
  • 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> <un réservoir vide/vide>. Veuillez remplir <it/them> et réessayer.
  • 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.
  • transitientError : Désolé, un problème est survenu lors du contrôle de <device(s)>. Veuillez réessayer.
  • disabledOff , deviceTurnedOff : <device(s)> <est/sont> éteint(e)s pour le moment.
  • unableToLocateDevice : Je n'ai pas pu 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 en cas de problème ou d'alerte 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 sert à verrouiller 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>.
  • carbonMonoxyideDetected : Du monoxyde de carbone a été détecté dans <house name>.
  • deviceAtExtremeTemperature  : <device(s)> <is/are> at <an extreme temperature/extreme temperatures>.
  • deviceJammingDetected  : <device(s)> <is/are> jammed.
  • deviceMoved  : <device(s)> <was/were> moved.
  • deviceOpen  : <device(s)> <is/are> open.
  • deviceTampered : <device(s)> <has/have> a été altéré.
  • deviceUnplugged : <device(s)> <est/sont> débranché.
  • 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.
  • needPads : <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.