5
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ラズパイでgoogle-home-notifierのセットアップ方法

Last updated at Posted at 2018-09-17

ラズパイにgoogle-home-notifierをインストールしたときの自分メモです。
LINEからGoogle Homeを喋らせるための下準備)

2018/9/24追記:
google-home-notifierが「Error: get key failed from google」で動作しなくなってしまっいました。解決された方がいたので、参考にさせていただきました。
google-home-notifierが「Error: get key failed from google」を吐いたので対策してみた

事前作業

古いNode.jsをアンインストール

Raspbian
$ sudo apt-get autoremove nodejs

パッケージを最新化

Raspbian
$ sudo apt-get update
$ sudo apt-get upgrade

nvmのインストール

nvmをインストールするためのディレクトリ作成

Raspbian
$ sudo mkdir ~/.nvm
$ sudo chmod 777 ~/.nvm

gitからnvmを取得

Raspbian
$ git clone https://github.com/creationix/nvm.git ~/.nvm

nvmを使えるようにする

Raspbian
$ source ~/.nvm/nvm.sh
$ nvm --version

起動時に読み込むようにする

Raspbian
$ vi ~/.bash_profile
.bash_profile
if [[ -s ~/.nvm/nvm.sh ]];
 then source ~/.nvm/nvm.sh
fi

Node.js のインストール

nvmでインストールできるNode.jsのバージョンのリストを確認

Raspbian
$ nvm ls-remote

この中で、LTS(安定版)バージョンをインストール
2018-09-16時点でv8.12.0

Raspbian
$ nvm install v8.12.0

Node.jsがインストールされたかどうかバージョンを確認

Raspbian
$ node --version
v8.12.0

$ npm --version
6.4.1

google-home-notifierのインストール

ここを参考にgoogle-home-notifierをインストール。

Raspbian
$ sudo apt-get install libavahi-compat-libdnssd-dev
$ git clone https://github.com/noelportugal/google-home-notifier
$ cd google-home-notifier
$ npm install

わんさか警告が吐かられるが、エラーが出ていなければ、無視して先に進む。

example.jsを環境に合わせて修正する

  • ipをGoogle HomeのIPアドレスに変更する
    Google HomeのIPアドレスはスマホのGoogle Homeで調べることができる。
  • languageを'ja'に変更する(2箇所)
~/google-home-notifier/example.js
var express = require('express');
var googlehome = require('./google-home-notifier');
var ngrok = require('ngrok');
var bodyParser = require('body-parser');
var app = express();
const serverPort = 8091; // default port

var deviceName = 'Google Home';
var ip = '192.168.1.20'; // default IP ← Google HomeのIPアドレスに変更

ar urlencodedParser = bodyParser.urlencoded({ extended: false });

app.post('/google-home-notifier', urlencodedParser, function (req, res) {

  if (!req.body) return res.sendStatus(400)
  console.log(req.body);

  var text = req.body.text;

  if (req.query.ip) {
     ip = req.query.ip;
  }

  var language = 'pl'; // default language code ←jaに変更
  if (req.query.language) {
    language;
  }

  googlehome.ip(ip, language);
  googlehome.device(deviceName,language);

  if (text){
    try {
      if (text.startsWith('http')){
        var mp3_url = text;
        googlehome.play(mp3_url, function(notifyRes) {
          console.log(notifyRes);
          res.send(deviceName + ' will play sound from url: ' + mp3_url + '\n');
        });
      } else {
        googlehome.notify(text, function(notifyRes) {
          console.log(notifyRes);
          res.send(deviceName + ' will say: ' + text + '\n');
        });
      }
    } catch(err) {
      console.log(err);
      res.sendStatus(500);
      res.send(err);
    }
  }else{
    res.send('Please GET "text=Hello Google Home"');
  }
})

app.get('/google-home-notifier', function (req, res) {

  console.log(req.query);

  var text = req.query.text;

  if (req.query.ip) {
     ip = req.query.ip;
  }

  var language = 'pl'; // default language code  ← jaに変更
  if (req.query.language) {
    language;
  }

  googlehome.ip(ip, language);
  googlehome.device(deviceName,language);

  if (text) {
    try {
      if (text.startsWith('http')){
        var mp3_url = text;
        googlehome.play(mp3_url, function(notifyRes) {
          console.log(notifyRes);
          res.send(deviceName + ' will play sound from url: ' + mp3_url + '\n');
        });
      } else {
        googlehome.notify(text, function(notifyRes) {
          console.log(notifyRes);
          res.send(deviceName + ' will say: ' + text + '\n');
        });
      }
    } catch(err) {
      console.log(err);
      res.sendStatus(500);
      res.send(err);
    }
  }else{
    res.send('Please GET "text=Hello+Google+Home"');
  }
})

app.listen(serverPort, function () {
  ngrok.connect(serverPort, function (err, url) {
    console.log('Endpoints:');
    console.log('    http://' + ip + ':' + serverPort + '/google-home-notifier');
    console.log('    ' + url + '/google-home-notifier');
    console.log('GET example:');
    console.log('curl -X GET ' + url + '/google-home-notifier?text=Hello+Google+Home');
        console.log('POST example:');
        console.log('curl -X POST -d "text=Hello Google Home" ' + url + '/google-home-notifier');
  });
})

google-home-notifierの起動

google-home-notifierを起動する。これで待ち受け状態になる。

Raspbian
$ node example.js

喋らせる

リモート側からPOSTする。

macOS
curl -X POST -d "text=日本語でこんにちは" http://pi@raspberrypi.local:8091/google-home-notifier

これでGoogle Homeが喋りだすはず。

参考にしたサイト

5
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?