1997年2月23日

Remote Power control with Linux

 

「電話で電源いれましょ。shutdownで電源おとしましょ。」

Ver0.2 Copyright(C) 1996, Hisaaki Shibata

柴田 尚明@福岡

shibata@opost1.netspace.or.jp

Linuxでのshutdown時に自動でPCの電源を落とし、また、外部からの電話着信で自動的にPCの電源が入るものを作りはじめました。
ある程度動いてますので、公開してご意見を伺い、もうちょっと改良したいと思っておりますm(_|_)m。
ご意見は、fj.os.linuxなどの関連NewsGroupか
メールでお願いします。

メールの方が圧倒的にレスポンスがいいはずです(^^)
尚、本ドキュメントは全文丸ごとであればどこへでも転載可能/リンク可能です(^^)


目次

0 .来歴・トピックス
1 .経緯
2 .関連情報
3 .用意したhardware
4 .用意したsoftware
5 .動作確認をしたもの
6 .いくつかの問題点
7 .そのうちやること
8 .謝辞


0.来歴・トピックス

[次へ][目次へ]

1996/11/6 Ver. 0.2

  • パーツリスト追加
  • メインボードのキット情報追加
  • INSの実験結果追加(T_T)
1996/11/4 Ver. 0.1
  • 新規作成
  • アナログ回線での着信時電源ONおよび、空きCOMポートを利用したshutdown時の電源OFF確認

1.経緯

[次へ][前へ][目次へ]

ATX機が自動で電源を落とせる話を聞いたり、某社のPCではモデムに着信があると電源を入れることができるという話を聞くたびに、良いなぁ〜と思っておりました。

また、会社から家に仕事のファイルを持ち帰って作業をして(^^;、そのまま忘れて会社に来たりしたことがあり、カミサンにPCの電源を入れてもらってダイヤルインしたりすることもありました(^^;;;;;;が、そうそう毎度は頼めません(^^;。

うちのサーバ機はCRTがついていないので、カミサンにはshutdown時の電源OFFのタイミングがわかりにくいという話もあります。
そういう時は普通ATX機を買うのかもしれませんが、そんなお金はないです(T_T)し、ATXのマザーと電源の相性問題(?)もまだまだあると聞いてますので、買うにしてもしばらく待ちたいところです。
で、現在使っているAT機で電源の制御をソフトウエアから行えるように無い知恵を絞ってみました。
予算は5千円以内で済ますことを目標にしました。
#ま、目標は、あくまで目標(^^;


2.関連情報

[次へ][前へ][目次へ]

ATXの電源制御仕様ってどこかに落ちてないでしょうか?
www.teleport.com/~atx/からたどっても、ろくなものは見つけられませんでした(T_T)


3.用意したhardware

[次へ][前へ][目次へ]

  • LinuxがinstallされたPC/AT互換機(シリアルポートが二つ必要)
  • modem(アナログ回線時)
  • TA(ISDN時)
  • 今回自作のリモート電源制御装置(^o^)

リモート電源制御の回路図に関しては下記をご覧ください。


    回路図と解説

  • メインボードとパワー(電源)ボードです。
  • 基本的には単純なセットリセットのフリップフロップがあるだけで、そのフリップフロップの状態でリレーを動かすシンプルなものです。
    パワーボード上のマニュアルスイッチはON(上)-OFF(中立)-ON(下)の3個所で止まるタイプのレバースイッチで、ON(上)で強制セットとなり、電源ONとなります。
    逆にON(下)では強制リセットとなり、電源OFFです。
    OFF(中立)の位置では、外部からの情報でON/OFFするautoモードです。
    #なお、このメインボードの回路が二つ分入ったものが4cm x 5cm程度のコンパクトな基板となり市販のキットとして1800円で販売されてます。
    大阪日本橋の「ワンダーキット」と言う会社のものです。
    問い合わせ先は〒556大阪市浪速区日本橋4-4-1
    TEL(06)644-4447 FAX(06)644-4448です。
    私は福岡の「カホパーツセンター」で購入しました。注意する点として、このキットにはVcc(電源電圧)が5Vのものと12Vのものがあることです。私は回路図でお分かりのように5V版を使用しました。
    私は、上記のメインボードと、パワーボード(3端子レギュレータとパイロットLED付き)とACアダプタを分解して(^^;取り出したトランス込みで、3.5"FDが10枚入るアクリルケースに詰め込んでます。そのうち写真もお見せしますね(^^;

  • セット(電源ON)ボードです。
  • モデムとPCのCOMポート(私の場合はCOM2)の間に挟まる形のものです。
    したがって図上の右側のコネクタと左側のコネクタはオス/メスになっています。
    また、すべての信号線はそのままストレートで接続しています。
    電源ONはモデムへの着信時にモデム側から出力されるCI信号のレベルの変化を見ることに因っています。外部への影響を最小限にすることと、レベルコンバータの役目をかねて、フォトカプラを使っています。
    フォトカプラに直列につないでいる抵抗値は適当です(^^;が、一応電圧レベルは規格内に入っています。
    この基板の大きさは4cm x 3cm程度です。

  • リセット(電源OFF)ボードです。
  • PCの使用していないCOMポート(私の場合はCOM1)につなげます。
    電源OFFはCOMポートからデータを出力する際に変化するDTR信号のレベルの変化を見ることに因っています。フォトカプラ周りの回路はセットボードと同じです
    この基板の大きさも4cm x 3cm程度です。

  • 各ボードの結線
  • 適当に、そこらに転がっていた撚り対線を使っています(^^;

で、パーツリストをまとめると。以下のようになります。
#線材とかパイロットLED+LED用抵抗などは省略してますm(_|_)m
MainNameCountsMemo
1HD4140131CMOS-SSI
22SC9451Tr
31S15883Diode
41μF1Condenser
510μF1Condenser
64.7kΩ4Resister
747kΩ3Resister
8100kΩ1Resister
9G6C-11171Relay
10Universal board15cm x 4cm
PowerNameCountsMemo
1AC/DC Conv.1DC5V output
2Switch1on-off-on toggle
3Universal board13cm x 2cm
SetNameCountsMemo
19pin RS-232-C Conn. female1board mount type
29pin RS-232-C Conn. male1board mount type
3TLP521-11Photo-coupler
4470Ω1Resister
5Universal board14cm x 3cm
ResetNameCountsMemo
19pin RS-232-C Conn. female1board mount type
2TLP521-11Photo-coupler
3470Ω1Resister
4Universal board14cm x 3cm

4.用意したsoftware

[次へ][前へ][目次へ]

以下のppp設定fileを作ります。(on-demand pppの設定で既に書いてますので、関連する記述のみ示します。)

4.1 /etc/ppp/ip-up

# cat /etc/ppp/ip-up #!/bin/sh
#ファイルの先頭行にこれを書いて、なおかつ実行可能フラグを立てないと #うまく行きません。これのせいでずっとハマッてました(^^;
echo UP `date` >> /tmp/PPP-LOG
#ダイヤルアップ開始時間を記録します


4.2 /etc/ppp/ip-down

ip-downはshutdown時には動かないのですね。PPP-LOGを見て判明しました。 shutdown時にpppdが動いている場合は、LOGファイルに落ちた時間をかき出すようにした方が、より正確になりますね。 # cat /etc/ppp/ip-down

#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
if [ -f /tmp/request-up ]; then		#家庭内LANからのダイアルアップならば
        /bin/rm -f /tmp/request-up
        echo DOWN `date` >> /tmp/PPP-LOG  #コネクションを切った時間をlogに取る。
else			#外部からのダイヤルインによるpppの起動のときは。
        sync
        sync
        sync		#転ばぬ先のsync三回(^^;
        /sbin/shutdown -r now	#おもむろにshutdownを動かす。
        sleep 60
        exit 1		#正常にshutdownが動いていれば、ここには来ないはず。
fi
#if [ `w|wc -l` -lt 3 ]; then	#外部からのダイヤルイン判定の残骸
#       sync
#       sync
#       sync
#       /sbin/shutdown -r now
#fi

4.3 /sbin/request-route

# cat /sbin/request-route

#! /bin/sh
LOCK=/tmp/request-route
UP=/tmp/request-up
PATH=/usr/sbin:$PATH #for ppp-2.2*
export PATH
pppd
echo `date` > $UP
#家庭内LANからのon-demandダイヤルアップであることの足跡を残してます。外部からのダイヤルインではこのファイルができないはずで、それによって制御を変えるようにしてます
sleep 60 &
#この値はいろいろとチューニングの余地があるようです
sleepid=$! echo $sleepid > $LOCK wait $sleepid rm -f $LOCK

4.4 /etc/rc.d/rc.6

slackware3.1でshutdown時に動くrc.6の終わりの方に/dev/cua0(COM1)へのデータ出力をechoにて行います。
# tail -15 /etc/rc.d/rc.6

  # See if this is a powerfail situation.
  if [ -f /etc/power_is_failing ]; then
    echo "Turning off UPS, bye."
    /sbin/powerd -q
    exit 1
  fi

sleep 15 ;echo off >/dev/cua0

  echo "$message"
  [ ! -f /etc/fastboot ] && echo "On the next boot fsck will be FORCED."
  $command -f


5.動作確認をしたもの

[次へ][前へ][目次へ]

動作したものを示します

  • shutdownによる電源OFF
  • 外部からのmodem着信による電源ON

6.いくつかの問題点

[次へ][前へ][目次へ]

何と言ってもISDNでの自宅へのダイヤルアップIP接続です。 TAがオフフックしていないようなのでいかんともし難いです。情報をお待ちしています。


7. そのうちやること

[次へ][前へ][目次へ]

7.1 必ずやる

(1)ISDNでの着信電源ON確認
これ、やってみたんですが、うまく行ってません。YAMAHAのPC30iをグレ電につないで自宅のMN128にダイヤルしたのですが、まず、電話(といっていいのかな?)をとってくれません(?_?)。MN128の設定が悪いのだとは思いますが、なんだか引越しのどさくさでMN128のマニュアルが見つからなくて(^^;困っております。MN128で64k同期の着信できている方は、ATコマンドでの初期設定を教えてくださいm(_|_)m

7.2 気が向いたらやる

(1)ATXの電源OFF制御仕様が判れば、ボードを作ってみたい。

7.3 お金があったらやる

(1)ボードのマスクを起こしちゃう...キットがあるから無駄だな(^^;

8.謝辞

[次へ][前へ][目次へ]

まお、今回の電源制御は基本的にすべてRS-232-Cで行ってます。このあたりの情報はFA-NET-MLの皆さんと、alm-hokkai藪中さんから頂いております。
ありがとうございます。m(_|_)m

以上


[玄関へ] [総本店へ]