2017/10/28

[nodejs]google-home-notifierのインストール

ミーハーなことに、Google Home miniを買ってしまった。
職場にGoogle Homeを買ったのだけど、案外ものわかりがいいやつだということに気付いてしまったのだ。
それだけだったらまだしも、IFTTTとかでしゃべらせることができるらしい。
ならば、買わねばならぬのぅ。


Google Home、IFTTT、Googleスプレッドシートを使って独自音声コマンドでログをとる(ついでにNode.jsやngrokやらも使ってLINEやGoogle Homeに通知する) - Qiita
こちらを読むと、google-home-notifierというやつをインストールするらしい。

https://github.com/noelportugal/google-home-notifier

npmでインストールするらしい。
確か、node.jsとかの関係だよな。

$ npm install google-home-notifier

いろいろ出た後、ERRになった。。。
installだからsudoがいりそうな気もしたのだが、そういうエラーではないように見える。

sudo apt install npm node.js libnss-mdns libavahi-compat-libdnssd-dev

よくわからんが、そのページに書いてあって関係ありそうなものをインストールしたら、google-home-notifierもインストール出来たようだ。
WARNがいくつも出ているが、大丈夫よ・・・ね?


書いてあるサンプルをファイルに保存して実行してみたが、requireが見つからんと言われる。
心配になって、もう一度npm installしてみると、エラーではないもののnodeのバージョンが期待よりも古いといわれているようだ。
aptでは最新なのだけど、世の中の最新は別のところにあるらしい。

Ubuntuに最新のNode.jsを難なくインストールする - Qiita

aptではnodeはv4.2.6が最新だったのだけど、これをやるとv8.8.1になった。
全然違うやん・・・。


フォルダの中のファイルを消して、もう一度npm installしなおした。

npm WARN saveError ENOENT: no such file or directory, open '/home/xxx/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/home/xxx/package.json'

なんかダメそうだ・・・。


npm installはあきらめて、こっちの方法でやることにした。
https://github.com/noelportugal/google-home-notifier#listener

手順の最後でexample.jsを動かすようだが、こちらを見ながらやっても改造がうまくいかん。。。
GoogleHomeスピーカーに外部からプッシュして自発的に話してもらいます - Qiita

もしかしたらRaspberry Pi用の説明なのかもしれんと思い、githubに書いてあった方のサンプルを簡単に改造した。

var googlehome = require('./google-home-notifier');

googlehome.device('地下室');
googlehome.accent('ja');
googlehome.notify('冷たいビールが飲みたい', function(res) {
  console.log(res);
});

このファイルをtest.jsという名前で保存し、

~/xxx/google-home-notifier$ node test.js
*** WARNING *** The program 'node' uses the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=node>
*** WARNING *** The program 'node' called 'DNSServiceRegister()' which is not supported (or only supported partially) in the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/avahi-compat?s=libdns_sd&e=node&f=DNSServiceRegister>
Device notified

こんなログは出るものの、ちゃんと日本語でしゃべってくれた。
あ、「地下室」というのは、うちにあるGoogle Home miniにつけた名前だ。
別に地下室じゃないんだけどね。。。


このサンプルは、google-home-notifier.jsを書き換えないと動かないやつになっていた。

var googlehome = require('./google-home-notifier');

googlehome.device('地下室', 'ja');
googlehome.ip('xx.xx.xx.xx');
googlehome.notify('朝ごはんは食べましたか?', function(res) {
  console.log(res);
});

デバイス名で検索出来ていたのかと思ったが、IPアドレスを指定している方が効いているみたいだ。
あるいは、デバイス名が英語だったらいけるのかもしれんと思ったが、ダメだった(abortする)。

device()で'ja'にしないと、notify()で日本語をしゃべってくれない。
つまり、しゃべってほしい言語はここで指定することになるようだ。

1 件のコメント:

  1. 記事を参考に喋らせることができました。ありがとうございます。

    なお、記事の内容プラス「google-home-notifier.js」内の
    langを'en'から全て'ja'に書き換えたら動いたので
    参考までにコメントしておきます。

    返信削除

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。