Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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"
  }
}

こんな感じでdescriptionrepositoryのところを追記しておきます.

  • いよいよ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が喋りだした.
でも若干口調がゆっくりで気持ち悪いわ...

f_t812
AI Machine Learning Deep Learning 自然言語処理 読書 電子回路 ウォーキング オーディオ
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away