はじめに
AmazonEcho から Ubuntu24.04 のコマンドを実行する方法です。
アレクサ、に続けて「○○オン」や「○○オフ」で、Ubuntu上のコマンドを実行できます。
こちらでは RaspberryPi+Ubuntuで動かしています。
本記事での方法は、
・Alexaスキルの導入は不要
・外部のサーバーへのアクセスは不要
となり、自宅内の Ubuntuマシンへの設定だけで完結します。
Node-REDインストール
nodejs をインストールします。
sudo apt install nodejs
Node-REDをインストールします。
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
次の表示が出たら y を入力します。
Are you really sure you want to do this ? [y/N] ? y
次の表示が出たら N を入力します。
Would you like to install the Pi-specific nodes ? [y/N] ? N
次の表示が出たら Enter を入力します。
Node-RED Settings File initialisation
=====================================
This tool will help you create a Node-RED settings file.
? Settings file ‣ /home/XXXXX/.node-red/settings.js
次の表示で No, do not send my usage data を選択して Enter を入力します。
Share Anonymouse Usage Information
==================================
? Node-RED can notify you when there is a new version available.
This ensures you keep up to date with the latest features and fixes.
This requires sending anonymised data back to the Node-RED team.
It does not include any details of your flows or users.
For full information on what information is collected and how it is used,
please see https://nodered.org/docs/telemetry
…
Yes, send my usage data
▸ No, do not send my usage data
次の表示で Yes を選択して Enter を入力します。
User Security
=============
? Do you want to setup user security? …
▸ Yes
No
次の表示で Node-Red 用のユーザー名を入力して Enter を入力します。
? Username ‣
次の表示で Node-Red 用のパスワードを入力して Enter を入力します。
? Password ‣
次の表示で full access を選択して Enter を入力します。
? User permissions …
▸ full access
read-only access
No を選択して Enter を入力します。
? Add another user? …
Yes
▸ No
次の表示で No を選択して Enter を入力します。
? Do you want to enable the Projects feature? …
Yes
▸ No
そのまま Enter を入力します。
Flow File settings
==================
? Enter a name for your flows file ‣ flows.json
そのまま Enter を入力します。
? Provide a passphrase to encrypt your credentials file ‣
次の表示で default を選択して Enter を入力します。
Editor settings
===============
? Select a theme for the editor. To use any theme other than "default", you will need to install @node-red-contrib-themes/theme-collection in your Node-RED user directory. …
▸ default
aurora
cobalt2
:
そのまま Enter を入力します。
? Select the text editor component to use in the Node-RED Editor …
▸ monaco (default)
ace
Yes を選択して Enter を入力します。
Node settings
=============
? Allow Function nodes to load external modules? (functionExternalModules) …
▸ Yes
No
これで Node-REDがインストールされます。
続けて、~/.node-red/node_modules/node-red-contrib-amazon-echo/nodes/amazon-echo-hub.js を開き、explicitSocketBind: true の行を次のようにコメントアウトします。
(参考:Version 0.1.15 fails discovery on multi-homed docker container · Issue #211 · datech/node-red-contrib-amazon-echo)
//explicitSocketBind: true
これをしないと、以降の手順で Alexaアプリから Node-RED で登録したデバイスを追加する際に、デバイスがAlexaアプリで検出できません。
次に、Ubuntu起動時に Node-RED が自動実行されるようにします。
root のcrontab(crontab -e を実行) で次を追加します。
@reboot sleep 60;node-red-start
sleep 60; が無いと、以降の手順で Amazon Echo から認識されるようにデバイスを登録する際に、デプロイ実行で、「Amazon Echo Hub」の箇所に「Unable to start on port XXXX」とエラーが出ます。
続けて、ポートフォワーディングの設定を行います。
お使いのシステムのファイアウォール iptables / ufw によって、以下の iptablesの場合/ufwの場合 の作業をします。
–-to-port 8111 では Ubuntu で使用していないポート番号を指定しますが、例の通り、8111 で通常は問題ありません。
iptablesの場合
次のコマンドを実行します。
iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-port 8111
この設定は再起動すると消えてしまうので、設定が消えないようにします。
次のコマンドを実行してください。
apt install iptables-persistent
現在のIpv4ルールを保存しますか?
現在のIpv6ルールを保存しますか?
と出た場合は、はい を選択します。
続けて次のコマンドを実行してください。
/sbin/iptables-save > /etc/iptables/rules.v4
ufwの場合
次のコマンドを実行します。
ufw allow 80
/etc/ufw/before.rules の *nat ~ COMMIT の間に記述を追加します。
*nat
:
-A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8111
:
COMMIT
設定を反映します。
ufw reload
Node-REDでの設定
PCから http://xx.xx.xx.xx:1880 (xx.xx.xx.xxは UbuntuマシンのIPアドレス)にアクセスします。
次の画面が出ます。

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

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

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

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

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

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

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

この「Amazon Echo Hub」は、フローに1つだけ配置します。
設定例
ここでは、Amazon Echo に「テスト オン」「テスト オフ」というと、Ubuntu上でコマンドを実行する設定を説明します。
デバイスの追加
Node-REDで追加
Amazon Echo への呼出名と、実行する機能を設定します。
「amazon echo device」をフロー(画面中央の領域)にドラッグ&ドロップします。
「Amazon Echo Hub」のポート(四角いマーク)から、「Amazon Echo Device」のポートまでマウスでドラッグしてワイヤーでつなげます。

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

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

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

Alexaアプリでデバイス追加
次に、スマホで Alexaアプリにアクセスします。
画面右上の+をタップ-デバイス を選択します。「どのデバイスをセットアップしますか?」で “その他” を選択します。
「デバイスにはどのロゴがありますか?」で、”Wi-Fi” を選択します。

「デバイスメーカーのアプリを使用してデバイスをセットアップします」と出ますが、そのまま[デバイスを検出] を押します。
しばらく待つと、次のように照明として検出されます。「次へ」をタップしてください。

「照明はどこにありますか?」と出ますが、”スキップ” をタップしてください。
最後に “完了” をタップすると、デバイスの追加が完了です。
なお、Node-REDで追加したデバイスは、時々見えなくなることがありますが、その場合は1分ほど待っていると再度表示されます。

(デバイスを削除するときは)
Node-REDでデバイスを右クリックして「選択部分を削除」で、フローから削除されます。
続けて、画面の上の方の「デプロイ」を押してデプロイ実行します。
スマホで Alexaアプリのデバイス一覧にまだ出てくる場合は、該当デバイスを選択し、画面右上の歯車ボタンを押します。
設定画面になり、画面右上にゴミ箱ボタンが出るので、押すと削除確認になるので、「削除」を選択すると削除されます。
誤ってAlexaアプリでデバイスを削除してしまった場合は、先の手順「Alexaアプリでデバイス追加」を再度実施してください。
「接続する新しいその他が検出されませんでした」と出ますが、その画面右上の×を押します。
その後、デバイス一覧でしばらく(1分くらい)すると表示されるようになります。
Node-RED でフロー作成(音声で反応するかの確認まで)
PCからブラウザで http://xx.xx.xx.xx:1880 (xx.xx.xx.xxは Node-RED を設定したUbuntuマシンのIPアドレス)にアクセスします。
左側のノードから「debug」をフローにドラッグ&ドロップします。
debug が表示されるので、debug のポート(四角いマーク)から、「テスト」のポートまでマウスでドラッグしてワイヤーでつなげます。
画面の上の方の「デプロイ」を押してデプロイ実行します。

これで作成したフローが機能します。
本当に動作するかテストしてみます。
フローの「debug」ノードを選択します。
次に 画面右側にあるデバッグタブを選択します。デバッグタブを選択するには、下の画像のような虫アイコンを選択します。

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

Node-RED でフロー作成(Ubuntu でのコマンド実行)
先ほどまでの手順で、指定した名称で Amazon Echo を呼ぶと反応する所まで確認できました。
ここでは、その際に Ubuntu でコマンドを実行する設定を説明します。
ノードの「機能」から「exec」をフローにドラッグ&ドロップします。
追加されたノードのポート(四角いマーク)から、「テスト」のポートまでマウスでドラッグしてワイヤーでつなげます。

「exec」で追加されたノードをダブルクリックし、編集画面の [コマンド] で sh /home/USER/test.sh と入力します。
USER は、test.sh を置くユーザー名にしてください。
ここで指定するコマンドが、Amazon Echo を呼んだ時に実行されます。
(test.sh は後で作成します)
また、引数の箇所にチェックを付けてください。
最後に完了を押します。

次のようになるので、画面の上の方の「デプロイ」を押してデプロイ実行します。
これでフローは作成できました。

次に、Ubuntu で /home/USER/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に「テストオン」や「テストつけて」と言うと、「はい」と反応します。
この時 Ubuntu上で test.sh が実行されます。
/tmp/test.txt に「テスト オン」で ON が出力され、「テスト オフ」で OFF が出力されていますので、確認してみましょう。
デバイスを複数設定する場合は、下の画像のように、「Amazon Echo Hub」からつなげます。

コメント