Google Homeに喋らせてみた

さいしょに

本記事はただの学習記録です。

環境

  • Ubuntu 18.04.1 LTS
  • node.js v10.14.1

失敗編

この記事の内容を実行してみたかっただけ

https://qiita.com/SatoTakumi/items/c9de7ff27e5b70508066

必要なライブラリ

sudo apt install libavahi-compat-libdnssd-dev

蛇足

もし、 apt install がエラーになった場合は、 /etc/apt/source.list が以下のようになっているか確認して下さい。
標準では、 main だけになっているはずです。

deb http://archive.ubuntu.com/ubuntu bionic main universe multiverse
deb http://archive.ubuntu.com/ubuntu bionic-security main universe multiverse
deb http://archive.ubuntu.com/ubuntu bionic-updates main universe multiverse

コードを実行してみると・・・ 動かない(その1)

Error: get key failed from google
APIの返り値が変わってしまった為に、google-tts-api ライブラリがエラーを吐いている模様。

原因は以下のQiitaに詳しく書いてありました。
https://qiita.com/ezmscrap/items/24b3a9a8548da0ab9ff5

google-tts-api の新しいバージョンでは対応済みのようなので、 package.json の以下の行を書き換えてバージョンアップさせます。

# 20行目付近
   "google-tts-api": "0.0.2",
             ↓
   "google-tts-api": "0.0.4",

コードを実行してみると・・・ 動かない(その2)

Webブラウザから、 http://<host>:8091/google-home-notifier?text=Hello+Google+Home
を実行してみると、(大量のWARNINGはとりあえず無視して)

Error: connect ECONNREFUSED 192.168.1.20:8009

これは割と単純で、Google HomeのIPアドレスが分かっていない時に起きる。
example.js の先頭に var ip = '192.168.1.20'; // default IP というところがあるので
それを書き換える。

なお、Google HomeのIPアドレスは、Google Homeアプリの設定画面の一番下に表示されている。
これを直せばとりあえず動くはず。

蛇足:
すぐ上にGoogle Homeのデバイス名が設定されているが、これは間違っていてもIPアドレスが正しければ動く。

(とりあえず初版)

IPアドレスが固定なのはさすがに酷い

対応その1

そもそも、READMEに書いてある通りの事をやっていなかった。
https://github.com/noelportugal/google-home-notifier#after-npm-install

・・・やっても効果はなく、しかもnpmで入れたものに対して修正かけるのは反則なのでは・・・

原理から考えてみる

Google Homeアプリは普通に自動的にGoogle Homeを発見できるので、何かのプロトコルで探索できるはず。
というか、普通に example.js が mDNS を呼んでいるのでこれで見つかるはず。

でも、先にググってみたら既にQiitaにお書きになってる人がいらっしゃいました。
https://qiita.com/tinoue@github/items/ecb8b6211bee686a75e8

要するに、example.js のdevicenameに書く値が・・・というよりもう探索の仕方が(今となっては)正しくない。
example.js のコードでは、現状実質IPアドレスベースで動かすしかない。

コード書いてみる

(今書いてます)

comments powered by Disqus