ここではWakeOnLan/WakeOnModemに対応していないマザーボード・LANカード・モデムカード でも遠隔起動が出来るんだぞという方法にトライしたものである。 ・背景
・どうやってやるんだろう?
・Webや携帯電話から制御したい
・IPアドレスが変わったら?
・このままでは危ない!
・電源起動装置の製作
・動作確認と改造
・運用してみて…改造パート2
・バグ対処・残された課題…
・参考ページ
■背景(ADSL導入・Linuxサーバを立ち上げるまでの経緯) ISDNからADSLに乗り換えた為、今までのIDSN-TAは不要になったが、家庭内LANを組んでいたので 複数台のPCからWebアクセスするには別にルータが必要となった。 親戚宅に不要となったPCがあるというので、ルータ購入するんだったらそのPCにLinux-OSを インストールしてルータを構築しちまおうと考えた。 そもそもLinux-OSが普及している背景として一世代前のPCに再び活躍の場を与えるものとして 脚光浴びたことに他ならない…と私は勝手に思っている。 しかし最近のDistributionではpentium2、400MHz以上を推奨と謳っているものもあるようで 一世代前いや二世代前のPCではやはり役不足のようになるようでさびしい限りだ。 但しこれはクライアントマシンとして使用する場合の話であって、Xを立上げたりせず サーバとして運用する場合には一世代前のPCでも、そんなに問題にはならないだろう。 ここでいう一世代前のPCといっている今回の頂きもののターゲットマシンは、初代pentium 166MHzのWin95マシンである。メモリも32MB、HardDiskに至っては1.5GBというさびしさである。 ルータとして動いてくれればいいというわけでLinuxMagazine2002/6月号に付録でついてきた VineLinuxのVersion2.5をインストールしてブロードバンドルータを構築したのだった。 無事ルータを構築すると次なる欲求が…。 「料金定額制」で常時接続が可能である。常時インターネットに繋がっているということは、 クライアントPCとしては、ネットサーフィンし放題ということになるだろうが、逆に、自宅のPCを インタネット上に共有ファイルサーバとして公開して使えるということにもなる。 実際、ルータといっても元々はPCであり、本当のルータよりはよっぽど高機能であるしOSも汎用的な Linuxであることからサーバ運用が出来るはずである。 流石にサーバとして使うには余りにあまりなので、ちょっとだけ増強。とは言っても 元々廃棄されるところを頂いてきたのだからそんなに投資するのも考え物というわけで、 やはり拾ってきた8MBのメモリを2枚差し、秋葉原のジャンク屋で2680-で購入した3GBのHD を増設、すッころがっていたLANカードを2枚差して、各種サーバを立ち上げた。 自宅サーバでホームページ公開もできるが、ADSLは下り方向(Web⇒自宅)はサクサク行っても 登り方向(自宅⇒Web)がちとトロイので、不特定多数によるアクセス頻発にはとても耐えられなさそう。 するとアクセスするのは限られた者、限られた時間となるので、常時接続する意味はあまりない。 すると必要なときにサーバを立上げファイル転送や各種作業をしたのち電源オフ!で十分なのである。 そこで遠隔でLinuxサーバの電源ON・OFFができないものか?それも古いパソコンで! という話になったのである
■どうやってやるんだろう? 本題である「遠隔でLinuxサーバの電源ON・OFF」ができないものか調べてみた。 telnetサーバやSSHサーバを立ち上げれば、外部からログインして、shutdownコマンドで 電源を落とせることは確認できたので、あとは何とか起動をかけたい。 一般的な仕様は一般的な仕様として、どうせ自作するのだから自分の環境、PCにあった 仕様にすると割り切ることにした。 そしてコストがかからないこと。これが一番。設備投資はもちろん、運用管理費というと 大げさだがサーバを立ち上げるのにイチイチ電話代がかかるのは馬鹿馬鹿しい。 そもそもタダでもらってきたパソコンに無償OSのLinuxである。 次にあまりに手間がかからないこと。自作といってもプリント基板のエッチングからでは 手間かかりすぎですし、肝心なサーバのメンテナンスが追いつきません。 (※以下に述べるが実は結構手間がかかった) ということでこんな感じになりますかね。 ■仕様 ○ADSLモデムも普段は電源を落とし、Linuxサーバと連動して起動されること。 ・これにより待機電力を最小に抑える。 ・CRTはそもそも電源投入しておかないが、PCから電源供給をされているので 連動して起動されるのでこの点は問題なし。 ・そもそもWakeOnLan/WakeOnModemに対応していないハードなので、ADSLモデムが 起動されていても意味がない。 ○ADSLモデムが待機中は電源が落ちているため、遠隔起動は電話(アナログ回線)をトリガにする。 ・どこからでも起動がかけられる。たとえば携帯電話でも起動できる。 ○電話は呼出しのみで起動するようにし、オフフックしてDTMF音の解析などは行わない。 ・課金されたら電気代抑える意味ないじゃん。 ○PCの電源ボタンがトリガ検出形式っぽいので、それに対応できる方式にする。 ○再起動中(reboot)の着信を考慮すること。 ○起動する意図のない着信であってもPCが起動する点は今後の検討とし、 現段階では遠隔ログイン+shutdownコマンドによる電源断としておく。 検討・設計 ○電話の着信を何で検出するか。 上記参考ページではモデムによって検出しているが 今回のターゲットマシンではモデムはISAボードである。 ⇒待機中にモデムへの通電が必要となってしまうのと、ISAボードへの改造が必要と なるので内臓モデムを使用する方法は見送る。 ⇒ワンダーキットから電話着信センサーキット(BELL-22)なるものが2950円で発売さ れているのでこれを使う。 ⇒電話着信センサーには3段階のモードがあるらしい。(BY取説) 断続ON/OFF、着信中ON、継続ON。ともかく着信によってリレーのONは出来そう。 ○起動中の着信による影響 PCの電源ボタンがトリガ形式(ちょっと押して離す)なので、ON/OFFでは 同じ動作をするので、起動中に着信があった場合、今度は電源が切れてしまう。 単純に電話着信センサーのリレーだけでのPCの電源制御は駄目。 ⇒サーバ起動中は、PC電源の出力の有無で判定する。 ⇒回路としてはこんな感じ。2つのリレーを使った方式(案)リレー@:PC電源ボタンに並列に入れ着信を契機に開閉。(待機中開放/着信で閉)。 (電話着信センサーのリレー) リレーA:リレー@に直列に入れPCの電源に連動して開閉。(PC電源ON中開放/PC電源OFFで閉)。 (1)初期状態。 リレー@:Open /リレーA:Close (2)着信。 リレー@:Colse/リレーA:Close 電話着信センサーによってPC電源ON。 (3)PC起動。 リレー@:Close/リレーA:Open PC電源ONによりPC電源ボタン開。 (4)着信終了。 リレー@:Open /リレーA:Open 電話着信センサーによってリレー@開放。運用状態。 (5)起動中着信。リレー@:Close/リレーA:Open PC電源ONのままなので電源SWは何もせず。 (6)着信終了。 リレー@:Open /リレーA:Open 電話着信センサーによってリレー@開放。運用状態。 (7)PC電源断。 リレー@:Open /リレーA:Close PC電源OFFによりPC電源ボタン閉。初期状態。 電話着信センサーは着信中リレー閉状態で、着信終了でリレー開放状態となる仕様。 ○起動する意図のない着信であってもPCが起動してしまう。 ⇒デフォルトでは起動後一定時間後に終了処理を走らせる。 継続する際には終了処理をキャンセルする等。 ⇒(具体案) @周期的(cron)に電源管理フラグ(ファイル)を参照し、結果によってshutdownコマンドを実行。 但しPC起動時の初回のみはこの処理をスキップする。 (理由:起動完了直後のcron起動によるshutdownを回避するため) Aフラグはlogin時に解除する。ログアウト時に再設定するかは検討。 ⇒⇒Webサーバの運用もするのでログアウト時の電源断フラグセットはしない。 (※)Web上でも電源管理フラグの制御が出来れば、携帯端末からの電源管理が可能になる。 Bなおshutdown時にはフラグは電源断に設定するようスクリプトを修正する。 (理由:保守者によるshutdown後に、着信があった場合サーバは上がりっぱなしになる) さらにreboot時にはフラグは通常運転に設定する。 (理由:rebootするときは保守者が介在する場合と考えられるため、default電源断はおかしい) ■電源断判別フラグ
|
|
|
|
|
|
|
|
|
|
|
|
|
基本的なサーバ起動Lineはそのままに、電話Lineを着信したら切断し、タイミングをとって再接続する。
着信起動リレーの回路@と着信遅延起動リレーのNO同士、NC同士を結線し共にリレー起動時にショートし
どちらかのリレーが動作していないとき切れている状態を作り出しているのがミソ。リレーでEOR回路を
形成しているのどぇす。
さて完成前から改造開始です。そんなんで動くんかいな(笑)。タイミング取得のための
インバータ回路は別IC&別基盤で組むとケースに収まらない&めんどくさい。
元々のキットのインバータIC4582(?だっけ)には6つのインバータが入っていて、
そのうちの2つでラッチ回路(一旦検出した状態を保持しつづける)を形成している。
今回の仕様ではサーバの電源起動は一瞬でありラッチ回路は必要ない。したがってその
2つのインバータ部分を流用しよう。
(追加する回路図)
何の創作もありゃしない。もとの回路の入力2段目とリレーのドライブ部分をくっつけただけ。
これをHi-Lowの状態を考慮して期待する状態となる個所に接続する。多分、LEDの4.7kΩの前あたりかな。
実験でここで動作するのか試してみることに・・・。
更に…
着信があった場合に電話機より早く検出しリレーを動作させなければ意味がない。
元々の待ち合わせ時間が1秒くらいだったのをコンデンサ容量を減らし0.5秒くらいにした。
ワンギリのみで電話のベルを鳴らさないようなタイミング、これが難しい。コンデンサの容量の
計算式もあるのだろうが、得意の実験君でだいたい4秒くらいになるようにしてみました。
さてサーバSWラインはまだつないでないけど、電話線につないでアダプタをコンセントに差しこむ。
携帯電話で自宅に電話をかける…すると着信してLED点灯、呼出し音はならず。数秒して追加した回路の
LED点灯、その後に呼出し音が鳴り出したときは思わずガッツポーズっ!!
うへへへっ。ばっちりじゃん。電話機の受話器を上げて耳にすると…うわっなんじゃこりゃ、すんげぇ
ノイズが乗っている…。一応通話、呼出しは出来るものの、この装置を追加したことによって
ノイズが入るのが気に入らない。ツイストペアの片方だけを引き回した所為なのか、フェライトコア
入れないと駄目なのかな。ユニバーサルでなくちゃんとパターンを起こした基板でないとだめなのかな。
シールドすればいいのかな。うーん、うーん、いろいろ考えたりツイストペアの文献を当たってみたけど
イマイチ改造の改造ってやりたくないんだよなぁ。しぶしぶツイストペアなんだからより線加工してみよう
かと基板をながめてました。と、RJ-11のピンがショートしていることに気づいた。4芯のうち使用しているのは
2芯なので、この2芯がショートしていたら電話もかからないのでそこは大丈夫らしいが、未使用線に
ショートしているからノイズがのるの?疑問に思いながらショートをはずすと見事にノイズ解消っ!
今後気をつけましょうね。>自分
さてあとはケースを加工して、レギュレータの放熱対策もしてコネクタを取り付けて完成です。
あまり賢いシステムではないので、
ちょっと考える。アナログスイッチ(4016)なる1回路2接点のリレーを4つ組み込んだようなICもあるらしい。
導通時の抵抗が300Ωというのが気になるが…。基本的に電話線とサーバ電源SWラインは半導体を通したくないなあという
コンセプトで作ってきたので、最低2つはリレーが必要。ワンギリ対応回路については2つリレーを使っている
ところをExcrusiveORゲート(4070)を使って1つにし、そのほか2回路2接点のリレーが必要な個所はそのままとする
ことに。結局は…5個が4個になっただけだが…。
⇒2回路2接点3つと1回路2接点1つを使った方式。
@着信起動リレー:着信を契機に開閉。
回路@:電話線の接続/切断用でワンギリ対応用。トリガは着信と着信遅延のExclusiveOR。
回路A:タイマスタート用。着信時にタイマースタート線をショートする。(改造1から改造)
Aサーバ電源連動リレー:サーバ電源と連動し開閉。(サーバ電源断中で開放/サーバ起動で閉)。
回路@:電話線用。サーバ起動時にリレー@回路@をバイパスし、サーバ起動中に
着信があった場合の「ワン切り対応機能」を無効化する。
回路A:サーバ電源制御用。リレーBの回路@と直列接続し、サーバ起動中にカウンタ出力起動が
あった場合のサーバ電源制御動作をスキップさせる。
(旧B着信遅延起動リレー:リレー@に統合。削除)
Bカウンタ出力起動リレー:タイマ動作中の着信回数をカウントし設定回数で開閉。
回路@のみ:サーバ電源制御用。リレーAの回路Aと直列接続しタイマ動作中の着信回数に
よってサーバ電源制御線をショートする。(改造1の改造)
Cタイマ起動中リレー:タイマ動作中に閉じる。(改造2で新規)
回路@:リレー@回路Aに直列に接続され、タイマースタート中の再スタート防止する。
回路A:カウンタリセット解除。タイマスタート時にカウンタ(4017)のリセットを解除し、
カウントアップ動作を開始させる。タイマ満了時には再びカウンタをリセットする。
えーっと、つまりですね。
(1)着信を検出するとまずタイマを起動(@A)。電話Lineは一旦切りタイミングをとって再接続(@@)。
(2)タイマ動作中はタイマ再スタートを抑止し(C@)、カウンタICのリセットを解除し(CA)着信回数をカウント開始。
(3)タイマ満了前に、指定回数の着信を検出するとサーバ電源投入(B)。
(3a)着信なくタイマ満了した場合は待機状態に戻り(C@)カウンタICをリセット状態に(CA)。
(4)サーバ電源が投入されるとワンギリ対応を抑止し(A@)、サーバ電源の再制御を抑止する(AA)。
(option)タイマ満了前にサーバ電源投入以外の指定着信回数があった場合の処理はオプション追加可能。
■改造パート2 「動作確認」
携帯電話で自宅に電話をかける…すると着信してLED点灯、呼出し音はならず。数秒してLED消灯。
そのまた数秒後に一瞬LEDか点灯してまた消灯。んんんっ!?ちょっとびっくり。
タイマ動作中かはLEDなどがないので不明。1分以内に再度電話をかける…するとまた着信によって
LED点灯、数秒してLED消灯。と同時にタイマ出力LED点灯っ!当たり前なので心の中だけでガッツポーズ。
無事サーバの電源が投入されました。ついでにもう一回電話をかけると、着信LED点灯、数秒してLED消灯。
と同時にタイマ出力LED消灯。これは3回目の着信をカウントしたので2回目であるLED点灯が取り消された
わけで正常ですね。カウンタが10回で一回りするので一分以内に12回着信が発生すると再びサーバ電源
ラインがONになりますが、(現実的に起こるとは考えにくいけど…)、サーバ起動中は電源ラインを切っている
のでこれは回避されます。
んーっとだいたいOKなんですが、着信起動リレーと着信遅延起動のExclusiveOR出力のLEDのつき方が
若干気になりますねぇ。待機(EOR0/0)=LED:OFF、着信(EOR1/0)=LED:ON、遅延起動(EOR1/1)=LED:OFF、
着信停止(EOR0/0)=LED:OFF…待機状態。となるんですが、着信停止に行く際に着信回路と着信遅延回路の
戻り(H→L)にタイムラグがあるようで、一瞬(EOR0/1)=LED:ONの状態が出来るのです。電話回線が切れるほど
の時間差があるわけではないのですが、ちょっと気持ち悪いかなあって程度です。解決策としては
着信信号と着信遅延信号のEORによるリレー制御ではなく、着信によって更にワンギリ対処用のタイマを
起動してやって、タイマ満了で待機状態に戻るという方法がシンプルだと思います。
|