HACS安装组件的核心功能就是通过调用GitHub的api接口获取到组件的文件真实地址,然后根据对应的类型下载到对应的文件夹中
所以问题出在下载文件这个环节,因为网络问题,特别是下载大文件的情况下,极其容易出现下载超时,然后直接就异常失败了
面对这个问题,我们首先需要寻找是否有国内的代理源,以及相关的替换解决方案
关于这方面的解决方案当然有很多,但是受限于技术方案的难易度和使用成本,一般不怎么稳定,对于不熟悉的用户来说,可能就有点困难,
还有就是毕竟是白嫖别人的服务,可能piao着piao着,服务就停止了
鉴于以上种种大坑,我也只能在坑中找到那些还算比较靠谱的解决方案推荐给大家
其中一种比较稳定的解决方案是使用CDN的方式
jsDelivr是一个免费、开源的加速CDN公共服务,托管了许多大大小小的项目,可加速访问托管的项目目录或图片资源
官方网站:https://www.jsdelivr.com/
整体操作非常的简单,分三步走
找到hacs下载文件的方法
替换文件下载地址
重启homeassistant
首先我们找到hacs的执行下载方法的模块文件
文件路径:custom_components/hacs/helpers/functions/download.py
然后找到下载方法的名称:async_download_file,你可以使用快捷键Ctrl+F搜索,然后将以下内容放到
_LOGGER.debug("Downloading %s", url) 下面,请仔细看图
# 显示原始下载地址
print(url)
# 源文件
if "https://raw.githubusercontent.com" in url:
arr = url.replace("https://raw.githubusercontent.com/", "").split("/")
arr[1] = arr[1] + "@" + arr[2]
arr[2] = ""
_list = ["https://cdn.jsdelivr.net/gh"]
for item in arr:
if item != "":
_list.append(item)
url = "/".join(_list)
_LOGGER.debug("下载链接:%s", url)
# 发布文件
if "https://github.com/" in url and "/releases/download/" in url:
url = url.replace('https://github.com/', 'https://hub.fastgit.org/')
# 修改后的下载地址
print(url)