はじめに
Amazon Echoは、通常「アレクサ、○○して」と、人間から話しかけないと喋ってくれません。また、通知機能もあるのですが、通知機能ではリングが黄色く光るだけで「アレクサ、通知ある?」と、はやり人間から話しかけないと通知内容を教えてくれません。
しかし、Alexa-remote-controlを使えば、PCやRaspberry PiのコマンドラインからAlexaを自由に喋らせることが可能です‼️これは、スマートホームで、Alexaを音声インタフェースとして使う場合に非常に重宝します。
用意するもの
①Amazon Echoシリーズ
まずは、今回の主役Amazon Echoシリーズが必要です。Echo DotでもEchoでも大丈夫です。
②Raspberry Pi
PCでも良いですが、今回は私がホームサーバとして利用しているRaspberry Pi 4Bを使うことにします。
必要なものは以上の2点です。
Alexaを自由に喋らせる方法
それでは早速Alexaをコマンドラインから喋らせてみましょう‼️
①必要ライブラリのインストール
Alexa-remote-controlを利用するためには、jq(JSONツール)が必要となりますので、まずはjqをインストールします。
pi@raspberrypi:~ $ sudo apt-get install jq
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
libjq1 libonig5
以下のパッケージが新たにインストールされます:
jq libjq1 libonig5
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。
329 kB のアーカイブを取得する必要があります。
この操作後に追加で 982 kB のディスク容量が消費されます。
続行しますか? [Y/n] Y
・・・省略・・・
pi@raspberrypi:~ $
②Alexa-remote-controlのダウンロード
次に、今回の主役であるAlexa-remote-controlの「alexa_remote_control.sh」をGithubからダウンロードします。
pi@raspberrypi:~ $ wget https://raw.githubusercontent.com/thorsten-gehrig/alexa-remote-control/master/alexa_remote_control.sh
--2021-03-07 16:15:33-- https://raw.githubusercontent.com/thorsten-gehrig/alexa-remote-control/master/alexa_remote_control.sh
raw.githubusercontent.com (raw.githubusercontent.com) をDNSに問いあわせています... 185.199.108.133, 185.199.110.133, 185.199.111.133, ...
raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 49902 (49K) [text/plain]
`alexa_remote_control.sh' に保存中
alexa_remote_control.sh 100%[=====================================>] 48.73K --.-KB/s 時間 0.01s
2021-03-07 16:15:34 (3.91 MB/s) - `alexa_remote_control.sh' へ保存完了 [49902/49902]
pi@raspberrypi:~ $
③Alexa-remote-controlの設定
ダウンロードした「alexa_remote_control.sh」をテキストエディタで開き、以下の部分を変更します。
なお「SET_EMAIL」には、Alexaアプリに登録したメールアドレスを、「SET_PASSWORD」には、ご自身のパスワードを入力しましょう。その他の項目は、以下の通りでOKです。
SET_EMAIL='aaa@aaa.jp'
SET_PASSWORD='xxxxxxxxxxxx'
SET_LANGUAGE='ja-JP'
SET_TTS_LOCALE='ja-JP'
SET_AMAZON='amazon.co.jp'
SET_ALEXA='alexa.amazon.co.jp'
④パーミッションの変更
私もよく忘れるんですが、シェルスクリプトを実行するためには、パーミッションの変更が必要ですね💦
pi@raspberrypi:~ $ chmod 777 alexa_remote_control.sh
pi@raspberrypi:~ $ ls -l alexa_remote_control.sh
-rwxrwxrwx 1 pi pi 49878 3月 7 16:17 alexa_remote_control.sh
⑤Alexaを喋らせる
それでは、早速Alexaを喋らせてみましょう‼️コマンドラインから以下のコマンドを実行します。
pi@raspberrypi:~ $ ./alexa_remote_control.sh -e "speak:テストです"
setting default device to:
Living Echo
sending cmd:speak:テストです to dev:Living Echo type:XXXXXXXXXX serial:XXXXXXXXXXXXX customerid:XXXXXXXXXXXX
pi@raspberrypi:~ $
どうですか?部屋にあるAmazon Echoが喋りましたか?
このようにAlexa-remote-controlを使うことで簡単にAlexaを喋らすことが可能です‼️
【付録】Alexa-remote-controlのいろいろ
①Amazon Echoデバイスの一覧を表示する
pi@raspberrypi:~ $ ./alexa_remote_control.sh -a
the following devices exist in your account:
Living Echo
2F Echo Dot
1F Echo Dot
pi@raspberrypi:~ $
②指定したデバイスに喋らせる
pi@raspberrypi:~ $ ./alexa_remote_control.sh -d "2F Echo Dot" -e "speak:テストです"
sending cmd:speak:テストです to dev:2F Echo Dot type:XXXXXXXXXX serial:XXXXXXXXXXXXXXXX customerid:XXXXXXXXXXXXXX
pi@raspberrypi:~ $
③全てのデバイスに喋らせる
pi@raspberrypi:~ $ ./alexa_remote_control.sh -d "ALL" -e "speak:テストです"
sending cmd:speak:テストです to dev:Living Echo type:XXXXXXXXXX serial:XXXXXXXXXXXXXXXX customerid:XXXXXXXXXXXXXX
sending cmd:speak:テストです to dev:2F Echo Dot type:XXXXXXXXXX serial:XXXXXXXXXXXXXXXX customerid:XXXXXXXXXXXXXX
sending cmd:speak:テストです to dev:1F Echo Dot type:XXXXXXXXXX serial:XXXXXXXXXXXXXXXX customerid:XXXXXXXXXXXXXX
pi@raspberrypi:~ $
④天気予報を喋らせる
pi@raspberrypi:~ $ ./alexa_remote_control.sh -e "weather"
⑤おはようの挨拶をする
pi@raspberrypi:~ $ ./alexa_remote_control.sh -e "goodmorning"
⑥最新のニュースを読み上げる
pi@raspberrypi:~ $ ./alexa_remote_control.sh -e "flashbriefing"
⑦物語を話す
pi@raspberrypi:~ $ ./alexa_remote_control.sh -e "tellstory"
おわりに
今までは、Alexaを自発的に喋らせることは難しかったのですが、Alexa-remote-controlの登場により自由に喋らせることができるようになりました。これを使えば、天気APIと連動させて「雨が降りそうになったらお知らせ」したり、地震の情報をお知らせしたり、スマートホームとしての活用の幅が広がります!
コメント
いつもありがとうございます!
NodeREDから喋らせられなくなって困っていたのですが、
新たな方法が出たのですね。
二段階認証導入していましたが、問題なく接続まででき、しっかりと喋りました!
情報ありがとうございます。
パスワード認証のみで、スクリプトを実行すると下記のエラーが発生しました。
cookie does not exist. logging in …
ERROR: Amazon Login was unsuccessful. Possibly you get a captcha login screen.
Try logging in to https://alexa.amazon.co.jp with your browser. In your browser
make sure to have all Amazon related cookies deleted and Javascript disabled!
(For more information have a look at /tmp/.alexa.login)
To avoid issues with captcha, try using Multi-Factor Authentication.
To do so, first set up Two-Step Verification on your Amazon account, then
configure this script (or the environment) with your MFA secret.
Support for Multi-Factor Authentication requires ‘oathtool’ to be installed.
Alexaに二段階認証導入した場合は、どのように設定を変更したらいいでしょうか。
SET_MFA_SECRET=’ ’に、一時的にワンタイムパスワードを設定すればよろしいでしょうか。
ご教示いただけると幸いです。
メッセージによるとoathtoolをインストールして、SET_MFA_SECRETにパスワードを書けばいけると書いてありますね。
参考にさせていただきました。
コレ良いですね。
実行時にセッションが切れてたら、自動でログインし直して処理してくれるみたい。
パスワードベタ書きに近いので、コレを機に二段階認証入れました。
Node-redでもコマンド叩けるので、設定さえ済んでしまえば、「node-red-contrib-alexa-remote2」と同じ感じでできました。
複数台喋らせるためには、その分コマンドを作らないと…ですが、週1でCookie作り直さなくて良いし。
ありがとうございます。
こんにちは。
ご相談させていただきたく、Gmailとメッセンジャーにご連絡をさせていただいたのですがご覧になっていただけないでしょうか?
よろしくお願いします。m(__)m