aoiro’s blog

勉強を兼ねて記事を書きます

グループ化したGoogle Homeで時間になったら音楽を鳴らす

背景

Google Homeの二台目を購入してホームグループを作ったまでは良かったのだが、時間をトリガーにして音楽を流させようとしても1台のGoogle Homeでしか再生できなかった。 ということでホームグループに対して再生させる方法を調べた。

結論

ネットで検索すると真っ先にヒットするnode.jsのライブラリ、google-home-notifierではホームグループでの再生はできないのでpychromecastを使おう! *1

github.com

詳細

きちんと確認したわけではないけれど、Google Homeで音楽を鳴らしたり喋らせたりするとき、Google Homeのポート8080にアクセスすることで再生が始まる。しかし、グループに投げたいときはグループの親となっている(?)Google Homeの8080ではない特定のポートに対してアクセスしなければならない。

google-home-notifierでは使っているcastv2-clientか何かのライブラリがアクセスするポートを8080に固定してしまっており、グループのポートを指定できないためグループにキャストできない。たぶん。

この記事はただの定期実行だし、リスナー常駐させるほどじゃないなという方向けです。 外部からIFTTT等で喋らせたい場合は、同様にpychromecastを使っているgoogle-home-notifier-pythonを使いましょう。

github.com


必要な環境

  • Google Home 複数(グループ化しておく)
  • raspberry piなどのおうちハックできる環境
  • 音楽ファイルをおいておくためのローカルサーバー (raspberry piでも良い)

pychromecast インストール

  1. raspberry piにpython3環境を作っておきます
  2. 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! らしい