ラズパイ Alexa から Windows PC を起動する

GW につくったラズパイアレクサ、ニュースや Radiko などでそこそこ活用してます。いろいろいじったのでまとめておきます。

まずは 同じネットワーク内にある PC を Alexa から起動できるようにしました。手を伸ばせばそこに PC があるのに、わざわざそんなことしなくてもってのは、まあほっといてください。

参考にさせていただいたのはこちら。

ラズパイからマジックパケットを送信し、Wake on lan の設定をした PC の電源を入れるというものです。アレクサからスクリプトを実行するためには Node-RED という仕組みを使います。

PC で Wake on lan を使うための設定については省略。BIOS の設定変更とネットワークカードの設定が必要でした。使ってるマザボや NIC によって違うのでここで説明してもアレかなと。

Wake on lan

まずは PC の MAC アドレスを調べます。コマンドプロンプトから

ipconfig /all

です。
xx-xx-xx-xx-xx-xx という形式で得られるので、ハイフンをコロンに置き換えて準備しておきます。

ラズパイからマジックパケットを飛ばすためには、そのものズバリ wakeonlan というパッケージを利用します。
インストール

sudo apt-get install wakeonlan

インストールが完了したら一度

wakeonlan MACアドレス

と打って実行してみましょう。PC の電源が入ったら成功です。
余談ですが、メイン PC からターミナル経由で実行してもメイン PC の電源が入るかどうかはわからないので、Bean-Linux をインストールした古い vaio を引っ張り出して試しました。

うまくいったらシェルスクリプト化します。

sudo nano ~/sdk-folder/wol.sh
sudo /usr/bin/wakeonlan xx:xx:xx:xx:xx:xx

Node-RED

アレクサから物理的ななにかを操作するためには、スマートホームスキルをつくるのが一般的ですが、Lambda とかエンドポイントとか小難しい単語がわらわら出てくるので敷居が高いです。
で、今回は Node-RED という仕組みを使って、さっき作ったシェルスクリプト wol.sh を Alexa から実行できるようにします。

…などと偉そうに言ってますが、前出のパソコン鳥のブログさんに書かれていることをそのままやっただけですハイ。
わたしがうだうだ説明するよりもあちらを読んでいただいたほうがわかりみが早いです。

sudo apt-get install nodered
sudo update-nodejs-and-nodered
sudo node-red-start
(ctrl-c)
sudo systemctl enable nodered.service

Node-RED をインストールしサービスに追加して再起動、ですね。
あと、AmazonAlexaアプリのスキルメニューで「Node-RED」を検索し有効にする必要があります。

PC からブラウザで http://xx.xx.xx.xx:1880 にアクセス。(xx.xx.xx.xx はラズパイのIPアドレス)

付箋を貼って線でつなぐ要領でプログラミングができます。へぇ~
特にハマることもなく、無事できました。

アレクサに「俺の PC つけて」と言うと「はい」と返事が返ってきて電源が入ります。なかなか気分いいです。
あ、ちなみにシャットダウンはいろいろ面倒そうだったので手動のままです。

コメント

  1. マー君 より:

    素人です。シェルスクリプト化の手順をもう少し細かくご説明いただけますでしょうか?ここでつまずいてます。

  2. kyu より:

    マー君さんこんにちは。
    nano コマンドで wol.sh を作成します。場所は上記の通りです。
    wol.sh の中身は一行で
    sudo /usr/bin/wakeonlan xx:xx:xx:xx:xx:xx
    です。
    このくらいしか説明できないんですがどうでしょうか。

  3. マー君 より:

    ありがとうございました。この冬休み勉強しながら、ようやくシェルスクリプトの作り方を理解しつつあります。とりあえず成功しました。現在は、シャットダウンもできるようになりましたが、2台目のPCは休止にしたいですが、アイデアありますでしょうか?rpcではシャットダウンしかないようなので。度々すみません。

  4. kyu より:

    マー君さんこんにちは。
    実際にやってみていないのでなんとも言えないのですが、Windows をコマンドラインからスリープさせる方法と raspbian (Linux) から Windows のコマンドラインを実行する方法を組み合わせれば実現できそうな気がします。
    Windows Sysinternals の psshutdown.exe を raspbian の winexe から叩けばいけそうですね。

タイトルとURLをコピーしました