Failed to login (EU region)
Closed this issue · 16 comments
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
Are you running Home Assistant as a docker container?
Yeah am running it on k3s
This is more than likely due to the TZ environment variable not being set for the container and similar to issue #2. The tzlocal library needs a timezone to convert into a name, but since there isn't one, the timezoneID key in the header is empty resulting in the error that you're seeing.
I have manually exported that setting, within the running container, but that didn’t fix it either.
Can you enter into the container and execute cat /etc/timezone
.
No such file or directory
Sorry, that's about as much as I can help since I don't use Kubernetes myself. The core issue is that a timezone doesn't exist within the container that the tzlocal library can convert to a local name.
Setting the ENV worked, but still no /etc/timezone btw, so that isn’t part of the official docker image.
Thanks for the help, weird it didn’t work with the manual setting though.
I'm surprised that /etc/timezone doesn't exist given that Home Assistant has a Linux base so it should.
Glad the environment variable solved it!
Yeah really nice, a big improvement over the other integration, thanks for all the work!
One thing that is shown as unavailable is the battery status on the Fresh Element Mini Pro, known issue?
Check out the documentation all is explained there 😬.
Oops, rtfm ;)
Although I wouldn't use batteries in the mini pro. They never fixed the issue of the batteries potentially causing the feeder to lock up which results in no scheduled feedings dispensing. Problem is you never know when it may happen.
Aahh never knew that was an issue, from what I saw in the app, the schedule is maintained.
Right, until it isn't. Installing batteries doesn't cause it to immediately lock up, but it does eventually sometime down the road.
Although this review mentions that scheduled feedings require WiFi, it is wrong since the feedings are in fact stored on the feeder. However, the unit locks up and you won't know until it is showing as offline:
Well, will remove the batteries with the next cleanup session then, thanks for letting me know!