Raspberry Piの電源をリモートからOnにする方法

以前も書いたように、自宅では普通のPCをRouterとして使い、家庭内にLANを構築しています。

外出先からRouterへログインする事ができるので、大抵の事はできるのですが、ごく稀にRaspberry Piを使いたくなることがあります。しかし、普段はRaspberry Piの電源は入れていないのです。。。

実現したいこと

  • 外出先から、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してから実行してみる

9行目の relay_stateが、’0’ならば、OFF, ‘1’ならば、ONを表しています。

では、デイバイスをONにしてみましょう。

電源が入って、RaspberryPiが起動しました!relay_stateを確認すると、ちゃんと’1’になっていますね。

VNCクライアントでRouterに接続して、Raspberry PiからmathematicaをXで飛ばしてみます。これで外出中でもRaspberry Piの電源をいれて利用する事ができます。

電源を落としてみる

Raspberry PiのOSをshutdownします。shutdownが完了後も、当然、電源は入ったままです。

ここで、API経由でHS105の電源をオフにします。

relay_state が正しく ‘0’になっています。

Raspberry Piの画面もちゃんと消えている事が確認できました。

投稿日: publised:
updated:
カテゴリー PCタグ

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)