memorandums

日々のメモです。

研究室サーバー(mac mini)を遠隔で電源オンする

大学では定期的に電気設備点検のため全館停電になります。

そのときに研究室のサーバー(mac mini)も事前に落とすのですが、点検終了後にリモートからサーバーを起動することができません。(Macは残念ながら普通に停止した状態からWakeup On Lanができないためです)

年に数回のことですから、出勤したときに起動すればいいのですが、システム的に何とかできたらなぁ。。。とは何となく思っていました。

夏休み中に書き物をしながら、部品を集めたり、方法を探索したりしていました。

とりあえず、今日、形になりました。

まだまだ十分とは言えませんが、とりあえず現状で動作(mac miniを起動することが)できます。

ネットワーク接続のイメージは以下のような感じです。

f:id:ke_takahashi:20140916194349p:plain

自宅からVPNに接続してraspiにssh接続してWiringPiのプログラムを実行します。そのプログラムの出力によってモーターを起動してmac miniの電源スイッチを押します。ただ、それだけです。

技術的というかやることの要点としては以下です。

  • raspiをセットアップしてssh接続できるようにする(有線でも可能だが今回は無線で接続している)。
  • raspiからモーターをドライバIC(TA7291P)を制御するプログラムを作る。
  • sshでraspiに接続してそのプログラムを起動する。
  • mac miniのスイッチを押すための構造(今回はLEGOを使用)を作成して設置する。

raspiの設定方法はあちこちにありますのでそれを参照ください。raspiでのDCモーターの制御はarduinoですがこちらを参考にさせていただきました。

wiringpiの導入方法はこちらの通りです。ソースは以下のような感じです。特にリミットスイッチ等での制御はしていないのでモーターの回転時間を感覚であわせた、という感じです。

#include <wiringPi.h>
#include <stdio.h>

#define PWM 1
#define SW1 4
#define SW2 5

int main(void)
{
        if(wiringPiSetup() == -1) {
                printf("Initialize WiringPi Failed\n");
                return 1;
        }

        pinMode(PWM, PWM_OUTPUT);
        pinMode(SW1, OUTPUT);
        pinMode(SW2, OUTPUT);

        digitalWrite(SW1, LOW);
        digitalWrite(SW2, LOW);
        pwmWrite(PWM, 1000);

        digitalWrite(SW1, LOW);
        digitalWrite(SW2, HIGH);
        delay(200);

        digitalWrite(SW1, LOW);
        digitalWrite(SW2, LOW);

        return 0;
}

以下が全体。

f:id:ke_takahashi:20140916190327j:plain

そして以下がスイッチ周り。

f:id:ke_takahashi:20140916190513j:plain

そして以下が電源を入れるところです(映像には映していませんがssh接続した状態でコマンドを叩いています)



boot my mac mini remotely with raspberrypi - YouTube