5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-09-03

ブログからの転載です

背景

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

結論

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

詳細

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

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

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


必要な環境

  • 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 Receiverが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! らしい

5
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?