電源状態確認(PING実行)
システム起動前に各機器の電源状況を確認します。
PING以外も考えられましたが、やはり枯れている定石なやり方が一番でした。
ちなみに、システム稼働後の電源OFF時にも電源状態確認後に、電源OFFを実施しています。
対象機器は、TVとWindowsのメインPCとなります。
PHPによるPING実行
以下ソースコードです。
PHPコマンドオプション「-c」「-n」の繰り返し回数指定がOSにより異なるので、実行環境に合ったコマンドオプションに変更。
define("WINDOWS_MAC","xx:xx:xx:xx:xx:xx");
define('PING_OPTION', [
'Linux' => '-c', // linux
'Darwin' => '-c', // macOS
'WINNT' => '-n', // windows
]);
function ping($host, $count = 1){
$option = PING_OPTION[PHP_OS];
exec("ping {$option} {$count} {$host}", $output, $result);
if ($result) {
echo 'ping 失敗', PHP_EOL;
echo implode(PHP_EOL, $output);
} else {
echo 'ping 成功', PHP_EOL;
}
return $result;
}
function WakeupPC($MAC) {
logger("Start powerOn","INFO");
$cmd = 'sudo /usr/sbin/etherwake '.$MAC;
$output = shell_exec($cmd);
}
if(ping(WINDOWS_IP)){ //Windows OFF
//WINDOWS power on
WakeupPC(WINDOWS_MAC);
sleep(60);
}else{ //Windows ON
//電源ON時の処理
}参考にさせて頂いたサイト