Closed pablogonzalezalba closed 7 months ago
Hey there @joostlek, mind taking a look at this issue as it has been labeled with an integration (twitch
) you are listed as a code owner for? Thanks!
(message by CodeOwnersMention)
twitch documentation twitch source (message by IssueLinks)
Hi,
very same issue here, also with HA 2023.10.0. Has worked without any (error) logs for a few hours todqy, but since 1 1/5 hrs permanently increasing. Reloading the Twitch Integration fixes it for a while but then it's gonna happen again.
I'm also receiving the error, I figured I'd be hitting this with my 200+ channels I follow (most of which haven't been online in ages, forgot that I followed). After enabling debug logging for about 5 minutes I get a 300+mb debug log 🫠. I also saw that the OP has 123858 occurences
, and thought that was huge, but then saw in my logs, 427231 occurrences
hehe.
I think the problem is throttling, from the debug it's clear that is occuring:
2023-10-04 15:32:46.762 WARNING (MainThread) [twitchAPI.twitch] reached rate limit, waiting for reset
2023-10-04 15:32:46.763 WARNING (MainThread) [twitchAPI.twitch] reached rate limit, waiting for reset
2023-10-04 15:32:46.820 WARNING (MainThread) [twitchAPI.twitch] reached rate limit, waiting for reset
2023-10-04 15:32:46.837 WARNING (MainThread) [twitchAPI.twitch] reached rate limit, waiting for reset
2023-10-04 15:32:46.837 WARNING (MainThread) [twitchAPI.twitch] reached rate limit, waiting for reset
I also see this where the homeassistant.helpers.entity
WARNs around the updates taking too long they occur directly after lines about reaching rate limit above, so I'm thinking they're directly correlated.
2023-10-04 15:41:46.466 WARNING (MainThread) [homeassistant.helpers.entity] Update of sensor.deadmau5 is taking over 10 seconds
2023-10-04 15:41:46.466 WARNING (MainThread) [homeassistant.helpers.entity] Update of sensor.whippy is taking over 10 seconds
2023-10-04 15:41:46.466 WARNING (MainThread) [homeassistant.helpers.entity] Update of sensor.playstation is taking over 10 seconds
AFAIK each channel is updated every minute, the normal frequency for sensor updates.
I can also confirm, that "reloading" the integration fixes it temporarily. I imagine it's re-creating the session that has it's throttle reset.
I see similar stack traces in the OP in my logs, but I am pretty certain that's a result of not catching a case where the twitch
client from pyTwitchAPI
library doesn't get the response and is instead throttled or the API responds immediately with an empty body before throttling or something so in looking at the object that holds the response will throw those errors.
The second error where the connection is outright refused, I am also pretty certain is due to throttling, but since the API doesn't respond, there might be a case where the client doesn't know why it can't connect and defers to throwing a generic ClientConnectionError
exception.
I have the same problem and I only follow 27 channels. It works for an hour or few hours and then stops updating.
Is a bearer token used when contacting the API?
In their API documentation they mention up to 800 calls pr minute if a bearer token is provided with the call.
Yes, we use a bearer token. But we're doing more requests for one channel. I will try to optimize this and split out the current sensor into more sensors before the next release as I think this is the only way to proper fix this.
How many calls pr channel is it making?
Searching for a solution I found a thread saying disabling pooling and creating an automation to update using homeassistant.update_entity
at a lower rate would fix it. But following 84 channels, and updating every /5 minute is still making it hit the limit. I also tried disabling all the entities I am not interested in monitoring in the hope that would help, but also no luck with that.
How many calls pr channel is it making?
Searching for a solution I found a thread saying disabling pooling and creating an automation to update using
homeassistant.update_entity
at a lower rate would fix it. But following 84 channels, and updating every /5 minute is still making it hit the limit. I also tried disabling all the entities I am not interested in monitoring in the hope that would help, but also no luck with that.
It will probably come down to making the calls more efficient, like the get-streams API, instead of sending a single login name you can query up to 100 at a time. And since the max people you can follow on twitch is 2000 I believe, the calls definitely need to be more efficient/robust.
I am running into this with only 4 channels that I follow, so it does not look like an issue that only appears when following a lot of channels.
@joostlek Thanks for looking into it ❤️
Chiming in: I disabled polling on the integration and set up an automation to poll 2 channels every 5 minutes. It still failed. Strangely enough, it starts working again after a reload, as if it got stuck on something that's not rate limiting. (Is it not refreshing auth tokens properly or something? ...)
Going to try scheduling an automated reload of the integration to see what that does...
Update: Regularly reloading the integration, combined with the more limited polling, indeed appears to make it work.
@Steltek
Going to try scheduling an automated reload of the integration to see what that does...
How do you do that?
So we can have a workaround displayed here
@Steltek
Going to try scheduling an automated reload of the integration to see what that does...
How do you do that? So we can have a workaround displayed here
Create an automation with a time pattern trigger, and in the actions add a call to "Home Assistant Core Integration: Reload config entry" and select the Twitch channel entity you want to be updated. (I'm not sure if a single reload call is enough to reload the entire integration or if you need one for each channel. Since I'm only monitoring 2 channels, I just added a call for each.)
I do it that way now, every hour. Still get around 1k errors. I do follow 9 channels.
I do it that way now, every hour. Still get around 1k errors. I do follow 9 channels.
How frequently are you polling them? (I poll 2 channels every 5 minutes, and reload the integration every hour, with no errors.)
I didn't change something. What's the default? And where can I change it?
Funnywise had the Same error and was reading here also. Since i made an Account on Twitch ONLY for the Integration and all works it without Problems with around 15 Entities. Dont Know if twitch has a Limit in there where you could only respond to certain amounts of Channels.
I am having this issue as well.. It continues the last 11 lines, over and over again. My last log had over 2414906 lines of errors. Tried to add it as code below, but it would not format correctly.
2023-10-22 19:50:43.307 DEBUG (MainThread) [homeassistant.components.twitch] User is not subscribed 2023-10-22 19:50:43.375 DEBUG (MainThread) [homeassistant.components.twitch] User is not subscribed 2023-10-22 19:50:43.877 DEBUG (MainThread) [homeassistant.components.twitch] User is not subscribed 2023-10-22 19:50:43.894 DEBUG (MainThread) [homeassistant.components.twitch] User is not subscribed 2023-10-22 19:52:00.944 ERROR (MainThread) [homeassistant.components.sensor] Platform twitch does not generate unique IDs. ID 404702041 already exists - ignoring sensor.alzerngameing 2023-10-22 20:55:58.034 WARNING (MainThread) [homeassistant.helpers.entity] Update of sensor.ti_tessarofilipe is taking over 10 seconds 2023-10-22 20:56:18.001 WARNING (MainThread) [homeassistant.components.sensor] Updating twitch sensor took longer than the scheduled update interval 0:00:30 2023-10-22 20:56:48.002 WARNING (MainThread) [homeassistant.components.sensor] Updating twitch sensor took longer than the scheduled update interval 0:00:30 2023-10-22 20:57:18.003 WARNING (MainThread) [homeassistant.components.sensor] Updating twitch sensor took longer than the scheduled update interval 0:00:30 2023-10-22 20:57:48.004 WARNING (MainThread) [homeassistant.components.sensor] Updating twitch sensor took longer than the scheduled update interval 0:00:30 2023-10-22 20:57:59.793 ERROR (MainThread) [homeassistant.helpers.entity] Update for sensor.ti_tessarofilipe fails Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 980, in _wrap_create_connection return await self._loop.create_connection(*args, **kwargs) # type: ignore[return-value] # noqa ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/asyncio/base_events.py", line 1085, in create_connection raise exceptions[0] File "/usr/local/lib/python3.11/asyncio/base_events.py", line 1069, in create_connection sock = await self._connect_sock( ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/asyncio/base_events.py", line 973, in _connect_sock await self.sock_connect(sock, address) File "/usr/local/lib/python3.11/asyncio/selector_events.py", line 628, in sock_connect return await fut ^^^^^^^^^ File "/usr/local/lib/python3.11/asyncio/selector_events.py", line 668, in _sock_connect_cb raise OSError(err, f'Connect call failed {address}') TimeoutError: [Errno 110] Connect call failed ('146.75.82.214', 443)
The above exception was the direct cause of the following exception:
Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 732, in async_update_ha_state await self.async_device_update() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 991, in async_device_update await self.async_update() File "/usr/src/homeassistant/homeassistant/components/twitch/sensor.py", line 139, in async_update await self._async_add_user_attributes() File "/usr/src/homeassistant/homeassistant/components/twitch/sensor.py", line 173, in _async_add_user_attributes follows = await self._client.get_followed_channels( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/twitchAPI/twitch.py", line 1849, in get_followed_channels return await self._build_iter_result('GET', 'channels/followed', param, AuthType.USER, [AuthScope.USER_READ_FOLLOWS], FollowedChannelsResult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/twitchAPI/twitch.py", line 483, in _build_iter_result response = await self._api_request(method, session, _url, auth_type, auth_scope, data=body_data) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/twitchAPI/twitch.py", line 441, in _api_request req = await session.request(method, url, headers=headers, json=data) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/aiohttp/client.py", line 536, in _request conn = await self._connector.connect( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 540, in connect proto = await self._create_connection(req, traces, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 901, in _createconnection , proto = await self._create_direct_connection(req, traces, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 1209, in _create_direct_connection raise last_exc File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 1178, in _create_direct_connection transp, proto = await self._wrap_create_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 988, in _wrap_create_connection raise client_error(req.connection_key, exc) from exc aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host api.twitch.tv:443 ssl:default [Connect call failed ('146.75.82.214', 443)] 2023-10-22 21:21:58.073 WARNING (MainThread) [homeassistant.helpers.entity] Update of sensor.alexmann0014 is taking over 10 seconds 2023-10-22 21:22:18.051 WARNING (MainThread) [homeassistant.components.sensor] Updating twitch sensor took longer than the scheduled update interval 0:00:30 2023-10-22 21:22:48.052 WARNING (MainThread) [homeassistant.components.sensor] Updating twitch sensor took longer than the scheduled update interval 0:00:30 2023-10-22 21:43:01.454 ERROR (MainThread) [homeassistant.helpers.entity] Update for sensor.breeoge fails Traceback (most recent call last): File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 732, in async_update_ha_state await self.async_device_update() File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 991, in async_device_update await self.async_update() File "/usr/src/homeassistant/homeassistant/components/twitch/sensor.py", line 133, in async_update followers = (await self._client.get_channel_followers(self._channel.id)).total ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+1. I have many subscriptions, but all but 2 are disabled. Still failing every 30 seconds on those 2.
If this is throttling related, a more robust approach may be to implement a "push" model using webhooks: https://dev.twitch.tv/docs/eventsub/
I get baffled how some simple integrations go into the HA Core and are broken for months (or "since forever" as can be seen by the amount of integration bugs abandoned here) and some other very complex integrations and almost flawless end up in HACS as "secondary citizens", such as LG devices.
At the start, I thought naively there would be a "promotion process" of some sort to move in-dev integrations from HACS into the Core once they're considered useful and stable... but now I see it's just a matter of where the person is comfortable coding and allowed to do PRs (or leaving bugs).
I know this is open source and all, not to shoot the ~messenger~ developer, Joost is definitely busy with school, life happens, etc... Been there a bunch of times. But hey, this bug was posted shortly after a blog mention about an official integration and no one pulled it out, reverted the changes, or fixed it in three months? There's a completely broken integration in HA. But I guess it's so rarely used (125 installations so far) it's not worth thinking this reduces the overall quality perception of HA.
Yeah It's broken in my instance too same issue, hopefully it gets fixed soon
Does this still happen at the moment? Something major has been fixed in a 2023.3 hotfix
Actually, it seems to be fixed...
Fixed for me as well for now. However, I think it would take a while for the issue to crop up so best to give it at least a few days to confirm.
I'm running it for several days now and everything seems OK. I have 30 followed channels and all are updating correctly.
I had the Twitch HA Integration disabled myself because my plugin showed too much nonsens due to the bug in the Integration. When you guys says it might be fixed then I will try again. Hope it works again. It was really useful before for me. And thanks for the update :)
I'll close this issue then
I just thought I'd say that I haven't had any issues since the fix. Thanks @joostlek!
The problem
Hello, I have successfully connected the new Twitch integration on 2023.10 and at the time of integration, all my followed channels were retrieved with the correct status (streaming/offline). However, since yesterday, they haven't updated. Checking the logs I have the following:
After enabling debug logging I also found this (it repeats for each account I follow):
What version of Home Assistant Core has the issue?
core-2023.10.0
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
Twitch
Link to integration documentation on our website
https://www.home-assistant.io/integrations/twitch/
Diagnostics information
No response
Example YAML snippet
No response
Anything in the logs that might be useful for us?
No response
Additional information
No response