実家のサーバーに時々外から繋げなくなるため、ルーター/CTUあたりを疑っていたのですが、どうもCTUが時々固まるようです。
IoTの時代なんだから遠隔で楽々ACコントロールできるはず!と思ったのですが、どれもこれもそれなりに値が張る物ばかり・・・
そもそもサーバーがあるんだからそこからコントロールすればいいや!ということで考えてみました。
ネットを漂っていると、巷には電源連動タップなるものが存在するようです。
しかもその中にはUSBの電流を検出するタイプのものがあるとか。
これはUSBポートの電流を制御できれば行けるはず!と言うことで探してみると
ありました。
そのものずばりです。
情報が古いので色々試してみます。
まず、hub-ctrlをダウンロードし、ビルドします。
hub-ctrl -vを実行してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@localhost usb]# ./hub-ctrl -v Hub #0 at 001:002 INFO: individual power switching. WARN: Port indicators are NOT supported. Hub Port Status: Port 1: 0000.0100 power Port 2: 0000.0100 power Port 3: 0000.0507 highspeed power suspend enable connect Port 4: 0000.0100 power Port 5: 0000.0100 power Port 6: 0000.0103 power enable connect Hub #1 at 001:015 INFO: individual power switching. Hub Port Status: Port 1: 0000.0100 power Port 2: 0000.0100 power Port 3: 0000.0100 power Port 4: 0000.0100 power |
上の INFO: individual power switching
の部分が個々のポートの電力制御が可能かどうかを示しています。
今回使用したサーバーのマザーボード搭載のhubがどうやら対応してるようなので、そのまま使ってみることとします。
さて、次に用意するのがAC連動タップです。僕はこれを使いました。
先ほどのhubのポートにタップのUSBを指して、試してみます。
今回はCTU/ルーターを刺した状態でテストしたので、自動復帰するテストを行いました。
1 |
./hub-ctrl -h 0 -P 3 -p 0 && sleep 120 && ./hub-ctrl -h 0 -P 3 -p 1 |
結果をワクワクしながら待ったのですが、待てど暮らせど変化がありません。
調べてみたところ、どうもマザーボード搭載のhub(Intel Root Hub)は表示上は電源管理に対応しているものの、実際には対応していないようです。
仕方ないので、実績が有ると思われるハブを購入しました。
これを繋いで先ほどのテストを行ったところ、無事にon/offできました。
さて、次にipアドレスを取得出来ない場合に自動で再起動するスクリプトを書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash ipadd=`curl ifconfig.me/ip` if [[ ! (( ${#ipadd} -gt 7 && ${#ipadd} -le 17 )) ]] ; then sleep 10m echo "10min sleeping..." ipadd2=`curl dyn.value-domain.com/cgi-bin/dyn.fcg?ip` echo $ipadd2 if [[ ! (( ${#ipadd2} -gt 7 && ${#ipadd} -le 17 )) ]] ; then echo "power reset" hub-ctrl -h 1 -P 1 -p 0 && sleep 120 && hub-ctrl -h 1 -P 1 -p 1 ここに色々追加 fi fi |
これをcronで回して、完成(のはず)です。15/03/12 ifの構文を修正
実際にはリセットを掛けた後にddnsの更新や通知メールの送付などを加えています。