GoogleHome
google-home-notifier

google-home-notifierで"Error: get key failed from google"とエラーが出る問題の対処法

更新情報

2018/12/01
11月29日頃にまたGoogleTTSの仕様変更があり、喋らなくなってしまった。。対策を最下部に記載。

経緯

Raspberry PiからGoogle Homeを喋らせる などで、google-home-notifierでGoogle Homeを喋らせていたが、9月末ごろから

Error: get key failed from google
    at /home/pi/work/googlehome/node_modules/google-tts-api/lib/key.js:27:13
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)

などとエラーが出て喋らなくなってしまった。
軽く調べたところ google-home-notifierが「Error: get key failed from google」を吐いたので対策してみた などがひっかかったが、対策しないまま日が経ってしまった。

調査

上記記事にもある通り、GoogleのText-To-Speech(TTS)のAPIの仕様変更により、戻り値が変わり、エラーが出ている模様。
上記記事ではライブラリのコードを書き換えているが、
google-ttsのChangeLog を見たところ、Google TTSのNode.jsライブラリは修正されているので、その変更を取り込むことにした。

対処

google-home-notifierへのプルリクエスト が、2018-10-13時点でまだマージされていない。
対処法としては、google-tts-apiを0.0.3にバージョンアップすれば良いが、下記2通りの方法を思いついた。

対処1: google-home-notifierの書き換え

node_modules/google-home-notifier/package.jsonを google-home-notifierへのプルリクエスト の通りに修正を行う。

node_modules/google-home-notifier/package.json
  "dependencies": {
    "body-parser": "^1.15.2",
    "castv2-client": "^1.1.2",
    "express": "^4.14.0",
    "google-tts-api": "0.0.3", // ここを0.0.3に書き換える
    "mdns": "^2.3.3",
    "ngrok": "^2.2.4"
  },

その後、google-home-notifierに移動し、npm updateにてgoogle-tts-apiをアップデートする。

cd node_modules/google-home-notifier
npm update google-tts-api

これで、node_modules/google-tts-apiが0.0.3にアップデートされる。

google-home-notifierのpackage.jsonを変更せずにアップデートしたかったが、npm update google-tts-api@0.0.3などとやってもアップデートできなかったので、仕方なくgoogle-home-notifierの方を変更した。npmのしくみがいまいちわかっていない…。

対処2: google-home-notifierのインストール元変更

Use forked package · shiratsuchi/home-hack@86944c8
を参考に、フォークされたgoogle-home-notifierパッケージを再インストールする。

google-home-notifierを一旦アンインストール

npm uninstall google-home-notifier

フォークされたリポジトリから再インストール

$ npm install https://github.com/kei-s/google-home-notifier/tarball/update-google-tts-api

再インストールしたので、After npm install に記載のnode_modules/mdns/lib/browser.jsの修正を再度行わないといけないのに注意。

まとめ

上記どちらの方法でも、喋ってくれるようになった。
(なんか喋りが早くなったような…気のせいか?)

追記(2018/12/01)

11月29日頃にまたGoogleTTSの仕様変更があり、喋らなくなってしまった。。
ここに対処法があったので、実施したら治った。
https://github.com/zlargon/google-tts/issues/22
上記「対処1」で、0.0.3に変えるところを0.0.4に変えるだけ。

node_modules/google-home-notifier/package.json
  "dependencies": {
    "body-parser": "^1.15.2",
    "castv2-client": "^1.1.2",
    "express": "^4.14.0",
    "google-tts-api": "0.0.4", // ここを0.0.4に書き換える
    "mdns": "^2.3.3",
    "ngrok": "^2.2.4"
  },