IoTの一環で今回はRaspberry Piに数行のコードを追加することでタイトルのことを実現する。
これをやることのメリットは外出先で「嗚呼、家のパソコンのディスクにあるデータをいますぐ見たいけどクラウドに入れてなかったよなあ・・・」というような事態が起きたときにその場で自宅のパソコンを起動してリモート操作できるようになる。
これがどれくらい便利かはあえて説明をしなくともわかるだろう。
ということでやり方について備忘録がてら残しておく。
PCをRaspberry Piから遠隔起動し外部からも起動してまえ
条件
- Raspberry Piがすでに家の中でIoTのひとつとして活用されており常時電源がついている
- Raspberry PiでBlynkアプリが常時起動されており命令待機状態であること
- Raspberry PiとWindowsパソコンが同一LAN内にてつながっていること
- Raspberry PiはWi-Fi接続でもいいがWindows機は有線LANであること
- Windows機の有線LANアダプターはWOL対応であること
ざっと考えた条件はこれくらいであるがもっとあるかもしれない。
上記の条件は初めてこの記事にたどり着いた方にはちょっと意味不な部分が多いかもしれないので参考リンクも貼っておく。
1についてはラズベリーパイ-スマホ-スマートロックを開閉-1 プロジェクト概要←ここから続く6本ぐらいの記事を熟読してほしい。
2についてはラズベリーパイ-スマホ-スマートロックを開閉-4 blynk仮想ボタン設定←この記事を読めばだいたいわかるはず。
3については特に説明の必要はないと思われる。意味がわからなかったらこの記事のどこを読んでも意味がわからないはず。
4についてはRaspberry Piは起動コマンドの送信側なのでWi-Fiだろうと有線接続だろうと大丈夫なのだが、自分の環境では目下有線LANのみの設定しかしていないので起こされる側が無線Wi-Fiのときの条件がまだわからないため。
5については持っているパソコンのLANアダプターのメーカーと型番から確認するか、またはデバイスマネージャーで有線LANのアダプターでそういう設定があるか確認する。それとWindows起動時にBIOS設定を開いてそういう設定があればそこもやっておくこと。ここらはパソコンによって微妙に違うかもしれないのでこれ以上の説明は省略する。
Blynkの設定
こんなようなBlynkのウィジェット画面で1個ボタンを追加し適当な名前をつける。重要な点はバーチャルピンを割り当てて番号を控えておくこと。
それとプロジェクトのトークンを確認しておくこと。すでに利用中であれば同じ画面なら同じトークンだし、違う画面を作ったのなら新しいトークンとなる。
トークンについてわからなければラズベリーパイ-スマホ-スマートロックを開閉-4 blynk仮想ボタン設定の記事を読んでほしい。それでもわからなければググってください。
Raspberry Piの設定
①WOLアプリのインストール
Raspberry Pi側では最初にWOLのアプリをインストールしておこう。
参考サイト「Raspberry Piで自宅内のWindows機を起動させる (Wake-on-LAN)」
$ sudo apt-get install wakeonlan
あとは起動したいWindows機のLANアダプターのMAC Addressを調べておく。これはパソコン側でデバイスマネージャーを開いて目的のLANアダプターのプロパティかなにかをみればみつかる。
形式はxx:xx:xx:xx:xx:xxというような16進数が:で区切られて6個並んでるやつ。
②シェルスクリプトファイルの作成
例としてmagic_packet_to_hp.shというような名前のファイルに以下を入れておく。おれの今のメインがhpのパソコンだから最後にhpと入っている。
▼xxのところは起こしたいパソコンのLANアダプターのMAC Addressで置き換える。
#!/bin/bash
wakeonlan XX:XX:XX:XX:XX:XX
これをユーザーホームディレクトリの適当な場所においておく。
③Blynkアプリの設定
Blynkのメインプログラム(~/blynk-library/linux/main.cpp)を修正する。
その中でさきほどスマホのBlynkアプリで設定したボタンのバーチャルピン番号の処理をソースに追加する。
例としてオレはmagic_packet_to_hp.shというシェルスクリプトファイル名にしたのでその場所とファイル名を起動する文を入れた。これでコンパイルすればスマホでV8のボタンが押されたときにマジックパケットというWOL実行のコマンドをLAN内に発信できるわけだ。
BLYNK_WRITE(V8)
{
printf("Got a value: %s\n", param[0].asStr());
if(param[0].asInt() == 1){
system("bash /home/pi/python_code/magic_packet_to_hp.sh");
}
}
あとはこれを保存してコンパイルしなおす。コンパイルのやり方が知りたかったらラズベリーパイ-スマホ-スマートロックを開閉-4 blynk仮想ボタン設定の記事に載ってたかなあ??
なかったらググってください。
PC(Windows)の設定
さきほども触れたがそもそも有線LANのアダプターがWOL機能ありであることが前提である。
もし否であるならこの記事を読む前にそういうLANアダプターに載せ替えるかパソコンを買い換えるかしよう。
- デバイスマネージャーの設定
- BIOS設定
▼デバイスマネージャーで有線ネットワークアダプターにこういう項目があればできるのではないかと思われる。
やってみる
以上の設定をもろもろやってスマホの画面からこんなふうにボタンを押してみたらちゃんと一発でパソコンが起動した。
外ではまだやっていないのでできるかわからないがBlynkというサービスは同一LAN内でも外でも関係なく働くからおそらくできるだろう。
今回は軽く実現してしまったが、本当の理想は声でパソコンとディスプレイを起動したくてまだこれは通過点でしかない。
自分の部屋に戻ってからパソコンを起動して数秒待つのがかったるいからリビングルームにいるうちにAlexaに向かって「パソコン起動して」って言ってから自室にいけばパスコード入力待ちの状態になっているのが理想だ。
現在試行中だがうまくいかないのだ。
いずれうまくいったら記事にする。
【追記】だいたいできた。っていうか完璧にできたんだけど記事は完璧じゃないwww