robertd502 / home-assistant-petkit Goto Github PK
View Code? Open in Web Editor NEWHome Assistant integration for PetKit devices
License: MIT License
Home Assistant integration for PetKit devices
License: MIT License
Hi there
first of all many thanks for this niece piece of software. I have a Petkit Eversweet 3 Pro. I dont own any Petkit smart feeder which acts as a BLE-gateway. I installed your integration and it works well so far. I created two accounts in the Petkit app. One for the integration with HA. From this account I shared the device to the second account which I am using inside the app.
Now to my question: The filter and water-level only get updated when I open the app and wait like 1-2 minutes. If I dont open the app, these sensors dont get updated. For example when I dont open the app for 1 week, the sensor called "last data update" shows the last update 1 week ago and nor the filter or water-level sensors get updated.
The sensor for the purified water and energy-usage however get updated like every 5 hours or so.
Is this an expected behaviour due to the way the app works?
Petkit Eversweet 3 Pro firmware 2.49
Petkit integration v0.1.10
HA
Core 2024.1.5
Supervisor 2023.12.1
Operating System 11.4
Frontend 20240104.0
all the best
Andrew
Hey @RobertD502 ,
Thanks for this.
I'm a bit of a noob at python, but i had a look through the code and cannot see where it might be getting stuck.
Not sure if its something to do with my location but i seem to have everything required set..
i'm running HA in a container on my QNAP.
installed HACS user this method:
have environment variables set:
inside container terminal
in container settings within QNAP:
Timezone is set in HA:
Logs:
2023-09-13 05:12:10.033 ERROR (MainThread) [custom_components.petkit] A timezone could not be found. If you are running Home Assistant as a standalone Docker container, you must define the TZ environmental variable.
let me know if you need any more details or how i can further troubleshoot.
Hi All
I just got an Eversweet Max and would love to get it working with the integration. Please let me know what I need to do to make it happen. I would be willing to donate to the effort.
Thanks!
Hello, I have purchased the Petkit yumshare dual-hopper with camera and I would like to know if it would be possible to integrate it. Thank you so much!
I used to run https://github.com/hasscc/petkit, but the stats support was very poor and today I realized the project got completely abandoned.
I was wondering if it would be possible to integrate collar tracker support to this project, using API pooling as that other project did - but of course, with the entries being proper statistical entities haha
Cheers!
Hi,
I just found out all my devices are offline and not updating anymore.
Enabled debugging, nothing really to be found.
Reloaded the integration and restarted HA (2023.7.3) already.
The app is still working without issues and devices report as online.
Maybe others have the same issues?
I am seeing this in the logs consistently:
2023-05-12 21:57:31.342 WARNING (MainThread) [custom_components.petkit] Got petkit device detail for Cat Water failed: {'error': {'code': 97, 'msg': 'App is out of date, please upgrade'}}
I own a Fresh Element Gemini, which is pretty much the same as Fresh Element Solo, the difference is that has a different id and thus doesn't show up on the integration (id: 'd4s')... I was about to create a collaboration by opening a PR on this repo and at petkitaio
repo but I'm not able to... I've made all the changes locally but since I don't have access to petkitaio
it still doesn't work
Both the HA device upgrade and restart will cause the feeder solo to trigger the feeding function.
Hi,
would you please implement PetKit Air Magicube Smart Odor Eliminator? Or do you plan it?
Thanks
I wish I had taken look at my integrations page before migrating from supervisor to docker to see if the Petkit integration was actually working. I've gone through and uninstalled/reinstalled the integration through HACS, deleted the devices and tried to readd them/relogin. Here's what I get out of my logs:
2023-08-14 13:58:50.228 ERROR (MainThread) [aiohttp.server] Error handling request
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/aiohttp/web_protocol.py", line 433, in _handle_request
resp = await request_handler(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/web_app.py", line 504, in _handle
resp = await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/web_middlewares.py", line 117, in impl
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 85, in security_filter_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 100, in forwarded_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 28, in request_context_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 80, in ban_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 236, in auth_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 148, in handle
result = await handler(request, **request.match_info)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 181, in post
return await super().post(request, flow_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 72, in wrapper
result = await method(view, request, data, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 110, in post
result = await self._flow_mgr.async_configure(flow_id, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 296, in async_configure
result = await self._async_handle_step(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 392, in _async_handle_step
result: FlowResult = await getattr(flow, method)(user_input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/petkit/config_flow.py", line 118, in async_step_user
await async_validate_api(self.hass, email, password, region)
File "/config/custom_components/petkit/util.py", line 29, in async_validate_api
devices_query = await client.get_device_roster()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/petkitaio/petkit_client.py", line 192, in get_device_roster
device_roster = await self._post(url, header, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/petkitaio/petkit_client.py", line 419, in _post
async with self._session.post(url, headers=headers, data=data, timeout=self.timeout) as resp:
File "/usr/local/lib/python3.11/site-packages/aiohttp/client.py", line 1141, in __aenter__
self._resp = await self._coro
^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/client.py", line 558, in _request
resp = await req.send(conn)
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/client_reqrep.py", line 670, in send
await writer.write_headers(status_line, self.headers)
File "/usr/local/lib/python3.11/site-packages/aiohttp/http_writer.py", line 129, in write_headers
buf = _serialize_headers(status_line, headers)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "aiohttp/_http_writer.pyx", line 132, in aiohttp._http_writer._serialize_headers
File "aiohttp/_http_writer.pyx", line 109, in aiohttp._http_writer.to_str
TypeError: Cannot serialize non-str key None
Thank you.
Im just following after the first step to go to the integrations page, click the plus and select Petkit. When i do i get a pop-up "This device cannot be added from the UI - You can add this device by adding it to your 'configuration.yaml'. See the documentation for more information."
Not sure how to proceed as the setup for yaml config wasnt provided.
Hello.
I've trying to setup PetKit but got well known issue regarding timezone TZ variable
I've setup HassOS on virtual machine on Proxmox and don't have any TZ variable on it. Just a regula Home assistant operation system.
How I can fix an issue?
I already tried to create manual file with timezone (like on a pure debian) and TZ variable but without luck.
Hi, thank you for your compontent!!!
I have a Fresh Element Mini Pro and a Pura X.... I created a new account, as indicated in the instructions, via the Petkit app and shared the two devices.
The new user, through the app, is able to use the devices normally.
If I create the integration in Home Assistant with the new user data, the "no devices found" error appears, while if I create the integration with the original user data I have all my devices available.
How is this possible?
Thank you :)
Hi @RobertD502 , since I added a Eversweet 3 fountain i'm experiencing issues with my pura max. Sometimes the cat litter just hangs, sometimes it restarts in the middle of a reset, sometimes it does not do the automatic cleaning. Sometimes it just shuts down and I have to unplug and plug it back to make it work. I honestly doubt that it's related to this integration, it seems more like a firmware issue or hardware problem.
Are you aware of any possible issue connected to BLE Relay and/or Pura Max like this ones?
After installing this I keep getting the following error
I'm logged out on every mobile device that used the petkit account before,
This error originated from a custom integration.
Logger: aiohttp.server
Source: custom_components/petkit/util.py:28
Integration: PetKit (documentation, issues)
First occurred: 14:04:24 (2 occurrences)
Last logged: 14:07:00
Error handling request
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/aiohttp/web_protocol.py", line 435, in _handle_request
resp = await request_handler(request)
File "/usr/local/lib/python3.10/site-packages/aiohttp/web_app.py", line 504, in _handle
resp = await handler(request)
File "/usr/local/lib/python3.10/site-packages/aiohttp/web_middlewares.py", line 117, in impl
return await handler(request)
File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 60, in security_filter_middleware
return await handler(request)
File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 100, in forwarded_middleware
return await handler(request)
File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 28, in request_context_middleware
return await handler(request)
File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 80, in ban_middleware
return await handler(request)
File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 236, in auth_middleware
return await handler(request)
File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 145, in handle
result = await result
File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 180, in post
return await super().post(request, flow_id)
File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 72, in wrapper
result = await method(view, request, data, *args, **kwargs)
File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 110, in post
result = await self._flow_mgr.async_configure(flow_id, data)
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 253, in async_configure
result = await self._async_handle_step(
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 335, in _async_handle_step
result: FlowResult = await getattr(flow, method)(user_input)
File "/config/custom_components/petkit/config_flow.py", line 90, in async_step_user
await async_validate_api(self.hass, email, password)
File "/config/custom_components/petkit/util.py", line 28, in async_validate_api
devices_query = await client.get_device_roster()
File "/usr/local/lib/python3.10/site-packages/petkitaio/petkit_client.py", line 143, in get_device_roster
device_roster = await self._post(url, header, data)
File "/usr/local/lib/python3.10/site-packages/petkitaio/petkit_client.py", line 345, in _post
async with self._session.post(url, headers=headers, data=data, timeout=self.timeout) as resp:
File "/usr/local/lib/python3.10/site-packages/aiohttp/client.py", line 1138, in __aenter__
self._resp = await self._coro
File "/usr/local/lib/python3.10/site-packages/aiohttp/client.py", line 557, in _request
resp = await req.send(conn)
File "/usr/local/lib/python3.10/site-packages/aiohttp/client_reqrep.py", line 669, in send
await writer.write_headers(status_line, self.headers)
File "/usr/local/lib/python3.10/site-packages/aiohttp/http_writer.py", line 130, in write_headers
buf = _serialize_headers(status_line, headers)
File "aiohttp/_http_writer.pyx", line 132, in aiohttp._http_writer._serialize_headers
File "aiohttp/_http_writer.pyx", line 109, in aiohttp._http_writer.to_str
TypeError: Cannot serialize non-str key None
Hi,
Is feeding plan/schedule (that will be programmed onto device) on the roadmap? I know that can use HA automation to achieve similar results but such scenario creates IMO to many parts that can fail.
If this matters I'm using Fresh Element Solo
Regards,
Adam
Is that device supported PETKIT Stainless Steel Cat Water Fountain
Thanks.
Not sure if this is how I utilize my petkit fresh element feeder or if it's something that others are potentially dealing with too. I have feedings that are set for specific times, but what I'm seeing is that the device frequently goes unavailable because of petkit servers or the the API might be down for maintenance, resulting in the feeding never happening. Currently there's no good way to view this at an device/entity level, so I find myself checking a camera at the time of the feeding and listening for the dispensing food. This brings me to my question, is it possible to add a log entry when food is actually dispensed?
Hello
Great integration :-) I have this one for a while. Do you think it would be possible to support it ?
https://petkit.us/products/petkit-element-wi-fi-enabled-smart-pet-food-container-feeder
Currently the integration only send back number.cat_set_weight
Thanks a lot
Hi, so at least for PuraMax litter box there's an additonal switch for "adsorption enchance" which is missing from the integration.
Hello. I can't see the most important sensor in puramax "cat weight". Is it there?
I'm running Home Assistant 2023.9.2 Supervisor 2023.09.2 Operating System 10.5 Frontend 20230911.0 - latest, not a Docker version, but still getting this error when try to setup integration.
Logger: custom_components.petkit
Source: custom_components/petkit/util.py:34
Integration: PetKit ([documentation](https://github.com/RobertD502/home-assistant-petkit/blob/main/README.md), [issues](https://github.com/RobertD502/home-assistant-petkit/issues))
First occurred: 14:28:37 (2 occurrences)
Last logged: 14:36:08
A timezone could not be found. If you are running Home Assistant as a standalone Docker container, you must define the TZ environmental variable.
TZ environment variable presents in system:
I have two cat, but only one (first) add to HA from integration. Thanks
Hi,
thank you for this integration. It works well so far but i noticed that the litter level and weight is always 0%/KG even if i refill the litter box.
There is one log error but i dont know if its related to this bug.
Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 243, in _handle_refresh_interval
await self._async_refresh(log_failures=True, scheduled=True)
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 399, in _async_refresh
self.async_update_listeners()
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 182, in async_update_listeners
update_callback()
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 479, in _handle_coordinator_update
self.async_write_ha_state()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 745, in async_write_ha_state
self._async_write_ha_state()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 845, in _async_write_ha_state
state, attr = self._async_generate_attributes()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 786, in _async_generate_attributes
state = self._stringify_state(available)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 751, in _stringify_state
if (state := self.state) is None:
^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 501, in state
value = self.native_value
^^^^^^^^^^^^^^^^^
File "/config/custom_components/petkit/sensor.py", line 2874, in native_value
if work_state['petInTime'] == 0:
~~~~~~~~~~^^^^^^^^^^^^^
KeyError: 'petInTime'
Hi Robert and thank you SO MUCH for your work. I managed to install, despite not knowing Ha, your integration. it accepts my credentials but I can't find anything in entity, only now I think I understand that this is due to the fact that I have a pure max. is it correct in your opinion? do you plan to release an update soon? is this why i can't find entities on Ha? thank you very much!!!
Hello, can you help me what I'm doing wrong? It's first time I log in.
This error originated from a custom integration.
Logger: custom_components.petkit
Source: custom_components/petkit/util.py:41
Integration: PetKit (documentation, issues)
Unknown PetKit Error: PetKit Error 125: The phone number is not registered
I am not sure when this started exactly, but I believe it was pretty recent, perhaps even since home assistant version 2024.6.0. I'm now running 2024.6.1, but same error.
I'm currently running PetKit 0.1.10
I'm getting this error every few minutes.
2024-06-11 03:55:21.193 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved (None)
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 255, in _handle_refresh_interval
await self._async_refresh(log_failures=True, scheduled=True)
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 411, in _async_refresh
self.async_update_listeners()
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 165, in async_update_listeners
update_callback()
File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 491, in _handle_coordinator_update
self.async_write_ha_state()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1000, in async_write_ha_state
self._async_write_ha_state()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1126, in _async_write_ha_state
state, attr, capabilities, shadowed_attr = self.__async_calculate_state()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1061, in __async_calculate_state
state = self._stringify_state(available)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1006, in _stringify_state
if (state := self.state) is None:
^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/select/__init__.py", line 148, in state
current_option = self.current_option
^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/petkit/select.py", line 266, in current_option
return WF_MODE_NAMED[mode]
~~~~~~~~~~~~~^^^^^^
KeyError: 3
It looks like it's doing this every time it does an update. I enabled debug mode, and see a request before each error:
2024-06-11 04:07:03.578 DEBUG (MainThread) [custom_components.petkit] Found the following PetKit devices/pets: PetKitData(user_id='100008288', feeders={.......
2024-06-11 04:07:03.578 DEBUG (MainThread) [custom_components.petkit] Finished fetching petkit data in 7.429 seconds (success: True)
followed immediately by another instance of the error above:
2024-06-11 04:07:03.579 ERROR (MainThread) [homeassistant] Error doing job: Task exception was never retrieved (None)
Traceback (most recent call last):
I'll see if I can attach my list of errors so you can see the frequency of the issue too.
I'm happy to help debug or provide any further details too.
Thanks.
petkit_errors_list.txt
I translated the entire en.json
file into Russian and named the file ru.json
. I checked it myself. I uploaded the file along the path \custom_components\petkit\translations\ru.json
and everything was translated for me. I don't know how to PR. Please add this to your integration. Thank you
{
"config": {
"abort": {
"already_configured": "Учётная запись Petkit уже настроена",
"reauth_successful": "Повторная аутентификация прошла успешно"
},
"error": {
"cannot_connect": "Не удалось подключиться",
"invalid_auth": "Неверная аутентификация. Проверьте свои учётные данные",
"no_devices": "В аккаунте не найдено ни одного устройства",
"server_busy": "Серверы Petkit заняты. Пожалуйста, повторите попытку позже",
"petkit_error": "Найдена неизвестная ошибка. Пожалуйста, обратитесь к Home Assistant за дополнительной информацией",
"region_error": "Пожалуйста, выберите страну, соответствующую вашей учётной записи",
"timezone_error": "Не удалось найти часовой пояс. Если вы запускаете Home Assistant как автономный контейнер Docker, вы должны определить переменную среды TZ"
},
"step": {
"user": {
"data": {
"email": "Укажите электронную почту от учетной записи Pet Kit",
"password": "Укажите пароль от учетной записи Pet Kit",
"region": "Выберите страну, связанную с вашей учетной записью",
"polling_interval": "Интервал опроса (секунды)"
},
"title": "Заполните свои учетные данные PetKit"
},
"reauth_confirm": {
"data": {
"email": "Укажите электронную почту от учетной записи Pet Kit",
"password": "Укажите пароль от учетной записи Pet Kit",
"region": "Выберите страну, связанную с вашей учетной записью",
"polling_interval": "Интервал опроса (секунды)"
},
"title": "Повторите аутентификацию с использованием ваших учетных данных PetKit"
}
}
},
"options": {
"step": {
"petkit_options": {
"data": {
"region": "Выберите страну, связанную с вашей учетной записью",
"polling_interval": "Интервал опроса (секунды)"
}
}
}
},
"entity": {
"binary_sensor": {
"water_level": {
"name": "Уровень воды"
},
"food_level": {
"name": "Уровень пищи"
},
"battery_installed": {
"name": "Батарея установлена"
},
"battery": {
"name": "Батарея"
},
"wastebin": {
"name": "Мусорная корзина"
},
"litter": {
"name": "Туалет"
},
"deodorizer": {
"name": "Дезодорант"
},
"manually_paused": {
"name": "Приостановлено вручную"
},
"pura_air_liquid": {
"name": "Жидкость Pura Air"
},
"food_level_hopper_one": {
"name": "Бункер для уровня продуктов 1"
},
"food_level_hopper_two": {
"name": "Бункер для уровня продуктов 2"
}
},
"button": {
"reset_filter": {
"name": "Сброс фильтра"
},
"reset_desiccant": {
"name": "Сброс влагопоглотителя"
},
"cancel_manual_feed": {
"name": "Отмена ручного кормления"
},
"call_pet": {
"name": "Подозвать питомца"
},
"start_cleaning": {
"name": "Начало/возобновление уборки"
},
"pause_cleaning": {
"name": "Приостановление уборки"
},
"odor_removal": {
"name": "Удаление запаха"
},
"reset_deodorizer": {
"name": "Сброс дезодоранта"
},
"reset_pura_air_liquid": {
"name": "Сброс жидкости Pure Air"
},
"n50_reset": {
"name": "Сброс No 50 устранителя запаха"
},
"light_on": {
"name": "Включение сигнала ON"
},
"start_maintenance": {
"name": "Включение режима обслуживания"
},
"exit_maintenance": {
"name": "Выключение режима обслуживания"
},
"pause_exit_maintenance": {
"name": "Приостановление режима обслуживания"
},
"resume_exit_maintenance": {
"name": "Возобновление выхода из режима обслуживания"
},
"dump_litter": {
"name": "Сброс мусора"
},
"pause_dump_litter": {
"name": "Приостановление сброса мусора"
},
"resume_dump_litter": {
"name": "Возобновление сброса мусора"
},
"food_replenished": {
"name": "Корм пополнен"
},
"start_cal": {
"name": "Начать калибровку"
},
"stop_cal": {
"name": "Остановить калибровку"
}
},
"fan": {
"purifier": {
"name": "PОчиститель",
"state_attributes": {
"preset_mode": {
"state": {
"auto": "Auto",
"silent": "Silent",
"standard": "Standard",
"strong": "Strong"
}
}
}
}
},
"number": {
"set_weight": {
"name": "Установить вес"
},
"surplus": {
"name": "Излишек"
},
"volume": {
"name": "Громкость"
},
"manual_feed": {
"name": "Кормление вручную"
},
"cleaning_delay": {
"name": "Задержка уборки"
},
"min_eating_duration": {
"name": "Минимальная продолжительность приёма пищи"
}
},
"select": {
"light_brightness": {
"name": "Яркость света",
"state": {
"low": "Low",
"medium": "Medium",
"high": "High"
}
},
"mode": {
"name": "Режим",
"state": {
"normal": "Normal",
"smart": "Smart"
}
},
"manual_feed": {
"name": "Кормление вручную"
},
"sound": {
"name": "Звук"
},
"cleaning_interval": {
"name": "Интервал уборки"
},
"litter_type": {
"name": "Тип наполнителя",
"state": {
"bentonite": "Bentonite",
"tofu": "Tofu",
"mixed": "Mixed"
}
}
},
"sensor": {
"energy_usage": {
"name": "Использование энергии"
},
"last_data_update": {
"name": "Последнее обновление данных"
},
"filter": {
"name": "Фильтр"
},
"purified_water_today": {
"name": "Очищенная вода сегодня"
},
"feeder_status": {
"name": "Статус",
"state": {
"offline": "Offline",
"normal": "Normal",
"on_batteries": "On Batteries"
}
},
"desiccant_days_remaining": {
"name": "Осталось влагопоглотителя"
},
"battery_status": {
"name": "Статус батареи",
"state": {
"normal": "Normal",
"low": "Low"
}
},
"dispensed": {
"name": "Батарея разряжена"
},
"planned": {
"name": "Запланированный"
},
"planned_dispensed": {
"name": "Запланированная разрядка"
},
"manually_dispensed": {
"name": "Разрядка вручную"
},
"times_dispensed": {
"name": "Периоды разрядки батареи"
},
"rssi": {
"name": "RSSI"
},
"amount_eaten": {
"name": "Количество съеденного корма"
},
"times_eaten": {
"name": "Количество приёмов корма"
},
"food_in_bowl": {
"name": "Корм в миске"
},
"error": {
"name": "Ошибка",
"state": {
"no_error": "Ошибки нет"
}
},
"deodorizer_level": {
"name": "Уровень дезодоранта"
},
"litter_level": {
"name": "Уровень отходов"
},
"last_used_by": {
"name": "Последнее использование",
"state": {
"no_record_yet": "Отсутствие записи",
"unknown_pet": "Неизвестный питомец"
}
},
"last_event": {
"name": "Последнее событие",
"state": {
"no_events_yet": "No events yet",
"event_type_unknown": "Тип события неизвестен",
"cleaning_completed": "Очистка завершена",
"dumping_over": "Сброс через",
"reset_over": "Сброс настроек",
"spray_over": "Распылить",
"pet_out": "Выход питомца",
"auto_cleaning_completed": " Автоуборка выполнена",
"periodic_cleaning_completed": "Периодическая уборка завершена",
"manual_cleaning_completed": "Ручная уборка выполнена",
"auto_cleaning_terminated": "Автоматическая уборка выполнена",
"periodic_cleaning_terminated": "Периодическая уборка выполнена",
"manual_cleaning_terminated": "Ручная уборка выполнена",
"auto_cleaning_failed_full": "Автоматическая уборка не состоялась, контейнер наполнен, пожалуйста, срочно очистите",
"auto_cleaning_failed_hall_l": "Сбой авточистки, цилиндр неправильно зафиксирован на месте, пожалуйста, проверьте",
"auto_cleaning_failed_hall_t": "Сбой авточистки,верхняя крышка чашки туалетного лотка установлена неправильно, пожалуйста, проверьте",
"scheduled_cleaning_failed_full": "Плановая уборка не удалась, контейнер для мусора переполнен, пожалуйста, опорожните его скорее",
"scheduled_cleaning_failed_hall_l": "Плановая уборка не удалась, цилиндр неправильно зафиксирован на месте, пожалуйста, проверьте",
"scheduled_cleaning_failed_hall_t": "Сбой плановой уборки,верхняя крышка чашки туалетного лотка установлена неправильно, пожалуйста, проверьте",
"manual_cleaning_failed_full": "Сбой ручной уборки, контейнер для мусора переполнен, пожалуйста, опорожните его скорее",
"manual_cleaning_failed_hall_l": "Сбой ручной уборки, цилиндр неправильно зафиксирован на месте, пожалуйста, проверьте",
"manual_cleaning_failed_hall_t": "Сбой ручной уборки, верхняя крышка чашки туалетного лотка установлена неправильно, пожалуйста, проверьте",
"auto_cleaning_canceled": "Автоуборка отложена",
"periodic_cleaning_canceled": "Периодическая уборка отменена,устройство в работе",
"manual_cleaning_canceled": "Ручная уборка отменена, устройство в действии",
"auto_cleaning_canceled_kitten": "Включён режим котёнок, автоуборка отменена",
"periodic_cleaning_canceled_kitten": "Включён режим котёнок, периодическая уборка отменена",
"litter_empty_completed": "Очистка кошачьего туалета выполнена",
"litter_empty_terminated": "Очистка кошачьего туалета закончена",
"litter_empty_failed_full": "Не удалось опорожнить наполнитель для кошачьего туалета, контейнер для сбора мусора заполнен, пожалуйста, опорожните его как можно скорее",
"litter_empty_failed_hall_l": "Сбой очистки кошачьего туалета, цилиндр неправильно зафиксирован на месте, пожалуйста, проверьте",
"litter_empty_failed_hall_t": "Сбой очистки кошачьего туалета, вершняя крышка чашки туалетного лотка установлена неправильно, пожалуйста, проверьте",
"reset_completed": "Сброс устройства завершён",
"reset_terminated": "Сброс устройства прекращён",
"reset_failed_full": "Ошибка сброса устройства, контейнер для отходов переполнен, пожалуйста, опорожните его скорее",
"reset_failed_hall_l": "Ошибка сброса устройства, цилиндр неправильно зафиксирован на месте, пожалуйста, проверьте",
"reset_failed_hall_t": "Ошибка сброса устройства, крышка чаши туалетного лотка установлена неправильно",
"deodorant_finished": "Закончился дезодорант",
"periodic_odor_completed": "Периодическое удаление запаха завершено",
"manual_odor_completed": "Выполнено ручное удаление запаха",
"deodorant_finished_liquid_lack": "Дезодорант закончился, недостаточно очищающей жидкости, пожалуйста, пополняйте во-время",
"periodic_odor_completed_liquid_lack": "Периодическое удаление запаха завершено, недостаточно очищающей жидкости, пожалуйста, пополняйте во-время",
"manual_odor_completed_liquid_lack": "Выполнено ручное удаление запаха, недостаточно очищающей жидкости, пожалуйста, пополняйте во-время",
"auto_odor_failed": "Сбой автоматического удаления запаха, ошибка устранителя запаха",
"periodic_odor_failed": "Сбой периодического удаления запаха, неисправность в устранителе запаха",
"manual_odor_failed": "Сбой ручного удаления запаха, неисправность в устранителе запаха"
},
"state_attributes": {
"sub_events": {
"state": {
"no_events_yet": "Пока нет события",
"event_type_unknown": "Вид события неизвестен",
"cleaning_completed": "Очистка завершена",
"dumping_over": "Разгрузка",
"reset_over": "Сброс ",
"spray_over": "Распыление",
"pet_out": "Питомца нет",
"auto_cleaning_completed": "Автоуборка завершена",
"periodic_cleaning_completed": "Периодическая уборка выполнена",
"manual_cleaning_completed": "Ручная уборка выполнена",
"auto_cleaning_terminated": "Автоматическая уборка завершена",
"periodic_cleaning_terminated": "Периодическая уборка завершена",
"manual_cleaning_terminated": "Ручная уборка завершена",
"auto_cleaning_failed_full": "Сбой автоматической уборки",
"auto_cleaning_failed_hall_l": "Сбой автоматической уборки, цилиндр неправильно зафиксирован на месте, пожалуйста, проверьте",
"auto_cleaning_failed_hall_t": "Сбой автоматической уборки,верхняя крышка чаши туалетного лотка установлена неправильно, пожалуйста, проверьте",
"scheduled_cleaning_failed_full": "Запланированная уборка не удалась, контейнер для сбора мусора полон, пожалуйста, опорожните его как можно скорее",
"scheduled_cleaning_failed_hall_l": "Запланированная уборка не удалась, цилиндр неправильно зафиксирован на месте, пожалуйста,проверьте",
"scheduled_cleaning_failed_hall_t": "Запланированная уборка не удалась,крышка чаши туалетного лотка установлена неправильно, пожалуйста,проверьте",
"manual_cleaning_failed_full": "Сбой ручной уборки, контейнер для отходов переполнен, пожалуйста, опорожните его скорее",
"manual_cleaning_failed_hall_l": "Сбой ручной уборки, цилиндр неправильно зафиксирован на месте, пожалуйста, проверьте",
"manual_cleaning_failed_hall_t": "Сбой ручной уборки, крышка чаши туалетного лотка установлена неправильно, пожалуйста, проверьте",
"auto_cleaning_canceled": "Отмена автоматической уборки, устройство в действии",
"periodic_cleaning_canceled": "Отмена периодической уборки, устройство в действии",
"manual_cleaning_canceled": "Отмена ручной уборки, устройство в действии",
"auto_cleaning_canceled_kitten": "Включен режим котёнок, авто уборка отменена",
"periodic_cleaning_canceled_kitten": "Включен режим котёнок, периодическая уборка отменена",
"litter_empty_completed": "Кошачий туалет опорожнён",
"litter_empty_terminated": "Завершено опорожнение кошачьего туалета ",
"litter_empty_failed_full": "Сбой в опорожнении кошачьего туалета, контейнер для отходов переполнен, пожалуйста, опопрожните его быстрее",
"litter_empty_failed_hall_l": "Сбой в опорожнении кошачьего туалета,цилиндр неправильно зафиксирован на месте,пожалуйста, проверьте",
"litter_empty_failed_hall_t": "Сбой в опорожнении кошачьего туалета, крышка чаши туалетного лотка установлена неправильно, пожалуйста, проверьте",
"reset_completed": "Сброс устройства выполнен",
"reset_terminated": "Сброс устройства завершён",
"reset_failed_full": "Не выполнен сброс устройства, контейнер для отходов переполнен, пожалуйста, опорожните его быстрее",
"reset_failed_hall_l": "Не выполнен сброс устройства, цилиндр неправильно зафиксирован на месте, пожалуйста, проверьте",
"reset_failed_hall_t": "Не выполнен сброс устройства, крышка чаши туалетного лотка установлена неправильно, пожалуйста, проверьте",
"deodorant_finished": "Закончился дезодорант",
"periodic_odor_completed": "Выполнено периодическое удаление запаха",
"manual_odor_completed": "Выполнено ручное удаление запаха",
"deodorant_finished_liquid_lack": "Закончился дезодорант,недостаточно очищающей жидкости, пожалуйста, пополняйте во-время",
"periodic_odor_completed_liquid_lack": "Выполнено периодическое удаление запаха, недостаточно очищающей жидкости, пожалуйста, пополняйте во-время",
"manual_odor_completed_liquid_lack": "Выполнено ручное удаление запаха, недостаточно очищающей жидкости, пожалуйста, пополняйте во-время",
"auto_odor_failed": "Сбой автоматического удаления запаха, ошибка устранителя запаха",
"periodic_odor_failed": "Сбой периодического удаления запаха, неисправность устранителя запаха",
"manual_odor_failed": "Сбой ручного удаления запаха, неисправность устранителя запаха",
"no_sub_events": "Нет связанных подсобытий"
}
}
}
},
"latest_weight": {
"name": "Последний вес"
},
"last_use_duration": {
"name": "Длительность последнего использования"
},
"pura_air_battery": {
"name": "Батарея Pure Air"
},
"pura_air_liquid": {
"name": "Жидкость Pure Air"
},
"n50_odor_eliminator": {
"name": "Устранитель запаха № 50"
},
"max_last_event": {
"name": "Последнее событие",
"state": {
"no_events_yet": "Событий нет",
"event_type_unknown": "Вид события неизвестен",
"cleaning_completed": "Очистка выполнена",
"dumping_over": "Разгрузка",
"reset_over": "Перезагрузка",
"spray_over": "Распыление",
"light_over": "Свет",
"pet_out": "Питомца нет",
"auto_cleaning_completed": "Выполнена автоуборка",
"periodic_cleaning_completed": "Выполнена периодическая уборка",
"manual_cleaning_completed": "Выполнена ручная уборка",
"auto_cleaning_terminated": "Завершена автоматическая уборка",
"periodic_cleaning_terminated": "Завершена периодическая уборка",
"manual_cleaning_terminated": "Завершена ручная уборка",
"auto_cleaning_failed_full": "Сбой автоматической уборки, контейнер для отходов переполнен, пожалуйста, опорожните его скорее",
"auto_cleaning_failed_hall_t": "Сбой автоматической уборки, верхняя крышка лотка установлена неправильно, пожалуйста, проверьте",
"auto_cleaning_failed_falldown": "Сбой автоматической уборки, туалетный лоток опрокинут, пожалуйста, проверьте",
"auto_cleaning_failed_other": "Сбой автоматической уборки, неисправность устройства, пожалуйста, проверьте",
"scheduled_cleaning_failed_full": "Запланированная уборка не удалась, контейнер для сбора мусора переполнен, пожалуйста, опорожните его как можно скорее",
"scheduled_cleaning_failed_hall_t": "Запланированная уборка не удалась,верхняя крышка лотка установлена неправильно, пожалуйста,проверьте",
"scheduled_cleaning_failed_falldown": "Запланированная уборка не удалась, туалетный лоток опрокинут, пожалуйста, проверьте",
"scheduled_cleaning_failed_other": "Запланированная уборка не удалась, неисправность устройства, пожалуйста, проверьте",
"manual_cleaning_failed_full": "Сбой ручной уборки, контейнер для отходов переполнен, пожалуйста, опорожните",
"manual_cleaning_failed_hall_t": "Сбой ручной уборки, крышка лотка установлена неправильно, пожалуйста, проверьте",
"manual_cleaning_failed_falldown": "Сбой ручной уборки, лоток опрокинут, пожалуйста,проверьте",
"manual_cleaning_failed_other": "Сбой ручной уборки, неисправность устройства, пожалуйста, проверьте",
"auto_cleaning_canceled": "Отмена автоматической уборки, устройство в действии",
"periodic_cleaning_canceled": "Отмена периодической уборки,устройство в действии",
"manual_cleaning_canceled": "Отмена ручной уборки, устройство в действии",
"auto_cleaning_failed_maintenance": "Сбой автоматической уборки, устройство в режиме обслуживания",
"periodic_cleaning_failed_maintenance": "Сбой периодической уборки, устройство в режиме обслуживания",
"auto_cleaning_canceled_kitten": "Включен режим котёнок, автоуборка отменена",
"periodic_cleaning_canceled_kitten": "Включен режим котёнок, периодическая уборка отменена",
"litter_empty_completed": "Выполнено опорожнение лотка",
"litter_empty_terminated": "Завершено опорожнение лотка",
"litter_empty_failed_full": " Сбой в опорожнении лотка, контейнер переполнен, пожалуйста, опорожните скорее",
"litter_empty_failed_hall_t": "Сбой в опорожнении лотка, неправильно установлена крышка чаши туалетного лотка, пожалуйста, проверьте",
"litter_empty_failed_falldown": "Сбой в опопрожнении лотка, лоток опрокинут, пожалуйста, проверьте",
"litter_empty_failed_other": "Сбой в опорожнении лотка, неисправность устройства, пожалуйста, проверьте",
"reset_completed": "Выполнена перезагрузка устройства",
"reset_terminated": "Завершена перезагрузка устройства",
"reset_failed_full": "Сбой перезагрузки, контейнер переполнен, пожалуйста, опорожните скорее",
"reset_failed_hall_t": "Сбой перезагрузки, чаша туалетного лотка установлена неправильно,пожалуйста, проверьте",
"reset_failed_falldown": "Сбой перезагрузки, туалетный лоток опрокинутнут, пожалуйста, проверьте",
"reset_failed_other": "Сбой перезагрузки, неисправность устройства, пожалуйста, проверьте",
"maintenance_mode": "Режим обслуживания",
"deodorant_finished": "Закончился дезодорант",
"periodic_odor_completed": "Выполнено периодическое удаление запаха",
"manual_odor_completed": "Выполнено ручное удаление запаха",
"auto_odor_terminated": "Закончено автоматическое удаление запаха",
"periodic_odor_terminated": "Закончено периодическое удаление запаха",
"manual_odor_terminated": "Закончено ручное удаление запаха",
"auto_odor_failed": "Сбой автоматического удаления запаха",
"periodic_odor_failed": "Сбой периодического удаления запаха, неисправность устранителя запаха",
"manual_odor_failed": "Сбой ручного удаления запаха, неисправность устранителя запаха",
"auto_odor_canceled": "Отменено автоматическое удаление запаха, устройство работает",
"periodic_odor_canceled": "Отменено периодическое удаление запаха. Туалетный лоток работает",
"manual_odor_canceled": "Отменено ручное удаление запаха. Туалетный лоток работает",
"auto_odor_failed_device": "Сбой автоматического удаления запаха, никакой умный спрей не подключен",
"periodic_odor_failed_device": "Сбой периодического удаления запаха. Устройство устранения запаха отключено",
"manual_odor_failed_device": "Сбой ручного удаления запаха. Устройство устранения запаха отключено",
"auto_odor_failed_batt": "Сбой автоматического удаления запаха,пожалуйста, подтвердите, что батареи достаточно умного спрея",
"periodic_odor_failed_batt": "Сбой периодического удаления запаха. Пожалуйста, убедитесь, что в устройстве для удаления запаха достаточно заряда батареи",
"manual_odor_failed_batt": "Сбой ручного удаления запаха. Пожалуйста, убедитесь, что в устройстве для удаления запаха достаточно заряда батареи",
"auto_odor_failed_low_batt": "Автоматическое удаление запаха не удалось, батарея разряжена",
"periodic_odor_failed_low_batt": "Периодическое удаление запаха не удалось, батарея разряжена",
"manual_odor_failed_low_batt": "Ручное удаление запаха не удалось, батарея разряжена",
"cat_stopped_odor": "Ваша кошка пользуется лотком, дезодорация отменена",
"light_on": "Включен свет",
"light_already_on": "Свет включен. Нет необходимости включать его снова",
"light_malfunc": "Не удалось включить свет. Неисправность устройства, пожалуйста, проверьте",
"light_no_device": "Не удалосьвключить свет. Пожалуйста, сначала присоедините устройство для удаления запаха",
"light_batt_cap": "Не удалось включить свет.Пожалуйста, проверьте емкость аккумулятора устройства удаления запаха",
"light_low_batt": "Не удалось включить свет. Низкая ёмкость аккумулятора для устранения запаха"
},
"state_attributes": {
"sub_events": {
"state": {
"no_events_yet": "Нет событий",
"event_type_unknown": "Тип события не известен",
"cleaning_completed": "Очистка выполнена",
"dumping_over": "Разгрузка",
"reset_over": "Перезагрузка",
"spray_over": "Распыление",
"light_over": "Свет",
"pet_out": "Питомца нет",
"auto_cleaning_completed": "Выполнена автоуборка",
"periodic_cleaning_completed": "Выполнена периодическая уборка",
"manual_cleaning_completed": "Выполнена ручная уборка",
"auto_cleaning_terminated": "Выполнена автоматическая уборка",
"periodic_cleaning_terminated": "Закончена периодическая уборка",
"manual_cleaning_terminated": "Закончена периодическая уборка",
"auto_cleaning_failed_full": "Сбой автоматической уборки, контейнер переполнен, пожалуйста, опоржните скорее",
"auto_cleaning_failed_hall_t": "Сбой автоматической уборки, Верхняя крышка чаши лотка установлена неправильно, пожалуйчта, проверьте",
"auto_cleaning_failed_falldown": "Сбой автоматической уборки, лоток опрокинут, пожалуйста, проверьте",
"auto_cleaning_failed_other": "Сбой автоматической уборки, неисправность устройства, пожалуйста, проверьте",
"scheduled_cleaning_failed_full": "Сбой запланированной уборки, контейнер переполнен, пожалуйста, опопрожните скорее",
"scheduled_cleaning_failed_hall_t": "Сбой запланированной уборки, верхняя крышка лотка установлена неправильно, пожалуйста, проверьте",
"scheduled_cleaning_failed_falldown": "Сбой запланированной уборки, лоток опрокинут, пожалуйста, проверьте",
"scheduled_cleaning_failed_other": "Сбой запланированной уборки, неисправность устройства, пожалуйста, проверьте",
"manual_cleaning_failed_full": "Сбой ручной уборки, контейнер переполнен, пожалуйста, опорожните скорее",
"manual_cleaning_failed_hall_t": "Сбой ручной уборки, верхняя крышка лотка установлена неправильно, пожалуйста, проверьте",
"manual_cleaning_failed_falldown": "Сбой ручной уборки,лоток опрокинут, пожалуйста, проверьте",
"manual_cleaning_failed_other": "Сбой ручной уборки,неисправность устройства, пожалуйста, проверьте",
"auto_cleaning_canceled": "Отменена автоматическая очистка, устройство работает",
"periodic_cleaning_canceled": "Отменена периодическая очистка, устройство работает",
"manual_cleaning_canceled": "Отменена ручная очистка, устройство работает",
"auto_cleaning_failed_maintenance": "Сбой автоматической очистки, устройство в режиме обслуживания",
"periodic_cleaning_failed_maintenance": "Сбой периодической очистки, устройство в режиме обслуживания",
"auto_cleaning_canceled_kitten": "Включен режим котёнок, отменена автоочистка",
"periodic_cleaning_canceled_kitten": "Включен режим котёнок, отменена периодическая очистка",
"litter_empty_completed": "Кошачий туалет очищен",
"litter_empty_terminated": "Завершена очистка кошачьего туалета",
"litter_empty_failed_full": "Сбой в очистке кошачьего туалета, контейнер переполнен, пожалуйста, опорожните скорее",
"litter_empty_failed_hall_t": "Сбой в очистке кошачьего туалета, крышка лотка установлена неправильно, пожалуйста, проверьте",
"litter_empty_failed_falldown": "Сбой в очистке кошачьего туалета, лоток опрокинут, пожалуйста, проверьте",
"litter_empty_failed_other": "Сбой в очистке кошачьего туалета, неисправность устройства, пожалуйста, проверьте",
"reset_completed": "Перезагрузка выполнена",
"reset_terminated": "Перезагрузка завершена",
"reset_failed_full": "Сбой перезагрузки, контейнер для отходов переполнен, пожалуйста, опорожните скорее",
"reset_failed_hall_t": "Сбой перезагрузки,крышка лотка установлена неправильно,пожалуйста, проверьте",
"reset_failed_falldown": "Сбой перезагрузки, лоток опрокинут, пожалуйста, проверьте",
"reset_failed_other": "Сбой перезагрузки, неисправность устройства, пожалуйста, проверьте",
"maintenance_mode": "Режим обслуживания",
"deodorant_finished": "Дезодорант закончился",
"periodic_odor_completed": "Выполнено периодическое удаление запаха",
"manual_odor_completed": "Выполнено ручное удаление запаха",
"auto_odor_terminated": "Закончено автоматическое удаление запаха",
"periodic_odor_terminated": "Закончено периодическое удаление запаха",
"manual_odor_terminated": "Закончено ручное удаление запаха",
"auto_odor_failed": "Сбой автоматического удаления запаха, ошибка устранителя запаха",
"periodic_odor_failed": "Сбой периодическогок удаления запаха, неисправность устранителя запаха",
"manual_odor_failed": "Сбой ручного удаления запаха, неисправность устранителя запаха",
"auto_odor_canceled": "Отменено автоматическое удаление запаха, устройство в работе",
"periodic_odor_canceled": "Отменено периодическое удаление запаха. Лоток работает",
"manual_odor_canceled": "Отменено ручное удаление запаха. Лоток работает",
"auto_odor_failed_device": "Сбой автоматического удаления запаха, никакой умный спрей не подсоединён",
"periodic_odor_failed_device": "Сбой периодического удаления запаха. Осоединено устройство удаления запаха",
"manual_odor_failed_device": "Сбой ручного удаления запаха. Отсоединено устройство удаления запаха",
"auto_odor_failed_batt": "Сбой автоматического удаления запаха, пожалуйста, убедитесь. что в батарее умного спрея достаточно зарядки",
"periodic_odor_failed_batt": "Сбой периодического удаления запаха. Пожалуйста, убедитесь, что в батарее Устройства для удаления запаха достаточно зарядки",
"manual_odor_failed_batt": "Сбой ручного удаления запаха, Пожалуйста, убедитесь, чтов батарее Устройства для удаления запаха достаточно зарядки",
"auto_odor_failed_low_batt": "Сбой автоматического удаления запаха. Низкий заряд батареи",
"periodic_odor_failed_low_batt": "Сбой периодического удаления запаха. Низкий заряд батареи",
"manual_odor_failed_low_batt": "Сбой ручного удаления запаха. Низкий заряд батареи",
"cat_stopped_odor": "Ваш кот пользуется сейчас туалетным лотком, дезодорирование отменено",
"light_on": "Включен свет",
"light_already_on": "Включен свет. Нет необходимости включать снова",
"light_malfunc": "Сбой включения света. Неиспарвность устройства, пожалуйста, проверьте",
"light_no_device": "Сбой включения света. Пожалуйста, сначала подсоедините устранитель запаха",
"light_batt_cap": "Сбой включения света. Пожалуйста, проверьте мощность батареи устранителя запаха",
"light_low_batt": "Сбой включения света. Низкая мощность батареи устранителя запаха",
"no_sub_events": "Нет связанных событий"
}
}
}
},
"max_work_state": {
"name": "Состояние",
"state": {
"cleaning_litter_box": "Очистка лотка",
"cleaning_litter_box_paused": "Очистка приостановлена",
"cleaning_paused_pet_entered": "Очистка туалетного лотка приостановлена: во время работы вошло домашнее животное, сработали датчики защиты от защемления, устройство перестало работать. Пожалуйста, проверьте устройство как можно скорее.",
"cleaning_paused_system_error": "Очистка лотка приостановлена: Ошибка системы, операция приостановлена",
"cleaning_paused_pet_approach": "Очистка лотка приостановлена: Ваш кот приближается к лотку, операция приостановлена",
"cleaning_paused_pet_using": "Очистка лотка приостановлена: Ваш кот пользуется устройством, операция приостановлена",
"resetting_device": "Перезагрузка устройства",
"litter_box_paused": "Туалетный лоток приостановлен",
"paused_pet_entered": "Лоток для мусора приостановлен: домашнее животное вошло во время работы, сработали датчики защиты от защемления, устройство перестало работать. Пожалуйста, проверьте устройство как можно скорее",
"paused_system_error": "Туалетный лоток приостановлен: системная ошибка, работа приостановлена",
"paused_pet_approach": "Туалетный лоток приостановлен: Ваша кошка приближается, работа приостановлена",
"paused_pet_using": "Туалетный лоток приостановлен: ваша кошка использует устройство, работа приостановлена",
"dumping_litter": "Опорожнение кошачьего туалета",
"dumping_litter_paused": "Приостановка опорожнения кошачьего туалета",
"dumping_paused_pet_entered": "Опорожнение кошачьего туалета приостановлено: домашнее животное вошло во время работы, активировались датчики защиты от защемления, устройство перестало работать. Пожалуйста, проверьте устройство как можно скорее",
"dumping_paused_system_error": "Приостановка опорожнения кошачьего туалета: системная ошибка, операция приостановлена",
"dumping_paused_pet_approach": "Приостановка опорожнения кошачьего туалета: Ваш кот приближается к лотку, операция приостановлена",
"dumping_paused_pet_using": "Приостановка опорожнения кошачьего туалета: Ваш кот пользуется утсройством, операция приостановлена",
"resetting": "Перезагрузка",
"leveling": "Выравнивание кошачьего туалета, пожалуйста, подождите",
"calibrating": "Калибровка кошачьего туалета, пожалуйста, подождите",
"maintenance_mode": "В режиме обслуживания",
"maintenance_paused_pet_entered": "Режим обслуживания приостановлен: домашнее животное вошло во время работы, активировались датчики защиты от защемления, устройство перестало работать. Пожалуйста, проверьте устройство как можно скорее",
"maintenance_paused_cover": "Режим обслуживания приостановлен : Не установлена верхняя крышка, операция приостановлена",
"maintenance_paused_system_error": "Режим обслуживания приостановлен : Ошибка системы, операция приостановлена",
"maintenance_paused_pet_approach": "Режим обслуживания приостановлен: Ваш кот приюлижается к устройству, операция приостановлена",
"maintenance_paused_pet_using": "Режим обслуживания приостановлен: Ваш кот пользуется устройством",
"maintenance_paused": "Режим обслуживания приостановлен",
"exit_maintenance": "Выход из режима обслуживания",
"maintenance_exit_paused_pet_entered": "Выход из режима обслуживания приостановлен: домашнее животное вошло во время работы, активировались датчики защиты от защемления, устройство перестало работать. Пожалуйста, срочно проверьте устройство",
"maintenance_exit_paused_cover": "Выход из режима обслуживания приостановлен: верхняя крышка не установлена, операция приостановлена",
"maintenance_exit_paused_system_error": "Выход из режима обслуживания приостановлен: системная ошибка, операция приостановлена",
"maintenance_exit_paused_pet_approach": "Выход из режима обслуживания приостановлен: Ваш кот приближается к устройству, операция приостановлена",
"maintenance_exit_paused_pet_using": "Выход из режима обслуживания приостановлен: Ваш кот пользуется устройством (туалетом), операция приостановлена",
"maintenance_exit_paused": "Выход из режима обслуживания приостановлен",
"idle": "Устройство не используется"
}
},
"avg_eating_time": {
"name": "Среднее время приёма пищи"
},
"manually_dispensed_hopp_one": {
"name": "Бункер с ручным дозированием 1"
},
"manually_dispensed_hopp_two": {
"name": "Бункер с ручным дозированием 2"
},
"planned_hopp_one": {
"name": "Запланированный бункер 1"
},
"planned_hopp_two": {
"name": "Запланированный бункер 2"
},
"planned_dispensed_hopp_one": {
"name": "Запланированный раздаточный бункер 1"
},
"planned_dispensed_hopp_two": {
"name": "Запланированный раздаточный бункер 2"
},
"dispensed_hopp_one": {
"name": "Раздаточная воронка 1"
},
"dispensed_hopp_two": {
"name": "Раздаточная воронка 2"
},
"humidity": {
"name": "Влажность"
},
"temperature": {
"name": "Температура"
},
"air_purified": {
"name": "Очистка воздуха"
},
"liquid": {
"name": "Жидкость"
},
"food_left": {
"name": "Остаток пищи"
}
},
"switch": {
"light": {
"name": "Свет"
},
"power": {
"name": "Мощность"
},
"do_not_disturb": {
"name": "Не беспокоить"
},
"indicator_light": {
"name": "Световой индикатор"
},
"child_lock": {
"name": "Блокировка от детей"
},
"food_shortage_alarm": {
"name": "Сигнализация нехватки еды"
},
"dispense_tone": {
"name": "Звук выдачи"
},
"voice_with_dispense": {
"name": "Голос с дозированием"
},
"surplus_control": {
"name": "Контроль излишков"
},
"system_notification_sound": {
"name": "Звук системного уведомления"
},
"auto_odor_removal": {
"name": "Автоудаление запаха"
},
"auto_cleaning": {
"name": "Автоочистка"
},
"avoid_repeat_cleaning": {
"name": "Избегайте повторной очистки"
},
"periodic_cleaning": {
"name": "Периодическая очистка"
},
"periodic_odor_removal": {
"name": "Периодическое удаление запаха"
},
"kitten_mode": {
"name": "Режим котёнок"
},
"display": {
"name": "Дисплей"
},
"light_weight_cleaning_disabled": {
"name": "Легкая очистка отключена"
},
"cont_rotation": {
"name": "Непрерывное вращение"
},
"deep_cleaning": {
"name": "Глубокая очистка"
},
"deep_deodor": {
"name": "Глубокая дезодорация"
},
"prompt_tone": {
"name": "Сигнал подсказки"
}
},
"text": {
"manual_feed": {
"name": "Ручная кормежка"
}
}
}
}
So the new Yumshare Dual Hopper shipped, and we just got it in and set up. Currently it's not compatible with the integration, but as it's essentially an upgraded version of a Gemini, I was hoping it would be possible to expand the same feature set to it without much effort. Either way, thank you for your work on this integration, it's been a huge help.
Hi--
Great integration, have been using it since your beta tests. I recently upgraded my Pura X to the Pura Max litter box. I deleted the old device (Pura X) from the official PetKit app under my account, however, it continues to show up in the integration after rebooting and reloading the integration.
I can disable the device, but, is there a way to cleanly delete it from Home Assistant? Thanks
It seems only available in China currently.
Has anyone tried to open the litter and tried to dump the microcontroller ?
My router advertise it as Espressif, so it may be "powered" by esp or something like that.
I have a Pura MAX, but no skills at all regarding fw dump, so if anyone has the courage to reverse engineer it, I can help ! 😄
Hi.. I'm trying to install the repository but no way. I'm not much experienced with HA..
Could you help me?
Thanks
Hi there
Thank you so much for making this and this is something that I've been waiting for so long!
Just a quick question about my pet's avatar, is it possible to script the avatar to use https instead of http?
I am getting this and I tried to add http(s) and the picture loads too.
On the other hand, is there a way to keep weight history? The value seems reset every once in a while, and I'd like to always know what is the last measured weight of my cats.
Hello, thank you for the great integration! It's very easy to setup and works really well. I do wonder if you can add support for the YumShare Solo feeder that Petkit just recently released:
https://petkit.com/products/yumshare-solo-with-camera
I just bought one on Black Friday but it doesn't show up as one of the my devices when I configure this integration. My Eversweet Solo 2 and cats showed up without any issue so I know the integration is configured correctly. If you need any help getting the API data for the device, please let me know how to collect the necessary information.
Thanks again for building this helpful integration!
Hello,
since today i receive a message that the app is out of date.
Logger: custom_components.petkit
Quelle: helpers/update_coordinator.py:347
Integration: PetKit (Dokumentation, Probleme)
Erstmals aufgetreten: 08:35:15 (1 Vorkommnisse)
Zuletzt protokolliert: 08:35:15
Error fetching petkit data: PetKit Error 97: App is out of date, please upgrade
Hello,
Thanks for your work. Could you add a support for China region? The corresponsding api address is 'http://api.petkit.cn/6/'.
Currently the join link is, "invalid."
Hello!
First want to say this integration is awesome, and is what drove me to purchase this product, to replace an older Petwant smart feeder with no external connectivity, as well as a terrible app.
I noticed the battery state it not filling in HA, although the unit it-self mentions having an internal battery, and the users guide shows that the LEDs are indicating it working properly.
Is this a limitation for this product specifically (that other models may not have issues with), or has something happened in updates that caused the battery status to no longer sync properly?
Thanks!
Hi @RobertD502
Your integration works perfectly and I thank you for all the work provided. I have the “Fresh Element Mini Pro” kibble dispenser.
I use Home Assistant to make up for the lack of integration of my Homey box (https://homey.app/). Everything works, however one thing is preventing me from using the Fresh Element Mini Pro integration. One feature that is not supported is the custom drop-down list:
Is there a way to use a button or switch to dispense a fixed quantity of kibble? Indeed, custom drop-down lists are not supported by my Homey plugin (https://homey.app/fr-fr/app/io.home-assistant.community/Home-Assistant-Community/).
If you have a workaround or if you could add a "Press" button that would be really great and would perfectly complete my integration.
I thank you in advance !
When trying to add Petkit in integrations I get this error, I have reinstallend and rebooted and cleared cache. Any ideas?
Hi my account is an US regions and when I try to login via hass integration, I got this error:
Unknown PetKit Error: PetKit Error 125: The phone number is not registered
.
I did not check asia
or china
account checkboxes.
Traceback (most recent call last):
File "/config/custom_components/petkit/util.py", line 41, in async_validate_api
devices_query = await client.get_device_roster()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/petkitaio/petkit_client.py", line 170, in get_device_roster
await self.check_token()
File "/usr/local/lib/python3.11/site-packages/petkitaio/petkit_client.py", line 144, in check_token
await self.login()
File "/usr/local/lib/python3.11/site-packages/petkitaio/petkit_client.py", line 130, in login
response = await self._post(login_url, headers, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/petkitaio/petkit_client.py", line 404, in _post
return await self._response(resp)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/petkitaio/petkit_client.py", line 426, in _response
raise PetKitError(f'PetKit Error {code}: {response["error"]["msg"]}')
petkitaio.exceptions.PetKitError: PetKit Error 125: The phone number is not registered
Hi,
for some reason the sensor for my cats weight is rounded since a few days ago (3400g, 3800g, etc).
Do you have any hint? I am attaching the debug log.
2023-12-21 06:22:43.428 DEBUG (MainThread) [custom_components.petkit] Found the following PetKit devices/pets: PetKitData(user_id='xx', feeders={}, litter_boxes={100019620: LitterBox(id=100019620, device_detail={'id': xxx, 'mac': 'xx', 'sn': 'xx', 'secret': 'xx', 'createdAt': '2022-11-25T11:18:18.029+0000', 'name': 'PETKIT PURA MAX', 'hardware': 1, 'firmware': '1.456', 'firmwareDetails': [{'module': 'userbin', 'version': 2310010}, {'module': 'pics', 'version': 2220001}, {'module': 'lans', 'version': 2245001}], 'timezone': 1.0, 'signupAt': '2023-12-19T08:49:05.573+0000', 'locale': 'Europe/Rome', 'user': {'id': 'xxx', 'nick': 'xxxx', 'gender': 2, 'avatar': 'http://sandbox.img5.petkit.cn/banner/2022/10/13/6347d75a44ad08000b011e7dDzwc693i5', 'point': {'honour': 'LV0', 'rank': 0, 'growth': 17, 'icon': 'http://img5-us.petkit.cn/misc/point/n0', 'icon2': 'http://img5-us.petkit.cn/misc/point/l0', 'startGrowth': 0, 'endGrowth': 50}}, 'shareOpen': 1, 'autoUpgrade': 1, 'relation': {'userId': '100454792'}, 'withK3': 1, 'k3Id': 100028385, 'btMac': 'xxx', 'settings': {'litterFullNotify': 1, 'lackSandNotify': 1, 'workNotify': 0, 'petInNotify': 0, 'lackLiquidNotify': 1, 'deodorantNotify': 1, 'sandType': 2, 'manualLock': 0, 'lightMode': 1, 'lightRange': [0, 1440], 'autoWork': 1, 'fixedTimeClear': 0, 'fixedTimeRefresh': 0, 'downpos': 1, 'deepRefresh': 0, 'weightPopup': 1, 'autoIntervalMin': 1800, 'stillTime': 120, 'unit': 0, 'language': 'en_US', 'languageFollow': 0, 'softMode': 0, 'avoidRepeat': 0, 'underweight': 0, 'kitten': 0, 'kittenTipsTime': 0, 'stopTime': 600, 'languages': ['zh_CN', 'zh_TW', 'en_US', 'es_ES', 'ko_KR', 'it_IT', 'ja_JP', 'pt_PT', 'de_DE', 'fr_FR', 'ru_RU'], 'kittenPercent': 0.8, 'dumpSwitch': 1, 'autoRefresh': 0, 'disturbMode': 0, 'disturbRange': [1320, 360], 'relateK3Switch': 1, 'lightest': 2720, 'deepClean': 0, 'lightConfig': 2, 'bury': 0, 'lightMultiRange': [[360, 1320]], 'disturbConfig': 2, 'distrubMultiRange': [[1200, 420]], 'controlSettings': 0}, 'k3Device': {'id': 100028385, 'mac': 'a4c1388410d8', 'sn': '20220326M40469', 'secret': '7d70a1b6b1ba', 'createdAt': '2022-11-25T11:19:30.000+0000', 'updateAt': '2023-12-21T03:01:21.000+0000', 'userId': '100454792', 'name': 'The Smart Spray', 'hardware': 1, 'firmware': 39, 'settings': {'liquidLackSwitch': 1, 'fixedTimeRefresh': 0}, 'timezone': 1.0, 'relation': {'userId': '100454792'}, 'relateT4': 100019620, 'battery': 90, 'liquid': 100, 'refreshing': -1, 'lighting': -1, 'voltage': 0, 'liquidLack': 3}, 'petOutTip': 1, 'multiConfig': True, 'state': {'wifi': {'ssid': 'xxxx', 'bssid': 'xxxx', 'rsq': -32}, 'pim': 1, 'ota': 0, 'overall': 1, 'sandCorrect': 0, 'liquidReset': 0, 'sandWeight': 5731, 'sandPercent': 89, 'usedTimes': 0, 'sandType': 2, 'sandStatus': 1, 'box': 0, 'liquid': 100, 'battery': 90, 'petInTime': 0, 'power': 1, 'petError': False, 'deodorantLeftDays': 13, 'liquidLack': False, 'boxFull': False, 'liquidEmpty': False, 'sandLack': False, 'lowPower': False}, 'lastOutTime': 28, 'petOutRecords': [[14151, 28]], 'inTimes': 1, 'totalTime': 3463, 'specialLitterAd': {'adDetailUrl': 'http://m.petkit.com/app/cat_litter.html', 'adSwitch': 0, 'adLinkUrl': 'https://m.tb.cn/h.f8XZ8IM?sm=846b3a', 'label': '跨年', 'labelUrl': 'http://sandbox.img5.petkit.cn/post/2021/12/7/61af3624a8c9cc16b23736e8ywX6LUO8P', 'labelName': '专用猫砂'}, 'maintenanceTime': 1702625399, 'petInTipLimit': 15}, device_record=[{'deviceId': xxx, 'eventType': 10, 'timestamp': 1703127379, 'content': {'timeIn': 1703127351, 'timeOut': 1703127379, 'autoClear': 1, 'interval': 2, 'petWeight': 3426}, 'enumEventType': 'pet_out', 'userId': 'xxx', 'petId': '100640035', 'subContent': [{'deviceId': xxx, 'eventType': 5, 'timestamp': 1703127680, 'content': {'startTime': 1703127501, 'startReason': 0, 'litterPercent': 89, 'box': 0, 'result': 0, 'boxFull': False}, 'enumEventType': 'clean_over', 'userId': '100454792', 'subContent': []}], 'avatar': 'http://img5-us.petkit.cn/pavatar/2022/11/26/63811ccd6a5dff000bec207dcgg89kmEi', 'petName': 'Nespola'}], statistics={'statisticTime': '20231221', 'totalTime': 28, 'times': 1, 'avgTime': 28, 'statisticInfo': [{'statisticDate': '20231221', 'petTimes': 1, 'petTotalTime': 28, 'petWeight': 3426, 'petId': 'xxx', 'petName': 'Nespola', 'xTime': 14151}], 'petIds': [{'id': 'xxx', 'name': 'Nespola'}]}, type='t4', manually_paused=False, manual_pause_end=None)}, water_fountains={}, pets={100640033: Pet(id='100640033', data={'activeDegree': 0, 'avatar': 'http://img5-us.petkit.cn/pavatar/2022/11/26/63811cb8b6fc7f000cef8a05EbNK27Txp', 'birth': '2013-07-20', 'category': {'avatar': 'http://img2.petkit.cn/dogavatar/ljm_-gPOorp5C4PK', 'id': 10042, 'name': 'Mix'}, 'createdAt': '2022-11-25T11:14:58.000Z', 'deviceCount': 0, 'emotion': 0, 'familyId': xxxx, 'femaleState': 2, 'gender': 2, 'id': 'xxxx', 'isRoyalCaninPet': 0, 'maleState': 0, 'name': 'Vaniglia', 'owner': {'deviceCount': 0, 'id': '100454792', 'petCount': 0, 'userCount': 0}, 'size': {'id': 1, 'name': 'Standard'}, 'states': [], 'type': {'id': 2, 'name': 'Cat'}, 'updatedAt': '2023-11-15T21:47:07.000Z', 'weight': 3.579, 'weightControl': 3, 'weightControlTips': {}, 'weightLabel': 'Normal'}, type='Cat'), 100640034: Pet(id='100640034', data={'activeDegree': 0, 'avatar': 'http://img5-us.petkit.cn/pavatar/2022/11/26/63811c9db6fc7f000cef8a02Kg3tlQBuN', 'birth': '2013-07-20', 'category': {'avatar': 'http://img2.petkit.cn/dogavatar/ljm_-gPOorp5C4PK', 'id': 10042, 'name': 'Mix'}, 'createdAt': '2022-11-25T11:16:21.000Z', 'deviceCount': 0, 'emotion': 0, 'familyId': 100454792, 'femaleState': 2, 'gender': 2, 'id': '100640034', 'isRoyalCaninPet': 0, 'maleState': 0, 'name': 'Cannella', 'owner': {'deviceCount': 0, 'id': '100454792', 'petCount': 0, 'userCount': 0}, 'size': {'id': 1, 'name': 'Standard'}, 'states': [], 'type': {'id': 2, 'name': 'Cat'}, 'updatedAt': '2023-12-20T14:12:06.000Z', 'weight': 3.919, 'weightControl': 3, 'weightControlTips': {}, 'weightLabel': 'Normal'}, type='Cat'), 100640035: Pet(id='100640035', data={'activeDegree': 0, 'avatar': 'http://img5-us.petkit.cn/pavatar/2022/11/26/63811ccd6a5dff000bec207dcgg89kmEi', 'birth': '2013-06-21', 'category': {'avatar': 'http://img2.petkit.cn/dogavatar/ljm_-gPOorp5C4PK', 'id': 10042, 'name': 'Mix'}, 'createdAt': '2022-11-25T11:16:57.000Z', 'deviceCount': 0, 'emotion': 0, 'familyId': 100454792, 'femaleState': 2, 'gender': 2, 'id': '100640035', 'isRoyalCaninPet': 0, 'maleState': 0, 'name': 'Nespola', 'owner': {'deviceCount': 0, 'id': '100454792', 'petCount': 0, 'userCount': 0}, 'size': {'id': 1, 'name': 'Standard'}, 'states': [], 'type': {'id': 2, 'name': 'Cat'}, 'updatedAt': '2023-12-20T05:51:10.000Z', 'weight': 3.4, 'weightControl': 3, 'weightControlTips': {}, 'weightLabel': 'Normal'}, type='Cat')}, purifiers={})
2023-12-21 06:22:43.428 DEBUG (MainThread) [custom_components.petkit] Finished fetching petkit data in 0.875 seconds (success: True)
Hello, I have a Petkit pura max. I was hoping that it would also be recognized because it has the same functions as the Petkit pura x. But unfortunately she is not found. I only get one device for my cat. Is it possible to add the Petkit pura max? Would be really great.
Hi my account is an EU regions and when I try to login via hass integration, I got this error:
! Unknown error occurred
I did not check asia
or china
account checkboxes.
Logger: aiohttp.server
Source: deps/lib/python3.11/site-packages/petkitaio/petkit_client.py:403
First occurred: 13:53:27 (1 occurrences)
Last logged: 13:53:27
Error handling request
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/aiohttp/web_protocol.py", line 433, in _handle_request
resp = await request_handler(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/web_app.py", line 504, in _handle
resp = await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/web_middlewares.py", line 117, in impl
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 85, in security_filter_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/forwarded.py", line 100, in forwarded_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 28, in request_context_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 80, in ban_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 236, in auth_middleware
return await handler(request)
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 148, in handle
result = await handler(request, **request.match_info)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 181, in post
return await super().post(request, flow_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 72, in wrapper
result = await method(view, request, data, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 110, in post
result = await self._flow_mgr.async_configure(flow_id, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 297, in async_configure
result = await self._async_handle_step(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 393, in _async_handle_step
result: FlowResult = await getattr(flow, method)(user_input)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/petkit/config_flow.py", line 118, in async_step_user
await async_validate_api(self.hass, email, password, asia_account, china_account)
File "/config/custom_components/petkit/util.py", line 30, in async_validate_api
devices_query = await client.get_device_roster()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/deps/lib/python3.11/site-packages/petkitaio/petkit_client.py", line 176, in get_device_roster
device_roster = await self._post(url, header, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/deps/lib/python3.11/site-packages/petkitaio/petkit_client.py", line 403, in _post
async with self._session.post(url, headers=headers, data=data, timeout=self.timeout) as resp:
File "/usr/local/lib/python3.11/site-packages/aiohttp/client.py", line 1141, in __aenter__
self._resp = await self._coro
^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/client.py", line 558, in _request
resp = await req.send(conn)
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/aiohttp/client_reqrep.py", line 670, in send
await writer.write_headers(status_line, self.headers)
File "/usr/local/lib/python3.11/site-packages/aiohttp/http_writer.py", line 129, in write_headers
buf = _serialize_headers(status_line, headers)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "aiohttp/_http_writer.pyx", line 132, in aiohttp._http_writer._serialize_headers
File "aiohttp/_http_writer.pyx", line 109, in aiohttp._http_writer.to_str
TypeError: Cannot serialize non-str key None
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.