Raspberry Pi + Node-RED + Echo Show 5 + Google Home で「こっちに来て!」メッセージ
“Raspberry Pi + Bluetooth リモコンシャッター + Google Home で「こっちに来て!」メッセージ”の続きです。
先日のTALK (“Raspberry Pi + Bluetooth リモコンシャッター + Google Home で「こっちに来て!」メッセージ“)で300円の”Bluetooth リモコンシャッター 無線 スマホ 自撮り棒 iPhone iPad Android対応 CW-268BT” (CW shutter)を使って、リビングルームから書斎の”Google Home“にメッセージを送る、という電子工作に挑戦しました。仕組み自体は問題なく稼働しているものの、300円で買えるbluetoothデバイスということもあってか通信圏内がせいぜい3m~5mぐらいなので、正直なところ実用面ではいまひとつといった感じです。
そこで考えたのが、リビングルームに設置している”Echo Show 5” (“Echo Show 5 (エコーショー5) スクリーン付きスマートスピーカー with Alexaをリビングルームに導入!“)
あるいは玄関に設置したいる”Echo Flex” (“アマゾンのEcho Flex + モーションセンサーとSwitchbotで玄関の照明を自動オン・オフ!“)と、
書斎の”Google Home“を
何とか連携できないか?というアイディアです。
そんなわけで、今回は、あいだにラズパイを介して、AlexaとOK Googleとの通信を実現してみました。
<Node-REDを使ってAlexaとラズパイを連携 >
“Google Home“については後にして、まず始めに、Alexaとラズパイを”Node-RED Alexa Home Skill Bridge“という仕組みを使って連携できるようにします。
“Node-RED“は、「ハードウェアデバイス、APIおよびオンラインサービスを新しく興味深い方法で接続するためのツールです。」だそうです。と言われても何のことだか分かりませんが、”Node-RED”は”Low-code programming for event-driven applications”の略、つまりグラフィカルユーザーインターフェースを使ってイベント駆動型のアプリケーションを作るツールだと思えば、何となく分かったような気がします。
今回は、そんな”Node-RED”をベースにAlexaのスキルをプログラミングできる”Node-RED Alexa Home Skill Bridge“を活用することにします。
ここからは、使い慣れたPC環境で行うことができます。POOHの場合はmacOSの”Safari”で作業しました。
画面上の”Register”をクリックしてユーザ登録をします。
ログインした状態で、画面上の黒い帯にある”Devices”をクリック、続けて”Add Device”ボタンをクリックします。この画面では、”Amazon Alexa”iOSアプリに表示するデバイスの骨格を作成します。
赤い部分を設定します。
“Name”は、”Amazon Alexa”iOSアプリの画面にデバイス名として表示されます。(アプリで名前は編集可能です。)
“Actions”欄で”On”と”Off”を有効にしましたが、厳密に言えばどちらか一方でも構いません。また、”Application Type”を無難なところでデフォルトのまま。ちなみに”ACTIVITY”を選択すると”シーン”と認識されてしまいます。
項目の設定が済んだら、”OK”ボタンをクリックします。
ここからはラズパイの”ターミナル”で作業します。
“Node-RED”をラズパイにインストールします。
※ ラズパイには始めから”Node-RED”がインストールされていて、メニューから起動できます。とは言え、バージョンが古いそうなので、敢えてインストールすることで最新の”Node-RED”にバージョンアップしておきます。
メニューを実行すると”Node-RED”が起動します。また、”ターミナル”には”Node-RED”にアクセスするURL、”Node-RED”の基本コマンドなどが表示されます。
sudo apt-get install nodered
※ 以下のコマンドの方がオススメです。ただ、Nodejs環境を最新化するので、既に利用しているサービスに影響する可能性はあります。
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
インストール後、”Node-RED”を起動します。
node-red-start
“ターミナル”画面に表示された”http://127.0.0.1:1880″部分をメモります。一旦、Control + cで”Node-RED”を終了します。
※ Control + cだと”Node-RED”はバックグラウンドで実行し続けるそうです。”Node-RED”をしっかり終了させたい場合は、”node-red-stop”を実行して下さい。
続いて、ラズパイに割当られているIPアドレスをメモっておきます。(できれば、ラズパイのIPアドレスを固定化した方が良いです。)
ifconfig
最後に、ラズパイを再起動しても、”Node-RED”が自動的に起動するようにしておきます。
sudo systemctl enable nodered.service
以上で、ラズパイ上での作業は一旦完了です。
< Node-RED Alexa Home Skill Bridgeでスキルを作成 >
それでは、”Node-RED Alexa Home Skill Bridge“でスキルを作成していきます。
“Node-RED”には、先程メモった”http://127.0.0.1:1880″のIPアドレス部分をラズパイのそれに置き換えてアクセスします。ラズパイのWebブラウザでも良いのですが、操作性を考慮し、普段使い慣れているPC環境のWebブラウザを使用します。
http://192.168.1.104:1880/
“Node-RED”のフロー作成画面が表示されたら、右上にある三本線のアイコンをクリックし、”パレットの管理”を選択します。
“ノードを追加”タブ画面で”alexa”と検索し、”node-red-contrib-alexa-home-skill”を選択し”ノードを追加”をクリックします。
“追加”ボタンをクリックすれば、ノードのインストールが完了です。
ノード欄に”alexa”が追加されました。”alexa home”という部品をパレット画面にドラッグ&ドロップし、部品をダブルクリックして下さい。
鉛筆アイコンをクリックし、”node-red-contrib-alexa-home-skill”のユーザ情報(Registerで登録したUsernameとPassword)を入力。
“Device”欄に先程作成したデバイスが表示されたら、”完了”ボタンをクリックします。
ここで動作確認テストをしておきます。
ノード欄の”共通”から”debug”部品をパレット画面にドラッグ&ドロップし、”Google Home” (Alexa Home)部品と線で接続して下さい。
“debug”部品をダブルクリックすると、中身はこんな感じです。
< “Amazon Alexa”iOSアプリでデバイスを追加 >
ここでiPhoneを手元に用意して”Amazon Alexa”iOSアプリに新しいデバイスを追加します。
“Amazon Alexa”の”スキル・ゲーム”を実行、”node-red”と検索して”Node-RED”スキルを追加します。
“有効にして使用する”ボタンをタップすると、
下図のような認証画面が表示されるので、”node-red-contrib-alexa-home-skill”のユーザ情報(Registerで登録したUsernameとPassword)を入力。
これでスキルのインストールが完了しました。
続いて、デバイスを追加します。”端末を検出”ボタンをタップしてしばらく待ちます。この時、ラズパイの電源は必ずオンにして下さい。
“Google Home”が検出されました。”デバイスをセットアップ”でデバイスを”書斎”グループに追加します。(我が家の場合。)
以上でデバイスの追加が完了しました。
< “Amazon Alexa”iOSアプリでデバイスを制御してみる >
PC環境で開いている”Node-RED”画面で、”デプロイ”ボタン (作成したノードを有効にする)と一番右端にある虫アイコン(デバック画面を表示する)をクリックして下さい。
“Amazon Alexa”iOSアプリで新しく追加した”Google Home”デバイスを開いて下さい。
“Amazon Alexa”iOSアプリで”オン”と”オフ”ボタンをタップすると、”Node-RED”のデバッグ画面に実行結果が表示されます。
これで動作確認テストが完了しました。
< google-home-notifierでラズパイとGoogle Homeを連携 >
ラズパイから”Google Home”が喋るようにします。
なお、”Google Home”が喋る仕組みは”google-home-notifier“というJava Scriptのライブラリでやってもらいます。インストール手順やセットアップ方法は、以下のTALKをご覧下さい。
・”Raspberry Piを使ってGoogle Homeに時報サービスをしてもらいましょう”
・”Raspberry PiとGoogle カレンダでGoogle Homeにゴミの日を教えてもらう”
・”Raspberry Piを使ってGoogle Homeに1時間後に雨が降る可能性を予測してもらいましょう”
”google-home-notifier“を使って”Google Home”が喋るJavaスクリプトを作成します。
sudo nano /home/pi/googlehome-wife_calling.js
作成したJavaスクリプトを実行して、”Google Home”が喋ることを確認しておきます。
node googlehome-wife_calling.js
続いて、”Google Home”デバイスを操作した時に実行するスクリプトをラズパイに作っておきます。
sudo nano /home/pi/googlehome_calling.sh
“Amazon Alexa”iOSアプリの”Google Home”デバイスでオンをタップすると$1 = “true”
“Amazon Alexa”iOSアプリの”Google Home”デバイスでオフをタップすると$1 = “false”
の各コマンドが実行されます。サンプルは同じコマンドにしてありますが、タップするボタンによって実行する内容を変えることができます。
作成したスクリプトファイルに実行権限を与えておきます。
chmod +x /home/pi/ googlehome_calling.sh
< AlexaからOK Googleするスキルを完成させる >
再び、”Node-RED”画面に戻ります。
http://192.168.1.104:1880/
ノード欄の”機能”から”exex”部品をパレット画面にドラッグ&ドロップし、”Google Home” (Alexa Home)部品と線で接続して下さい。
“exex”部品をダブルクリックして、”プロパティ”画面の”コマンド”欄に、先程作成した”googlehome_calling.sh”の実行コマンドを入力して、”完了”ボタンをクリックします。
sh /home/pi/googlehome_calling.sh
“debug”部品をパレット画面にドラッグ&ドロップし”exex”部品と線で接続します。”ディプロイ”ボタンをクリックして、作成したノードを有効にします。
先程のように、”Amazon Alexa”iOSアプリで追加した”Google Home”デバイスを操作してみて下さい。
“debug”部品に繋げておいたので、エラーが発生すると、下図のようにデバッグ画面にエラーの内容が表示されます。エラー内容を確認してデバッグを進めます。
デバッグが完了した後、再度、”Google Home”デバイスを操作してみます。問題なく実行でき、”Google Home”が「こっちに来て下さい」と喋りました。
実際に、リビングルームに設置している”Echo Show 5” で「Alexa Google Home オン」と言えば、書斎の”Google Home“が「こっちに来て下さい」と伝えてくれました。成功です!Alexaに依頼する時のフレーズは意味不明なので何とか改良したいところですけどね。
|
|
|
ホームページ “THE POOH FILES”にも是非お立ち寄り下さい。
“Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。