🗣️

Google Homeに喋らせてみた

2021/08/10に公開

さいしょに

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

環境

  • 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 アドレスベースで動かすしかない。

コード書いてみる

https://github.com/yakumo-saki/google-home-notify-simple

Discussion