找回密码
 立即注册

微信扫码登录

搜索
查看: 15407|回复: 60

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

[复制链接]

5

主题

67

回帖

1146

积分

金牌会员

积分
1146
金钱
1074
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

主题

46

回帖

479

积分

中级会员

积分
479
金钱
433
HASS币
0
发表于 2025-3-19 16:52:33 | 显示全部楼层
Awe7 发表于 2025-3-8 19:42
哈哈,我用的是 PVE 虚拟机,现在我可以在 HA 中用两个button控制小猫的开关了。但我不知道如何写后续的 ...

那需要用shell命令了吧。。。我是直接关掉clash,然后ha就用的主路由网关走国内了,觉得这样更简单一些
回复

使用道具 举报

Awe7 手机认证

16

主题

271

回帖

2264

积分

金牌会员

积分
2264
金钱
1977
HASS币
0
发表于 2025-3-8 19:42:29 | 显示全部楼层
sang131313 发表于 2025-2-21 13:56
你是docker的小猫咪吗?如果是路由器里面的,直接关掉就可以了吧。我是docker的,所以转了一道。 ...

哈哈,我用的是 PVE 虚拟机,现在我可以在 HA 中用两个button控制小猫的开关了。但我不知道如何写后续的联动。

联动是指  创建一个开关   当开关打开时联动 {button开 }实体,并更改ha的网关地址为小猫咪的服务地址,
当开关关闭时  联动 {button关 }实体,并更改ha的网关地址为默认网关地址.
回复

使用道具 举报

0

主题

46

回帖

479

积分

中级会员

积分
479
金钱
433
HASS币
0
发表于 2025-2-21 13:56:37 | 显示全部楼层
Awe7 发表于 2025-2-21 12:49
抄个作业?? 我现在的办法是先启动小猫咪,后再手动改网关地址为猫咪的ip,每次用完魔法后在吧ha的网关 ...

你是docker的小猫咪吗?如果是路由器里面的,直接关掉就可以了吧。我是docker的,所以转了一道。
回复

使用道具 举报

0

主题

46

回帖

479

积分

中级会员

积分
479
金钱
433
HASS币
0
发表于 2025-2-21 13:22:43 | 显示全部楼层
Awe7 发表于 2025-2-21 12:49
抄个作业?? 我现在的办法是先启动小猫咪,后再手动改网关地址为猫咪的ip,每次用完魔法后在吧ha的网关 ...

我是Mosdns先做了分流,国内给主路由,国外给小猫咪获取faker ip,faker ip段到主路由转发给小猫咪,多了一个步骤。但是这样即使小猫咪关了,也不影响国内。
回复

使用道具 举报

Awe7 手机认证

16

主题

271

回帖

2264

积分

金牌会员

积分
2264
金钱
1977
HASS币
0
发表于 2025-2-21 12:49:23 | 显示全部楼层
sang131313 发表于 2025-2-21 09:37
我现在是走的分流,设置外网都给faker ip。网关都是主路由,然后主路由里面faker ip段转发给clash,好像 ...

抄个作业?? 我现在的办法是先启动小猫咪,后再手动改网关地址为猫咪的ip,每次用完魔法后在吧ha的网关改回主路由,在关闭小猫咪软件.
回复

使用道具 举报

0

主题

46

回帖

479

积分

中级会员

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

我现在是走的分流,设置外网都给faker ip。网关都是主路由,然后主路由里面faker ip段转发给clash,好像用着还可以。  可能性能不那么好,但是比较简单。之前看有浮动网关,但是看着很麻烦,也不知道怎么实现。
回复

使用道具 举报

hhh. 手机认证

10

主题

358

回帖

3137

积分

论坛UI达人

积分
3137
金钱
2769
HASS币
0
发表于 2025-2-18 22:59:56 | 显示全部楼层
本帖最后由 hhh. 于 2025-2-18 23:13 编辑

Nikki支持。
有个小问题: 总共26个节点,唯独4个自动选择节点识别为 sensor 实体了。
看到有人讲手动关闭Clash。
那么,如果不使用代理,不必去关闭 Nikki,直接切换节点为直连,这样所有流量不经过mihomo核心,直接本地直连,这样既保证网络的稳定,又不用复杂的操作。
使用自动化或者脚本,再或者在UI添加一键切换按钮。
回复

使用道具 举报

5

主题

50

回帖

1258

积分

金牌会员

积分
1258
金钱
1203
HASS币
0
发表于 2025-2-15 09:52:00 | 显示全部楼层
myhades 发表于 2025-2-14 18:23
主页写了IP和端口,连在一起就是API地址,比如下面这个是 192.168.50.110:9090

用上了。就很棒
回复

使用道具 举报

5

主题

67

回帖

1146

积分

金牌会员

积分
1146
金钱
1074
HASS币
0
 楼主| 发表于 2025-2-14 18:23:47 | 显示全部楼层
powjie 发表于 2025-2-14 17:12
[Meta] 当前内核版本        alpha-g368b1e1

主页写了IP和端口,连在一起就是API地址,比如下面这个是 192.168.50.110:9090

Screenshot 2025-02-14 182153.png
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2025-10-15 03:28 , Processed in 0.063424 second(s), 14 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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