みなさん、こんにちは。
音楽の再生はもちろんのこと、天気や電車乗換の案内をしてくれるAmazon Alexa。発売されて随分経ちますが、みなさんはどう活用されていますか?Alexaに話しかけるだけでなく、たまにはAlexaから話かけてほしいと思ったことはありませんか?
そんなあなたのために、今回はRaspberry Piを使ってAmazon Alexaから話しかけてもらう方法をご紹介します。今回ご紹介する方法では、決まった言葉を話しかけてくれるだけですが、プログラム次第でいろいろな応用が可能です。
最後まで読んで、ぜひ応用方法を考えてみてください。
なお、Google Home / Nest でも同様のことができますので、もしGoogleデバイスをお持ちの方は以下を参照してください。
Alexaを遠隔操作する魔法、「alexa-remote-control」
今回のお話の主役となるのは、「alexa-remote-control」というツールです。
これは、Raspberry PiのようなLinux環境からAlexaデバイスを制御するためのスクリプトで、これを使えば、定型アクションではできないような、より柔軟な音声コマンドや通知を実現できます。
準備するもの:Raspberry Pi とNode.js
まず、今回の作業に必要なものから見ていきましょう。
- Raspberry Pi
今回は3b+を用意し、OSにDebian Busterを使用しました。最新のRaspberry Pi OSでも問題なく動作するはずです。 - Node.js (v16以降)
後述するリフレッシュトークン取得のために必要です。私はNode.js 20を利用しましたが、16以降であれば大丈夫です。
なお、リフレッシュトークン取得後は使用しないため、Raspberry Pi 環境にインストールする必要もありません。 - 安定したインターネット接続
もちろん、Alexaデバイスもインターネットに接続されている必要があります。
1. Alexaのリフレッシュトークンを取得
Alexaデバイスを遠隔操作するためには、まず「リフレッシュトークン」と呼ばれる特別な鍵を取得する必要があります。これは、AmazonアカウントとAlexaサービスを連携させるための大切な認証情報です。
Node.js環境の準備
まずNodejsをインストールしましょう。私はXubuntu 22.04にNode.js 20をインストールしましたが、バージョン16以降であれば問題ありません。WindowsであればWSL環境のUbuntuにインストールできます。以下をターミナルで実行します。
sudo apt install nodejs
node -v
v20.19.2
alexa-cookie-cliのクローンと実行
リフレッシュトークンを取得するために、「alexa-cookie-cli」というツールを使います。これはGitHubで公開されているので、クローンして利用します。
git clone https://github.com/adn77/alexa-cookie-cli.git
cd alexa-cookie-cli
npm install
インストールが完了したら、以下のコマンドを実行します。
node ./cli.js -p amazon.co.jp -a ja_JP -P 8080
このコマンドを実行すると、ターミナルが待機状態になります。
次に、ウェブブラウザを開き、http://127.0.0.1:8080
にアクセスしてください。
Amazonへのログインとトークンの取得
ブラウザでアクセスすると、Amazonのログイン画面が表示されます。指示に従ってAmazonアカウントにログインしてください。ログインが成功すると、ブラウザは自動的にリダイレクトされ、ターミナルには以下のような情報が表示されます。
deviceSerial: XXXXXXXXXXXXXX
refreshToken: Atnr|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
このAtnr|ではじまるrefreshToken
が、今回最も重要な情報です。この値をコピーして、メモ帳などに控えておいてください。deviceSerial
も後で使う可能性があるので、控えておくと良いでしょう。
リフレッシュトークンを控えたら、ターミナルで Ctrl+C
を押して alexa-cookie-cli
を終了させ、ブラウザも閉じて大丈夫です。alexa-cookie-cli
のフォルダは、もう使わないので削除しても構いません。
2. Raspberry Piの環境設定とalexa-remote-controlのセットアップ
次に、実際にAlexaを操作するための環境をRaspberry Piに構築していきます。以下はRaspberry Pi にログインして実行してください。
必要なパッケージのインストール
alexa-remote-control
の動作に必要なパッケージをインストールします。
sudo apt-get update && sudo apt-get install -y curl jq
curl
はウェブからデータを取得するために、jq
はJSONデータを処理するために使われます。どちらも便利なツールなので、インストールしておくと何かと役立ちます。
alexa-remote-controlのクローン
GitHubからalexa-remote-control
をクローンします。
git clone https://github.com/thorsten-gehrig/alexa-remote-control.git
cd alexa-remote-control
alexa_remote_control.shの編集
クローンしたalexa-remote-control
ディレクトリの中に、alexa_remote_control.sh
というファイルがあります。このファイルを編集して、先ほど取得したリフレッシュトークンなどを設定します。
vi alexa_remote_control.sh
vi
エディタが開いたら、以下の箇所を探して修正します。
SET_REFRESH_TOKEN='{refreshToken}'
{refreshToken}
の部分に、先ほど控えたリフレッシュトークンを貼り付けます。
SET_TTS_LOCALE='ja-JP'
- 日本語で発話させるために、
en-US
からja-JP
に変更します。
- 日本語で発話させるために、
SET_AMAZON='amazon.co.jp'
- 日本のAmazonアカウントを使用しているので、
amazon.com
からamazon.co.jp
に変更します。
- 日本のAmazonアカウントを使用しているので、
SET_ALEXA='alexa.amazon.co.jp'
- 同様に、Alexaのエンドポイントも
alexa.amazon.com
からalexa.amazon.co.jp
に変更します。
- 同様に、Alexaのエンドポイントも
編集が完了したら、vi
エディタで :wq
と入力して保存終了します。
3. 動作確認とAlexaに喋らせてみよう!
これで準備は整いました!ではAlexaに喋ってもらいましょう。
デバイスリストの確認
まず、alexa_remote_control.sh
が正しく設定されているか確認するために、登録されているAlexaデバイスのリストを表示してみます。
alexa_remote_control.sh -a
このコマンドを実行すると、あなたがAmazonアカウントに登録しているAlexaデバイスの名前が一覧表示されます。もしデバイス名が表示されれば、ここまでの設定は成功です!
Alexaに喋らせる!
いよいよ本番です。以下のコマンドを実行して、Alexaに任意の言葉を喋らせてみましょう。
alexa_remote_control.sh -d '{端末名}' -e 'speak:ハローアレクサ'
{端末名}
の部分には、先ほど-a
オプションで表示されたAlexaデバイスの正確な名前を入力してください。例えば、「エコードット」などです。'speak:ハローアレクサ'
の部分は、Alexaに喋らせたい内容です。speak:
の後に続けて、好きな言葉を入力してください。
コマンドを実行して、あなたのAlexaデバイスから「ハローアレクサ」と発話されたら、見事成功です!
さらなる応用へ
これで、Raspberry PiからAlexaを自由に操る力を手に入れました。この技術を使えば、様々な応用が考えられます。
- 定時アナウンス
Raspberry Piのcron機能と組み合わせれば、毎朝の天気予報やニュースをAlexaに読み上げさせることができます。 - スマートホーム連携
Raspberry Piでセンサーを読み取り、その結果に応じてAlexaに通知をさせたり、特定の情報を喋らせたりすることも可能です。 - 独自の音声アシスタント
少しプログラミングの知識があれば、特定のコマンドに応答してAlexaが喋るような、独自の音声アシスタントを構築することも可能です。
Raspberry PiとAlexaの組み合わせは、想像力を掻き立てる無限の可能性を秘めています。ぜひ色々と試して、あなただけのスマートホームシステムを構築してみてください。とりわけ、高齢者の見守りシステムとしてAlexaの発話機能は有望ではないでしょうか?
本日も最後までお読みいただきありがとうございました。
それでは、よいAlexaライフを!
ピンバック: Raspberry PiにGoogle-home-notifierをセットアップしてGoogle Home / Nestに任意の言葉を喋らせる方法 - ビューローみかみ