AmazonEchoからRaspberryPiのコマンドを実行する(node-red-contrib-amazon-echo)

ALL
スポンサーリンク

AmazonEcho から Raspberry Pi のコマンドを実行する方法です。
アレクサ、に続けて「○○オン」や「○○オフ」で、Raspberry Pi 上のコマンドを実行できます。

本記事での方法は、
・Alexaスキルの導入は不要
・外部のサーバーへのアクセスは不要
となり、自宅内の RaspberryPi への設定だけで完結します。

ここでは設定例として、「テスト オン」や「テスト オフ」で、Raspberry Pi 上の /home/pi/test.sh を実行する方法を説明します。

スポンサーリンク

はじめに制限事項について

コマンドを実行させる際の呼び出しの、「○○オン」「○○オフ」の○○部分は、何でも良いわけでは無いようです。

まず、既存のスキルと競合する名前はできません。スキルの方が起動します。
また、固有名詞もだめなようです。
今回の設定例では「テスト」ですが、当然、この呼び出し名は別のものにしてもOKですが、色々試して、うまく認識する呼び出し名を探す必要があります。

準備

Raspberry Piでの設定

Raspberry Piのユーザ pi (sudo su pi実行)で次のコマンドを実行します。

プリインストールされているNode-REDを更新します。

update-nodejs-and-nodered

Node-RED を開始します。

node-red-start

次のような表示が出たら、CTRL-Cを押します。

7 Apr 17:59:15 - [info] Server now running at http://127.0.0.1:1880/    
7 Apr 17:59:15 - [info] Starting flows    
7 Apr 17:59:16 - [info] Started flows
25 Aug 15:25:38 - [info] サーバは http://127.0.0.1:1880/ で実行中です
25 Aug 15:25:38 - [info] フローを開始します
25 Aug 15:25:38 - [info] フローを開始しました

Raspberry Pi起動時に Node-RED が自動実行されるようにします。

sudo systemctl enable nodered.service


続けて、次のコマンドを実行します。
–to-port 8111 で RaspberryPi で使用していないポート番号を指定します。
この例の通り、8111 で通常は問題ありません。

ptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8111


この設定は再起動すると消えてしまいます。
設定が消えないようにします。
次のコマンドを実行してください。

apt-get install iptables-persistent

現在のIpv4ルールを保存しますか?
現在のIpv6ルールを保存しますか?
と出た場合は、はい を選択します。

続けて次のコマンドを実行してください。

/sbin/iptables-save > /etc/iptables/rules.v4

これで準備は完了です。

ここで Raspberry Pi を再起動します。

Node-REDでの設定

PCから http://xx.xx.xx.xx:1880 (xx.xx.xx.xxはRaspberry PiのIPアドレス)にアクセスします。

次の画面が出ます。

右側の三本線のアイコンをクリックして、パレットの管理を選択します。

「ノードを追加」タブを選択し、「node-red-contrib-amazon-echo」と入力します。

node-red-contrib-amazon-echo がヒットするので「ノードを追加」ボタンを押します。

次の画面 が出た場合は「追加」を押します。

しばらくすると、追加が完了します。「閉じる」を押します。

左側のノードを下にスクロールしていくと、[入力]の個所に「amazon echo hub」「amazon echo device」が追加されています。

左側のノードから「amazon echo hub」をフロー(画面中央の領域)にドラッグ&ドロップします。


ドラッグ&ドロップした「Amazon Echo Hub」をダブルクリックすると、編集画面が出ます。
Port の箇所に、「Raspberry Piでの設定」の箇所で指定したポート番号を指定し、「完了」を押します。
本記事の例では 8111 にします。

この「Amazon Echo Hub」は、フローに1つだけ配置します。

設定例

ここでは、Amazon Echo に「テスト オン」「テスト オフ」というと、RaspBerry Pi 上でコマンドを実行する設定を説明します。

デバイスの追加

Amazon Echo への呼出名と、実行する機能を設定します。

「amazon echo device」をフロー(画面中央の領域)にドラッグ&ドロップします。
「Amazon Echo Hub」のポート(四角いマーク)から、「Amazon Echo Device」のポートまでマウスでドラッグしてワイヤーでつなげます。

ドラッグ&ドロップした「Amazon Echo Device」をダブルクリックすると、編集画面が出ます。

“Name” の個所にデバイス名を入力して、完了を押します。
ここで入力した名前が、Amazon Echo を呼ぶときの名前になります。日本語もOKです。
ここではサンプルとしてNameに「テスト」と入力します。

画面の上の方の「デプロイ」を押してデプロイ実行します。

次に、スマホでAmazonAlexaアプリか、PCでブラウザでhttps://alexa.amazon.co.jpにアクセスします。

Alexaアプリの場合は、デバイス-すべてのデバイス-画面右上の+をタップ-デバイスを追加とたどり、セットアップするデバイスの種類で[その他]を選択し、[デバイスを検出] を押します。
照明として検出されます。
[デバイスをセットアップ]がありますが、ここは押さずに、このまま、画面右下のデバイスボタンを押します。

PCの場合は、スマートホーム-デバイス-検出、で追加されます。
表示では、種類が Royal Philips Electronics スマートデバイス となります。

これで、デバイスが追加されました。

Node-RED でフロー作成(音声で反応するかの確認まで)

PCからブラウザで http://xx.xx.xx.xx:1880 (xx.xx.xx.xxはRaspberry PiのIPアドレス)にアクセスします。

左側のノードから「debug」をフローにドラッグ&ドロップします。
msg.payload が表示されるので、msg.payloadのポート(四角いマーク)から、「テスト」のポートまでマウスでドラッグしてワイヤーでつなげます。

画面の上の方の「デプロイ」を押してデプロイ実行します。

これで作成したフローが機能します。
本当に動作するかテストしてみます。

フローの「msg.payload」ノードを選択します。
次に 画面右側にあるデバッグタブを選択します。デバッグタブを選択するには、下の画像のような虫アイコンを選択します。

これで、Amazon Echoに「テストオン」や「テストつけて」と言うと、「はい」と反応します。
その際、デバッグタブにメッセージが表示されます。

「~オン」「~つけて」の場合はon、「~オフ」「~けして」の場合はoffが表示されます。

Node-RED でフロー作成(Raspberry Pi でのコマンド実行)

先ほどまでの手順で、指定した名称で Amazon Echo を呼ぶと反応する所まで確認できました。
ここでは、その際に Raspberry Pi でコマンドを実行する設定を説明します。

ノードの「その他」から「exec」をフローにドラッグ&ドロップします。

追加されたノードのポート(四角いマーク)から、「テスト」のポートまでマウスでドラッグしてワイヤーでつなげます。


「exec」で追加されたノードをダブルクリックし、編集画面の [コマンド] で sh /home/pi/test.sh と入力します。
ここで指定するコマンドが、Amazon Echo を呼んだ時に実行されます。
(/home/pi/test.sh は後で作成します)
最後に完了を押します。

次のようになるので、画面の上の方の「デプロイ」を押してデプロイ実行します。

これでフローは作成できました。

次に、Raspberry Pi で /home/pi/test.sh を作成します。
内容は次のようにします。
「~オン(~つけて)」「~オフ(~けして)」と言われた場合の区別は、引数が true か false かで区別できます。

if [ $1 = "on" ]
then
    echo "ON" >> /tmp/test.txt
elif [ $1 = "off" ]
then
    echo "OFF" >> /tmp/test.txt
fi

ここまで出来たら、Amazon Echoに「テストオン」や「テストつけて」と言うと、「はい」と反応します。
また、Raspberry Pi 上で /home/pi/test.sh が実行されます。
/tmp/test.txt に「テスト オン」で ON が出力され、「テスト オフ」で OFF が出力されていますので、確認してみましょう。

デバイスを複数設定する場合は、下の画像のように、「Amazon Echo Hub」からつなげます。

参考

Discovery of new devices does not work · Issue #53 · mabunixda/node-red-contrib-alexa-home · GitHub
Troubleshooting · datech/node-red-contrib-amazon-echo Wiki · GitHub
node-red-contrib-amazon-echo – Node-RED

コメント