2011/03/30

ノートPCのAC電源復旧時にWoLでデスクトップPCを起動

停電時でもPCに稼働し続けて欲しければ、バッテリを搭載しているノートPCを使用するのが無難ですが、PCI接続の機器などを使う必要がある場合、デスクトップPCを選択せざるを得ません。
デスクトップPCでは、バッテリによる予備電源を提供するUPS(無停電電源装置)を利用しても、長時間に及ぶ停電を無停止で乗り切ることは出来ません。
また、USB接続などでPCと連動して停電時に自動で安全なシャットダウンを行う機能は多くのUPSに用意されていますが、電源復旧時にPCを自動で起動する機能は用意されていないことがあり、外出などで手動での電源投入が行なえない状況では、長時間シャットダウンされたままになってしまうことがあります。

どうしてもデスクトップPCの停止時間を最小限にとどめたければ、別途ノートPCを起動しておき、そこからデスクトップPCを自動起動させるとよいでしょう。

NILScriptでは「System.hasAC」で電源が供給されているかどうかを取得できる他、System.observe()で「powerStatusChange」イベントにコールバック関数を登録することで、電源の状態が変化したときに任意の処理を実行させられます。
また、LAN上にマジックパケットをブロードキャストして指定のコンピュータを起動させるWOL(WakeOnLAN)の機能も最近追加されました。
これらの機能を利用して以下のようなスクリプトを作成し、AC電源に接続したノートPC上で実行しておけば、AC電源が断たれた状態から復旧したときに自動で指定のPCを起動してくれるはずです。

var mac="00 01 02 03 04 05";//起動対象PCのMACアドレス
var dest="192.168.1.255"; //パケット送信先のブロードキャストアドレス

Main.createNotifyIcon();
var power=System.hasAC;

System.observe('powerStatusChange',function(){
 if(!power && System.hasAC){
  require('WOL').WOL.send(mac,dest);
 }
 power=System.hasAC;
});

なお、WOLでPCを遠隔起動するには、対象のPCがWOLに対応したLANカードでルーターに有線接続されていて、BIOSの設定でWOLが有効になっている必要があります。
また、停電でルーターが停止してしまう場合、powerStatusChangeイベントで電源復旧を検出した直後にWOL.send()を行ってもパケットが到達しない可能性があるため、適宜sleep()などを挿入して下さい。

0 件のコメント:

コメントを投稿