IoTばかり最近(2021年後半〜2022年初)ハマりすぎていてそればかり考えている。まさに若い頃とある神社で言われた「あなたは最初に就いた仕事が合ってるわよ」という言葉どおりで自分でも還暦近くなって天職を見つけた(職にはなってないけど)と思っている。
それはさておき、今回は自宅のPCを声で電源入れるという欲望が満たされたのでそのやり方について解説する。
誰でもできるかどうかはわからない。一応条件を最初に列記してあるのでそれに該当すればできると思ってほしい。
概ね下記サイトを参考にしたのでこちらも併せて御覧ください。
AlexaからRaspberry Piを経由して家電を音声で操作する | Zumi blog
大まかな流れについて
- たとえばAlexaに「アレクサ、パソコンを起動して」という
- パソコンが自動で起動する
これが目に見える一番おおまかな流れだが大まかすぎるのでもう少し内部の動きについて説明すると
- Alexaに「アレクサ、パソコンを起動して」という
- Alexaのサーバーが連携されているNode-REDのサービス(自作IoTを有効にできるサービスを提供しているっぽい)にメッセージを送る
- Node-REDのサービスは受け取ったメッセージに沿って該当するデバイスの起動命令をブロードキャストする
- Raspberry Pi内でNode-REDのアプリがループしていてブロードキャストされた命令を解釈してWOLのマジックパケットをブロードキャストする
- パソコンが自分宛てのマジックパケットを受け取ったら起動する
1の「アレクサ、云々」のところは定型アクションでなにか言葉をつくっておけばなんて言っても動かせるし、アレクサアプリでパソコンデバイスをONすることもできる。
PCを遠隔からONにする条件
ラズベリーパイが常時起動している
自分の場合、最初にIoTに目覚めたのがRaspberry Piでスマートロックを作りたいと思ったことがきっかけだったので、スマートロックとしてはうまく行かなかったが別の用途で常に稼働している状態だ。
だからこいつを何らかのサーバーとして常に待ち受けに使うことができるのかもしれない。
ということでRaspberry Piが稼働していること。
ラズベリーパイがWi-Fiまたは有線LANに接続されている
そのRaspberry Piは当然ながらスタンドアロンではなく、ネットに接続されていること。
今どきネットに繋がっていない機器を云々するほうが無意味だったりするが、万一うちの嫁みたいなパソコン初心者が声でパソコン起動したいなんて思ってしまって当記事にヒットしたときのために申しておく。
Raspberry Piが常に稼働していてさらに有線無線に関わらずネットに子機として繋がっている状態が条件の1つだ。
PCが有線LANに接続されている
PCが有線LANに接続されているって話がずれてそうだけど、自分の場合はデスクトップパソコンだから十分アリな話である。
ノートパソコンだったらちょっと実現が微妙なところだし、おそらくWi-Fiネットワーク接続でも今回のようなウェイクオンラン(WOL)はできるだろうけど、自分は手っ取り早く実現させたかったのでWi-FiでのWOLは今後の課題とする。
今回の条件は有線LAN接続とする。
PCのLANアダプターがWOL対応である
これは自分の場合、たまたま買ったパソコンがそういう条件に合致していてラッキーだったわけであるが、おそらく最近売られているパソコンは大方対応しているのではないかと思う。
調べ方は過去の記事でも画像付きで述べているがデバイスマネージャーで該当する有線LANアダプターのプロパディを見てウェイクオンランを有効にするか無効にするかという項目があれば対応しているLANアダプターであるとみられる。
Alexa導入していること
声で起動したいということは耳となるデバイスが必要であって、パソコンそのもののマイクに話しかけてパソコンが起動すれば世話ないのだがおそらくそういう機能はないかもしれない。
だから代わりに耳となり常に聞き耳を立ててくれているデバイスが別に必要でそれがAlexaだ。
ちなみに今回はGoogle Homeについては考えない。考えるべきなんだけどそこまで余裕がない。せめてどっちかに対応できれば良しとするのが今の自分の実力だ。
AlexaはAmazonで売られている。
新品にこだわらず安く手に入れたいならメルカリで探すのがいい。メルカリならたいてい何割引きかで出品されている。
初めての人はメルカリ 招待コード[ FUAHFP ]を入れると500円ぐらいもらえるらしい。
ということでAlexaを手に入れたらちゃんと使える状態にしておくこと。ちなみにAlexaのデバイスがなくてもスマホのAlexaアプリだけでも使えなくはない。いちいちスマホのAlexaアプリを起動しないとできないという難点さえ我慢できれば。
PCを遠隔からONにする必要な機器
条件とちょっと話が似ているし被る部分もあるかもしれないが説明が微妙に難しいのでわかっている人以外は読んでおいたほうが良いと思う。
ラズベリーパイ
Raspberry Pi3を持っているのでそれで実現できている。2以下での可否はわからない。そもそも今売られているのかも知らない。
できるだけ3以上の最新機種が望ましい。3だったらCPU速度とかメモリ容量とかでやや古いが家の中のIoT担当にさせるだけならぜんぜんイケる。
LAN(Wi-Fi)環境
いうまでもないがLAN環境は必要だしWi-Fiもあったほうがいい。Raspberry Piも起動したいパソコンもどっちも有線LAN接続だからいいだろ?って思ったとしてもAlexaデバイスがWi-Fiでしか使えないからWi-Fiが必要になる。
Raspberry Piもパソコンも有線LANでAlexaデバイスを使わずスマホアプリだけ使ってWOLを実現するっていう場合にはWi-Fiなくてもできるかもしれないがおそらくそういう人のほうがかなり少数派だろうから無視させてもらう。
Amazon echoどれか
さきほどすでに述べてしまったがスマホのAlexaアプリでしかやらんというのでなければAmazon echoデバイスが必要になる。
しつこいけどもう一度リンク貼っておく。
新品にこだわらず安く手に入れたいならメルカリで探すのがいい。メルカリならたいてい何割引きか安めで出品されている。
初めての人はメルカリ 招待コード[ FUAHFP ]を入れると500円ぐらいもらえるらしい。
声でパソコンを起動するための手順
スマホのAlexaアプリ
まずスマホのAlexaアプリではスキルを1個登録する。
スキルってなに?ってわからない人はググってください。アドオンみたいなもんだね。
Node-REDというスキルを有効にする。
Node REDサイトでの設定
ここからはスマホでもできるが、パソコンを使って作業するほうが断然楽なのでパソコンの画面で説明する。
アカウント登録
下記サイトにてアカウトを登録する。これはNode-REDとアレクサを文字通り橋渡しするサービスらしい。
Node-RED Alexa Home Skill Bridge
機器登録
アカウントの登録が済んだら機器を登録する。名前は適当でいい。あとでアレクサアプリでも変えられる。
上記画面は俺の画面だからデバイスがすでに1個登録されているがADD DEVICEでいくつか登録できる。その際、デバイスの種類も選択するので最適と思われる種類を選ぼう。
設定画面はだいたい見ればわかるしこの辺は自分で試行錯誤してみるのも楽しいものだ。
Raspberry piでの設定
マジックパケット送るシェルスクリプト作る
目的のPCにWOLするためのコマンドを送る準備をする。
これは前のブログ記事で書いているのでそれを参照してほしい。
Node REDインストール
さらに今回はRaspberry PiにNode-REDをインストールするという作業が新たに加わる。
かなり簡単なので一言で済ませてしまうが、Raspberry Piで実行する : Node-RED日本ユーザ会←ここのサイトを見てコマンドを打てばすぐわかる。
一応書いておくと、
$ bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
NodeREDの設定
ここはちょっと面倒だがわかってしまえば大したことないし、ここさえわかってしまえばあとは応用していくらでもAlexaにデバイスを追加できるようになるのでがんばろう。
- Raspberry Piと同一ネットワーク内で任意のPCのブラウザから以下のURLを開く。htt://192.168.xx.xx:1880 ←先頭にhを入れてください
192.168.xx.xxはラズベリーパイのipアドレスだ。 - 右上のハンバーガーメニューを開いて「パレットの管理」をクリックする
- 「ノードを追加」タブをクリックして開き、ノードを検索というところに「node-red-contrib-alexa-home-skill」の一部または全部入力して検索し現れたら追加をし閉じる。
- 画面左側のなんか(Node)いっぱい並んでる枠(パレット)からalexaを検索して絞り込む。alexa-homeというのが出てくるのでそれをマス目の部分(ワークスペース)にドラッグする
- 次にdebugというのを検索してワークスペースにドラッグする
- 次にexecを絞り出しドラッグする
- Alexa云々の右端にある点から他のノードへドラッグすると線で結ばれるので結ぶ
- Alexa homeをダブルクリックし鉛筆アイコンをクリックしてNode-RED alexa skill bridgeで決めたアカウントの情報を入れる
- 画面が戻るとdeviceプルダウンには登録したデバイスが表示されるようになるから選ぶ。すぐ出てこなくても少し待ってると出てくる。選んだら完了をクリック
- 次にexecをダブルクリックしコマンドの枠にラズベリーパイ内にて実行したいシェルスクリプトをフルパスで記述する。例えばこのようなの。引数のmsg.payloadのチェックを入れる
- ここまで入れたら完了ボタンをクリックして右上のデプロイをクリックする←これやらないと有効にならない。
Node-REDの常時起動
▼こちらのサイトを参考にしてコマンドを打っておく。
Raspberry Piで実行する : Node-RED日本ユーザ会
以下のコマンドを実行しておくことでサービスとして登録され、起動時に毎回裏で動いてくれる。
$ sudo systemctl enable nodered.service
このあとRaspberry Piを再起動するか以下のコマンドを打ってNode-REDをサービスとして起動する。
$ node-red-start
Alexaアプリで起動したいPCがデバイスとして表示されること確認
▼Alexaアプリでデバイス一覧表示していて自分がNode-REDで登録したはずのデバイスがあるか確認する。自分の場合PCという名称で登録したのでPCというのが1個ある。
▼右画面はそのPCをタップしてみたところだが、オンとオフのボタンが表示されている。さらに画面右上の歯車アイコンをタップしてみよう。
▼そうするとPCデバイスの詳細が表示されるが接続方法というところにNode-REDとなっているのがわかり、Node-REDのサービスと連携できているのがわかる。
PCでの確認と設定
デバイスマネージャー
LANアダプターのWOL有効化をする。
前の記事ですでに紹介しているので参照してほしい。
BIOS設定
BIOS設定はスクショが撮れないので軽く説明しておくと、パソコン起動時にF2だかF10だかパソコンによって違うがBIOS設定画面を開く。どのキーを押せばBIOS設定画面になるか各メーカーの説明書を参照してほしい。
でBIOS画面を開いたらWOL有効化の設定があれば有効にするし、そういう項目がないかもしれないしあるかもしれない。
項目がなくてもWOLができるかもしれないのでデバイスマネージャーの設定ができたら諦めずにやってみよう。
確認と手順のおさらい
ここまで順調にできていたらあとはAlexaに司令を送るだけだ。
「アレクサ」のあとに「 PCをつけて」とか「PCをオンにして」とかいえばPCの電源がつく。うれしい。
では巧く行かなかった人のためにおさらいをしておこう。
- 起こしたいパソコンはWOL対応LANアダプターか?またWOLに反応するように設定してあるか?
- Node-RED Alexa Home Skill Bridgeサイトで機器を正しく登録しているか?
- Raspberry Piと起こしたいPCは同一ネットワーク内であるか?
- Raspberry PiでPCへのマジックパケット送信スクリプトは正確にできているか?
- Raspberry PiでNode-REDが動いているか?または常時起動されているか?
- Node-REDの設定は正しく行われているか?デプロイまで済ませているか?
- AlexaアプリでNode-RED スキルが有効になっているか?
- Alexaアプリで起こしたいPCが表示されたか?
このフローの中で一番難しいところはと考えるとぜんぜんないのでできない理由が見つからない。
まとめとあとがき
Raspberry Piをいじり始めたころの自分だとNode-REDってなんだ???
どうやってつなげるんだ?っていうのが理解できなくてスマートロック作ろうとしてたのをこれで挫折した経験があるが、いまだったらスマートロックも物理的機構さえできればぜんぜん問題なく作れる自信がある。
それくらいハマったってことなんだけど。
とにかく、これさえ押さえればあとは応用で以前つくったスマート玄関灯スイッチもついでにAlexaに登録できてしまうし、Blynkを使わないでAlexaアプリ内だけで収めることができる。っていうかこの記事書いてる途中でやってみてできた。
パソコン起動については最終的に定形アクションに登録することによって「Alexa、パソコンつけて」というだけでパソコンが起動するのと、スマートプラグに接続されたディスプレイも電源が入り全部使える状態になるようにできた。