安装环境

首先按照官方指南Install Home Assistant Supervised

HA控制Linux开机与关机

将HA的ssh key添加到nas

众所周知ssh登录是要输入密码的,为了能让关机的ssh可以在没有交互的情况下完成,我们要将HA的ssh key添加到nas。注意不是将HA的宿主机的SSH key添加到nas。

1
docker exec -it  $(docker ps -f name=homeassistant -q)  bash

这样进入docker容器的shell,如果是第一次,下面开始生成ssh key

1
ssh-keygen -t rsa -f /root/.ssh/id_rsa

然后一路回车,直到生成密钥,然后执行ssh-id-copy将密钥复制到nas

1
ssh-copy-id root@nas的ip地址

接着按照提示输入nas的root密码,复制密钥完成,以后就可以免密登录nas了。
可以在docker容器的shell中直接测试ssh root@nas的ip地址

在HA中添加一个名为nas的switch实体

然后编辑HA的配置文件/usr/share/hassio/homeassistant/configuration.yaml,添加如下字段

1
2
3
4
5
6
7
8
9
10
11
switch:
- platform: wake_on_lan
mac: "nas的mac地址"
name: "nas"
host: "nas的ip地址"
turn_off:
service: shell_command.turn_off_nas

shell_command:
turn_off_nas: "ssh -i /root/.ssh/id_rsa -o 'StrictHostKeyChecking=no' root@nas的ip地址 poweroff"

在HA面板中添加nas

在HA的概览中编辑仪表盘,添加nas开关。然后看看能不能控制nas的开机和关机啦!

HA控制Windows开机与关机

让Windows支持远程关机

  • 关闭防火墙,禁用杀毒软件,排除相关干扰
  • 必须要设置账户密码,因为要远程开机,所以最好还要设置自动登录(下面会说到)
  • 开启RPC相关服务(下面会说到)

首先管理员身份运行CMD,运行如下命令

1
2
3
4
sc config RemoteRegistry start= auto
sc start RemoteRegistry
sc config RpcSs start= auto
sc start RpcSs

将下面的文字复制到文本文档,更改DefaultUserNameDefaultPassword更改为你的用户名和密码

1
2
3
4
5
6
7
8
9
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"LocalAccountTokenFilterPolicy"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"AutoAdminLogon"="1"
"DefaultUserName"="My"
"DefaultPassword"="weiyangbo"

最后将文本文档的后缀改为reg,合并入注册表

简单的RPC Shutdown大法(HA支持Adds-on的情况)

安装RPC Shutdown并配置

这步很简单,直接在Add-ons商店里面搜索RPC Shutdown并安装就可以了。不过前提是你的HA要支持Add-ons,至少要Supervisor方式安装才有可能支持安装Add-ons。
进入RPC Shutdown的“配置”选项卡,更改address为你的Windows电脑的IP地址(肯定要是固定的),更改credentialsWindows用户名%Windows密码(其中%是不可省略的分隔符),更改alias为自己好记的名字。

1
2
3
4
5
6
7
8
9
computers:
- address: 192.168.0.12
alias: my-pc
credentials: My%weiyangbo
delay: 0
message: >-
Home Assistant is shutting down this PC. This cannot be canceled. Please
save your work!

保存并重启RPC Shutdown

在HA中添加一个名为PC的switch实体

然后编辑HA的配置文件/usr/share/hassio/homeassistant/configuration.yaml,在switch字段下添加如下字段

1
2
3
4
5
6
7
8
9
10
11
switch:
- platform: wake_on_lan
mac: "1c-1b-0d-18-63-0c"
name: "PC"
host: "192.168.0.12"
turn_off:
service: hassio.addon_stdin
data:
addon: core_rpc_shutdown
input: my-pc

复杂的曲线救国(HA不支持Adds-on的情况)

安装php和samba-common-bin

1
sudo apt install php samba-common-bin

新建php文件接受GET请求来执行对应的指令

1
2
3
4
5
6
7
8
cat > remote_excute.php << 'EOF'
<?php
if (isset($_GET['shutdown_pc'])) {
$output = shell_exec('net rpc -S 192.168.0.12 -U My%weiyangbo shutdown -t 1 -f');
echo "<pre>$output</pre>";
}
?>
EOF

php开机自启动,添加以下内容到/etc/rc.local

1
nohup php -S 0.0.0.0:80 /root/remote_excute.php &

在HA中添加一个名为PC的switch实体

然后编辑HA的配置文件/usr/share/hassio/homeassistant/configuration.yaml,在switch字段下添加如下字段

1
2
3
4
5
6
7
8
9
10
switch:
- platform: wake_on_lan
mac: "4c-cc-6a-6b-0a-15"
name: "PC"
host: "192.168.0.12"
turn_off:
service: shell_command.turn_off_pc

shell_command:
turn_off_pc: "curl http://127.0.0.1:80/?shutdown_pc"

在HA面板中添加nas

在HA的概览中编辑仪表盘,添加PC开关。然后看看能不能控制Windows PC的开机和关机啦!