LINEのメッセージをGoogleHomeで読み上げる RaspberryPiセットアップ編

GoogleHomeを買いました。
豆知識を教えてくれたり、ピカチュウと話せたりと、純粋に楽しい！
さらに、IFTTTを使えばGoogleHome→Lineと連携させてしゃべった内容をLineに送ることもできます。

でも、IFTTTではLine→GoogleHomeのように他のサービスをトリガーにしてGoogleHomeをしゃべらせることはどうやらできないようです。急にしゃべりはじめると怖いから？

でも、自分では気づかないことをしゃべって教えて欲しい！


## Raspberry Piとgoogle-home-notifierでしゃべらせる

調べてみたところ、Raspberry PiとNode.jsのライブラリを使う方法がありました。
[GoogleHomeスピーカーに外部からプッシュして自発的に話してもらいます](https://qiita.com/azipinsyan/items/db4606aaa51426ac8dac)
[LINEに送信したメッセージを、Google Homeで読み上げ、家族に通知]
(https://qiita.com/daaaaaasuke/items/5e95983166667094f42f)

これだ！と思ったもののそもそもRaspberry Piを触ったこともないのでそのセットアップからやってみます。


# １. Raspberry Pi3を購入する
Amazonでこちらを購入
何がよいのかわからなかったので、適当にいろいろ入ってそうなセットにしましたhttps://www.amazon.co.jp/dp/B01MR4SQV5/ref=psdc_2151902051_t1_B076X2H479

- Raspberry Pi3 Model B
- Raspbianプリインストールmicro SDカードが付属
- 電源ON,OFFができる電源ケーブルが付属
- その他電源ケーブル、LANケーブル、HDMIケーブル等が付属






# ２. Raspberry Pi3の起動とPCからコマンド操作
PCはMacBook Air OSX Yosemite(10.10.5) です。

ラズパイが到着してから気づいたのですが、ラズパイはマウスとキーボードを有線接続しないと初期設定できないらしい。残念ながらちょうどいいのが手元にない、わざわざ買うのももったいない。


調べてみたところ、Macからssh接続してコマンド操作することができるらしい。
まずラズパイのSSH設定を有効にする必要があるとのこと。
[raspberry pi 3でSSH接続できない？](https://qiita.com/torch32171/items/c816acd5afa45fddabfe)

SDカードに直接sshディレクトリを作ればイケるとのことなので
RaspbianOSが入ったSDカードをMacにセットし、以下を実行する。
`touch /Volumes/boot/ssh`

ディレクトリができていることを確認(sshがあればOK)
`ls -l /Volumes/boot/`


その後、

- SDカードをMacから抜きラズパイ本体にセット
- 付属のLANケーブルでラズパイとルーターを接続
- 付属のHDMIケーブルでラズパイとモニターを接続
- スイッチがOFFになっていることを確認して電源ケーブルをラズパイにつなぐ
- 電源ケーブルのスイッチをON
 - モニターでラズパイが立ち上がることを確認
- macのターミナルを立ち上げssh接続コマンドを実行
 - `ssh -X pi@raspberrypi.local`
 - パスワードを入力する（デフォルトは`raspberry`)
 - ターミナルに「pi@raspberrypi:~ $」が表示されたらssh接続OK

ちゃんと起動した！（ただしキーボードもマウスもないので画面上は操作できない）


# ３. Raspberry Pi3の初期設定と画面操作

ssh接続したターミナルで初期設定します。
初期パスワードは全てのラズパイで共通なので早めに変更する。
VNCを設定すると画面操作がPCからできるらしい。
VNCは以下を参考にRealVNCにしてみました。
http://izmiz.hateblo.jp/entry/2017/09/22/230146
https://www.8yazaki.jp/raspi/14_realvncserver_install/


- 最新化（30分くらいかかる）
 - `sudo apt-get update`
 - `sudo apt-get upgrade`
- パスワード変更
 - 設定画面を表示　`sudo raspi-config`
 - メニューの「1 Change User Password」を選択してEnter
 - 画面がターミナルにもどる。指示の通り新しいパスワードを2回入力する
 - 「passwd: password updated successfully」と表示されたらOK
- VNC設定（ラズパイ側）
 - RealVNC をインストール `sudo apt-get install realvnc-vnc-server`
 - 設定画面を表示 `sudo raspi-config`
 - 「5 Interfacing Options」を選択してEnter
 - 「P3 VNC」を選択してEnter
 - 質問にYESを選択してEnter
- VNC設定（Mac側）
 - [Real VNC](https://www.realvnc.com/en/connect/download/vnc/)からアプリをダウンロード
 - アプリを起動し、アドレスを入力する`raspberrypi.local:5900`
 - ユーザー名(pi)と先程設定したパスワードを入力する

VNC越しにラズパイの画面が見れました！
これで有線のマウスとキーボードをラズパイに繋がなくてもPCのマウスとキーボードで画面操作できます。

# ４. Node.jsをインストール
画面が見れるようになりましたが、コマンド操作が続きます。
次はNode.jsのインストールです。すでにNode.jsはインストール済みですが、v4.8.2なので相当古いです。そしてnpmは入っていません。Node.jsもあまり詳しくはありませんが、どうやらNode.jsとそのバージョンを管理するモジュールとをセットで導入するようです。


- https://nodejs.org/ja/ でLTSバージョンを確認する（作業時は8.11.1でした）
- 上で確認したLTSである8系をインストールできるように設定 `curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -`
- インストールする `sudo apt-get install -y nodejs`
 - `node -v` でLTSバージョンが表示されたらOK
 - `npm -v` で何らかのバージョンが表示されたらOK（作業時は5.6.0でした）

おそらくこのままでも動くのですが、今後Node.jsをバージョンアップしやすくするためにバージョン管理モジュール「n」を入れます。

- `sudo npm cache clean`
- `sudo npm install npm n -g`
- `sudo n lts`
 - `node -v` でLTSバージョンが表示されたらOK
 - `npm -v` で何らかのバージョンが表示されたらOK（作業時は5.6.0でした）

以下を参考にしました。
https://qiita.com/setouchi/items/437e4b62e4210871496f
https://qiita.com/seibe/items/36cef7df85fe2cefa3ea
https://github.com/tj/n

sudo n ltsでインストールしたNode.jsはこの手順の最初にインストールしたNode.jsとは別もののはずなのですが、この手順の最初にインストールしたnodeとnpmを削除するべきなのかがわからず...
詳しい方がいたら教えてください。

# ５. google-home-notifierをインストール

まだまだコマンド操作が続きます。
google-home-notifierのインストールにはgit cloneする方法と単純にnpmする方法があるみたいでしたが、簡単そうなnpm方式にしました。

- 必要なパッケージを追加 `sudo apt-get install git-core libnss-mdns libavahi-compat-libdnssd-dev`
 - 本当にインストールするか聞かれるのでYで進める
- ラズパイに任意のディレクトリを作り、作業ディレクトリとする。
- 作業ディレクトリ内でNode.jsの設定ファイルを作成する `npm init`
 - いろいろ聞かれるが適当にEnter連打でとりあえずOK
- 作業ディレクトリ内でgoogle-home-notifierをインストールする `npm install google-home-notifier`

これで初期設定が整ったはず...
以下を参考にしました。
https://qiita.com/azipinsyan/items/db4606aaa51426ac8dac
https://qiita.com/ktetsuo/items/8c9cd5714e231aa6ae09
[google-home-notifier](https://github.com/noelportugal/google-home-notifier)

※備忘
[google-home-notifier](https://github.com/noelportugal/google-home-notifier)にはラズパイなら以下のコマンドを実行しろ、と買いてありましたが、すでに前の手順でNode.jsの8系を入れているので今回は実行していません。

```
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install nodejs
```

# ６. 簡単に一言喋らせてみる

まず、Google HomeのIPを調べます。
https://qiita.com/shun91/items/aba1a554d829126945f6
https://www.gesource.jp/weblog/?p=8082

次に[Raspberry PiからGoogle Homeを喋らせる](https://qiita.com/ktetsuo/items/8c9cd5714e231aa6ae09)で使われていたソースをそのまんま作業ディレクトリにコピーしました。

```javascript:main.js
const googlehome = require('google-home-notifier');
const language = 'ja';
googlehome.device("Google-Home", language);
googlehome.ip("192.168.xxx.xxx"); // 上で調べたGoogle HomeのIPに書き換える
googlehome.notify('こんにちは。私はグーグルホームです。', function(res) {
  console.log(res);
});
```

作業ディレクトリ内で以下を実行

```bash:
$ node main.js
```


しゃべったーーー！日本語がぎこちない！笑

長くなったので一旦区切ります。
続きはこちら
[LINEのメッセージをGoogleHomeで読み上げる LINE連携編](https://qiita.com/f-nak/items/170cd8de6c0940d40ef5)