『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 3361|回复: 59

[插件集成] Clash控制器集成发布 - 支持UI添加

[复制链接]

5

主题

69

帖子

990

积分

高级会员

Rank: 4

积分
990
金钱
921
HASS币
0
发表于 2025-2-4 00:35:26 | 显示全部楼层 |阅读模式
本帖最后由 myhades 于 2025-2-12 14:12 编辑

[Custom Integration] Home Assistant Clash Controller

logo

logo



Home Assistant Clash Controller 是一个用于控制外部 Clash 的 HA 集成,通过其 RESTful API 进行交互。
该集成使用的 API 与 yacd 等面板相同,且源项目似乎已更名为 Mihomo。
请注意,这个集成并不是 Clash 本身,而是一个 Clash 控制器,与网页面板本质上没有区别,你仍然需要先部署 Clash 才能使用该集成。
开发这个集成的目的只是为了更方便、自动化地管理 Clash 流量。

这是我第一个 Python 兼 Home Assistant 项目,因此可能存在一些缺陷,非常感谢任何试用和反馈!
集成做了 ConfigFlow 可以使用图形界面方便的添加,不需要修改配置反复重启 HA
如果你觉得不错也欢迎为我的仓库点个⭐Star
项目地址: https://github.com/myhades/ha-clash-controller

config_flow

config_flow

device_page

device_page

当前的使用场景主要针对利用Clash,OpenClash,MerlinClash等进行全屋流量魔法的配置,通过该集成,你可以方便的:
1) 让家里人使用HA快速完成节点切换,而不必亲自动手或者进行yacd教学;
2) 自动检测当前魔法情况,根据延迟或者连接情况自动更改节点(鉴于Clash本身就是根据策略和延迟的分流魔法软件,所以这个主要针对于自定义一些连接测试,可能要求HA本身魔法);
3) 实现流媒体解锁检测和切换(这个后续更新进集成,同样要求HA本身魔法);
4) 利用提供的services进行一些进阶网络诊断,包括按关键词获取规则,获取/终止连接,DNS查询等。

1. 支持的 Clash

该集成适用于大多数 Clash 客户端。
已知可用:OpenClash、ShellClash 和 MerlinClash。

核心支持情况:

| 内核名称            | 支持情况  |
|------------------|-----------|
| Clash                 | 部分        |
| Clash Premium | 部分        |
| Clash Meta       | 完全        |


请确保启用了 external controller 选项,并设置了 token。(这个一般不用担心,网页面板能用这个集成就能用)

2. 安装

请进入本项目仓库 https://github.com/myhades/ha-clash-controller

方式 1:通过 HACS 安装
1) 点击Open HACS图标,同意添加库,下载安装并重启;
2) 点击Add Integration图标,搜索"Clash Controller",按UI说明添加。

方式 2:手动安装
下载仓库文件,并将 custom_components/clash_controller 文件夹复制到 Home Assistant 的 config/custom_components 目录下。

3. 配置  

1)进入 Home Assistant,添加新集成,搜索并点击 "Clash Controller" ;
2)填入Clash 的地址(如192.168.1.1:9090)和 Bearer Token(配置的管理密码)。

注意事项:
1)如果找不到集成,确认装上了的话可以清除浏览器缓存试试;
2)如果 API 是 IP(如 192.168.1.1:9090),确保是静态 IP 或在路由器上添加 DHCP 静态租约(MAC地址绑定),否则 IP 变化后需要重新添加集成。使用IP不要勾选使用HTTPS;
3)如果 API 是域名(如配置了反代用域名连接,clash.mydomain.com),则视情况勾选https和允许不安全证书。(自签名证书则需要勾上,除非系统信任了CA)

4. 使用

以下实体和服务的可用性取决于所使用的 Clash 核心。

1. 实体支持


1)策略组相关(实体属性包含对应策略组的所有节点和延迟信息)
  • 策略组传感器 - 对于 URLTest 组
  • 策略组选择器 - 对于 Fallback, Selector 组
2)流量相关
  • 实时上下行流量传感器
  • 总上下行流量传感器
3)系统信息
  • 活跃连接数传感器
  • 内存信息传感器
  • FakeIP 缓存清除按钮

2. 服务支持

services

services


获取可用代理列表的服务示例:
action: clash_controller.api_call_service
data:
  device_id: [YOUR_DEVICE_ID]
  api_endpoint: proxies
  api_method: GET
response_variable: proxy_data


3. 其他功能

该集成提供基本的流媒体可用性检测。
要使此功能正常运行,Home Assistant 必须通过正在测试的代理进行连接。此功能默认关闭。
要启用/禁用此功能,请导航至 设置 > 设备与服务 > Clash Controller > 选项。
当前支持的流媒体服务: Netflix。

5. 反馈
如果遇到问题,请提供 Clash 配置详情,并附上该集成的调试日志。
您可以在 Home Assistant UI 中启用调试日志(若支持),或在配置文件中添加以下内容:

logger:
  default: warning
  logs:
    custom_components.clash_controller: debug
    custom_components.clash_controller.sensor: debug



6. 免责声明

本项目不提供任何 Clash 订阅、代理或节点,仅用于 Clash API 控制。我不对 Clash 及其使用方式的合法性、准确性、适用性提供任何担保。
使用本集成即表示你已阅读并同意本免责声明。

7. 附录

由于 Clash 或者 OpenClash 均不提供启动状态的控制接口,若需要控制 OpenClash 开关,可以使用如下方法:
1)开启 OpenWRT 的 SSH 并生成密钥,然后保存到 Home Assistant 的"/config/sshkeys/"目录下(没有则新建)
2)使用 Shell Command 集成添加通用 SSH 命令执行服务:
shell_command:
  ssh_by_key: `>-`
    ssh -o StrictHostKeyChecking=no -o PubkeyAcceptedKeyTypes=+ssh-rsa -o HostKeyAlgorithms=+ssh-rsa -i {{ key_path }} {{ user }}@{{ location }} {{ "-p "+port|string if port is defined }} {{ command }}

3)利用如下示例调用服务:

查询 OpenClash 状态

metadata: {}
data:
  location: [YOUR_OPENWRT_IP]
  user: root
  key_path: /config/sshkeys/[YOUR_KEY]
  port: [YOUR_SSH_PORT]
  command: uci get openclash.config.enable
response_variable: ssh_result
action: shell_command.ssh_by_key

关闭 OpenClash

metadata: {}
data:
  location: [YOUR_OPENWRT_IP]
  user: root
  key_path: /config/sshkeys/[YOUR_KEY]
  port: [YOUR_SSH_PORT]
  command: \>-
    uci set openclash.config.enable=0; uci commit openclash;
    /etc/init.d/openclash stop
response_variable: toggle_result
action: shell_command.ssh_by_key

启动 OpenClash

metadata: {}
data:
  location: [YOUR_OPENWRT_IP]
  user: root
  key_path: /config/sshkeys/[YOUR_KEY]
  port: [YOUR_SSH_PORT]
  command: \>-
    uci set openclash.config.enable=1; uci commit openclash;
    /etc/init.d/openclash start
response_variable: toggle_result
action: shell_command.ssh_by_key


注意,由于论坛md渲染问题,请将以上代码中的“command: \>-”一行在粘贴后更改为"command: >-"



评分

参与人数 6金钱 +90 收起 理由
hhh. + 16 墙都不扶,就服楼主!
kaka0992 + 10 感谢楼主分享!
dscao + 20 感谢楼主分享!
隔壁的王叔叔 + 12 感谢楼主分享!
sorrypqa + 16 大神666!
nuknoop + 16 高手,这是高手!太牛了

查看全部评分

回复

使用道具 举报

0

主题

62

帖子

482

积分

中级会员

Rank: 3Rank: 3

积分
482
金钱
420
HASS币
0
发表于 2025-2-4 02:10:38 | 显示全部楼层
沙发,感谢分享,明天试试!
回复

使用道具 举报

24

主题

295

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
金钱
1798
HASS币
0
发表于 2025-2-4 10:41:07 | 显示全部楼层
op旁路由模式,添加后提示
设置失败,将重试:'NoneType' object has no attribute 'get

小猫版本0.46.064
回复

使用道具 举报

5

主题

69

帖子

990

积分

高级会员

Rank: 4

积分
990
金钱
921
HASS币
0
 楼主| 发表于 2025-2-4 11:23:56 | 显示全部楼层
kaka0992 发表于 2025-2-4 10:41
op旁路由模式,添加后提示
小猫版本0.46.064

麻烦如图所示操作,然后提供一下日志
Screenshot 2025-02-04 112241.png
回复

使用道具 举报

15

主题

231

帖子

1933

积分

金牌会员

Rank: 6Rank: 6

积分
1933
金钱
1702
HASS币
0
发表于 2025-2-4 11:57:01 | 显示全部楼层
佬,有方案联动ha吗? 需要的时候打开clash,ha主机自动走clash的网关,,关闭clash的时候ha走正常网络网关   0.0
回复

使用道具 举报

0

主题

3

帖子

43

积分

新手上路

Rank: 1

积分
43
金钱
40
HASS币
0
发表于 2025-2-4 12:28:26 | 显示全部楼层
问个问题,部署 Clash 有教程没
回复

使用道具 举报

24

主题

295

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
金钱
1798
HASS币
0
发表于 2025-2-4 12:52:47 | 显示全部楼层
myhades 发表于 2025-2-4 11:23
麻烦如图所示操作,然后提供一下日志
此错误来自自定义集成。

日志记录器: custom_components.clash_controller.coordinator
来源: helpers/update_coordinator.py:379
集成: Clash Controller (文档, 问题)
首次出现: 10:32:04 (22 次总计出现)
上次记录: 12:49:10

Unexpected error fetching homeassistant (http___192_168_10_2_9090_) data
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 379, in _async_refresh
    self.data = await self._async_update_data()
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/clash_controller/coordinator.py", line 105, in _async_update_data
    "state": response.get("memory").get("inuse"),
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get'

看下是否是这些
回复

使用道具 举报

5

主题

69

帖子

990

积分

高级会员

Rank: 4

积分
990
金钱
921
HASS币
0
 楼主| 发表于 2025-2-4 14:37:13 | 显示全部楼层
kaka0992 发表于 2025-2-4 12:52
看下是否是这些

发布了一个新版本v0.1.3,麻烦试一下看还存在问题吗
回复

使用道具 举报

5

主题

69

帖子

990

积分

高级会员

Rank: 4

积分
990
金钱
921
HASS币
0
 楼主| 发表于 2025-2-4 14:42:22 | 显示全部楼层
Awe7 发表于 2025-2-4 11:57
佬,有方案联动ha吗? 需要的时候打开clash,ha主机自动走clash的网关,,关闭clash的时候ha走正常网络网关 ...

有可能,给你提供一个复杂的思路,不行可以再问:

1)HA配置 Terminal add-on
2)使用 command_line 集成配置以下
1. 添加 ssh 连接到 localhost 执行网关更改的命令,你得查下我也忘了 HAOS 的网络配置命令了
2. 添加 ssh 连接到 openwrt 通过 uci 命令查询/开关 OpenClash 启动
3)写一个自动化

但是很不推荐,随意更改 HA 网络配置可能导致运行不稳定
回复

使用道具 举报

51

主题

1961

帖子

7690

积分

论坛元老

Rank: 8Rank: 8

积分
7690
金钱
5719
HASS币
40
发表于 2025-2-4 15:01:28 | 显示全部楼层
使用docker,只需要解决镜像问题,方便快捷,劝新人还是学下docker
折腾精神永存,感恩感谢论坛每一位愿意分享和帮助过我的大佬,论坛有你更精彩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2025-3-14 01:57 , Processed in 0.240566 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表