グループ化したGoogle Homeで時間になったら音楽を鳴らす
背景
Google Homeの二台目を購入してホームグループを作ったまでは良かったのだが、時間をトリガーにして音楽を流させようとしても1台のGoogle Homeでしか再生できなかった。 ということでホームグループに対して再生させる方法を調べた。
結論
ネットで検索すると真っ先にヒットするnode.jsのライブラリ、google-home-notifierではホームグループでの再生はできないのでpychromecastを使おう! *1
詳細
きちんと確認したわけではないけれど、Google Homeで音楽を鳴らしたり喋らせたりするとき、Google Homeのポート8080にアクセスすることで再生が始まる。しかし、グループに投げたいときはグループの親となっている(?)Google Homeの8080ではない特定のポートに対してアクセスしなければならない。
google-home-notifierでは使っているcastv2-clientか何かのライブラリがアクセスするポートを8080に固定してしまっており、グループのポートを指定できないためグループにキャストできない。たぶん。
この記事はただの定期実行だし、リスナー常駐させるほどじゃないなという方向けです。 外部からIFTTT等で喋らせたい場合は、同様にpychromecastを使っているgoogle-home-notifier-pythonを使いましょう。
必要な環境
- Google Home 複数(グループ化しておく)
- raspberry piなどのおうちハックできる環境
- 音楽ファイルをおいておくためのローカルサーバー (raspberry piでも良い)
pychromecast インストール
- raspberry piにpython3環境を作っておきます
pychromecastをインストール
pip3 install pychromecast
音楽を鳴らすスクリプト
今回は曜日ごとに流す音楽を変えた
#### alarm.py #### #!/usr/bin/env python3 #coding: utf-8 import pychromecast as pcc import datetime as dt chromecasts = pcc.get_chromecasts() #print(chromecasts) #再生するGoogle ホームの名前;グループ名でも単体の名前でもOK chromecast_name = "ホームグループ" cast = next(cc for cc in chromecasts if cc.device.friendly_name == chromecast_name) weekday = dt.datetime.now().weekday() music_path = 'http://192.168.x.x/path_to_music_dir/'; if weekday == 0: # mon music_path += 'Mon.mp3' elif weekday == 1: # tue music_path += 'Tue.mp3' elif weekday == 2: # wed music_path += 'Wed.mp3' elif weekday == 3: # thu music_path += 'Thu.mp3' elif weekday == 4: # fri music_path += 'Fri.mp3' else: # sat, sun music_path += 'Sat_Sun.mp3' print(music_path) cast.wait() mc = cast.media_controller mc.play_media(music_path, 'audio/mp3') mc.block_until_active()
最後のmc.block_until_active()
を忘れるとDefault Media Receieverがactiveのときしか再生されなくなるので注意
cronに登録
今回は朝家を出る時間に流してほしいのでcronで定期実行の登録をする
$ chmod 755 alarm.py $ crontab -e > 0 7 * * * /home/pi/path_to_dir/alarm.py
完成!
ということでgoogle homeのグループで音楽を流させる方法でした。 今回は音楽でしたが喋らせることも同様にできます。 ただしnode.jsのgoogle-home-notifierと違ってpychormecastでは一度音声を保存しないといけません。
そんなに難しくないので、やりたい方は同様にpychromecastを使っているgoogle-home-notifier-pythonの実装を参考にすると良いでしょう。
*1:Google homes are just chromecasts! らしい