PythonでGoogle Homeに任意の言葉を喋らせる方法です。(正確には音声ファイル(.mp3や.wavなど)をGoogle Homeに再生させる方法)。pychromecastというPythonモジュールを使えば簡単ですが、2020/7/20からバージョンが変わったらしく、IPアドレスでGoogle Homeに接続する方法が使えなくなっていたので最新の方法をご紹介します。
Google Homeの名前からIPアドレスを調べて接続(2020/7/20以前の方法)
pychromecast ver7.2.0以前では、まずLAN内に存在するcastデバイス(Google Homeなど)の一覧を取得し、その中から探したいデバイスの名前を検索してIPアドレスを取得し、IPアドレスでGoogle Homeに接続していました。参考までにその方法を載せておきます。
#!/usr/bin/python3 # coding:utf-8 import pychromecast import sys def main(): # LAN内に存在するcastデバイスの一覧を取得 chromecasts = pychromecast.get_chromecasts() # castデバイスが見つからない場合、終了 if len(chromecasts) == 0: print("Google Homeが見つかりませんω") sys.exit(1) # 名前が"Living room"のデバイスを探す googleHome = next( cc for cc in chromecasts if cc.device.friendly_name == "Living room") # ver7.2.0以降ではgoogleHome.hostが削除されているためエラー print("IP address: ", googleHome.host) # 喋らせる googleHome.wait() mc = googleHome.media_controller voice_url = "http://address/to/voice/file" # 他の音楽を再生中の場合 if mc.status.player_is_playing: print("Music is running. Stop music.") mc.stop() mc.block_until_active(timeout=30) # 音声を再生する print("Playing ", voice_url) mc.play_media(voice_url, "audio/mp3") if __name__ == "__main__": main()
IPアドレスが分かっている場合は、
googleHome = pychromecast.Chromecast("192.168.0.10")
とすればGoogle Homeに接続できますが、わからない場合やルーターを再起動する等でIPアドレスが変わった場合は上のコードを使う必要がありました。
デバイス名で接続(2020/7/20以降)
pychromecastの最新バージョンでは、IPアドレスを使わずにGoogle Homeに接続するように変更されていました。
def main(): # Chromecastデバイス名で検索する chromecasts, browser = pychromecast.get_listed_chromecasts(friendly_names=[ "Living room"]) # castデバイスが見つからない場合、終了 if len(chromecasts) == 0: print("Google Homeが見つかりません") sys.exit(1) # 最初に見つかったもの(同名のデバイスが複数あった場合) googleHome = chromecasts[0] ''' 以降、同じ '''
以前のバージョンだと、castデバイス一覧の取得に10秒ほどかかっていた印象ですが、この方法では1秒もかからずcastデバイスを見つけてきます。
接続高速化のために過去に接続したGoogle HomeのIPアドレスをファイルに保存していましたが、もう必要なさそうです。とりあえず時報やニュースを読み上げさせて遊んでいます。