外出先から使えるように、ダイナミックDNSとポート開放を設定してあっても、肝心の電源が入っていなければ使えません。とはいえ、たまにしかないことのために、電源入れっぱなしは電気代がもったいないし、セキュリティも気になります。
そこで、自宅でRaspberry Piを常時起動しておいて、Raspberry Pi経由でPCをWake-on-LANで必要なときだけ起動するように設定しましょう。外出先からの起動の起点には、スマートフォンアプリのボタンを使います。
全体像は下記の通りです。
(スマートフォン)→(Codyl Connect)→(自宅Raspberry Pi)→(自宅PC)
前提知識
この記事では、下記の説明は省略します。- 自宅ネットワークの固定グローバルIPまたはダイナミックDNS設定手順
- 自宅ネットワークのポート開放手順
用意するもの
- PC
- OSはWindowsまたはLinux
- 有線LAN
- マザーボードや有線LANのネットワークアダプターがWake-on-LANをサポートしていること
- Raspberry Pi
- SDカードにraspbianインストール済み
- 有線LANまたは無線LAN
- ネットワーク環境
- インターネットに常時接続
- グローバルアドレスで接続されていること
- 固定グローバルIPまたはダイナミックDNSが使えること
- スマートフォン
- iOS 9.3以降のiPhone
作業1 PCのWake-on-LAN設定
PCがマジックパケットでWake-on-LANできるように設定します。マザーボードやOSにより設定方法が違うので、ポイントだけ紹介します。マザーボードの設定とOSの設定を両方行わないといけないケースが多いと思います。
- マザーボードの設定
- PCのBIOS画面からWake-on-LANを有効にする
- OSの設定
- Windowsの場合
- デバイスマネージャー → ネットワークアダプター → (有線LANのアダプター) → プロパティ
- ネットワークアダプターのドライバーによって異なるが、「詳細設定」や「電力の管理」にWake-on-LANの設定があることが多い。Magic PacketでのWake-on-LANをオンにする。
- Linuxの場合
- 下記コマンドが起動時に実行されるようにする。
- ethtool -s eth0 wol g
MACアドレスを後で参照するので、確認してメモしておきます。
- Windowsの場合
- コマンドプロンプトからipconfig /all
- Linuxの場合
- シェルからifconfig -a
作業2 Raspberry Piにetherwakeをセットアップ
etherwakeをインストールして、一般ユーザーからもWake-on-LANのマジックパケットを送信できるようにします。
- sudo apt-get install -y etherwake
- sudo chmod +s /usr/sbin/etherwake
- etherwake -i eth0 -b -D XX:XX:XX:XX:XX:XX
コマンド実行してPCが起動すればOKです。
作業3 Raspberry Piでwebhookを作成
外出先からetherwakeを起動するために、Raspberry Piでwebhookサービスを起動しましょう。nodejsを使えば簡単なプログラムで実装できます。まずは最新の安定版nodejsをセットアップしましょう。
- sudo apt-get install -y nodejs npm
- sudo npm cache clean
- sudo npm install n -g
- sudo n stable
- node --version
- sudo apt-get install -y uuid-runtime
- mkdir webhook_etherwake
- cd webhook_etherwake/
- npm install express
- npm install body-parser
下記の内容をwebhook_etherwake.jsというファイル名で保存します。
プログラムの先頭のTOKENとMACADDRとPORTは書き換えます。TOKENはuuidgenコマンドで生成したランダムなUUIDを使うのが良いでしょう。これが漏洩すると、誰でもあなたのPCを起動できるようになります(大した実害はないかもしれませんが)。MACADDRはPCのMACアドレスに書き換えます。PORTはポート開放に使用するポート番号です、すでに9003を他のポート開放で使っていなければそのままで良いでしょう。
以下、XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXは、セットしたTOKENに置き換えてください。
準備ができたら早速起動してみましょう。下記のコマンドで起動したらListening on port 9003と表示されます。
以下、XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXは、セットしたTOKENに置き換えてください。
準備ができたら早速起動してみましょう。下記のコマンドで起動したらListening on port 9003と表示されます。
- chmod +x webhook_etherwake.js
- ./webhook_etherwake.js
別のシェルから下記のコマンドを実行して動作確認します。
- curl -X POST -H "Content-type:application/json" -d '{"token":"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"}' http://localhost:9003/wake
OKと表示されて、PCが起動することを確認しましょう。
続いてこのプログラムをRaspberry Piで自動的に起動するように設定します。
続いてこのプログラムをRaspberry Piで自動的に起動するように設定します。
- crontab -e
- @reboot /usr/local/bin/node $HOME/webhook_etherwake/webhook_etherwake.js > /dev/null 2>&1 &
リブート後、先ほどのcurlコマンドをもう一度実行して、正しく動作することを確認します。
作業4 ポート開放
Raspberry Piのポート9003をインターネットからアクセスできるようにポート開放します。
作業5 Connectアプリをインストール
スマートフォンにCodyl Connectアプリがインストールされていなければ、インストールします。AppStoreでcodylで検索するか、下記のリンクから開いてください。
Connectのアカウント登録がまだであれば、Connectアプリからアカウント登録が可能です。アカウント登録を済ませて、ログインしましょう。
作業6 シナリオ作成
- (2)わかりやすいシナリオ名に変更
- (3)説明を書く
- (4)再実行頻度を0分に変更
- (5)「イベントウォーク新規作成」をクリック
- (6)mainの箱の下のプラス記号をクリックしてステートを追加
- (7)追加されたステート(state2)をクリック
- (8)「ステートにコネクターを追加」をクリック
- (12)メソッドに「TRIGGER: when pushed」を選択
- (13)textの値に「PC起動」と記述。この文字列がスマートフォンのボタンに表示されます。一番下の「閉じる」をクリック。
- (14)state2の下のプラス記号をクリックしてステートを追加、追加されたステート(state5)をクリック。
- (15)「ステートにコネクターを追加」をクリック
- (16)新しいコネクターを作成を選んで、「WebHook」を選択
- (17)わかりやすい名前を入力(例:「WebHook(PC起動)」)
- (18)外部サービスのURLに、「http://自宅のアドレス:9003/wake」と入力。自宅のアドレスには固定IPの場合はIPアドレス、ダイナミックDNSの場合はDNSホスト名を入れます。
- (19)「作成」をクリック
- (20)メソッドに「ACTION: post message」を選択
- (21)tokenの値にRaspberry Piで設定したTOKENを入力。一番下の「閉じる」をクリック。
シナリオの動作中は、スマートフォンのConnectアプリ上で、「PC起動」ボタンがアクティブになります。このボタンを押したら自宅のPCが起動します。
0 件のコメント:
コメントを投稿