В этом документе перечислены официально поддерживаемые ошибки и исключения для устройств умного дома. Используйте эти данные коды ошибок и исключений в ответе на намерение или в уведомлениях , если вы их реализовали, чтобы Google Assistant предупреждал конечных пользователей о проблемах, связанных с данной командой или состоянием устройства. Если ответ содержит неправильное форматирование или errorCode
, Google Ассистент выдает пользователям общее сообщение об ошибке, например: «К сожалению, устройство сейчас недоступно».
Ошибки
Код ошибки следует возвращать, если проблема приводит к сбою выполнения запроса или запроса. Например, если дверной замок заклинил и его невозможно запереть или разблокировать, пользователю должна быть возвращена ошибка об этом состоянии.
Коды ошибок могут быть прикреплены на уровне устройства или на глобальном уровне. Например, если у пользователя есть много источников света от одного поставщика и они управляются хабом, то когда пользователь просит выключить все источники света, поставщик может вернуть ошибку на уровне устройства, если один источник света находится в автономном режиме, или глобальную ошибку. Ошибка уровня, если весь их концентратор отключен от сети и освещением невозможно управлять. Если все устройства находятся в автономном режиме, нет никакой разницы между использованием ошибок глобального уровня или уровня устройства. Когда устройство находится в автономном режиме, вы должны сообщить о состоянии {"online": false}
в reportState, даже если вы возвращаете код ошибки deviceOffline
.
В итоге:
- Ошибка глобального уровня: все устройства в ответе имеют одну и ту же ошибку.
- Ошибка локального уровня: смешанный ответ со случаями ошибки и успеха.
Ошибки глобального уровня
Следующий фрагмент 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 на устройстве.
- вышеMaximumLightEffectsDuration : это больше максимальной продолжительности в 1 час. Пожалуйста, попробуйте еще раз.
- вышеMaximumTimerDuration : я могу установить <устройство(а)> только на срок до <периода времени>
- actionNotAvailable : Извините, сейчас я не могу это сделать.
- actionUnavailableWhileRunning : <устройство(а)> <является/работает> в данный момент, поэтому я не могу внести какие-либо изменения.
- ужеArmed : <устройство(а)> <являются> уже поставлено на охрану.
- ужеAtMax : <устройство(а)> <есть/являются> уже установлено на максимальную температуру.
- ужеAtMin : <устройство(а)> <есть/являются> уже установлено на минимальную температуру.
- уже закрыто : <устройство(а)> <есть/являются> уже закрыто.
- уже снято с охраны : <устройство(а)> <есть/являются> уже снято с охраны.
- ужеDocked : <устройство(а)> <есть/являются> уже пристыковано.
- ужеInState : <устройство(а)> <находится/находятся> уже в этом состоянии.
- ужеLocked : <устройство(а)> <есть/являются> уже заблокировано.
- ужеOff : <устройство(а)> <есть/являются> уже выключено.
- ужеOn : <устройство(а)> <есть/являются> уже включено.
- ужеOpen : <устройство(а)> <есть/являются> уже открыто.
- ужеPaused : <устройство(а)> <есть/находятся> уже приостановлено.
- ужеStarted : <устройство(а)> <есть/я> уже запущено.
- ужеStopped : <устройство(а)> <есть/являются> уже остановлено.
- ужеUnlocked : <устройство(а)> <есть/являются> уже разблокировано.
- ambiguousZoneName : Извините, <устройство(а)> не может определить, какую зону вы имеете в виду. Убедитесь, что ваши зоны имеют уникальные имена, и повторите попытку.
- sumAboveLimit : это больше, чем может поддерживать <устройство(а)>.
- appLaunchFailed : К сожалению, не удалось запустить <имя приложения> на <устройствах>.
- ArmFailure : <устройство(а)> не удалось поставить на охрану.
- ArmLevelNeeded : я не уверен, какой уровень установить для <устройств(ов)>. Попробуйте сказать «Установите <устройство(а)> на <низкий уровень безопасности>» или «Установите <устройство(а)> на <высокий уровень безопасности>».
- authFailure : Кажется, я не могу связаться с <устройством(ами)>. Попробуйте проверить приложение, чтобы убедиться, что ваше <device/devices> <is/are> полностью настроено.
- BagFull : <устройство(а)> <имеет/имеют> <полная сумка/полные сумки>. Пожалуйста, очистите <it/im> и повторите попытку.
- BelowMinimumLightEffectsDuration : это меньше минимальной продолжительности в 5 минут. Пожалуйста, попробуйте еще раз.
- BelowMinimumTimerDuration : я не могу установить <устройство(а)> на такое короткое время. Пожалуйста, попробуйте еще раз.
- binFull : <устройство(а)> <имеет/имеет> <полная корзина/полные корзины>.
- cancelArmingRestricted : Извините, мне не удалось отменить постановку <устройств(ов)> на охрану.
- cancelTooLate : Извините, отменять уже поздно. Вместо этого используйте <устройство(а)> или приложение.
- ChannelSwitchFailed : К сожалению, не удалось переключиться на канал <имя канала>. Пожалуйста, повторите попытку позже.
- chargeIssue : Извините, это похоже на <устройство(а)> <имеет/есть> <проблема с зарядным устройством/проблемы с зарядным устройством>.
- CommandInsertFailed : невозможно обработать команды для <устройств(ов)>.
- DeadBattery : <устройство(а)> <имеет/есть> <разряженная батарея/разряженные батареи>.
- градусовOutOfRange : запрошенные степени выходят за пределы диапазона для <устройств(ов)>.
- deviceAlertNeedsAssistance : <устройство(а)> <имеет/имеет> активное оповещение и <нуждается(а)> в вашей помощи.
- deviceAtExtremeTemperature : <устройство(а)> <есть/находятся> при <экстремальной температуре/экстремальных температурах>.
- deviceBusy : Извините, похоже, что <устройство(а)> уже что-то делает прямо сейчас.
- deviceCharging : Извините, похоже, что <устройство(а)> не может этого сделать, потому что (ha_shared.Its Theyre size=$item.devices.total_device_count) заряжается.
- deviceClogged : Извините, похоже, что <устройство(а)> засорено.
- deviceCurrentlyDispensing : <устройство(а)> уже что-то выдает прямо сейчас.
- deviceDoorOpen : Дверь открыта на <устройстве(ах)>. Пожалуйста, закройте его и повторите попытку.
- deviceHandleClosed : дескриптор закрыт на <устройстве(ах)>. Пожалуйста, откройте его и попробуйте еще раз.
- deviceJammingDetected : <устройство(а)> <застряло>.
- deviceLidOpen : Крышка <устройства(ов)> открыта. Пожалуйста, закройте его и повторите попытку.
- deviceNeedsRepair : <устройство(а)> <необходимо(я)> для ремонта. Пожалуйста, свяжитесь с местным дилером по обслуживанию.
- deviceNotDocked : Извините, похоже, что <устройство(а)> <не/не> закреплено. Пожалуйста, закрепите <его/их> и повторите попытку.
- deviceNotFound : <устройство(а)> <есть/не>недоступно. Возможно, вы захотите попробовать настроить <it/them> еще раз.
- deviceNotMounted : Извините, похоже, что <устройство(а)> не может этого сделать, потому что <оно/они> <е/я> не смонтировано.
- deviceNotReady : <устройство(а)> <есть/не> не готово.
- deviceStuck : <устройство(а)> <застряло> и нуждается в вашей помощи.
- deviceTampered : <устройство(а)> <было/имеется> подделано.
- deviceThermalShutdown : Извините, похоже, что <устройство(а)> отключено из-за экстремальных температур.
- DirectResponseOnlyUnreachable : <устройство(а)> <не поддерживает/не поддерживает удаленное управление.
- disarmFailure : <устройство(а)> не удалось снять с охраны.
- DiscreteOnlyOpenClose : Извините, <устройство(а)> можно открыть или закрыть только полностью.
- DispensAmountAboveLimit : <устройство(а)> не может выдать такое большое количество.
- DispensAmountBelowLimit : <устройство(а)> не может выдать такое небольшое количество.
- DispensAmountRemainingExceeded : <устройству(ам)> недостаточно <элемента выдачи> для этого.
- DispensFractionalAmountNotSupported : <устройство(а)> не может выдавать дробные части <выдаваемого предмета>.
- DispenseFractionalUnitNotSupported : <устройство(а)> не поддерживает дробные части этой единицы для <элемента выдачи>.
- DispensUnitNotSupported : <устройство(а)> не поддерживает эту единицу измерения для <выдаваемого предмета>.
- DoorClosedTooLong : Прошло много времени с тех пор, как дверь на <устройстве(ах)> открывалась. Пожалуйста, откройте дверь, убедитесь, что внутри что-то есть, и повторите попытку.
- EmergencyHeatOn : <устройство(а)> <находится/находятся> в режиме аварийного обогрева, поэтому <его/они> придется регулировать вручную.
- FaultyBattery : <устройство(а)> <имеет/имеют> <неисправный аккумулятор/неисправные аккумуляторы>.
- FloorUnreachable : <устройство(а)> не может достичь этой комнаты. Пожалуйста, переместите <его/их> на правый этаж и повторите попытку.
- functionNotSupported : На самом деле <устройство(а)> <не поддерживает/не поддерживает эту функциональность.
- genericDispenseNotSupported : мне нужно знать, что вы хотите выдать. Пожалуйста, попробуйте еще раз, указав название элемента.
- HardError : Извините, что-то пошло не так, и я не могу управлять вашим домашним устройством.
- HardError : Извините, что-то пошло не так, и я не могу управлять вашим домашним устройством.
- inAutoMode : <устройство(а)> <есть/являются> в данный момент установлено в автоматический режим. Чтобы изменить температуру, вам нужно переключить <его/их> в другой режим.
- inAwayMode : <устройство(а)> <находится/находятся> в данный момент установлено в режим отсутствия. Чтобы управлять термостатом, вам необходимо вручную переключить его в домашний режим с помощью приложения Nest на телефоне, планшете или компьютере.
- inDryMode : <устройство(а)> <есть/являются> в данный момент установлено в режим осушения. Чтобы изменить температуру, вам нужно переключить <его/их> в другой режим.
- inEcoMode : <устройство(а)> <есть/являются> в настоящее время установлено в экономичном режиме. Чтобы изменить температуру, вам нужно переключить <его/их> в другой режим.
- inFanOnlyMode : <устройство(а)> <есть/являются> в данный момент установлено в режим только для вентиляторов. Чтобы изменить температуру, вам нужно переключить <его/их> в другой режим.
- inHeatOrCool : <устройство(а)> <находится/находятся>не в режиме обогрева/охлаждения.
- inHumidifierMode : <устройство(а)> <является/являются> в данный момент установлено в режим увлажнителя. Чтобы изменить температуру, вам нужно переключить <его/их> в другой режим.
- inOffMode : <устройство(а)> <выключено/выключено> в данный момент. Чтобы изменить температуру, вам нужно переключить <его/их> в другой режим.
- inPurifierMode : <устройство(а)> <есть/являются> в данный момент установлено в режим очистки. Чтобы изменить температуру, вам нужно переключить <его/их> в другой режим.
- inSleepMode : <устройство(а)> <находится/находится> в спящем режиме. Пожалуйста, повторите попытку позже.
- inSoftwareUpdate : <устройство(а)> <находится/находится> в настоящее время находится в обновлении программного обеспечения.
- lockFailure : <устройство(а)> не удалось заблокировать.
- lockState : <устройство(а)> <есть/являются> в настоящий момент заблокировано.
- lockToRange : эта температура находится за пределами заблокированного диапазона на <устройстве(ах)>.
- lowBattery : <устройство(а)> <имеет/имеет> низкий заряд батареи.
- maxSettingReached : <устройство(а)> <есть/являются> уже установлено самое высокое значение.
- maxSpeedReached : <устройство(а)> <is/are> уже установлено на максимальную скорость.
- minSettingReached : <устройство(а)> <есть/являются> уже установлено наименьшее значение.
- minSpeedReached : <устройство(а)> <is/are> уже установлено на минимальную скорость.
- мониторингServiceConnectionLost : <устройство(а)> <имеет/имеет> потеряло <свое/их> соединение со службой мониторинга.
- NeedsAttachment : Извините, похоже, что <устройство(а)> <есть/являются> отсутствует необходимое вложение. Пожалуйста, замените его и повторите попытку.
- NeedBin : Извините, похоже, что <устройство(а)> <есть/являются> отсутствует корзина. Пожалуйста, замените его и повторите попытку.
- NeedPads : <устройство(а)> <потребность(я)> новые площадки.
- NeedSoftwareUpdate : <устройство(а)> <необходимо(я)> обновление программного обеспечения.
- NeedsWater : <устройство(а)> <потребность(я)> вода.
- networkProfileNotRecounced : Извините, я не распознаю «<профиль сети>» на <устройстве(ах)>.
- networkSpeedTestInProgress : я уже тестирую <сеть> <скорость/скорость>>.
- noAvailableApp : Извините, похоже, что <имя приложения> недоступно.
- noAvailableChannel : Извините, похоже, что канал <имя канала> недоступен.
- noChannelSubscription : К сожалению, в данный момент вы не подписаны на канал <имя канала>.
- noTimerExists : Извините, похоже, на <устройстве(ах)> не установлены таймеры.
- notSupported : Извините, этот режим недоступен для <устройств(ов)>.
- obstructionDetected : <устройство(а)> обнаружило препятствие.
- offline , deviceOffline : Извините, похоже, что <устройство(а)> <есть/я> сейчас недоступно.
- onRequiresMode : укажите, какой режим вы хотите включить.
- passphraseIncorrect : Извините, похоже, этот PIN-код неверен.
- процентOutOfRange : Извините, я не могу установить для <устройства(ов)> значение <процент>.
- pinIncorrect : (парольная фразаIncorrect)
- RainDetected : я не открыл <устройство(а)>, поскольку был обнаружен дождь.
- rangeTooClose : они слишком близки для диапазона нагрева-охлаждения для <устройств(ов)>. Выбирайте температуры, которые находятся дальше друг от друга.
- relinkRequired : Извините, похоже, с вашей учетной записью что-то пошло не так. Используйте приложение Google Home или Assistant, чтобы повторно связать <устройство(а)>.
- удаленныйSetDisabled :
- Необязательный параметр
errorCodeReason
-
currentlyArmed
: извините, поскольку система безопасности уже включена, вам необходимо использовать <устройство(а)> или приложение, чтобы внести какие-либо изменения. -
remoteUnlockNotAllowed
— Извините, я не могу удаленно разблокировать <устройство(а)>. -
remoteControlOff
— это действие в настоящее время отключено. Пожалуйста, включите удаленное управление на <устройстве(ах)> и повторите попытку. -
childSafetyModeActive
— это действие отключено для <устройств(ов)>, пока активен режим безопасности детей.
- Необязательный параметр
- RoomsOnDifferentFloors : <устройство(а)> не может получить доступ к этим комнатам, поскольку они находятся на разных этажах.
- SafetyShutOff : <устройство(а)> <находится/находятся> в режиме безопасного отключения, поэтому <его/они> придется настраивать вручную.
- SceneCannotBeApplied : Извините, <устройство(а)> невозможно применить.
- SecurityRestriction : <устройство(а)> <имеет/имеет> ограничение безопасности.
- SoftwareUpdateNotAvailable : К сожалению, на <устройствах> нет обновлений программного обеспечения.
- startRequiresTime : для этого вам нужно сообщить мне, как долго вы хотите запускать <устройство(а)>.
- StillCoolingDown : <устройство(а)> <есть/являются> все еще остывает.
- StillWarmingUp : <устройство(а)> <есть/есть> все еще прогревается.
- streamUnavailable : Извините, похоже, что поток в настоящее время недоступен с <устройств(ов)>.
- streamUnplayable : Извините, в данный момент я не могу воспроизвести поток с <устройства(ов)>.
- TankEmpty : <устройство(а)> <имеет/имеет> <пустой резервуар/пустые резервуары>. Пожалуйста, заполните <it/them> и повторите попытку.
- targetAlreadyReached : Извините, похоже, это уже текущая температура.
- timerValueOutOfRange : <устройство(а)> не может быть установлено на такое время.
- TooManyFailedAttempts : Извините, слишком много неудачных попыток. Пожалуйста, перейдите в приложение вашего устройства, чтобы выполнить это действие.
- transientError : Извините, что-то пошло не так при управлении <устройством(ами)>. Пожалуйста, попробуйте еще раз.
- TurnOff , deviceTurnedOff : <устройство(а)> <выключено/выключено> прямо сейчас.
- неспособныйToLocateDevice : мне не удалось найти <устройство(а)>.
- unknownFoodPreset : <устройство(а)> не поддерживает эту предустановку еды.
- unlockFailure : <устройство(а)> не удалось разблокировать.
- unpausableState : <устройство(а)> невозможно приостановить прямо сейчас.
- userCancelled : ок
- valueOutOfRange : <устройству(ам)> невозможно установить эту температуру.
Исключения
Вы должны возвращать исключение, если с командой связана проблема или предупреждение. Команда может быть успешной или неудачной.
Если команда прошла успешно (status = «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 : <устройство(а)> <имеет/имеют> <полная сумка/полные сумки>. Пожалуйста, очистите <it/im> и повторите попытку.
- binFull : <устройство(а)> <имеет/имеет> <полная корзина/полные корзины>.
- CarbonMonoxyDetected : в <название дома> обнаружен угарный газ.
- deviceAtExtremeTemperature : <устройство(а)> <есть/находятся> при <экстремальной температуре/экстремальных температурах>.
- deviceJammingDetected : <устройство(а)> <застряло>.
- deviceMoved : <устройство(а)> <было/было> перемещено.
- deviceOpen : <устройство(а)> <открыто/открыто.
- deviceTampered : <устройство(а)> <было/имеется> подделано.
- deviceUnplugged : <устройство(а)> <отключено/отключено.
- FloorUnreachable : <устройство(а)> не может достичь этой комнаты. Пожалуйста, переместите <его/их> на правый этаж и повторите попытку.
- hardwareFailure : <устройство(а)> <имеет/имеет> аппаратную проблему.
- inSoftwareUpdate : <устройство(а)> <находится/находятся> в настоящее время находится в обновлении программного обеспечения.
- isBypassed : <устройство(а)> <есть/являются> в настоящий момент обойдены.
- lowBattery : <устройство(а)> <имеет/имеет> низкий заряд батареи.
- motionDetected : <устройство(а)> <обнаружение(я)> движения.
- NeedPads : <устройство(а)> <потребность(я)> новые площадки.
- NeedSoftwareUpdate : <устройство(а)> <необходимо(я)> обновление программного обеспечения.
- NeedsWater : <устройство(а)> <потребность(я)> вода.
- networkJammingDetected : подключение к домашней сети к <устройствам> работает неправильно.
- noIssuesReported : <устройство(а)> не сообщило об отсутствии проблем.
- RoomsOnDifferentFloors : <устройство(а)> не может получить доступ к этим комнатам, поскольку они находятся на разных этажах.
- runCycleFinished : <устройство(а)> <имеет/завершило> работу.
- SecurityRestriction : <устройство(а)> <имеет/имеет> ограничение безопасности.
- SmokeDetected : в <название дома> обнаружен дым.
- TankEmpty : <устройство(а)> <имеет/имеет> <пустой резервуар/пустые резервуары>. Пожалуйста, заполните <it/them> и повторите попытку.
- usingCellularBackup : <устройство(а)> <является/являются> с использованием сотового резервного копирования.
- WaterLeakDetected : <устройство(а)> <обнаружение(я)> утечка воды.