core: Honeywell TCC Integration -- can't create because API Rate Limited

The problem

I have a valid, working account for managing my thermostats at Honeywell, but I cannot create the integration via the UI. Older versions of the honeywell component allowed yaml configuration, including the scan_interval parameter. The stuff is no longer possible.

The docs say to use the UI to configure this integration, but I when I try to create it, I provide my credentials and the wizard fails. The logs show an exception “API Rate Limited”:

ERROR (SyncWorker_0) [somecomfort] API Rate Limited.

I’m guessing the somecomfort package is calling the website too frequently to even get the entities created. Maybe the scan_interval parameter used to fix that?

What version of Home Assistant Core has the issue?

core-2022.2.9

What was the last working version of Home Assistant Core?

No response

What type of installation are you running?

Home Assistant Container

Integration causing the issue

honeywell

Link to integration documentation on our website

https://www.home-assistant.io/integrations/honeywell/

Diagnostics information

No response

Example YAML snippet

No response

Anything in the logs that might be useful for us?

2022-02-20 19:32:14 WARNING (MainThread) [homeassistant.components.http.ban] Login attempt or request with invalid authentication from lepton.dawson (192.168.1.20). (Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0)
2022-02-28 19:02:16 WARNING (MainThread) [homeassistant.components.http.ban] Login attempt or request with invalid authentication from lepton.dawson (192.168.1.20). (Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0)
2022-02-28 19:05:39 ERROR (SyncWorker_6) [somecomfort] API Rate Limited.
2022-02-28 19:05:39 ERROR (MainThread) [aiohttp.server] Error handling request
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/aiohttp/web_protocol.py", line 435, in _handle_request
    resp = await request_handler(request)
  File "/usr/local/lib/python3.9/site-packages/aiohttp/web_app.py", line 504, in _handle
    resp = await handler(request)
  File "/usr/local/lib/python3.9/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 98, 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 79, in ban_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 219, in auth_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 137, in handle
    result = await result
  File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 164, in post
    return await super().post(request, flow_id)
  File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 62, in wrapper
    result = await method(view, request, *args, **kwargs)
  File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 111, in post
    result = await self._flow_mgr.async_configure(flow_id, data)
  File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 252, in async_configure
    result = await self._async_handle_step(flow, cur_step["step_id"], user_input)
  File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 325, in _async_handle_step
    result: FlowResult = await getattr(flow, method)(user_input)
  File "/usr/src/homeassistant/homeassistant/components/honeywell/config_flow.py", line 21, in async_step_user
    valid = await self.is_valid(**user_input)
  File "/usr/src/homeassistant/homeassistant/components/honeywell/config_flow.py", line 40, in is_valid
    client = await self.hass.async_add_executor_job(
  File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 52, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/src/homeassistant/homeassistant/components/honeywell/__init__.py", line 74, in get_somecomfort_client
    return somecomfort.SomeComfort(username, password)
  File "/usr/local/lib/python3.9/site-packages/somecomfort/client.py", line 395, in __init__
    self._discover()
  File "/usr/local/lib/python3.9/site-packages/somecomfort/client.py", line 51, in wrapper
    return fn(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/somecomfort/client.py", line 527, in _discover
    for raw_location in raw_locations:
TypeError: 'NoneType' object is not iterable
2022-02-28 19:06:00 ERROR (SyncWorker_1) [somecomfort] API Rate Limited.
2022-02-28 19:06:00 ERROR (MainThread) [aiohttp.server] Error handling request
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/aiohttp/web_protocol.py", line 435, in _handle_request
    resp = await request_handler(request)
  File "/usr/local/lib/python3.9/site-packages/aiohttp/web_app.py", line 504, in _handle
    resp = await handler(request)
  File "/usr/local/lib/python3.9/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 98, 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 79, in ban_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 219, in auth_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 137, in handle
    result = await result
  File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 164, in post
    return await super().post(request, flow_id)
  File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 62, in wrapper
    result = await method(view, request, *args, **kwargs)
  File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 111, in post
    result = await self._flow_mgr.async_configure(flow_id, data)
  File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 252, in async_configure
    result = await self._async_handle_step(flow, cur_step["step_id"], user_input)
  File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 325, in _async_handle_step
    result: FlowResult = await getattr(flow, method)(user_input)
  File "/usr/src/homeassistant/homeassistant/components/honeywell/config_flow.py", line 21, in async_step_user
    valid = await self.is_valid(**user_input)
  File "/usr/src/homeassistant/homeassistant/components/honeywell/config_flow.py", line 40, in is_valid
    client = await self.hass.async_add_executor_job(
  File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 52, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/src/homeassistant/homeassistant/components/honeywell/__init__.py", line 74, in get_somecomfort_client
    return somecomfort.SomeComfort(username, password)
  File "/usr/local/lib/python3.9/site-packages/somecomfort/client.py", line 395, in __init__
    self._discover()
  File "/usr/local/lib/python3.9/site-packages/somecomfort/client.py", line 51, in wrapper
    return fn(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/somecomfort/client.py", line 527, in _discover
    for raw_location in raw_locations:
TypeError: 'NoneType' object is not iterable
2022-02-28 19:06:35 ERROR (SyncWorker_2) [somecomfort] API Rate Limited.
2022-02-28 19:06:35 ERROR (MainThread) [aiohttp.server] Error handling request
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/aiohttp/web_protocol.py", line 435, in _handle_request
    resp = await request_handler(request)
  File "/usr/local/lib/python3.9/site-packages/aiohttp/web_app.py", line 504, in _handle
    resp = await handler(request)
  File "/usr/local/lib/python3.9/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 98, 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 79, in ban_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 219, in auth_middleware
    return await handler(request)
  File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 137, in handle
    result = await result
  File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 164, in post
    return await super().post(request, flow_id)
  File "/usr/src/homeassistant/homeassistant/components/http/data_validator.py", line 62, in wrapper
    result = await method(view, request, *args, **kwargs)
  File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 111, in post
    result = await self._flow_mgr.async_configure(flow_id, data)
  File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 252, in async_configure
    result = await self._async_handle_step(flow, cur_step["step_id"], user_input)
  File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 325, in _async_handle_step
    result: FlowResult = await getattr(flow, method)(user_input)
  File "/usr/src/homeassistant/homeassistant/components/honeywell/config_flow.py", line 21, in async_step_user
    valid = await self.is_valid(**user_input)
  File "/usr/src/homeassistant/homeassistant/components/honeywell/config_flow.py", line 40, in is_valid
    client = await self.hass.async_add_executor_job(
  File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 52, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/src/homeassistant/homeassistant/components/honeywell/__init__.py", line 74, in get_somecomfort_client
    return somecomfort.SomeComfort(username, password)
  File "/usr/local/lib/python3.9/site-packages/somecomfort/client.py", line 395, in __init__
    self._discover()
  File "/usr/local/lib/python3.9/site-packages/somecomfort/client.py", line 51, in wrapper
    return fn(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/somecomfort/client.py", line 527, in _discover
    for raw_location in raw_locations:
TypeError: 'NoneType' object is not iterable
2022-02-28 19:07:29 ERROR (SyncWorker_4) [somecomfort] API Rate Limited.
2022-02-28 19:07:29 ERROR (MainThread) [aiohttp.server] Error handling request

Additional information

No response

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 18 (3 by maintainers)

Most upvoted comments

Agreed. I will add a configuration option for users to set their own refresh interval. Should be able to get started on this in the relatively soon.

I’ve given up on Honeywell. Never again!

I replaced the thermostats with ecobee3 lites, and so far, so good.