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

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

Ошибки

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

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

В итоге:

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

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

В следующем фрагменте 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"
  }
}

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

ЗАПРОС ответ

Следующий фрагмент JSON показывает, как возвращаются ошибки на уровне устройства в ответе QUERY.

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

Выполнить ответ

В следующем фрагменте 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"
            }
          }
        }
      }
    }
  }
}

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

Следующие ошибки приведут к появлению соответствующего TTS на устройстве.

  • aboveMaximumLightEffectsDuration : Это больше максимальной продолжительности в 1 час. Попробуйте ещё раз.
  • aboveMaximumTimerDuration : Я могу установить <устройства> только на <период времени>
  • actionNotAvailable : Извините, сейчас я не могу этого сделать.
  • actionUnavailableWhileRunning : <устройства> в данный момент работают, поэтому я не могу внести какие-либо изменения.
  • alreadyArmed : <устройства> уже поставлены на охрану.
  • alreadyAtMax : <устройство(а)> уже установлено на максимальную температуру.
  • alreadyAtMin : <устройства> уже установлены на минимальную температуру.
  • alreadyClosed : <устройство(а)> уже закрыто.
  • alreadyDisarmed : <устройство(а)> уже снято с охраны.
  • alreadyDocked : <устройства> уже пристыкованы.
  • alreadyInState : <устройство(а)> уже находится в этом состоянии.
  • alreadyLocked : <устройство(а)> уже заблокировано.
  • alreadyOff : <устройство(а)> уже выключено.
  • alreadyOn : <устройство(а)> уже включено.
  • alreadyOpen : <устройство(а)> уже открыто.
  • alreadyPaused : <устройство(а)> уже приостановлено.
  • alreadyStarted : <устройство(а)> уже запущено.
  • alreadyStopped : <устройство(а)> уже остановлено.
  • alreadyUnlocked : <устройство(а)> уже разблокировано.
  • ambiguousZoneName : К сожалению, <устройство(а)> не может определить, какую зону вы имеете в виду. Убедитесь, что у ваших зон уникальные имена, и повторите попытку.
  • amountAboveLimit : Это больше, чем может поддерживать <device(s)>.
  • appLaunchFailed : Извините, не удалось запустить <имя приложения> на <устройствах>.
  • armFailure : <устройства> не удалось включить.
  • armLevelNeeded : Я не уверен, какой уровень безопасности установить для <устройства(-ов)>. Попробуйте сказать: «Установить <устройства(-ов)> на <низкий уровень безопасности>» или «Установить <устройства(-ов)> на <высокий уровень безопасности>».
  • authFailure : Не удаётся подключиться к <устройству(ам)>. Попробуйте проверить приложение, чтобы убедиться, что ваше <устройство/устройства> полностью настроено.
  • bagFull : <устройство(а)> <имеет/имеют> <полный мешок/полные мешки>. Пожалуйста, опустошите <его/их> и повторите попытку.
  • BelowMinimumLightEffectsDuration : Это меньше минимальной продолжительности в 5 минут. Попробуйте ещё раз.
  • BelowMinimumTimerDuration : Не удаётся установить <устройства> на столь короткое время. Попробуйте ещё раз.
  • binFull : <устройство(а)> <имеет/имеют> <полную корзину/полные корзины>.
  • cancelArmingRestricted : Извините, мне не удалось отменить постановку на охрану <устройства(ов)>.
  • cancelTooLate : Извините, уже слишком поздно отменять. Используйте <устройство(а)> или приложение.
  • channelSwitchFailed : Извините, не удалось переключиться на канал <название канала>. Повторите попытку позже.
  • chargerIssue : Извините, похоже, что у <устройства(-ии)> <есть/есть> <проблема с зарядным устройством>.
  • commandInsertFailed : Невозможно обработать команды для <устройств(а)>.
  • deadBattery : <устройство(а)> <имеет/имеют> <разряженную батарею/разряженные батареи>.
  • degreesOutOfRange : Запрошенные градусы выходят за пределы диапазона для <устройств(а)>.
  • deviceAlertNeedsAssistance : <устройство(а)> <имеет/имеют> активное оповещение и <нуждаются(ется)> в вашей помощи.
  • deviceAtExtremeTemperature : <устройство(а)> <находится> при <экстремальной температуре/экстремальных температурах>.
  • deviceBusy : Извините, похоже, <device(s)> уже что-то делает прямо сейчас.
  • deviceCharging : Извините, похоже, <device(s)> не может этого сделать, так как (ha_shared.ItsTheyre size=$item.devices.total_device_count) заряжается.
  • deviceClogged : Извините, похоже, <устройство(а)> засорено.
  • deviceCurrentlyDispensing : <устройство(а)> уже что-то выдает прямо сейчас.
  • deviceDoorOpen : Дверь открыта на <устройстве(ах)>. Закройте её и повторите попытку.
  • deviceHandleClosed : Дескриптор закрыт на <устройстве(ах)>. Откройте его и повторите попытку.
  • deviceJammingDetected : <устройство(а)> <заклинило>.
  • deviceLidOpen : Крышка открыта на <устройствах>. Закройте её и повторите попытку.
  • deviceNeedsRepair : <устройства> <необходимо> отремонтировать. Обратитесь в местный сервисный центр.
  • deviceNotDocked : Извините, похоже, <устройства> не пристыкованы. Пожалуйста, пристыкуйте <их> и повторите попытку.
  • deviceNotFound : <устройство(а)> <недоступно>. Попробуйте настроить <его/их> заново.
  • deviceNotMounted : Извините, похоже, <устройства> не могут этого сделать, поскольку <они> не смонтированы.
  • deviceNotReady : <устройство(а)> не готово.
  • deviceStuck : <устройство(а)> <застряло> и нуждается в вашей помощи.
  • deviceTampered : <устройство(а)> было <подделано>.
  • deviceThermalShutdown : Извините, похоже, <устройства> отключились из-за экстремальных температур.
  • directResponseOnlyUnreachable : <устройство(а)> <не> поддерживает удаленное управление.
  • disarmFailure : <устройства> не удалось отключить.
  • discretOnlyOpenClose : Извините, <устройства> могут быть открыты или закрыты только полностью.
  • dispenseAmountAboveLimit : <устройство(а)> не может выдать такую большую сумму.
  • dispenseAmountBelowLimit : <устройство(а)> не может выдать такую маленькую сумму.
  • dispenseAmountRemainingExceeded : у <устройства(ов)> недостаточно <предмета выдачи> для этого.
  • dispenseFractionalAmountNotSupported : <устройства> не могут выдавать дробные части <предмета выдачи>.
  • dispenseFractionalUnitNotSupported : <устройство(а)> не поддерживает дробные части этой единицы для <элемента выдачи>.
  • dispenseUnitNotSupported : <устройство(а)> не поддерживает эту единицу для <элемента выдачи>.
  • doorClosedTooLong : Дверь на <устройствах> давно не открывалась. Откройте её, убедитесь, что внутри что-то есть, и повторите попытку.
  • emergencyHeatOn : <устройство(а)> <находится(ются)> в режиме аварийного обогрева, поэтому <его/их>придется отрегулировать вручную.
  • faultyBattery : <устройство(а)> <имеет/имеют> <неисправную батарею/неисправные батареи>.
  • floorUnreachable : <устройство(а)> не может подключиться к этой комнате. Переместите <его/их> на нужный этаж и повторите попытку.
  • functionNotSupported : На самом деле, <устройство(а)> <не> поддерживает эту функциональность.
  • genericDispenseNotSupported : Мне нужно знать, что именно вы хотите выдать. Пожалуйста, повторите попытку, указав название товара.
  • hardError : Извините, что-то пошло не так, и я не могу управлять вашим домашним устройством.
  • hardError : Извините, что-то пошло не так, и я не могу управлять вашим домашним устройством.
  • inAutoMode : <устройство(а)> в настоящее время настроено на автоматический режим. Чтобы изменить температуру, необходимо переключить <его/их> в другой режим.
  • inAwayMode : <устройства> в настоящее время находятся в режиме «Отсутствие». Для управления термостатом необходимо вручную перевести его в режим «Дома» с помощью приложения Nest на телефоне, планшете или компьютере.
  • inDryMode : <устройство(а)> в настоящее время настроено на режим осушения. Чтобы изменить температуру, необходимо переключить <его/их> в другой режим.
  • inEcoMode : <устройство(а)> в настоящее время настроено на эко-режим. Чтобы изменить температуру, необходимо переключить <его/их> в другой режим.
  • inFanOnlyMode : <устройства> в настоящее время работают в режиме «только вентилятор». Чтобы изменить температуру, необходимо переключить <их> в другой режим.
  • inHeatOrCool : <устройство(а)> <не находятся> в режиме обогрева/охлаждения.
  • inHumidifierMode : <устройство(а)> в настоящее время настроено на режим увлажнителя. Чтобы изменить температуру, необходимо переключить <его/их> в другой режим.
  • inOffMode : <устройство(а)> в настоящее время выключено. Чтобы изменить температуру, необходимо переключить <его/их> в другой режим.
  • inPurifierMode : <устройство(а)> в настоящее время настроено на режим очистителя. Чтобы изменить температуру, необходимо переключить <его/их> в другой режим.
  • inSleepMode : <устройство(а)> находится в спящем режиме. Повторите попытку позже.
  • inSoftwareUpdate : <устройство(а)> в настоящее время находится в процессе обновления программного обеспечения.
  • lockFailure : не удалось заблокировать <устройство(а)>.
  • lockedState : <устройство(а)> в данный момент заблокировано.
  • lockedToRange : эта температура находится за пределами заблокированного диапазона на <устройствах>.
  • lowBattery : <устройство(а)> <имеет/имеют> низкий заряд батареи.
  • maxSettingReached : <устройство(а)> уже установлено на максимальное значение.
  • maxSpeedReached : <устройство(а)> уже установлено на максимальную скорость.
  • minSettingReached : <устройство(а)> уже установлено на минимальное значение.
  • minSpeedReached : <устройство(а)> уже установлено на минимальную скорость.
  • monitoringServiceConnectionLost : <устройство(а)> потеряло(ли) соединение со службой мониторинга.
  • needsAttachment : Извините, похоже, у <device(s)> отсутствует необходимое вложение. Замените его и повторите попытку.
  • needsBin : Извините, похоже, у <устройства(ов)> отсутствует корзина. Замените её и повторите попытку.
  • needsPads : <устройство(а)> <нужно(ы)> новые прокладки.
  • needsSoftwareUpdate : <устройство(а)> <нужно(ы)> обновление программного обеспечения.
  • needsWater : <устройство(а)> <потребность(и)> вода.
  • networkProfileNotRecognized : Извините, я не распознаю «<сетевой профиль>» на <устройствах>.
  • networkSpeedTestInProgress : Я уже тестирую <сеть> <скорость/скорости>>.
  • noAvailableApp : Извините, похоже, <название приложения> недоступно.
  • noAvailableChannel : Извините, похоже, канал <название канала> недоступен.
  • noChannelSubscription : Извините, в данный момент вы не подписаны на канал <название канала>.
  • noTimerExists : Извините, похоже, на <устройствах> не установлено ни одного таймера.
  • notSupported : Извините, этот режим недоступен для <устройств(а)>.
  • obstructionDetected : <устройство(а)> обнаружило препятствие.
  • offline , deviceOffline : Извините, похоже, <device(s)> сейчас недоступен.
  • onRequiresMode : Укажите, какой режим вы хотите включить.
  • passphraseIncorrect : Извините, похоже, этот PIN-код неверный.
  • percentOutOfRange : Извините, я не могу установить <устройство(а)> на <процент>.
  • pinIncorrect : (парольIncorrect)
  • rainDetected : Я не открывал <устройство(а)>, потому что был обнаружен дождь.
  • rangeTooClose : значения слишком близки для диапазона «Нагрев-Охлаждение» для <устройств(а)>. Выберите более удаленные температуры.
  • relinkRequired : Извините, похоже, с вашей учётной записью что-то пошло не так. Используйте приложение Google Home или Google Assistant, чтобы повторно подключить <устройства>.
  • remoteSetDisabled :
    • Необязательный параметр errorCodeReason
    • currentlyArmed - Извините, поскольку охрана уже включена, вам необходимо использовать <устройство(а)> или приложение, чтобы внести какие-либо изменения.
    • remoteUnlockNotAllowed - Извините, я не могу разблокировать <устройство(а)> удаленно.
    • remoteControlOffэто действие в настоящее время отключено. Включите удалённое управление на <устройствах> и повторите попытку.
    • childSafetyModeActiveэто действие отключено для <устройств(а)>, пока активен режим безопасности детей.
  • RoomsOnDifferentFloors : <устройства> не могут связаться с этими комнатами, поскольку они находятся на разных этажах.
  • safetyShutOff : <устройство(а)> <находится> в режиме аварийного отключения, поэтому <его/их>придется отрегулировать вручную.
  • sceneCannotBeApplied : Извините, <устройства> не могут быть применены.
  • securityRestriction : <устройство(а)> <имеет/имеют> ограничение безопасности.
  • softwareUpdateNotAvailable : К сожалению, для <устройства(ов)> нет доступных обновлений программного обеспечения.
  • startRequiresTime : Для этого вам нужно будет сообщить мне, как долго вы хотите запустить <устройство(а)>.
  • stillCoolingDown : <устройство(а)> все еще остывает.
  • stillWarmingUp : <устройство(а)> все еще прогревается.
  • streamUnavailable : Извините, похоже, в данный момент трансляция с <устройства(ов)> недоступна.
  • streamUnplayable : Извините, в данный момент я не могу воспроизвести поток с <устройства(ов)>.
  • tankEmpty : <устройство(а)> <имеет/имеют> <пустой бак/пустые баки>. Пожалуйста, заполните <его/их> и повторите попытку.
  • targetAlreadyReached : Извините, похоже, это уже текущая температура.
  • timerValueOutOfRange : <устройства> не могут быть установлены на такой промежуток времени.
  • tooManyFailedAttempts : Извините, слишком много неудачных попыток. Чтобы завершить это действие, перейдите в приложение на вашем устройстве.
  • transientError : Извините, произошла ошибка при управлении <устройством(ами)>. Попробуйте ещё раз.
  • turnedOff , deviceTurnedOff : <устройство(а)> <выключено> в данный момент.
  • unableToLocateDevice : Мне не удалось найти <устройство(а)>.
  • unknownFoodPreset : <устройство(а)> не поддерживает эту предустановку питания.
  • unlockFailure : <устройство(а)> не удалось разблокировать.
  • unpausableState : <устройства> не могут быть приостановлены в данный момент.
  • пользовательОтменено : ок
  • valueOutOfRange : <устройства> не могут быть установлены на эту температуру.

Онлайн и офлайн отчетность о состоянии

Если устройство находится в автономном режиме, вы должны сообщить об этом Сообщите о состоянии устройства в течение пяти минут после его работы. И наоборот, когда устройство возвращается в состояние онлайн, вам следует сообщить для отправки отчета о состоянии в течение пяти минут после изучения поведения устройства. При каждом возвращении устройства в сеть партнёр должен сообщать обо всех текущих состояниях устройства с помощью API reportStateAndNotification . В этом примере показано, что устройство типа 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 (для целевого устройства).

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

Если команда не выполняется из-за исключений, статус должен быть «ИСКЛЮЧЕНИЯ», а исключения должны быть сообщены с помощью свойства 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"
          }
        ]
      }
    }
  }
}

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

Следующие исключения приведут к созданию соответствующего TTS на устройстве.

  • bagFull : <устройство(а)> <имеет/имеют> <полный мешок/полные мешки>. Пожалуйста, опустошите <его/их> и повторите попытку.
  • binFull : <устройство(а)> <имеет/имеют> <полную корзину/полные корзины>.
  • carbonMonoxideDetected : В <название дома> обнаружен угарный газ.
  • deviceAtExtremeTemperature : <устройство(а)> <находится> при <экстремальной температуре/экстремальных температурах>.
  • deviceJammingDetected : <устройство(а)> <заклинило>.
  • deviceMoved : <устройство(а)> <было/были> перемещено.
  • deviceOpen : <устройство(а)> <открыто>.
  • deviceTampered : <устройство(а)> было <подделано>.
  • deviceUnplugged : <устройство(а)> <отключено>.
  • floorUnreachable : <устройство(а)> не может подключиться к этой комнате. Переместите <его/их> на нужный этаж и повторите попытку.
  • hardwareFailure : <устройство(а)> <имеет> аппаратную проблему.
  • inSoftwareUpdate : <устройство(а)> в настоящее время находится в процессе обновления программного обеспечения.
  • isBypassed : <устройства> в настоящее время обойдены.
  • lowBattery : <устройство(а)> <имеет/имеют> низкий заряд батареи.
  • motionDetected : <устройство(а)> <обнаружено(ы)> движение.
  • needsPads : <устройство(а)> <нужно(ы)> новые прокладки.
  • needsSoftwareUpdate : <устройство(а)> <нужно(ы)> обновление программного обеспечения.
  • needsWater : <устройство(а)> <потребность(и)> вода.
  • networkJammingDetected : подключение к домашней сети <устройства(а)> работает неправильно.
  • noIssuesReported : <устройства> не сообщили об ошибках.
  • RoomsOnDifferentFloors : <устройства> не могут связаться с этими комнатами, поскольку они находятся на разных этажах.
  • runCycleFinished : <устройство(а)> <завершило(ли) работу>.
  • securityRestriction : <устройство(а)> <имеет/имеют> ограничение безопасности.
  • smokeDetected : В <название дома> обнаружен дым.
  • tankEmpty : <устройство(а)> <имеет/имеют> <пустой бак/пустые баки>. Пожалуйста, заполните <его/их> и повторите попытку.
  • usingCellularBackup : <устройство(а)> <использует> сотовое резервное копирование.
  • waterLeakDetected : <устройство(а)> <обнаружено(ы)> утечка воды.