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)