Ошибки и исключения

В этом документе перечислены официально поддерживаемые ошибки и исключения для устройств умного дома. Используйте эти коды ошибок и исключений в ответе на намерение или в уведомлениях, если вы их реализовали, чтобы Google Ассистент сообщал конечным пользователям о проблемах, связанных с определенной командой или состоянием устройства. Если в ответе неправильное форматирование или errorCode, Google Ассистент показывает пользователям общее сообщение об ошибке, например "Извините, устройство сейчас недоступно".

Ошибки

Если при выполнении запроса execute или query возникает проблема, необходимо вернуть код ошибки. Например, если замок заклинило и его нельзя открыть или закрыть, пользователю нужно сообщить об ошибке.

Коды ошибок можно прикреплять на уровне устройства или на глобальном уровне. Например, если у пользователя много светильников от одного поставщика, которые управляются через концентратор, то при запросе на отключение всех светильников поставщик может вернуть ошибку на уровне устройства, если один из светильников не подключен к сети, или ошибку на глобальном уровне, если концентратор не подключен к сети и ни одним светильником нельзя управлять. Если все устройства офлайн, то нет разницы между ошибками на уровне устройства и на глобальном уровне.

Сводные указания:

  • Ошибка на уровне всего ответа: все устройства в ответе имеют одну и ту же ошибку.
  • Ошибка на уровне локального ответа: смешанный ответ с ошибками и успешными случаями

Ошибки на глобальном уровне

В приведенном ниже фрагменте кода JSON показано, как возвращать ошибки на уровне глобального домена в ответе QUERY или EXECUTE.

Пример ошибки deviceOffline на уровне устройства из-за того, что контроллер офлайн:

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

Пример ошибки inSoftwareUpdate на уровне аккаунта из-за обновления центра:

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

Ошибки на уровне устройства

Ответ функции QUERY

В приведенном ниже фрагменте JSON показано, как возвращать ошибки на уровне устройства в ответе на запрос.

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

Ответ EXECUTE

В приведенном ниже фрагменте кода JSON показано, как возвращать ошибки на уровне устройства в ответе 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
        }
      }
    ]
  }
}

Уведомления с ошибками

Упреждающее уведомление

В приведенном ниже фрагменте кода JSON показано, как сообщать об ошибках на уровне устройства в проактивном уведомлении.

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

Дополнительный ответ

В приведенном ниже фрагменте кода JSON показано, как сообщить об ошибках на уровне устройства в последующем ответе.

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

Список ошибок

При возникновении перечисленных ниже ошибок на устройстве будет воспроизводиться соответствующий текст.

  • aboveMaximumLightEffectsDuration : Продолжительность превышает максимальное значение в 1 час. Повторите попытку.
  • aboveMaximumTimerDuration : Я могу установить таймер на <device(s)> максимум на <time period>.
  • actionNotAvailable : Извините, сейчас у меня не получается это сделать. Совет. Проверьте логику признаков и текущего состояния устройства в вашем сервисе.
  • actionUnavailableWhileRunning : <device(s)> <is/are> currently running, so I can't make any changes.
  • alreadyArmed : <device(s)> <is/are> already armed.
  • alreadyAtMax : <устройство(а)> уже настроено на максимальную температуру.
  • alreadyAtMin : <устройство(а)> уже настроено на минимальную температуру.
  • 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> already in that state.
  • alreadyLocked : <device(s)> <is/are> already locked.
  • alreadyOff : <device(s)> <is/are> already off.
  • alreadyOn : <device(s)> <is/are> already on.
  • alreadyOpen : <устройство(а)> уже открыто(ы).
  • 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 : Извините, <device(s)> не может определить, какую зону вы имеете в виду. Убедитесь, что у зон уникальные названия, и повторите попытку.
  • amountAboveLimit : Эта функция не поддерживается на <device(s)>.
  • appLaunchFailed : Не удалось запустить приложение <app name> на устройстве <device(s)>. Совет. Проверьте идентификатор приложения и убедитесь, что оно поддерживается на целевом устройстве.
  • armFailure : Не удалось поставить на охрану следующие устройства: <device(s)>.
  • armLevelNeeded : Я не понимаю, какой уровень безопасности нужно установить для <device(s)>. Скажите "Установи для <устройство(а)> <низкий уровень безопасности>" или "Установи для <устройство(а)> <высокий уровень безопасности>".
  • authFailure : Мне не удается подключиться к <device(s)>. Проверьте, полностью ли настроено <device/devices> в приложении.
  • bagFull : У<device(s)> <has/have> <a full bag/full bags>. Опустошите <it/them> и повторите попытку.
  • belowMinimumLightEffectsDuration : Продолжительность меньше минимальной (5 минут). Повторите попытку.
  • belowMinimumTimerDuration : Я не могу установить на <device(s)> такое короткое время. Повторите попытку.
  • binFull : <device(s)> <has/have> <a full bin/full bins>.
  • cancelArmingRestricted : Извините, но я не могу отменить постановку <device(s)> на охрану.
  • cancelTooLate : К сожалению, отменить заказ уже нельзя. Используйте <device(s)> или приложение.
  • channelSwitchFailed : Извините, мне не удалось включить канал <название канала>.Повторите попытку позже. Совет. Проверьте названия и номера каналов, а также статус подписки пользователя.
  • chargerIssue : Похоже, с зарядным устройством <device(s)> возникла проблема. Совет. Партнеру следует изучить телеметрию на уровне оборудования и состояние батареи.
  • commandInsertFailed : Не удалось обработать команды для <устройства>. Совет. Проверьте скорость записи в базу данных или логику внутренней очереди команд.
  • deadBattery : <device(s)> <has/have> <a dead battery/dead batteries>.
  • degreesOutOfRange : Запрошенное значение не входит в допустимый диапазон для <device(s)>.
  • deviceAlertNeedsAssistance : У <device(s)> есть активное оповещение и <need(s)> ваша помощь.
  • deviceAtExtremeTemperature : <device(s)> <is/are> at <an extreme temperature/extreme temperatures>.
  • deviceBusy : Похоже, <device(s)> уже что-то делает.
  • deviceCharging : Похоже, <device(s)> не может выполнить это действие, потому что (ha_shared.ItsTheyre size=$item.devices.total_device_count) заряжается.
  • deviceClogged : Похоже, <device(s)> засорилось.
  • deviceCurrentlyDispensing : Устройство<device(s)> уже начало выдачу.
  • deviceDoorOpen : Дверь на устройстве <device(s)> открыта. Закройте ее и повторите попытку.
  • deviceHandleClosed : Ручка закрыта на устройстве <device(s)>. Откройте ее и повторите попытку.
  • deviceJammingDetected : <device(s)> <is/are> jammed.
  • deviceLidOpen : Крышка устройства <device(s)> открыта. Закройте ее и попробуйте снова.
  • deviceNeedsRepair : <device(s)> <need(s)> to be repaired. Обратитесь к местному дилеру.
  • deviceNotDocked : Похоже, <device(s)> <isn't/aren't> подсоединены к док-станции. Подключите <устройство/устройства> и повторите попытку.
  • deviceNotFound : Устройство (устройства) <device(s)> недоступно. Попробуйте настроить <it/them> ещё раз. Совет. Убедитесь, что ваша серверная часть всегда синхронизирует базу данных Home Graph. Вызывать функцию requestSync при добавлении или удалении устройств.
  • deviceNotMounted : Похоже, <device(s)> не может этого сделать, так как <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 : К сожалению, устройство <device(s)> завершило работу из-за экстремальных температур.
  • directResponseOnlyUnreachable : <device(s)> <doesn't/don't> support remote control.
  • disarmFailure : Не удалось отключить сигнализацию на устройстве <device(s)>.
  • discreteOnlyOpenClose : Извините, <device(s)> можно только открыть или закрыть до конца.
  • dispenseAmountAboveLimit : <device(s)> не может выдать такое большое количество.
  • dispenseAmountBelowLimit : Устройство <device(s)> не может выдавать так мало.
  • dispenseAmountRemainingExceeded : На устройстве <device(s)> недостаточно <dispense item>.
  • dispenseFractionalAmountNotSupported : <device(s)> не может выдавать дробное количество <dispense item>.
  • dispenseFractionalUnitNotSupported : Устройство <device(s)> не поддерживает дробные числа для этой единицы измерения количества <dispense item>.
  • dispenseUnitNotSupported : <device(s)> не поддерживает эту единицу измерения для <dispense item>.
  • doorClosedTooLong : Дверца на <device(s)> долго была закрыта. Откройте её и убедитесь, что внутри не пусто, а затем попробуйте снова.
  • emergencyHeatOn : <device(s)> <is/are> in Emergency Heat Mode, so <it/they>'ll have to be adjusted by hand.
  • faultyBattery : <устройство(а)> <имеет/имеют> <неисправную батарею/неисправные батареи>.
  • floorUnreachable : <device(s)> не может попасть в эту комнату. Перенесите <его/их> на нужный этаж и повторите попытку.
  • functionNotSupported : На самом деле, <device(s)> <doesn't/don't> support that functionality. Совет. Убедитесь, что ответ SYNC точно отражает возможности устройства.
  • genericDispenseNotSupported : Мне нужно знать, что вы хотите получить. Попробуйте ещё раз, указав название товара.
  • hardError : Произошла ошибка. Я не могу управлять вашим устройством умного дома.
  • hardError : Произошла ошибка. Я не могу управлять вашим устройством умного дома.
  • inAutoMode : <device(s)> <is/are> currently set to auto mode. Чтобы изменить температуру, нужно переключить <it/them> в другой режим.
  • inAwayMode : <device(s)> <is/are> currently set to away mode. Чтобы управлять термостатом, вам нужно вручную переключить его в режим "Я дома" в приложении Nest на телефоне, планшете или компьютере.
  • inDryMode : <device(s)> <is/are> currently set to dry mode. Чтобы изменить температуру, нужно переключить <it/them> в другой режим.
  • inEcoMode : <device(s)> <is/are> currently set to eco mode. Чтобы изменить температуру, нужно переключить <it/them> в другой режим.
  • inFanOnlyMode : <device(s)> <is/are> currently set to fan-only mode. Чтобы изменить температуру, нужно переключить <it/them> в другой режим.
  • inHeatOrCool : <device(s)> <is/are>n't in heat/cool mode.
  • inHumidifierMode : <device(s)> <is/are> currently set to humidifier mode. Чтобы изменить температуру, нужно переключить <it/them> в другой режим.
  • inOffMode : <устройство(а)> сейчас выключено(ы). Чтобы изменить температуру, нужно перевести <его/их> в другой режим.
  • inPurifierMode : <device(s)> <is/are> currently set to purifier mode. Чтобы изменить температуру, нужно переключить <it/them> в другой режим.
  • inSleepMode : <устройство(а)> <находится/находятся> в режиме сна. Повторите попытку позже.
  • inSoftwareUpdate : <device(s)> <is/are> currently in a software update.
  • lockFailure : Не удалось заблокировать <device(s)>. Совет. Проверьте, не заклинило ли замок, достаточно ли питания и не сломался ли мотор.
  • lockedState : <device(s)> <is/are> currently locked.
  • lockedToRange : Эта температура не входит в диапазон, заданный для <device(s)>.
  • lowBattery : У <device(s)> низкий заряд батареи.
  • 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 : Похоже, на устройстве <device(s)> отсутствует нужная насадка. Установите ее и повторите попытку.
  • needsBin : Похоже, на устройстве <device(s)> отсутствует пылесборник. Установите ее и повторите попытку.
  • needsPads : <device(s)> <need(s)> new pads.
  • needsSoftwareUpdate : <device(s)> <need(s)> a software update.
  • needsWater : <device(s)> <need(s)> water.
  • networkProfileNotRecognized : Извините, я не знаю, что такое "<network profile>" на устройстве <device(s)>. Совет. Проверьте, чтобы название профиля совпадало с поддерживаемыми профилями в ответе SYNC.
  • networkSpeedTestInProgress : Я уже проверяю <скорость/скорости> <сеть>.
  • noAvailableApp : К сожалению, приложение <app name> недоступно.
  • noAvailableChannel : Похоже, канал <channel name> недоступен.
  • noChannelSubscription : Вы пока не подписаны на канал <название канала>.
  • noTimerExists : Похоже, на <device(s)> нет запущенных таймеров.
  • notSupported : К сожалению, этот режим недоступен для <device(s)>.
  • obstructionDetected : <device(s)> обнаружили препятствие.
  • offline , deviceOffline : Похоже, <device(s)> сейчас недоступны.
  • onRequiresMode : Укажите, какой режим вы хотите включить.
  • passphraseIncorrect : Похоже, PIN-код неверный.
  • percentOutOfRange : Извините, я не могу установить для <device(s)> значение <percent>.
  • pinIncorrect : (passphraseIncorrect)
  • rainDetected : Мне пришлось оставить <device(s)> закрытыми, так как был зафиксирован дождь.
  • rangeTooClose : Температуры слишком близки друг к другу для диапазона нагрева и охлаждения для <device(s)>. Выберите температуры, которые будут дальше друг от друга.
  • relinkRequired : Похоже, что-то не так с вашим аккаунтом. Установите связь с устройством ещё раз в приложении Google Home или "Ассистент". Совет. Убедитесь, что ваш сервер возвращает этот код, когда токен обновления становится недействительным навсегда.
  • remoteSetDisabled :
    • Необязательный параметр errorCodeReason
    • currentlyArmed - Поскольку сигнализация уже включена, вы можете внести изменения только через <device(s)> или приложение.
    • remoteUnlockNotAllowed – Извините, я не могу разблокировать <устройство(а)> удаленно.
    • remoteControlOff – Действие недоступно. Включите дистанционное управление на устройстве <device(s)> и повторите попытку.
    • childSafetyModeActive – Это действие недоступно для <device(s)>, поскольку включён режим безопасности для детей.
  • roomsOnDifferentFloors : <device(s)> не может попасть в эти комнаты, потому что они находятся на разных этажах.
  • safetyShutOff : <device(s)> <is/are> in Safety Shut-Off Mode, so <it/they>'ll have to be adjusted by hand.
  • sceneCannotBeApplied : Не удалось применить сцену к <device(s)>. Совет. Проверьте внутреннее состояние сцен пользователя в облаке партнера.
  • securityRestriction : <device(s)> <has/have> a security restriction.
  • softwareUpdateNotAvailable : Обновлений для <device(s)> нет.
  • startRequiresTime : Для этого скажите, на сколько нужно поставить таймер на <device(s)>.
  • stillCoolingDown : <device(s)> <is/are> still cooling down.
  • stillWarmingUp : <device(s)> <is/are> still warming up.
  • streamUnavailable : Похоже, трансляция сейчас недоступна на <device(s)>.
  • streamUnplayable : Извините, сейчас я не могу воспроизвести трансляцию на <device(s)>. Совет. Проверьте сигналы WebRTC/HLS и убедитесь, что URL трансляции действителен.
  • tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Please fill <it/them> and try again.
  • targetAlreadyReached : Похоже, это уже текущая температура.
  • timerValueOutOfRange : Для <device(s)> нельзя задать такое время.
  • tooManyFailedAttempts : Извините, было слишком много неудачных попыток. Чтобы выполнить это действие, перейдите в приложение на устройстве.
  • transientError : При использовании <device(s)> что-то пошло не так. Повторите попытку. Примечание. Чаще всего эти ошибки проявляются в виде разрыва соединения с устройством или сервисом. а также если не удается установить новые подключения к серверу.
  • turnedOff , deviceTurnedOff : <device(s)> <is/are> off right now.
  • unableToLocateDevice : Мне не удалось найти <device(s)>. unableToLocateDevice Проверьте подключение устройства к локальной сети (Wi-Fi/Bluetooth).
  • unknownFoodPreset : <device(s)> не поддерживает такой режим приготовления.
  • unlockFailure : Не удалось разблокировать <device(s)>. Совет. Проверьте, не заклинило ли устройство, не разрядилась ли батарея и правильно ли введен PIN-код.
  • unpausableState : Сейчас нельзя приостановить работу <device(s)>.
  • userCancelled : ok
  • valueOutOfRange : Невозможно установить такую температуру на устройстве <device(s)>.

Отчеты о статусе онлайн и офлайн

Если устройство находится в режиме офлайн, в течение пяти минут после того, как вы заметили его поведение, отправьте в Report State значение <code{"online": code="" dir="ltr" false}<="" translate="no">. И наоборот, когда устройство снова подключается к интернету, вы должны сообщить об этом в Report State в течение пяти минут после того, как устройство начнет работать в режиме онлайн. Когда устройство снова подключается к интернету, партнер должен сообщить о его текущем состоянии с помощью reportStateAndNotification API. В этом примере показано, что устройство типа light подключено к сети и сообщает о текущем состоянии всех устройств.
"requestId": "test-request-id",
  "agentUserId": "agent-user-1",
    "payload":{
      "devices": {
        "states": {
          "device-id-1": {
            "brightness": 65,
            "on": true,
            "online": true
          }
          "notifications": {},
        }
      }
    }

Исключения

Исключение следует возвращать, если с командой связана проблема или оповещение. Команда может быть выполнена успешно или с ошибкой.

Если команда выполнена успешно (статус = "SUCCESS"), сообщите об исключениях, используя признак StatusReport (для устройств, отличных от целевого), или вернув соответствующий exceptionCode (для целевого устройства).

Например, если фильтр сушильной машины заполнен, пользователь все равно может запустить ее, но вы можете предупредить его об этом. Аналогично, если батарея устройства разряжена, но не полностью, вы можете выполнить команду, но должны сообщить пользователю, что батарея устройства разряжена.

Если команда не выполняется из-за исключений, статус должен быть EXCEPTIONS, а исключения должны быть указаны с помощью свойства StatusReport.

Неблокирующее исключение (SUCCESS) для целевого устройства

Вот пример блокировки двери:

Низкий заряд батареи замка на входной двери. Закрываю входную дверь.

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

Неблокирующее исключение (SUCCESS) о другом устройстве, использующем StatusReport

Пример для включения охранной системы: Хорошо, включаю охранную систему. Переднее окно открыто.

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

Исключение блокировки, связанное с другим устройством, использующим 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"
          }
        ]
      }
    }
  }
}

Список исключений

В следующих случаях на устройстве будет воспроизводиться соответствующий текст.

  • bagFull : У<device(s)> <has/have> <a full bag/full bags>. Опустошите <it/them> и повторите попытку.
  • binFull : <device(s)> <has/have> <a full bin/full bins>.
  • carbonMonoxideDetected : В <название дома> обнаружен угарный газ.
  • deviceAtExtremeTemperature : <device(s)> <is/are> at <an extreme temperature/extreme temperatures>.
  • deviceJammingDetected : <device(s)> <is/are> jammed.
  • deviceMoved : <устройство(а)> <было/были> перемещено.
  • deviceOpen : <устройство(а)> <открыто/открыты>.
  • deviceTampered : <device(s)> <has/have> been tampered with.
  • deviceUnplugged : <device(s)> <is/are> unplugged.
  • floorUnreachable : <device(s)> не может попасть в эту комнату. Перенесите <его/их> на нужный этаж и повторите попытку.
  • hardwareFailure : У <device(s)> возникла проблема с оборудованием.
  • inSoftwareUpdate : <device(s)> <is/are> currently in a software update.
  • isBypassed : <device(s)> <is/are> currently bypassed.
  • lowBattery : У <device(s)> низкий заряд батареи.
  • motionDetected : <device(s)> <detect(s)> motion.
  • needsPads : <device(s)> <need(s)> new pads.
  • needsSoftwareUpdate : <device(s)> <need(s)> a software update.
  • needsWater : <device(s)> <need(s)> water.
  • networkJammingDetected : Возникли проблемы с подключением <device(s)> к домашней сети.
  • noIssuesReported : Устройство(а) <device(s)> не сообщило(и) о проблемах.
  • roomsOnDifferentFloors : <device(s)> не может попасть в эти комнаты, потому что они находятся на разных этажах.
  • runCycleFinished : <device(s)> <has/have> finished running.
  • securityRestriction : <device(s)> <has/have> a security restriction.
  • smokeDetected : В <название дома> обнаружен дым.
  • 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 : <устройство(а)> <обнаружило(и)> утечку воды.
</code{"online":></code{"online":>