前言
众所周知,拜伟大的GF*所赐,GITHUB处于时通时不通的状态,在没有全网TZ的情况下,从HACS中下载或者更新一个集成是非常容易失败的。
原因分析
那么这个问题,HACS中如何处理的,才会导致转着转着失败的,咱们先来分析一下HACS如何从GITHUB下载文件的。
与咱们从GITHUB下载都是一个zip下下来不同,HACS是根据Release标记将集成的所有文件一个一个单独下载下来,没有Release,就根据Tags,没有Tags,就下最后一次提交的。
而HACS默认重试次数为5次,也就是说,假设一个集成里边有20个文件,只要有任意一个文件重试次数超过5次,就会导致整个集成下载/更新失败
解决方案
标题党了,GITHUB访问困难,我并不能帮你解决,但是我能保证你HACS下载/更新不再失败。
用任意文本编辑器打开custom_components/hacs目录下的base.py这个文件,找到async def async_download_file 这个函数定义,往下看几行,看到 while timeouts < 5:这句了吗?
请把5改成30,不放心可以改成50。
再往下几行,这一段
except asyncio.TimeoutError:
self.log.warning(
"A timeout of 60! seconds was encountered while downloading %s, "
"using over 60 seconds to download a single file is not normal. "
"This is not a problem with HACS but how your host communicates with GitHub. "
"Retrying up to 5 times to mask/hide your host/network problems to "
"stop the flow of issues opened about it. "
"Tries left %s",
url,
(5 - timeouts),
)
里边有两个5出现,都改成30,这不关键,但是从日志中你可以准确知道你失败了多少次。
这样除非你的网跟GITHUB根本就不通,否则连续30次失败的可能性就小得可以忽略不计了。这么说吧,自从我改成30后,HACS从没让我失望过。
只不过就是多等HACS转一会儿的事。
当然,修改完你得重启HA。
重要提示:修改前最好备份文件,省得不小心改乱了再恢复回去
|