ページ

2018年11月4日日曜日

Amazon Echo と Raspberry Pi を Node-RED Alexa Home Skill Bridge で連携させて声でパソコンを起動したりシャットダウンしたりする.

ひと昔前の映画なんかで役者の「〇〇を起動して!」と言う台詞に合わせて,テレビやラジオが起動したりするシーンがよくありましたが,そういうことが現実にもできるようになってきたので構築してみました.



今回活用したサービス/デバイスは以下のラインナップです.

・Amazon Echo Dot(声帯認識)
・Raspberry Pi(Wake On LANコマンド及びSSH越しでのShut Downコマンドの実行)
・Node-RED Alexa Home Skill Bridge(Amazon Echo DotとRaspberry Piの橋渡し)

それでは構築手順を紹介します.

最初に,Node-RED Alexa Home Skill Bridge でアカウントを作成する.Node-RED Alexa Home Skill Bridgeのページにアクセスしたら左上あたりの「Login or Register」の「Register」から登録し,次に「Login」からログインする.Node-RED Alexa Home Skill Bridgeのページはこちら→https://alexa-node-red.bm.hardill.me.uk/

「Add Device」からデバイスを追加する.

今回は,Name と Description を「My PC」とし,有効にする機能として「On」と「Off」にだけチェックを入れる.

(私は上の動画の通り,Amazon Echoの言語設定を英語にしているので,「My PC」としましたが,日本語で使用している人は,Name を「パソコン」などの日本語で設定したほうが認識率が上がると思います.)

追加が完了すると,デバイス一覧に「My PC」が追加される.

次にスマホから Alexaアプリを起動して,「メニュー」->「スキル・ゲーム」->「全てのスキル」から「node-red」で検索する.

「Node-RED」を有効にする.

ユーザ名とパスワードが聞かれるので,先ほど作成したユーザの情報を入力する.

問題なければ,スキルが有効になるので,左上のバツボタンを押下する.

「端末の検出」ボタンを押下する.

デバイスが検出されるまで待つ.

「My PC」が検出される.

「すべてのデバイス」を確認すると,「My PC」が追加されている.

これで,Amazon Echo Dot と Node-RED Alexa Home Skill Bridge が接続され,声でデバイスのオン・オフを操作できるようになったので,最後にそのオン・オフ操作をトリガーとして,Raspberry Pi上でコマンドを実行できるようにする.

まずは,Raspberry PiにNode-REDをインストールする.
$ sudo apt install nodered

しかし,(Node-REDのバグなのか単にパッケージが古いのか理由はよく知りませんが)2018年11月3日現在のデフォルトバージョンでは,Alexaと連携できる状態にないので,さらにNode-REDをアップデートする.(10分弱かかる)
$ update-nodejs-and-nodered

アップデートが完了したら,Node-REDの自動起動を有効にして,Node-REDを起動する.
$ sudo systemctl enable nodered
$ sudo systemctl start nodered

Node-REDを起動したら,別のPCでブラウザを立ち上げ,http://xxx.xxx.xxx.xxx:1880/にアクセスする.(xxx.xxx.xxx.xxxはRaspberry PiのIPアドレス)

問題なく起動できていれば,下のようなページにアクセスできるので,右上の三本線ボタンを押下してメニューを表示する.

「パレットの管理」を選択する.

「ノードを追加」タブを選択して,「alexa-home-skill」と入力.
「no-red-contrib-alexa-home-skill」が表示されたら「ノードを追加」ボタンを押下する.

「追加」ボタンを押下する.

追加が完了すると,左側のメニューに「alexa」ノードが追加される.

ここから,Node-REDにお絵描きをする.最終的な完成図は下図のような感じ.

まずは,「Alexa Home」,「switch」,「exec」ブロックをドラッグ&ドロップする.

次に「switch」ブロックをダブルクリックして設定を呼び出す.

「==」をクリックして,「is true」を選ぶ.条件を追加して,同様に「is false」を選び,「完了」を押下する.

入出力の数が揃うので,それぞれを線で結ぶ.

「Alexa Home」ブロックをダブルクリックして,設定を呼び出す.

鉛筆(?)ボタンを押下して,先ほど作成したユーザーの情報を入力して,追加を押下する.

なぜかそのままでは,Device 情報が追加できないので,一度設定画面を閉じて,再び「Alexa Home」の設定を呼び出すと「My PC」が選択できるようになる.

「Alexa Home」ブロックが「My PC」ブロックに変化する.

「exec」ブロックをダブルクリックして,設定を呼び出して,Raspberry Pi に実行させたい「コマンド」を設定する.

【Wake On LAN】ブロック

【Shutdown】ブロック

【補足】
・systemctl コマンドで Node-RED を自動起動させた場合, Node-RED は pi ユーザで起動されるので,pi ユーザ以外にコマンドを実行させたい場合は,sudo コマンドに u オプションを追加してユーザ名を指定すると,そのユーザとしてコマンドを実行できる.通常,sudo コマンドはパスワードを入力する必要があるが,Raspberry Pi の pi ユーザはデフォルト設定では,sudo コマンドをパスワード無しで実行できる.

・wol.sh 及び sol.sh の中身はそれぞれ以下の通り.
wol.sh
#!/bin/bash
wakeonlan -i 192.168.XXX.255 MM:MM:MM:MM:MM:MM
exit 0
※ i オプションでブロードキャストを指定し,続いて起動したいPCのマックアドレスを指定する.

sol.sh
#!/bin/bash
ssh 192.168.100.10 'sudo shutdown -h now'
exit 0
※ ssh 越しでコマンドを実行させるときは,実行したいコマンドをシングルクオーテーションで囲んで引数に与えると良い.
※ sudo shutdown コマンドをパスワード無しで実行するためには,visudo コマンドで sudo の設定を開き,「ユーザ名 ALL=NOPASSWD:/sbin/shutdown」の一行を追加すると良い.

ここまで設定できたら,右上のデプロイボタンを押下する.これを忘れるとこれまでの設定が全て消えて無くなので注意.

これで全ての設定が完了.動画のように声でデバイスを操作できるようになる.またスマホの Alexa アプリから操作すれば,外出中の遠隔操作も可能になる.

Wake On LANについては以下の記事も参考.
Wake On LAN を使って Optiplex 3020 を起動する.

0 件のコメント:

コメントを投稿