Erreurs et exceptions

Ce document liste les erreurs et les exceptions officiellement prises en charge pour les appareils pour la maison connectée. Veuillez utiliser ces erreurs et codes d'exception donnés dans la réponse de l'intent ou dans les notifications, le cas échéant. L'Assistant Google alertera les utilisateurs finaux sur les problèmes liés à une commande ou à l'état de l'appareil. Si la réponse contient une mise en forme incorrecte ou errorCode, l'Assistant Google envoie un message d'erreur générique aux utilisateurs, par exemple : "Désolé, 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 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 au niveau global. Par exemple, si un utilisateur dispose de plusieurs systèmes d'éclairage d'un même fournisseur et qu'ils sont contrôlés par un hub, lorsqu'il demande d'éteindre toutes ses lumières, le fournisseur peut renvoyer une erreur au niveau de l'appareil si une seule lumière est hors connexion, ou une erreur globale si l'ensemble de son hub est hors connexion et qu'aucune lumière ne peut être contrôlée. Si tous les appareils sont hors connexion, il n'y a aucune différence entre l'utilisation des erreurs globales ou au niveau de l'appareil. Lorsqu'un appareil est hors connexion, vous devez signaler l'état {"online": false} dans reportState, même si vous renvoyez le code d'erreur deviceOffline.

En résumé :

  • Erreur globale: tous les appareils figurant dans la réponse présentent la même erreur
  • Erreur locale: réponse mixte avec cas d'erreur et de réussite

Erreurs au niveau global

L'extrait de code JSON suivant montre comment renvoyer les erreurs globales dans la réponse QUERY ou EXECUTE.

Un exemple d'erreur globale deviceOffline en raison du hub est hors connexion:

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

Voici un exemple d'erreur globale inSoftwareUpdate due à 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 de code JSON suivant montre comment renvoyer les 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"
      }
    }
  }
}

EXECUTE réponse

L'extrait de code JSON suivant montre comment renvoyer les 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 comportant des 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 complémentaire

L'extrait de code JSON suivant montre comment signaler les 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 à la durée maximale d'une heure. Veuillez réessayer.
  • aboveMaximumTimerDuration : Je ne peux définir <device(s)> que sur <time period>
  • actionNotAvailable : Désolé, je ne peux pas faire ça pour le moment.
  • actionAvailablewhileRunning : <device(s)> <est/sont> en cours d'exécution. Je ne peux donc apporter aucune modification.
  • alreadyArmed : <device(s)> <est/sont> déjà armés.
  • alreadyAtMax : <device(s)> <est/are> déjà réglé sur la température maximale.
  • alreadyAtMin : <device(s)> <is/are> est déjà défini sur la température minimale.
  • alreadyClosed : <device(s)> <est/sont> déjà fermés.
  • alreadyDisarmed : <device(s)> <est/sont> déjà désarmés.
  • déjà sur la station d'accueil : <device(s)> <est/sont> déjà sur la station d'accueil.
  • alreadyInState : <device(s)> <est/sont> déjà dans cet état.
  • alreadyVerrouillage : <device(s)> <est/sont> déjà verrouillés.
  • alreadyOff : <device(s)> <est/sont> déjà éteints.
  • alreadyOn : <device(s)> <est/sont> déjà allumés.
  • alreadyOpen : <device(s)> <est/sont> déjà ouverts.
  • alreadySuspend : <device(s)> <est/sont> déjà suspendus.
  • alreadyStarted : <device(s)> <est/sont> déjà démarrés.
  • alreadyStopped : <device(s)> <est/sont> déjà arrêtés.
  • alreadyUnlocked : <device(s)> <est/sont> déjà déverrouillés.
  • ambiousZoneName : Malheureusement, <device(s)> ne peut pas identifier la zone que vous voulez dire. Assurez-vous que vos zones ont des noms uniques, puis réessayez.
  • amountAboveLimit : C'est plus que ce que <device(s)> peut prendre en charge.
  • appLaunchFailed : Désolé, échec du lancement de <app name> sur <device(s)>.
  • armFailure : <device(s)> n'a pas pu être activé.
  • armLevelNeeded : Je ne sais pas à quel niveau définir <device(s)>. Dites "Règle <appareil(s)> sur <niveau de sécurité faible>" ou "Règle <appareil(s)> sur <niveau de sécurité élevé>".
  • authFailure : Je n'arrive pas à joindre <device(s)>. Essayez de vérifier dans l'application que votre <device/devices> <est/sont> entièrement configuré.
  • bagFull : <device(s)> <has/have> <a full bag/full ways>. Veuillez vider <it/them> et réessayer.
  • underMinimumLightEffectsDuration : Cette durée est inférieure à la durée minimale de cinq minutes. Veuillez réessayer.
  • underMinimumTimerDuration : Je ne peux pas régler <device(s)> pour une durée aussi courte. Veuillez réessayer.
  • binFull : <device(s)> <has/have> <a full bin/full bins>.
  • cancelArmingRestricted : Malheureusement, 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é, impossible de passer à la chaîne <nom de la chaîne>. Veuillez réessayer plus tard.
  • chargeurIssue : Malheureusement, il semble que <device(s)> <a/possède> <un problème de chargeur/un problème de chargeur>.
  • commandInsertFailed : Impossible de traiter les commandes pour <device(s)>.
  • deadBattery : <device(s)> <has/have> <piles déchargées/piles déchargées>.
  • degrésOutOfRange : Les degrés demandés sont en dehors de la plage pour <device(s)>.
  • deviceAlertNeedsAssistance : <device(s)> <a/ont> une alerte active et <need(s)> votre assistance.
  • deviceAtExtremeTemperature : <appareil(s)> <est/sont> à <température extrême/température extrême>.
  • deviceBusy : Malheureusement, il semble que <device(s)> soit déjà en train d'effectuer une action.
  • deviceCharging : Malheureusement, <device(s)> ne peut pas effectuer cette action, car (ha_shared.ItsItsre size=$item.devices.total_device_count) est en charge.
  • deviceClogged : Malheureusement, il semble que <device(s)> soit bloqué.
  • deviceActuellementDispensing : <device(s)> distribue déjà quelque chose en ce moment.
  • deviceDoorOpen : La porte est ouverte sur <device(s)>. Veuillez la fermer et réessayer.
  • deviceHandleClosed : L'identifiant est fermé sur <device(s)>. Veuillez l'ouvrir et réessayer.
  • deviceJammingDetected : <device(s)> <est/sont> bloqués.
  • deviceLidOpen : Le capot est ouvert sur <device(s)>. Veuillez le fermer, puis réessayer.
  • deviceNeedsRepair : <device(s)> <need(s)> à réparer. Veuillez contacter votre concessionnaire réparateur local.
  • deviceNotDocked : Malheureusement, il semble que <device(s)> <n'est pas/n'est pas> sur sa station d'accueil. Veuillez <les placer> sur la station d'accueil, puis réessayer.
  • deviceNotFound : <device(s)> <est/are>n'est pas disponible. Je vous suggère de le configurer à nouveau.
  • deviceNotMounted : Malheureusement, il semble que <device(s)> ne puisse pas faire cela, car <it/there> <is/are>n'est pas installé.
  • deviceNotReady : <device(s)> <est/are>n'est pas prêt.
  • deviceStuck : <device(s)> <est/sont> bloqué(e)s et a besoin de votre aide.
  • deviceTampered (appareil altéré) : <device(s)> <a/have> été manipulé.
  • deviceThermalShutdown : Malheureusement, il semble que <device(s)> ait été éteint en raison de températures extrêmes.
  • directResponseOnlyUnaccessible : <device(s)> <n'est pas/n'est pas> compatible avec le contrôle à distance.
  • disarmFailure : Impossible de désactiver <device(s)>.
  • discrèteeOnlyOpenClose : Malheureusement, <device(s)> peut uniquement être ouvert ou fermé complètement.
  • distributeurAmountAboveLimit : <device(s)> ne peut pas distribuer une si grande quantité.
  • distributionAmountbelowLimit : <device(s)> ne peut pas distribuer une si petite quantité.
  • DissiveAmountExceeded : <device(s)> ne dispose pas de suffisamment d'élément <dispense> pour effectuer cette opération.
  • distribuerFractionalAmountNotSupported : <device(s)> ne peut pas distribuer des fractions de <dispense item>.
  • distribuerFractionalUnitNotSupported : <device(s)> n'accepte pas les fractions de cette unité pour <dispense item>.
  • distributionUnitNotSupported : <device(s)> n'est pas compatible avec cette unité pour <dispense item>.
  • doorClosedTooLong : Cela fait un moment que la porte de <device(s)> n'est pas ouverte. Veuillez l'ouvrir, vous assurer qu'il y a bien quelque chose à l'intérieur, puis réessayer.
  • faultyBattery : <device(s)> <has/have> <une batterie défectueuse/piles défectueuses>.
  • floorInaccessible : <device(s)> ne peut pas accéder à cette pièce. Veuillez <les déplacer> jusqu'au bon étage et réessayer.
  • functionNotSupported : En fait, <device(s)> <n'est pas/n'est pas> compatible avec cette fonctionnalité.
  • GenericDispenseNotSupported : J'ai besoin de savoir ce que vous voulez distribuer. Veuillez réessayer avec le nom de l'élément.
  • hardError : Désolé, une erreur s'est produite et je ne peux pas contrôler votre appareil connecté.
  • hardError : Désolé, une erreur s'est produite et je ne peux pas contrôler votre appareil connecté.
  • inAutoMode : <device(s)> <est/are> actuellement en mode automatique. Pour changer la température, vous devez changer de mode.
  • inAwayMode : <device(s)> <est/sont> actuellement définis sur le mode Absent. Pour contrôler votre thermostat, vous devez le passer manuellement en mode Chez moi via l'application Nest sur un téléphone, une tablette ou un ordinateur.
  • inDryMode : <device(s)> <est/are> actuellement défini sur le mode sec. Pour changer la température, vous devez changer de mode.
  • inEcoMode : <device(s)> <est/are> actuellement défini sur le mode Éco. Pour changer la température, vous devez changer de mode.
  • inFanOnlyMode : <device(s)> <est/are> actuellement défini sur le mode ventilateur uniquement. Pour changer la température, vous devez changer de mode.
  • inHeatOrCool : <device(s)> <est/sont> pas en mode chauffage/climatisation.
  • inHumidifierMode : <device(s)> <est/are> actuellement défini sur le mode humidificateur. Pour changer la température, vous devez changer de mode.
  • inOffMode : <device(s)> <est/sont> actuellement éteints. Pour modifier la température, vous devez changer <it/them> mode.
  • inPurifierMode : <device(s)> <est/are> actuellement défini sur le mode purificateur. Pour changer la température, vous devez changer de mode.
  • inSleepMode : <device(s)> <est/sont> en mode veille. Veuillez réessayer plus tard.
  • inSoftwareUpdate : <device(s)> <est/sont> actuellement dans une mise à jour logicielle.
  • lockFailure : <device(s)> n'a pas pu être verrouillé.
  • lockState : <device(s)> <est/sont> actuellement verrouillés.
  • lockToRange : La température se situe en dehors de la plage verrouillée sur <device(s)>.
  • faibleBatterie : <device(s)> <a/have> faible batterie.
  • maxSettingReached : <device(s)> <est/sont> déjà défini(s) sur le paramètre le plus élevé.
  • maxSpeedReached : <device(s)> <est/sont> déjà définis sur la vitesse maximale.
  • minSettingReached : <device(s)> <est/sont> déjà défini sur le paramètre le plus bas.
  • minSpeedReached : <device(s)> <est/sont> déjà définis sur la vitesse minimale.
  • monitoringServiceConnectionLost : <device(s)> <has/have> a perdu <its/their> connexion au service de surveillance.
  • needAttach : Malheureusement, il semble qu'une pièce jointe requise soit manquante sur <device(s)>. Veuillez le remplacer et réessayer.
  • needBin : Malheureusement, il semble qu'il manque une corbeille sur <device(s)>. Veuillez le remplacer et réessayer.
  • needPads : <device(s)> <need(s)> new pads.
  • requirementsSoftwareUpdate : <device(s)> <need(s)> une mise à jour logicielle.
  • needWater : <device(s)> <need(s)> eau.
  • networkProfileNotRecognized : Désolé, je ne reconnais pas "<network profile>" sur <device(s)>.
  • networkSpeedTestInProgress : Je suis déjà en train de tester la <speed/speeds>> <network>.
  • noAvailableApp : Malheureusement, <app name> n'est pas disponible.
  • noAvailableChannel : Malheureusement, il semble que la chaîne <channel name> n'est pas disponible.
  • noChannelSubscription : Malheureusement, vous n'êtes pas abonné à la chaîne <nom de la chaîne> pour le moment.
  • noTimerExists : Malheureusement, il semble qu'aucun minuteur n'est réglé sur <device(s)>.
  • non compatible : Malheureusement, ce mode n'est pas disponible pour <device(s)>.
  • obstructionDetected : <device(s)> a détecté une obstruction.
  • hors connexion , deviceoffline : Malheureusement, il semble que <device(s)> <est/sont> indisponibles pour le moment.
  • onRequiresMode : veuillez préciser le mode que vous souhaitez activer.
  • phrase secrète incorrecte : Désolé, il semble que ce code soit incorrect.
  • percentOutOfRange : Malheureusement, je ne peux pas définir <device(s)> sur <percent>.
  • pinIncorrect : (phrase secrète incorrecte)
  • rainDetected : Je n'ai pas ouvert <device(s)>, car de la pluie a été détectée.
  • rangeTooClose : Ces valeurs sont trop proches pour la plage de chauffage/climatisation pour <device(s)>. Choisissez des températures plus éloignées.
  • relinkRequired : Malheureusement, un problème est survenu avec votre compte. Veuillez utiliser l'application Google Home ou Assistant pour associer de nouveau <device(s)>.
  • distantSetDisabled :
    • Paramètre facultatif errorCodeReason
    • currentlyArmed - Désolé, la sécurité étant déjà activée, vous devez utiliser <device(s)> ou l'application pour apporter des modifications.
    • remoteUnlockNotAllowed - Malheureusement, je ne peux pas déverrouiller <device(s)> à distance.
    • remoteControlOff : cette action est actuellement désactivée. Veuillez activer la télécommande sur <device(s)> et réessayer.
    • childSafetyModeActive : cette action est désactivée pour <device(s)> lorsque la sécurité enfant est activée.
  • roomOnDifférentFloors : <device(s)> ne peut pas accéder à ces pièces, car elles se trouvent à des étages différents.
  • Arrêt de sécurité : <appareil(s)> <est/sont> en mode Arrêt de sécurité. Vous devez régler <ils> manuellement.
  • SceneUnableBeApplied : Désolé, impossible d'appliquer <device(s)>.
  • securityRestriction : <device(s)> <a/have> une restriction de sécurité.
  • softwareUpdateNotAvailable : Malheureusement, aucune mise à jour logicielle n'est disponible sur <device(s)>.
  • startRequiresTime : Pour cela, vous devez me dire combien de temps vous souhaitez utiliser <device(s)>.
  • stillCoolingDown : <appareil(s)> <est/sont> toujours en train de refroidir.
  • stillWarmingUp : <device(s)> <is/are> est toujours en marche.
  • streamNon disponible : Malheureusement, il semble que ce streaming soit actuellement indisponible sur <device(s)>.
  • streamUnplayable : Malheureusement, je ne peux pas lire le flux depuis <device(s)> pour le moment.
  • réservoirs vides : <device(s)> <has/have> <un réservoir vide/des réservoirs vides>. Veuillez remplir <it/them> et réessayer.
  • targetDéjàReached : Malheureusement, il semble que c'est déjà la température actuelle.
  • minuteurValueOutOfRange : Impossible de définir <device(s)> sur cette durée.
  • TooManyFailedFaileds : Désolé, un trop grand nombre de tentatives ont échoué. Veuillez accéder à l'application de votre appareil pour effectuer cette action.
  • transitientError : Désolé, une erreur s'est produite lors du contrôle de <device(s)>. Veuillez réessayer.
  • désactivé , deviceTurnedOff : <device(s)> <est/sont> actuellement éteints.
  • cannotToLocateDevice : Je n'ai pas pu localiser <device(s)>.
  • UnknownFoodPreset : <device(s)> n'est pas compatible avec ce préréglage.
  • UnlockFailure : <device(s)> n'a pas pu être déverrouillé.
  • unpausableState : Impossible de suspendre <device(s)> 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 l'écran lint du sèche-linge est plein, l'utilisateur peut toujours le démarrer, mais vous pouvez l'avertir de cet état. De même, lorsqu'un appareil présente une batterie faible qui n'est pas vide, vous pouvez tout de même 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 (SUCCESS) concernant l'appareil cible

L'exemple suivant illustre 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 (SUCCESS) concernant un autre appareil utilisant StatusReport

Cet exemple concerne l'activation d'un système de sécurité: D'accord, j'active le système de sécurité. La fenêtre avant 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"
        }]
      }
    }]
  }
}

Blocage de l'exception 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éreront la synthèse vocale associée sur l'appareil.

  • bagFull : <device(s)> <has/have> <a full bag/full ways>. Veuillez vider <it/them> et réessayer.
  • binFull : <device(s)> <has/have> <a full bin/full bins>.
  • carbonMonoxideDetected : du monoxyde de carbone a été détecté dans <house name>.
  • deviceAtExtremeTemperature : <appareil(s)> <est/sont> à <température extrême/température extrême>.
  • deviceJammingDetected : <device(s)> <est/sont> bloqués.
  • deviceMoved : <device(s)> <was/were> déplacé.
  • deviceOpen : <device(s)> <est/sont> ouverts.
  • deviceTampered (appareil altéré) : <device(s)> <a/have> été manipulé.
  • deviceUnplugged : <device(s)> <est/sont> débranchés.
  • floorInaccessible : <device(s)> ne peut pas accéder à cette pièce. Veuillez <les déplacer> jusqu'au bon étage et réessayer.
  • wareFailure : <device(s)> <a/ont> un problème matériel.
  • inSoftwareUpdate : <device(s)> <est/sont> actuellement dans une mise à jour logicielle.
  • isBypassed : <device(s)> <est/sont> actuellement contournés.
  • faibleBatterie : <device(s)> <a/have> faible batterie.
  • MotionDetected : <device(s)> <detect(s)> mouvement.
  • needPads : <device(s)> <need(s)> new pads.
  • requirementsSoftwareUpdate : <device(s)> <need(s)> une mise à jour logicielle.
  • needWater : <device(s)> <need(s)> eau.
  • networkJammingDetected : la connexion du réseau domestique à <device(s)> ne fonctionne pas correctement.
  • noIssuesReported : <device(s)> n'a signalé aucun problème.
  • roomOnDifférentFloors : <device(s)> ne peut pas accéder à ces pièces, car elles se trouvent à des étages différents.
  • runCycleFinished : <device(s)> <has/have> completed running.
  • securityRestriction : <device(s)> <a/have> une restriction de sécurité.
  • fuméeDetected : de la fumée a été détectée dans <nom de la maison>.
  • réservoirs vides : <device(s)> <has/have> <un réservoir vide/des réservoirs vides>. Veuillez remplir <it/them> et réessayer.
  • Utiliser la sauvegarde cellulaire : <appareil(s)> <utilise> la connexion cellulaire.
  • waterLeakDetected : <device(s)> <détecte(s)> une fuite d'eau.