Ten dokument zawiera listę oficjalnie obsługiwanych błędów i wyjątków dotyczących urządzeń smart home. Używaj tych kodów błędów i wyjątków w odpowiedzi na intencję lub w powiadomieniach, jeśli je wdrożysz, aby Asystent Google ostrzegał użytkowników o problemach związanych z danym poleceniem lub stanem urządzenia. Jeśli odpowiedź zawiera nieprawidłowe formatowanie lub errorCode
, Asystent Google wyświetla użytkownikom ogólny komunikat o błędzie, na przykład „Przepraszamy, ale urządzenie jest teraz niedostępne”.
Błędy
Kod błędu należy zwrócić, gdy problem powoduje niepowodzenie wykonania lub żądania zapytania. Jeśli na przykład zamek drzwi jest zablokowany i nie można go zamknąć ani odblokować, użytkownik powinien otrzymać komunikat o tym stanie.
Kody błędów można dołączać na poziomie urządzenia lub na poziomie globalnym. Jeśli na przykład użytkownik ma wiele urządzeń od jednego dostawcy i są one kontrolowane przez hub, gdy użytkownik poprosi o wyłączenie wszystkich świateł, dostawca może zwrócić błąd na poziomie urządzenia, jeśli jedno światło jest offline, lub błąd na poziomie globalnym, jeśli cały hub jest offline i żadne światła nie mogą być kontrolowane. Jeśli wszystkie urządzenia są offline, nie ma różnicy między błędami na poziomie globalnym a na poziomie urządzenia.
Gdy urządzenie jest offline, w ciągu 5 minut od momentu wystąpienia problemu z urządzeniem należy przekazać {"online": false}
do Raportu o stanie.
W skrócie:
- Błąd na poziomie globalnym: wszystkie urządzenia w odpowiedzi mają ten sam błąd.
- Błąd na poziomie lokalnym: mieszana odpowiedź z błędami i powodzeniami
Błędy na poziomie globalnym
Ten fragment kodu JSON pokazuje, jak zwracać błędy na poziomie globalnym w odpowiedziach QUERY lub EXECUTE.
Przykład błędu na poziomie globalnym deviceOffline
spowodowanego tym, że koncentrator jest offline:
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "errorCode": "deviceOffline", "status" : "ERROR" } }
Przykład błędu na poziomie globalnym inSoftwareUpdate
spowodowanego przez aktualizowanie huba:
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "errorCode": "inSoftwareUpdate", "status" : "ERROR" } }
Błędy na poziomie urządzenia
Odpowiedź na zapytanie
Poniższy fragment kodu JSON pokazuje, jak zwracać błędy na poziomie urządzenia w odpowiedzi na zapytanie.
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "devices": { "device-id-1": { "errorCode": "deviceOffline", "status" : "ERROR" }, "device-id-2": { "errorCode": "deviceOffline", "status" : "ERROR" } } } }
Odpowiedź EXECUTE
Poniższy fragment kodu JSON pokazuje, jak zwracać błędy na poziomie urządzenia w odpowiedzi 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 } } ] } }
Powiadomienia z błędami
Aktywna ochrona
Ten fragment kodu JSON pokazuje, jak zgłaszać błędy na poziomie urządzenia w ramach proaktywnej funkcji powiadomień.
{ "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" } } } } } }
Odpowiedź na zapytanie
Ten fragment kodu JSON pokazuje, jak zgłaszać błędy na poziomie urządzenia w dodatkowej odpowiedzi.
{ "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" } } } } } } }
Lista błędów
Poniższe błędy spowodują wyświetlenie na urządzeniu powiązanego z nimi tekstu syntetycznego.
- aboveMaximumLightEffectsDuration : To przekracza maksymalny czas trwania wynoszący godzinę. Spróbuj ponownie.
- aboveMaximumTimerDuration : Mogę ustawić <device(s)> tylko na <time period>
- actionNotAvailable : Nie mogę tego teraz zrobić.
- actionUnavailableWhileRunning : <device(s)> <is/are> obecnie działa, więc nie mogę niczego zmienić.
- alreadyArmed : <device(s)> <is/are> already armed.
- alreadyAtMax : <device(s)> <is/are> już ustawiony na maksymalną temperaturę.
- alreadyAtMin : <device(s)> <is/are> już ustawiony na minimalną temperaturę.
- alreadyClosed : <device(s)> <is/are> już zamknięte.
- alreadyDisarmed : <device(s)> <is/are> już rozbrojone.
- alreadyDocked : <device(s)> <is/are> already docked.
- alreadyInState : <device(s)> <is/are> już w tym stanie.
- alreadyLocked : <device(s)> <is/are> już zablokowane.
- alreadyOff : <device(s)> <is/are> już wyłączone.
- alreadyOn : <device(s)> <is/are> już włączone.
- alreadyOpen : <device(s)> <is/are> już otwarte.
- alreadyPaused : <device(s)> <is/are> already paused.
- alreadyStarted : <device(s)> <is/are> już uruchomione.
- alreadyStopped : <device(s)> <is/are> już zatrzymane.
- alreadyUnlocked : <device(s)> <is/are> już odblokowane.
- ambiguousZoneName : Przepraszamy, ale urządzenie <device(s)> nie może rozpoznać strefy, o którą Ci chodzi. Sprawdź, czy strefy mają unikalne nazwy, i spróbuj ponownie.
- amountAboveLimit : To więcej, niż urządzenie jest w stanie obsłużyć.
- appLaunchFailed : Przepraszamy, nie udało się uruchomić aplikacji <app name> na urządzeniu <device(s)>.
- armFailure : <device(s)> nie udało się włączyć.
- armLevelNeeded : Nie mam pewności, na jaki poziom ustawić <device(s)>. Powiedz „Ustaw <urządzenia> na <niski poziom zabezpieczeń>” lub „Ustaw <urządzenia> na <wysoki poziom zabezpieczeń>”.
- authFailure : Nie mogę się połączyć z urządzeniem <device(s)>. Sprawdź w aplikacji, czy urządzenie <device/devices> jest w pełni skonfigurowane.
- bagFull : <device(s)> <has/have> <a full bag/full bags>. Opróżnij <it/them> i spróbuj ponownie.
- belowMinimumLightEffectsDuration : To krócej niż minimalny czas trwania wynoszący 5 minut. Spróbuj ponownie.
- belowMinimumTimerDuration : Nie mogę ustawić <device(s)> na tak krótki czas. Spróbuj ponownie.
- binFull : <device(s)> <has/have> <a full bin/full bins>.
- cancelArmingRestricted : Nie udało się anulować uzbrojenia urządzenia <device(s)>.
- cancelTooLate : Już za późno na anulowanie. Zamiast tego użyj parametru <device(s)> lub aplikacji.
- channelSwitchFailed : Przepraszamy, nie udało się przełączyć na kanał <channel name>. Spróbuj ponownie później.
- chargerIssue : Wygląda na to, że <device(s)> <has/have> <a charger issue/charger issues>.
- commandInsertFailed : Nie można przetworzyć poleceń na urządzeniu <device(s)>.
- deadBattery : <device(s)> <has/have> <a dead battery/dead batteries>.
- degreesOutOfRange : Żądana temperatura nie mieści się w zakresie pracy urządzenia <device(s)>.
- deviceAlertNeedsAssistance : <device(s)> <has/have> aktywne alerty i <need(s)> Twoją pomoc.
- deviceAtExtremeTemperature : <device(s)> <is/are> at <an extreme temperature/extreme temperatures>.
- deviceBusy : Wygląda na to, że <device(s)> robi w tej chwili coś innego.
- deviceCharging : Wygląda na to, że to niemożliwe, bo <device(s)> (ha_shared.ItsTheyre size=$item.devices.total_device_count) się ładuje.
- deviceClogged : Wygląda na to, że <device(s)> jest zapchane.
- deviceCurrentlyDispensing : <device(s)> właśnie coś wydaje.
- deviceDoorOpen : Drzwi na urządzeniu <device(s)> są otwarte. Zamknij je i spróbuj ponownie.
- deviceHandleClosed : Na urządzeniu <device(s)> uchwyt jest zamknięty. Otwórz go i spróbuj ponownie.
- deviceJammingDetected : <device(s)> <is/are> jammed.
- deviceLidOpen : Na urządzeniu <device(s)> jest otwarta pokrywa. Zamknij ją i spróbuj ponownie.
- deviceNeedsRepair : <device(s)> <need(s)> to be repaired. Skontaktuj się z lokalnym serwisem.
- deviceNotDocked : Wygląda na to, że <device(s)> <isn't/aren't> jest/są niedokowane. Umieść je w stacji i spróbuj ponownie.
- deviceNotFound : <device(s)> <is/are> niedostępne. Możesz spróbować ponownie skonfigurować to urządzenie.
- deviceNotMounted : Wygląda na to, że <device(s)> nie może tego zrobić, ponieważ <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> został/został zmanipulowany.
- deviceThermalShutdown : Wygląda na to, że <device(s)> zostały wyłączone z powodu skrajnie wysokiej temperatury.
- directResponseOnlyUnreachable : <device(s)> <doesn't/don't> support remote control.
- disarmFailure : <device(s)> nie udało się rozbroić.
- discreteOnlyOpenClose : Przepraszamy, ale <device(s)> można tylko całkowicie zamknąć lub otworzyć.
- dispenseAmountAboveLimit : <device(s)> nie może wydać tak dużo.
- dispenseAmountBelowLimit : <device(s)> nie może wydać tak mało.
- dispenseAmountRemainingExceeded : <device(s)> nie ma wystarczającej ilości <dispense item>, aby to zrobić.
- dispenseFractionalAmountNotSupported : <device(s)> nie może wydawać części <dispense item>.
- dispenseFractionalUnitNotSupported : <device(s)> nie obsługuje ułamkowych części tej jednostki miary dla <dispense item>.
- dispenseUnitNotSupported : <device(s)> nie obsługuje tej jednostki dla <dispense item>.
- doorClosedTooLong : Drzwi urządzenia <device(s)> są zamknięte od dłuższego czasu. Otwórz je i sprawdź, czy coś jest w środku, a potem spróbuj jeszcze raz.
- emergencyHeatOn : <device(s)> <is/are> w trybie ogrzewania awaryjnego, więc trzeba je będzie ustawić ręcznie.
- faultyBattery : <device(s)> <has/have> <a faulty battery/faulty batteries>.
- floorUnreachable : <device(s)> nie może dostać się do tego pomieszczenia. Przenieś je na właściwe piętro i spróbuj ponownie.
- functionNotSupported : Urządzenie <device(s)> <nie/nie> obsługuje tę funkcję.
- genericDispenseNotSupported : Muszę wiedzieć, co chcesz wypłacić. Spróbuj ponownie podać nazwę produktu.
- hardError : Coś poszło nie tak i nie mogę sterować urządzeniem domowym.
- hardError : Coś poszło nie tak i nie mogę sterować urządzeniem domowym.
- inAutoMode : <device(s)> <is/are> jest obecnie ustawiony na tryb automatyczny. Aby zmienić temperaturę, musisz przełączyć <je/jego> w inny tryb.
- inAwayMode : <device(s)> <is/are> jest obecnie w trybie nieobecności. Aby sterować termostatem, musisz ręcznie przełączyć go na tryb domowy, używając aplikacji Nest na telefonie, tablecie lub komputerze.
- inDryMode : <device(s)> <is/are> jest obecnie ustawiony w trybie suchym. Aby zmienić temperaturę, musisz przełączyć <je/jego> w inny tryb.
- inEcoMode : <device(s)> <is/are> jest obecnie w trybie ekologicznym. Aby zmienić temperaturę, musisz przełączyć urządzenie w inny tryb.
- inFanOnlyMode : <device(s)> <is/are> jest obecnie ustawiony w trybie tylko wentylatora. Aby zmienić temperaturę, musisz przełączyć <je/jego> w inny tryb.
- inHeatOrCool: : <device(s)> <is/are>n't in heat/cool mode.
- inHumidifierMode : <device(s)> <is/are> jest obecnie w trybie nawilżania. Aby zmienić temperaturę, musisz przełączyć urządzenie w inny tryb.
- inOffMode : <device(s)> <is/are> obecnie wyłączony. Aby zmienić temperaturę, musisz przełączyć <it/them> na inny tryb.
- inPurifierMode : <device(s)> <is/are> jest obecnie ustawiony w trybie oczyszczania powietrza. Aby zmienić temperaturę, musisz przełączyć <je/jego> w inny tryb.
- inSleepMode : <device(s)> <is/are> w stanie uśpienia. Spróbuj ponownie później.
- inSoftwareUpdate : <device(s)> <is/are> obecnie w trakcie aktualizacji oprogramowania.
- lockFailure : <device(s)> nie udało się zablokować.
- lockedState : <device(s)> <is/are> są obecnie zablokowane.
- lockedToRange : Ta temperatura jest poza zakresem <device(s)>.
- lowBattery : <device(s)> <has/have> low battery.
- maxSettingReached : <device(s)> <is/are> już ustawione na najwyższe ustawienie.
- maxSpeedReached : <device(s)> <is/are> już ustawiony na maksymalną prędkość.
- minSettingReached : <device(s)> <is/are> już ustawione na najniższe ustawienie.
- minSpeedReached : <device(s)> <is/are> już ustawione na minimalną prędkość.
- monitoringServiceConnectionLost : <device(s)> <has/have> lost <its/their> connection to the monitoring service.
- needsAttachment : Wygląda na to, że brakuje wymaganego załącznika do <device(s)> <is/are>. Zamontuj go i spróbuj ponownie.
- needsBin : Wygląda na to, że <device(s)> <is/are> nie ma pojemnika. Zamontuj go i spróbuj ponownie.
- needsPads : <device(s)> <need(s)> nowe podkładki.
- needsSoftwareUpdate : <device(s)> <need(s)> aktualizacja oprogramowania.
- needsWater : <device(s)> <need(s)> woda.
- networkProfileNotRecognized : Nie rozpoznaję profilu sieci „<network profile>” na urządzeniu <device(s)>.
- networkSpeedTestInProgress : Testuję już sieć <network> <speed/speeds>>.
- noAvailableApp : Wygląda na to, że aplikacja <app name> jest niedostępna.
- noAvailableChannel : Wygląda na to, że kanał <channel name> jest niedostępny.
- noChannelSubscription : Przepraszamy, ale obecnie nie subskrybujesz kanału <channel name>.
- noTimerExists : Wygląda na to, że na urządzeniu <device(s)> nie ma ustawionych żadnych minutników.
- notSupported : Przepraszamy, ale ten tryb nie jest dostępny na urządzeniu <device(s)>.
- obstructionDetected : <device(s)> wykryło przeszkodę.
- offline , deviceOffline : Wygląda na to, że <device(s)> <is/are>nie są obecnie dostępne.
- onRequiresMode : Podaj, który tryb chcesz włączyć.
- passphraseIncorrect : Wygląda na to, że ten kod PIN jest nieprawidłowy.
- percentOutOfRange : Przepraszamy, ale nie możemy ustawić wartości <device(s)> na <percent>.
- pinIncorrect : (passphraseIncorrect)
- rainDetected : Urządzenie nie zostało otwarte, ponieważ wykryto deszcz.
- rangeTooClose : Różnica między tymi wartościami jest zbyt mała dla trybu naprzemiennego grzania i chłodzenia. Wybierz bardziej skrajne temperatury.
- relinkRequired : Wygląda na to, że coś jest nie tak z Twoim kontem. Użyj aplikacji Google Home lub Asystent, aby ponownie połączyć <device(s)>.
-
remoteSetDisabled
:
- Parametr opcjonalny
errorCodeReason
currentlyArmed
– alarm jest już włączony, więc zmiany możesz wprowadzić tylko za pomocą urządzenia lub aplikacji.remoteUnlockNotAllowed
– nie mogę zdalnie odblokować urządzenia(ów) <device(s)>.remoteControlOff
– to działanie jest obecnie wyłączone. Włącz pilota na urządzeniu <device(s)> i spróbuj ponownie.childSafetyModeActive
– nie można wykonać tej czynności na <urządzeniach>, gdy włączony jest tryb bezpieczeństwa dzieci.
- Parametr opcjonalny
- roomsOnDifferentFloors : <device(s)> nie może dostać się do tych pomieszczeń, bo są one na innych piętrach.
- safetyShutOff : <device(s)> <is/are> w trybie bezpiecznego wyłączania, więc <it/they>'ll trzeba je ustawić ręcznie.
- sceneCannotBeApplied : Przepraszamy, ale nie można zastosować ustawień na urządzeniu <device(s)>.
- securityRestriction : <device(s)> <has/have> a security restriction.
- softwareUpdateNotAvailable : Przepraszamy, ale na urządzeniu <device(s)> nie ma dostępnej aktualizacji oprogramowania.
- startRequiresTime : Aby to zrobić, musisz mi powiedzieć, na jak długo chcesz włączyć <device(s)>.
- stillCoolingDown : <device(s)> <is/are> nadal się chłodzi.
- stillWarmingUp : <device(s)> <is/are> nadal się rozgrzewa.
- streamUnavailable : Wygląda na to, że strumieniowe przesyłanie danych z urządzenia <device(s)> jest obecnie niedostępne.
- streamUnplayable : Przepraszam, ale nie mogę teraz odtworzyć strumienia z urządzenia <device(s)>.
- tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Fill <it/them> and try again.
- targetAlreadyReached : Zdaje się, że to jest aktualna temperatura.
- timerValueOutOfRange : <device(s)> nie można ustawić na taki czas.
- tooManyFailedAttempts : Przepraszamy, ale wystąpiło za dużo nieudanych prób. Otwórz aplikację na urządzeniu, aby dokończyć tę czynność.
- transientError : Podczas sterowania urządzeniem <device(s)> wystąpił błąd. Spróbuj ponownie.
- turnedOff , deviceTurnedOff : <device(s)> <is/are> wyłączone w tej chwili.
- unableToLocateDevice : Nie udało się zlokalizować urządzenia <device(s)>.
- unknownFoodPreset : <device(s)> nie obsługuje tych gotowych ustawień.
- unlockFailure : <device(s)> nie udało się odblokować.
- unpausableState: : <device(s)> can't be paused right now.
- userCancelled : ok
- valueOutOfRange : <device(s)> nie można ustawić na taką temperaturę.
Wyjątki
Wyjątek powinien zostać zwrócony, gdy występuje problem lub alert związany z poleceniem. Polecenie może się udać lub nie.
Jeśli polecenie zostało wykonane (stan = „SUCCESS”), zgłosić wyjątki za pomocą atrybutu StatusReport
(w przypadku urządzeń innych niż docelowy) lub zwracając odpowiednią wartość exceptionCode
(w przypadku urządzenia docelowego).
Jeśli na przykład koszyk pralki jest pełny, użytkownik może nadal włączyć pralkę, ale warto go o tym ostrzec. Podobnie, gdy urządzenie ma słabą baterię, ale nie jest ona jeszcze pusta, możesz nadal wykonać polecenie, ale musisz poinformować użytkownika o tym, że bateria jest słaba.
Jeśli polecenie nie powiedzie się z powodu wyjątków, stan powinien być oznaczony jako „EXCEPTIONS”, a wyjątki powinny być zgłaszane za pomocą atrybutu StatusReport
.
Wyjątek nieblokujący (SUCCESS) dotyczący urządzenia docelowego
Ten przykład dotyczy zamykania drzwi:
Zamek w drzwiach wejściowych ma słabą baterię. Zamykam zamek w drzwiach wejściowych.
{ "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" } }] } }
Wyjątek nieblokujący (SUCCESS) dotyczący innego urządzenia korzystającego z StatusReport
Ten przykład dotyczy włączania systemu alarmowego: OK, włączam system alarmowy. Przednie okno jest otwarte.
{ "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" }] } }] } }
Wyjątek blokowania dotyczące innego urządzenia przy użyciu 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" } ] } } } }
Lista wyjątków
Na tych urządzeniach będą generowane powiązane usługi TTS:
- bagFull : <device(s)> <has/have> <a full bag/full bags>. Opróżnij <it/them> i spróbuj ponownie.
- binFull : <device(s)> <has/have> <a full bin/full bins>.
- carbonMonoxideDetected : W domu <nazwa domu> wykryto tlenek węgla.
- deviceAtExtremeTemperature : <device(s)> <is/are> at <an extreme temperature/extreme temperatures>.
- deviceJammingDetected : <device(s)> <is/are> jammed.
- deviceMoved : <device(s)> <was/were> moved.
- deviceOpen : <device(s)> <is/are> open.
- deviceTampered : <device(s)> <has/have> been tampered with.
- deviceUnplugged : <device(s)> <is/are> unplugged.
- floorUnreachable : <device(s)> nie może dostać się do tego pomieszczenia. Przenieś je na właściwe piętro i spróbuj ponownie.
- hardwareFailure : <device(s)> <has/have> a hardware problem.
- inSoftwareUpdate : <device(s)> <is/are> obecnie w trakcie aktualizacji oprogramowania.
- isBypassed : <device(s)> <is/are> są obecnie pomijane.
- lowBattery : <device(s)> <has/have> low battery.
- motionDetected : <device(s)> <detect(s)> motion.
- needsPads : <device(s)> <need(s)> nowe podkładki.
- needsSoftwareUpdate : <device(s)> <need(s)> aktualizacja oprogramowania.
- needsWater : <device(s)> <need(s)> woda.
- networkJammingDetected : Połączenie z urządzeniem <device(s)> w sieci domowej nie działa prawidłowo.
- noIssuesReported : <device(s)> nie zgłosił żadnych problemów.
- roomsOnDifferentFloors : <device(s)> nie może dostać się do tych pomieszczeń, bo są one na innych piętrach.
- runCycleFinished : <device(s)> <has/have> finished running.
- securityRestriction : <device(s)> <has/have> a security restriction.
- smokeDetected : Wykryto dym w domu <house name>.
- tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Fill <it/them> and try again.
- usingCellularBackup : <device(s)> <is/are> korzysta z kopii zapasowej w sieci komórkowej.
- waterLeakDetected : <device(s)> <detect(s)> wyciek wody.