PVE下用openrgb控制argb灯,再接入Home assistant方便操作
现在主板都支持argb灯,风扇,内存,线缆什么的都很方便的接到argb接口,制造光污染。虽说一般用PVE的人不会用光污染主机,但是避免不了还是有人会用,比如我。我发现海景房机箱非常适合组NAS,因为一般海景房机箱主板右侧会有12cm的空位安装风扇,然后高度有的高有的低,当不使用显卡的时候,这个位置正好可以叠叠放硬盘,海景房机箱丰俭由人,几十到几百都有,不像NAS机箱,8盘位以上没有什么便宜货,不适合我们垃圾佬。
我把我的全套设备搬到海景房之后,配套买了几把rgb风扇,虽说买风扇是为了散热,但是看着漂亮的灯光如法控制还是心痒痒。我的AIO底层是PVE,所以想办法在PVE下把这些rgb灯驱动起来,用到了openrgb。
1,首先打开openrgb网站 release页面。https://openrgb.org/releases.html 查看自己pve对应版本的连接复制下来,比如PVE8.2是debian12 也就是 Debian Bookworm. 连接上点右键复制连接。

2, PVE shell下 输入把刚才的连接下载下来。
wget https://openrgb.org/releases/release_0.9/openrgb_0.9_amd64_bookworm_b5f46e3.deb
dpkg -i 刚刚下载的文件 如果提示错误 再输入 apt-get -f install 解决依赖
3,然后可以运行 openrgb -l 查看搜索到的设备。比如我的设备有2条内存以及主板三个设备(device),分别编号 0 1 2. 这里我想要控制主板argb接口接的风扇,我分别有几个风扇接在主板的argb1和argb2接口上,对应openrgb里面的zones: JRAINBOW1和JRAINBOW2

4,解释一下openrgb的操作流程,上面看到的每个device下面有mode和leds是device自己支持的模式,通过openrgb可以直接设定这些模式然后控制器(device)本身会自动执行,不需要openrgb一直运行。如果想要更高级的控制,比如声音同步或者图案显示啥的,就需要openrgb一直运行着。但是PVE没有GUI图形界面,所以如果想要高级控制需要把openrgb运行在server模式,然后用其他有图形界面的电脑来连接openrgb的server达到控制的目的。
5,通过opwnrgb -h命令可以查看openrgb的用法。毕竟是PVE主机也不想搞那么复杂,我就用命令行直接让控制器切换模式就可以了。
6,但是每次都去命令行输入命令很麻烦,所以就想到用home-assistant 的shell_command的方法给PVE发命令。
7,这里用最简单的命令指定device运行内置模式,比如openrgb -d 2 -m 'Rainbow wave' -b 100
8,只需要让HA调用这个命令明前指定模式和亮度就可以了,所以在HA的主机上新建python文件,内容如下: 需要编辑PVE地址,用户名和密码 里面的命令根据自己的实际情况做修改。保存python文件在HA config目录下的python_scripts目录。
#!/usr/bin/python3
import sys
import paramiko
HOST = "192.168.10.x" # ip adress of the host that can run openrgb
USER = "root" # username
PASS = "yourpass" # password
argc = len(sys.argv)
mode = sys.argv[1]
for i in range(2,argc-1):
mode = f"{mode} {sys.argv[i]}"
br = sys.argv[argc-1]
if ' ' in mode:
mode = f"'{mode}'"
print("MODE:",mode)
print("Brightness:",br)
CMD = f"openrgb -d 2 -m {mode} -b {br}rn"
print("CMD:",CMD)
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname=HOST, port=22, username=USER, password=PASS)
# 执行命令
stdin, stdout, stderr = ssh.exec_command(CMD)
# 获取命令结果
print(stdout.read().decode())
# 关闭连接
ssh.close()
9,修改HA的config文件,增加一个input_select用来控制模式,一个input_number用来控制亮度,比如:input_selct的options根据自己的device支持的模式修改,就是openrgb -l之后device下面的modes对应的支持的所有模式。
input_select:
light_mode:
options:
- Direct
- Static
- Breathing
- Flashing
- Double flashing
- Lightning
- Meteor
- Color ring
- Planetary
- Double meteor
- Energy
- Blink
- Clock
- Color pulse
- Color shift
- Color wave
- Marquee
- Rainbow wave
- Visor
- Rainbow flashing
- Color ring double flashing
- Stack
- Fire
initial: Breathing
input_number:
openrgb_br:
initial: 100
min: 0
max: 255
step: 5
10,修改HA的config文件,增加shell_command,比如:
python_script:
shell_command:
pve_openrgb: 'python3 /config/python_scripts/pvelight.py {{light_mode}} {{brightness}}'
11,config文件保存完后重启或者重载HA。然后到HA的开发者工具->模板里面输入,在右边应该能看到对应的数值。
brightness: {{ states('input_number.openrgb_br') | int}}
light_mode: {{ states('input_select.light_mode') }}

12,到开发者工具->服务里面,找到shell command 自己写的command
然后输入
service: shell_command.pve_openrgb
data:
brightness: 255
light_mode: Direct
后,点击调用服务,看看能不能控制灯。
输入
service: shell_command.pve_openrgb
data:
brightness: "{{ states('input_number.openrgb_br') | int }}"
light_mode: "{{ states('input_select.light_mode') }}"
后调用服务,看看能不能控制灯。

13,都没问题后写一条自动话就行了
alias: 触发pve灯光
description: ""
trigger:
- platform: state
entity_id:
- input_select.light_mode
for:
hours: 0
minutes: 0
seconds: 0
- platform: state
entity_id:
- input_number.openrgb_br
condition: []
action:
- service: shell_command.pve_openrgb
data:
brightness: "{{ states('input_number.openrgb_br') | int }}"
light_mode: "{{ states('input_select.light_mode') }}"
mode: single
14,最后看一下效果
下面是openrgb高级控制音频同步的效果
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
