本帖最后由 tty228 于 2022-5-25 10:17 编辑
homeassistant 控制 PVE 下的虚拟机有很多方式,最常用的就是 SSH 远程登录,但是每次升级 homeassistant core 后就需要重新操作一次,所以这里放弃了这种方法
采用了最传统的魔术包唤醒,当然 PVE 不支持虚拟机唤醒网卡,所以这里是伪装的
脚本来自: ojaksch
打开 PVE SSH 连接
下载附件,解压缩
复制 dosthold.sh 文件到这个目录 /usr/local/bin
复制 dosthol.service 文件到这个目录 /etc/systemd/system
# 更新软件包列表:
apt-get update
# 安装依赖:
apt install gawk socat xxd
# 更改文件权限:
chmod +s /etc/systemd/system/dosthol.service
# 打开 dosthol 自动启动:
systemctl enable dosthol
# 启动 dosthol:
systemctl status dosthol
确保你的虚拟机拥有一个非直通网卡,广播其实是发给 PVE 主机的,然后通过 dosthol 判断是否进行虚拟机操作,直通网卡 PVE 检测不到 MAC 地址,所以必须添加虚拟网卡,型号无所谓,进系统禁用还是启用也无所谓
在 configuration.yaml 文件中填入(注意缩放)
修改解压出的 turn_off_pc.sh 文件,修改其中的 MAC HOST 参数,并将文件放入 /config/shell/ 目录,懒得新建就放原有目录,反正在 config 目录下就行了
dosthol 工具可以通过发送不同的 UDP 包进行关机操作,所以关机脚本也用了这个
switch:
- platform: wake_on_lan
name: "HTPC" # 开关名字
mac: "XX:XX:XX:XX:XX:XX" # 你虚拟机的虚拟网卡地址,用于 dosthol 检测要唤醒的虚拟机是哪一台
host: "X.X.X.X" # 虚拟机地址,用于 homeassistant 检测主机是否在线
turn_off:
service: shell_command.turn_off_pc
shell_command:
turn_off_pc: bash /config/shell/turn_off_pc.sh # 这里我直接写命令,执行失败了,大概是权限或者隔离的原因,用了取巧的方法,如果改了目录或 sh 文件名这里自行修改
------------------
重启 HassOS
然后就可以看到实体了
按下开关,查看 PVE 系统日志,可以看到正常唤醒并启动了
然后再试试关机
搞定收工
-------------------------------------
如果工具不能正常运行,你可以按下开关,通过 sokit 等工具监听是否正常收到广播
然后通过其他工具唤醒主机,查看虚拟机是否能正常启动(或者使用自带的 dostholc.sh 文件)
dostholc.sh 文件放到 /usr/local/bin/ 目录
发送 UDP 包测试开关机
# 唤醒主机
bash /usr/local/bin/dostholc.sh -f wakeup -m XX:XX:XX:XX:XX:XX -v 1
# 关闭主机
bash /usr/local/bin/dostholc.sh -f shutdown -m XX:XX:XX:XX:XX:XX -v 1
最后,遇事不决先重启,不行再谷歌
|