ひとりアドベントカレンダー4日目
昨日は寝てしまったので遅れてしまいました。あまり遅れると連鎖するので気を付けよう。
EchoやEcho dot、いわゆるスマートスピーカーであるアレクサを3年ほど使っている。
ことばを覚えて話し始めた子供だとなかなか最初は認識くれなかったりするが、次第に発音がよくなってきているのか、アレクサが学習しているのか、どちらにせよ認識するようになる。
なんらな”アレクタ”っぽい発音でも認識したりしている。
動機
そんな感じなので、アレクサの言うことなら聞いてくれそうだと思って、探しました。
Alexa(Amazon Echo)をコマンドラインから自由に喋らせる方法 - Qiita
実行例
とりあえず、実行例です。個別のコードは隠しています。
上に示したページではスクリプトを書き換えて対応していましたが、ここでは環境変数の設定で書いてみました。
MFA_SECRET='取得したシークレットコード' AMAZON='amazon.co.jp' ALEXA='alexa.amazon.co.jp' LANGUAGE='ja-JP' TTS_LOCALE='ja-JP' ./alexa_remote_control_plain.sh -d "MyDot" -e "speak:準備できたら靴をはいてくださいね"
sending cmd:speak:準備できたら靴をはいてくださいね to dev:MyDot type:XXXXXXXXXXXXXX serial:XXXXXXXXXXXXXXXX customerid:XXXXXXXXXXXXXX
手順
実行例で示した '取得したシークレットコード' の取得方法をメインに手順を書いていきます。
- スクリプトを取得
- Amazonに2段階認証の設定ページからコード取得
- Amazonに2段階認証の設定でちゃんと登録
スクリプトを取得
githubからスクリプトを取得します。
jqのインストールを必要としないalexa_remote_control_plain.sh
をダウンロード、alexaフォルダに入れておきます。
jqを使用する場合と機能の違いがあるのかわかりませんが不便していないのでこれを使用しています。
https://github.com/thorsten-gehrig/alexa-remote-control
Amazonに2段階認証の設定ページからコード取得
- Amazonの2段階認証(2SV)の設定のページへアクセス
ここで2段階認証が必要で、設定した携帯等にSMSでメッセージが来るので承認します。
(ログインとセキュリティから2段階認証の有効化が必要かもしれません) - [新しいアプリを追加]のリンクへ、2段階認証手段を追加のページに来ます。
- QRコードの下[バーコードをスキャンできませんか?]をクリックすると表示される大文字英数字のコードをコピーして保存しておきます。
- これを実行例の取得したシークレットコードのところに入れて実行するとひとまず動きました。
Amazonに2段階認証の設定でちゃんと登録
ここまでの方法だと最初はうまくいくもののしばらくするとうまくいかなくなりました。
調べたところ、いくつか見つかりましたが以下のissuesの最後の方の投稿でまとめられている方法を実行しました。
Failed login -- apparent captcha · Issue #10 · thorsten-gehrig/alexa-remote-control
具体的にはまずoathtoolをインストールし、それを使用します。
sudo apt install oathtool
oathtool --base32 --totp "MFA_SECRET"
XXXXXX
MFA_SECRETとなっている所に先ほど取得したコードを設定して実行すると6桁の数字が表示されます。
これはワンタイムパスワードになっていて、30秒ごとに出力内容が変わるようになっているようです。
なので、変わるタイミングにまたがらないよう、表示されたらすぐに次の操作をしないといけません。
具体的には先ほどコードを取得した 2段階認証手段を追加 のページの下の入力フォームに表示された6桁の数字を入力して[ワンタイムパスワードを確認して次に進む]を押します。
これでこのコードを使用したスクリプトがアプリとして登録され、実行できるようになるはずです。
確認できたら、環境変数で設定していた項目をスクリプトに反映しておいた方が便利でしょう。
SET_MFA_SECRET以外に以下の4つを設定しておきました
SET_LANGUAGE='ja-JP'
SET_TTS_LOCALE='ja-JP'
SET_AMAZON='amazon.co.jp'
SET_ALEXA='alexa.amazon.co.jp'
まとめ
これでコマンドラインからアレクサを好きなようにしゃべらせることができるようになりました。
より便利に使えるようにWebインターフェイスを作るところまで書きたかったのですが、それは次回に。
また、今回の実行例はしゃべらせるだけ(speak:)でしたが、同様のコマンドでいろいろできるので参考ページを書いておきます。
Alexaを自由に喋らせる方法(コマンドライン編) | 育児×家事×IoT
実はこの作業をしたのは8月頃だったのですが、最近リフレッシュトークンを使用する新しい方法が出てきているようです。今回は調べきれなかったので後日やってみたいと思います。
これも参考ページだけ書いておきます。
Lötzimmer: Alexa Remote Control Shell Script