以前も書いたように、自宅では普通のPCをRouterとして使い、家庭内にLANを構築しています。
外出先からRouterへログインする事ができるので、大抵の事はできるのですが、ごく稀にRaspberry Piを使いたくなることがあります。しかし、普段はRaspberry Piの電源は入れていないのです。。。
Contents
実現したいこと
- 外出先から、Raspberry Piの電源を入れたい
- Raspberry Piの電源が入れば、OSが起動しVNC経由でログインできる環境を構築してあります。
- 使い終わったら、電源を落としたい
- Raspberry Piは、shutdown -h now しても、電源はOffになりません。なんとか外部から電源を落として安心したい。
実現案
[案1] Wake-on-LAN
※ 非対応なのでNG
リモートからPCの電源を入れたい場合に、最も一般的な解決方法にWake-on-LANという仕組みがあります。ネットワーク上に、マジックパケットと呼ばれるパケットをブロードキャストする事で、Wake-on-LANに対応した機器の電源を入れられる仕組みです。
Raspberry Piは、Wake-on-LANに対応しているのか?調べてみると、Raspberry Pi 3までは、NICが内部的にUSB接続されている為非対応となっています。
それならば、Raspberry Pi 4は?とすでに発売されている海外の情報を調べてみると、やはり非対応なようです。
Raspberry Piの電源投入に、Wake-on-LANは利用できないようです。残念。
[案2] Power over Ethernet
※ 機材が高いのでNG
通常UTPケーブルはデータ転送のみに使われますが、同じUTPケーブルで電力供給もしてしまう、PoEという規格があります。WebカメラやWIFI APなどでよく使われています。
PoEを利用するには、給電側、受電側ともに機器が対応している必要があります。Raspberry PiをPoEに対応させるボードが売られています。
更に、PoEに対応したEthernet Switchが必要です。ぼくの目的を実現するには、ポート単位でPoEを制御できる必要があります。
一般的にポート単位でPoEの有効/無効を制御できるswitchは、家庭向けとしては高価な物となってしまいます。Cisco Catalyst 2960の8ポートモデルか、End of Saleになってますが、かわいいCatalyst 3560の8ポートモデル辺りとか?
あー3560の8ポートモデルはFastEther(100Mbps)だ・・・
[案3] スマートプラグ
他になにかいいアイディアは無いかなぁ?と探してみると、WIFI経由でIPをしゃべり、電源のOn/Offを外部から制御できる、「スマートプラグ」という製品を見つけました。
スマートフォンやスマートスピーカーから家庭用AC 100Vを供給する機器を制御する為の電源プラグだそうです。
この案がベストな気がしたので、購入してみました。
tp-link HS105
福岡大学NTPサーバの件で悪名高いtp-link社の製品ですが、この製品は「コンパクト」「デザイン」「価格」が他の製品に比べて良さそうに感じました。
セットアップは簡単
アプリケーションの説明通りに設定を行い、迷う箇所も無く完了です。
あえて注意点と言えば、以下の2点
- 2.4GHzのWIFIにしか対応していない
- スマートフォン用のアプリ名がマニュアルの記述と違う
- 正しくは、「Kasa Smart」です。説明書のQRコードから飛べば迷いません。
外部から電源をオン!
アプリから電源をオン/オフ
デバイスの登録が完了後、アプリ「Kasa Smart」上で目的デバイスの電源アイコンをタップすると、HS105の中でリレーが切り替わる音が聞こえてきます。
でもこれって、自宅内に居ないと使えないんじゃない?いえいえ、心配無用です。
HS105は、プラグに刺すとAWS上のサーバとSSLセッションを張り状態を送信しています。なので、ネットに繋がっているスマートフォンがあれば、自宅外からでも電源のOn/Offができるのです。
じゃぁ、ネットにはつながっているけど、携帯電話が使えない環境の場合は?
問題ありません。HS105には、APIがあるのです。
API経由で電源オン/オフ
先にも書いた通り、自宅LAN環境のRouterマシンへは、外部からログインする事ができます。そこから、HS105のAPIを叩いてあげれば電源のオン/オフを行うことができます。
Lubomir Stroetmann氏が、APIを解析した詳細をblog, githubに載せてくれています。ありがたく使わせていただきます。
TP-Link WiFi SmartPlug Client and Wireshark Dissector
https://github.com/softScheck/tplink-smartplug
git cloneしてから実行してみる
1 2 3 4 5 6 7 8 9 |
$ git clone https://github.com/softScheck/tplink-smartplug.git $ cd tplink-smartplug $ ./tplink_smartplug.py -t 192.168.0.228 -c info | \ sed -n -e "/Reveived:/p" -e "s|Received: ||p" | \ jq '.system.get_sysinfo | .type, .dev_name, .relay_state' "IOT.SMARTPLUGSWITCH" "Smart Wi-Fi Plug Mini" 0 |
9行目の relay_stateが、’0’ならば、OFF, ‘1’ならば、ONを表しています。
では、デイバイスをONにしてみましょう。
1 2 3 4 5 |
$ ./tplink_smartplug.py -t 192.168.0.228 -c on $ ./tplink_smartplug.py -t 192.168.0.228 -c info | \ sed -n -e "/Reveived:/p" -e "s|Received: ||p" | \ jq '.system.get_sysinfo.relay_state' 1 |
電源が入って、RaspberryPiが起動しました!relay_stateを確認すると、ちゃんと’1’になっていますね。
VNCクライアントでRouterに接続して、Raspberry PiからmathematicaをXで飛ばしてみます。これで外出中でもRaspberry Piの電源をいれて利用する事ができます。
電源を落としてみる
Raspberry PiのOSをshutdownします。shutdownが完了後も、当然、電源は入ったままです。
1 2 3 4 5 |
$ ./tplink_smartplug.py -t 192.168.0.228 -c off $ ./tplink_smartplug.py -t 192.168.0.228 -c info | \ sed -n -e "/Reveived:/p" -e "s|Received: ||p" | \ jq '.system.get_sysinfo.relay_state' 0 |
relay_state が正しく ‘0’になっています。
Raspberry Piの画面もちゃんと消えている事が確認できました。
失礼致しました。Amazonで日本のラズベリーパイを販売している林遠です。
ブログを拝見しました。弊社のラズベリーパイレビューブログ記事を書きしてくれませんか。
こちらは無料でサンプルを提供します。
連絡メールはjp02@vertue.cnです。
御返事お待ちしております。どうぞよろしくお願いします。