Raspberrypi3にgoogle-home-notifierインストールしようとしたらエラーが出まくった．

`npm install google-home-notifier`
でエラーが色々出たのでその時のメモ

スタートはこんな状態でした．

```
root@raspberrypi:~# npm init
bash: npm: コマンドが見つかりません
```
対処：

```
sudo apt-get update
sudo apt-get install -y nodejs npm
npm cahe clean
npm install n -g
n stable
```
んで

```
root@raspberrypi:~# node -v
v9.6.1
root@raspberrypi:~# npm -v
1.4.21
```
なぜかnpmのversionが`1.4.21`のまま．何回`npm install n -g`やっても反映されず，というか最新版になっていることに気づかず時間費やしましたが，

`.bashrc`に以下を追記

```
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
```

で`source .bashrc`してやると反映されます．
ちなみにnpmのversionが`1.4.21`のままで`npm init`のわけがわからず`package.json`が生成されていない状態で
`npm install google-home-notifier`
とやってしまうと，

```
gyp WARN EACCES attempting to reinstall using temporary dev dir "/root/node_modules/mdns/.node-gyp"
gyp WARN EACCES user "f_t" does not have permission to access the dev dir "/root/node_modules/mdns/.node-gyp/8.9.4"
```
の無限ループが始まってRaspberrypi自体が落ちました．
ちゃんと反映できると

```
root@raspberrypi:~# npm -v
5.7.1
```
こうなる．

* `npm init`  
  色んなサイト見ると`package.json`作りたいから上のコマンド打てって書いてあるんですけど，打っても

```
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (googlehome) 
```
って出てくるだけでどうして良いかわかんないですよね．jsやったことないんで特に．`Press ^C`としか書いてないからひとまず抜ければ良いのかと思ってずっと`^C`ってやってたし．ここはとりあえず`enter`キー何回か押していくのが正解みたいです．お望みの`package.json`ファイルが出来上がります．でもエンター押し続けただけだと後々jsファイル起動した時に怒られるので，

```
{
  "name": "googlehome",
  "version": "1.0.0",
  "description": "google home test",
  "main": "main.js",
  "dependencies": {
    "google-home-notifier": "^1.2.0",
    "mdns": "^2.3.4"
  },
  "devDependencies": {},
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "xxx",
  "license": "MIT",
  "repository": {
    "type": "git"
  }
}
```
こんな感じで`description`と`repository`のところを追記しておきます．


* いよいよ`main.js`作成します．これは他のサイトにもよく書かれている感じで

```
const googlehome = require('google-home-notifier')
const language = 'ja';

googlehome.device('Google-Home', language);

googlehome.notify('こんにちは。私はグーグルホームです。', function(res) {
  console.log(res);
});
```
としておきます．
で`node main.js`と実行したら

```
module.js:540
    throw err;
    ^

Error: Cannot find module '../build/Release/dns_sd_bindings'
    at Function.Module._resolveFilename (module.js:538:15)
    at Function.Module._load (module.js:468:25)
    at Module.require (module.js:587:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/root/googlehome/node_modules/mdns/lib/dns_sd.js:32:22)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
```
とでた．これはとりあえず

```
npm install --unsafe-perm mdns  
npm rebuild --unsafe-perm
```
と打てば良いらしい．んで再度実行したところ

```
events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: getaddrinfo -3008
    at errnoException (/root/googlehome/node_modules/mdns/lib/resolver_sequence_tasks.js:199:11)
    at getaddrinfo_complete (/root/googlehome/node_modules/mdns/lib/resolver_sequence_tasks.js:112:10)
    at GetAddrInfoReqWrap.oncomplete (/root/googlehome/node_modules/mdns/lib/resolver_sequence_tasks.js:120:9)
```
とでた．これはさっきの`main.js`に

```
const googlehome = require('google-home-notifier')
const language = 'ja';

googlehome.device('Google-Home', language);
googlehome.ip("192.168.xx.xxx"); //ここにgoogle homeのip追記．

googlehome.notify('こんにちは。私はグーグルホームです。', function(res) {
  console.log(res);
});
```
と追記すればOK．
で`node main.js`したら`WARN`いくつか出るけどGoogleHomeが喋りだした．
でも若干口調がゆっくりで気持ち悪いわ．．．