Windows10 から Alexa端末にしゃべらせる

ALL
スポンサーリンク

Windows10 から Alexa端末にしゃべらせるやり方です。
Linux や RaspberryPi では alexa_remote_control.sh を使ってしゃべらせることができますが、これを Windows10 で実行します。
本記事での方法で、WSL(Windows Subsystem for Linux)のインストールや、その他システムにインストールするようなアプリを使わずに済みます。

なお、Amazonの認証で 2段階認証をするようにしている場合は対応できません。

2023.11.5
本記事の内容で動作しなくなっていますので、下記記事の方を参照してください。
また、2段階認証をするようにしている場合も設定できます。

Windows から Alexa端末にしゃべらせたり、MP3を再生させたりする – パソコン鳥のブログ

準備

https://frippery.org/busybox/ の「The latest version is always busybox.exe. 」から busybox をダウンロードします。

https://stedolan.github.io/jq/ の Download jq ボタンから Windows(64-bit) を選択し、jq-win64 をダウンロードします。
ダウンロードしたら名前を jq に変更します。

https://raw.githubusercontent.com/thorsten-gehrig/alexa-remote-control/master/alexa_remote_control.sh にアクセスし、alexa_remote_control.sh を保存します。

alexa_remote_control.sh で以下を変更します。
2021.12.7追記:SET_JQ の行を追加

SET_EMAIL='Amazonアカウントのメールアドレス'
SET_PASSWORD='Amazon パスワード'
SET_LANGUAGE='ja-JP'
SET_TTS_LOCALE='ja-JP'
SET_AMAZON='amazon.co.jp'
SET_ALEXA='alexa.amazon.co.jp'
SET_OPTS=' --http1.1'
SET_CURL='curl'
SET_JQ='jq'

上記で用意した busybox、jq、alexa_remote_control.sh を同じ個所に置きます。

Alexa端末名の確認

コマンドプロンプトを開きます。
(PowerShell では以降のコマンド実行で日本語を含む表示が文字化けします)

次のコマンドを実行します。

chcp 65001

次のコマンドを実行します。

busybox.exe sh alexa_remote_control.sh -a

Alexa端末の一覧が表示されます。
以降のコマンドで指定する端末名は、ここで表示されたものにします。

the following devices exist in your account:
子供部屋
リビング
台所
FireHD8
FireHD7
Fire TV stick
This Device

コマンドプロンプトはこのまま開いたままにしておいてください。

Alexa端末に Windowsからしゃべらせる

2022.2.14 記事記載時の内容で動作しなくなっていた箇所を修正

まず、メモ帳で次の内容で speak.sh として保存します。
(メモ帳以外のエディタを使う場合は、文字コード UTF-8 で保存してください)
speak: に続けて、Alexa端末にしゃべらせたい内容を記述します。

speak.sh

sh alexa_remote_control.sh -e "speak:こんばんわ" -d "端末名"

端末名 の箇所は、先の手順[Alexa端末名の確認] で確認した端末名を指定します。

コマンドプロンプトで次のように実行します。

busybox.exe sh speak.sh

これで、Alexa端末がしゃべります。

バッチファイルから実行

上記で用意した busybox、jq、alexa_remote_control.sh 、speak.sh と同じ個所に、次のような内容でバッチファイルを作成します。
この時、バッチファイルの文字コードは UTF-8 にしてください。

chcp 65001
busybox.exe sh speak.sh

これを実行するとしゃべります。

コメント

  1. はなまるこ より:

    はじめまして。
    やりたいことにバッチリマッチした記事でとても助かります!ありがとうございます。
    あと一歩のところでつまづいているのですが下記、おわかりになりますでしょうか?
    最後のバッチファイルを作成しましたが、実行したところ

    Active code page: 65001
    ERROR: unknown device dev:d
    Press any key to continue . . .

    と表示されました(echo offしてます)。
    Alexa端末の一覧は問題なく取得できていますが、「仕事部屋」というAlexa端末を指定しても引数をうまく渡せていない様です。
    シェルスクリプトの引数の渡し方も確認したのですが問題ないように思われます。
    恐れ入りますがご確認いただければ幸いです。

    ・バッチファイル
    @echo off
    chcp 65001
    busybox.exe sh speak.sh “仕事部屋”
    pause

    ・speak.sh
    sh alexa_remote_control.sh -e “speak:こんばんわ” -d “$1”

  2. パソコン鳥 より:

    コメントありがとうございます。
    記事掲載時の内容で、現在動作しなくなっていた箇所を修正しました。
    「Alexa端末に Windowsからしゃべらせる」で、speak.sh の中身で -d で直接端末名を指定するように修正しています。

  3. はなまるこ より:

    さっそくご回答頂きありがとうございます。
    speak.shで直接機器名を指定したところ、正常に動作いたしました。
    speak.shの内容を動的にしたい考えがありましたが、引数を渡す代わりにバッチでspeak.shを都度作成して呼び出すことにしました。

  4. パソコン鳥 より:

    記事掲載時の内容で動作しなくなった原因が、alexa_remote_control.sh と Amazonの仕様変更のようなので、alexa_remote_control.sh を2021.5.27版にすると、元の記事の通り、引数で端末名を指定できました。
    https://raw.githubusercontent.com/thorsten-gehrig/alexa-remote-control/6a0f6e96f5f236a182cb24392e0c22705e479485/alexa_remote_control.sh

    それと、記事執筆時に試していませんでしたが、-e “speak:~” で指定する話す内容までは引数で渡せませんでした。
    コマンドプロンプト、busybox、alexa_remote_control.sh、Amazon 間で文字列を受け渡す際の文字コードの問題で、ここがうまく引き渡せればスクリプトから引数で話す内容を指定できると思いますが、うまくいく方法がわかっていません。