通常であればこういう技術記事は『成功したこと』を書くべきだと思っていますが、Qiitaは成功したこと以外も書きやすく思えるので、残しておきます。
やりたかったこと
概要を図にすると上記となります。洗濯機とswitchbotを接続しているので、洗濯が終わるとswitchbotが検出できます。現在はそこからクラウドを経由してスマホに通知が飛ぶのですが、家庭内にあるAlexa(正確にはAmazon echo)でも喋らせたかったです。
問題なのはAlexaを喋らせる部分。というのも、Alexaは人間の問いかけをトリガーにするのが基本なので、問いかけをせずに喋らせるのがとてもハードル高いんです。
突然喋らせることが容易にできてしまうと「ある日突然あちこちのAlexaが大声で広告を叫ぶ」みたいなイタズラができてしまうので、そもそもそういうルートをなるべく潰しているのかもしれません。
試したこと
Alexa スキル
Alexaを喋らせる、となると一番最初に検討されるのがこの機能。Amazonが公式で提供している手段です。
が、前述のように音声をトリガーとするのが基本なので却下。
alexa-remote-control
一番有力な方法だけれど、2024年8月時点ではなかなか難しい方法。
上記のgithubで公開されているシェルスクリプトを叩く方法です。Alexaに喋らせたい場合にはこれを使うケースが多いようです。
これを使う上での課題は現時点で2つあります。
- スクリプトを叩く環境 (PC) の確保
- スクリプトに設定するアカウント情報
スクリプトを叩くと発話するので、洗濯機の動作が終了したときにスクリプトを叩くPCを用意する必要があります。最初はスクリプトを叩くためにRaspberry Piを常時起動しておこうか?とも考えていましたが、AWS Lambdaを使うと無料でできそうだったので、PCの確保という問題は解決でした。
問題は2のアカウント情報。以前はメールアドレスとパスワードで使用できたんですが、現時点ではリフレッシュトークン (REFRESH_TOKEN) が必須になってしまったようです。AWSでAlexa用のアカウントを作ってみたり、ライブラリを入れてみたり、Alexa-cookieというツールを使ってみたりしたのですが、リフレッシュトークンを取得することができず。
Linuxからコマンドラインでやるなら上記のツールが楽かなと思ったのですが、ブラウザがないと難しそう。試しにEC2にSSHで接続してツールを動かしLynxというテキストベースブラウザで認証できないかと検討しましたが、captchaに阻まれてしまいました。
このあたりで「ブラウザがない環境でリフレッシュトークンを取得するのは無理なのでは?」と挫折し始めています。
これから
今のところはalexa-remote-controlを使わずに発話させる方法がなさそうなので、何とか発話させられないかを検討しています。トークン取得さえできてしまえば発話させるところまで進めると思うので、あと一歩がなかなか進まないという状況ですね。
ネットで検索して出てくる情報だとリフレッシュトークンがいらない時代のものばかりなので、割と絶望的な気もしていますが。。。