Raspberry Piで稼働中のサービスの仕様変更に伴い使えなくなった機能を別のソリューションに置き換えました “Google Home” 他
“Raspberry Pi“を活用して毎日利用しているいくつかのサービスが、昨年12月を境に仕様変更で継続利用ができなくなってしまいました。
自分で作ったソフトウェアで運用しているのであれば何とか対応を検討できますが、他の方が作ってくれた機能となると自分自身ではどうにもできないので、別のソリューションを探しつつサービスの継続利用を進めてみました。
< Google Homeで必要な情報をプロアクティブに喋ってもらうサービス >
我が家では、スマートスピーカーに喋りかけて情報を訊ねるのではなく、必要な時にスマートスピーカー自身で情報を伝えてくれるよう、いろいろ試行錯誤しながらスマートホーム化を進めています。
そんな取り組みのひとつが、”Raspberry Pi“を介して”Google Home“に情報を伝えてもらうというサービスの構築です。細かな内容は過去のTALKをご覧いただくとして、これまでは、”Node-RED“の”google-home-notify“ノードを軸にサービス (“Raspberry Pi google-home-notifierはすぐに動かなくなるのでNode-RED環境に移行しました”)を稼働させていました。
昨年12月に入ったところで、使っているノードで”get key failed from google”というエラーが表示され、Google Homeは喋ってくれなくなってしまいました。
そこで、”node-red-contrib-cast“というノードに乗り換えることにしました。ちなみに、”node-red-contrib-castv2“というノードもありますが、こちらは設定が面倒っぽかったので今回は不採用。
“node-red-contrib-cast”は、”google-home-notify”をそっくり置き換えるだけで、作ったフローはそのまま使えます。
細かいことは分かりませんが、”node-red-contrib-cast”の方が”Google Home”がより自然な話し方になります。ま、現状では良いこと尽くめかなあ。なお、”node-red-contrib-cast”はアップデートがすっかり止まっているようなので、今後のどこまで使えるのかは不明です。ま、一時的な対処療法っていうところかもしれませんね。
< Radikoを定時にリスニングするサービス >
我が家では、毎朝、”Radiko“で10分間だけ最新のニュースを聴く習慣があります。そのために、”Raspberry Pi”に”radikoをlinuxで聞いたりするやつ“で公開しているラズパイで”radiko“を聴けるスクリプト “radiko.sh”をインストールし、macOS経由 (“macOSからRaspberry Piにワンクリックでradiko ラジオ放送の再生を指示する “Automatorとparamikoを活用””)で自動化していました。
でも、こちらも昨年12月以降、”Radiko”のAdobe Flash廃止に伴う仕様変更でサービスを継続できなくなってしまいました。ちなみに、現在公開されているスクリプトはすべて非公式で作ったものばかりなので、継続利用ができなくなっても仕方がないモードだったりします。”Radiko”側で公式にAPIなどを公開してくれると、もっと多くの人たちがハッピーになれるんですが、大人の事情があるんでしょうねえ。
現時点では、公開されている殆どのスクリプトが動作しない模様です。
しかもPCではWebブラウザ経由なので自由にアレンジができません。
こういう時は、iPhoneの”ショートカットキー”アプリを試すに限る、ということで、以下のスクリプトとオートメーションを作ってみました。
このショートカットのポイントは2つ。
ニュースを先日買った”HomePod mini” (“HomePod mini – ホワイトが我が家に届きました!とっても小さくてビックリ!!“)を再生用のスピーカーに設定。
そして、ニュースを聴き始めて10分したら再生を一時停止することです。
作成したショートカットを、毎日7時に実行するオートメーションを作って完了。
これで当分の間はOKと思い、翌朝を楽しみにしていたのですが、実際にオートメーションが実行すると、指定したアプリは開くものの、自動的に再生を開始してくれません。App Storeにあるラジオアプリをいろいろ試してみましたが、いずれも自動再生機能はないみたいです。もしかすと、アップルのガイドラインで自動再生はNGなのかもしれませんね。それと、待機のスクリプトも想定通り実行してくれませんでした。
というわけで、次に試してみたのは、アップル純正アプリの”Podcast”です。
Podcastの番組なので、過去のニュースの定時毎のエピソードを購読することが可能です。
経験値をもとに、Podcastのエピソードを再生するショートカットと再生を一時停止するショートカットを作成し、時間をずらして実行するようにしました。
こちらが、Podcastのエピソードを再生するショートカット。
ちなみに、聴きたいエピソードの番組は、”Podcast”アプリのライブラリに登録しておく必要があります。それと、エピソードの登録には一定のタイムラグがあるようなので、7時のニュースであれば、30分ぐらいずらして再生すると良さそうです。
このようなショートカットを作っておけば、”Podcast”は、起動と同時に指定した番組の最新エピソードを自動的に再生開始してくれます。
こちらが、再生を一時停止するショートカットです。
再生先として指定した”HomePod mini”がいつの間にか解除されてしまう不具合? (“HomePod miniがプロアクティブに情報を伝えるスマートスピーカーにする方法を見つけました!“)は、”Podcast”に関しては再現性はなく、ちゃんと”HomePod mini”で再生してくれます。もしかすと、音楽系メディアについては、再生先を指定した”HomePod mini”が常に有効になるのかもしれませんね。
加えて、ラジオを”HomePod mini”で再生した直後であれば、別のオートメーションでも”HomePod mini”で再生できることを確認しました。
余談ですが、”Podcast”アプリを利用することで、新しいエピソードの公開を通知サービスでキャッチアップできるようになりました。
これで、毎朝ニュースを聴くアクションを自動化できました。ただ、”Podcast”アプリを利用する場合、常に最新のエピソードだけを確実に再生できるわけではないので、自動再生はできても昨日のニュースだったりする時もあって、なかなかジャストミートしません。
そこで、Raspberry Piでストリーミングの”Radiko“、つまり番組のURLを使って再生する方法を試してみました。
詳しい内容は、「こちら」のサイトをご覧下さい。
基本的な仕組みは、”Streamlink“というコマンドユーティリティを使い、指定したURLからのストリーミング放送を指定したプレイヤーアプリで再生する、といった感じだと思います。
“Streamlink”をインストールした後、
$ pip3 install –upgrade –user streamlink
Raspberry Piに再生用のスクリプトを保存します。POOHの場合は、”ffplay“でストリーミングを再生するようスクリプトを組んでみました。
加えて、ニュースは10分間だけ聴きたいので、”-t ’00:10:00″というオプションを追加しておきました。
chmod +x /home/pi/play-radiko.py
#!/bin/sh
~/.local/bin/streamlink -p ‘ffplay -nodisp -t ’00:10:00” https://radiko.jp/#!/live/JOAK-FM best
再生できることを確認します。
/home/pi/play-radiko.py
macOS側で、”Autometor“のスクリプトを作り実行可能なアプリケーションタイプでファイルを保存します。ちなみに、macOSからRaspberry PiにSSH通信したいので、”paramiko“をmacOSにインストールしました。
このスクリプトをカレンダーアプリで毎朝7時に起動すれば、Raspberry Piでニュースを再生できるようになります。
基本は、この仕組みで良いと思っているのですが、2つばかり課題があります。
一つ目は、”ffplay”のオプション設定で、ストリーミングを再生したい時間を指定できるんですが、”Streamlink”自体を終了させる仕組みが分からないこと。(Terminalから実行すればCtrl+Cで終了できることは分かっているんですが…)
二つ目は、ストリーミングを直接再生するので、時々、再生が途切れます。この現象は、ラズパイの性能が影響しているのか、ネットワークの安定性が影響しているのか分かっていません。
ま、課題はあるものの、取り敢えず、こちらのソリューションで当面の間はニュースを聴くようにしようと思います。
ホームページ “THE POOH FILES”にも是非お立ち寄り下さい。
“Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。