LoginSignup
6
9

More than 5 years have passed since last update.

LINEからGoogle Homeを喋らせる

Last updated at Posted at 2018-09-17

LINEの送信メッセージをGoogle Homeに喋らせるようにします。家族に LINEでの帰宅連絡を知らせるのに便利です。初期セットアップ〜ライズパイの自動起動まで通しの手順をメモに残しておきます。

2018/9/24追記:
google-home-notifierが「Error: get key failed from google」で動作しなくなってしまっいました。解決された方がいたので、参考にさせていただきました。
google-home-notifierが「Error: get key failed from google」を吐いたので対策してみたを参考に
~/node_modules/google-tts-api/lib/key.js
を修正する必要があります。

設定方法の流れ

  1. google-home-notifierをインストール
  2. play_with_googlehomeをインストール
  3. ngrokでローカル環境を外部に公開
  4. LINEボットの作成
  5. ラズパイの自動起動設定

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

長くなったのでここに別掲。

play_with_googlehomeのインストール

LINEのWebhookを処理するためにplay_with_googlehomeを使用。

gitからダウンロード(qiitaタグから引っ張ってくる)

$ git clone --branch qiita https://github.com/DaaasukeMurata/play_with_googlehome.git

default.jsonをmyconfig.jsonにコピーする。

$ cd ~/play_with_googlehome/speak_message/config
$ cp default.json myconfig.json

server_ipをGoogle HomeデバイスのIPアドレスを指定する。Google HomeのIPアドレスはスマホのGoogle Homeアプリを使って調べるのが手っ取り早い。その他はデフォルトのままでとりあえずOK。

myconfig.json
{
    "server_port": "8080",
    "server_ip": "localhost",

    "googlehome_ip": "192.168.xxx.xxx",
    "googlehome_name": "device name of google home",

    "beginning_sentence": "メッセージが届きました。",
    "speakable_userid": ""
}

起動してみる

$ ~/play_with_googlehome/speak_message
$ node server_for_line.js

WARNINGがいつくが出るが、エラーが出なければOK。

ngrokでローカル環境を外部に公開

ラズパイはローカルネットワークに閉じているので、LINEからwebhookが飛ぶように、ngrokを使って外部に公開する。

公式サイトでサインアップ

アカウントなしでngrokを起動すると一定時間でURLが失効するようなので、アカウントを取得しておく。
https://dashboard.ngrok.com/

Linux (ARM)版をインストール

$ wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm.zip
$ unzip ngrok-stable-linux-arm.zip
$ sudo mv ngrok /usr/local/bin/
$ ngrok version
ngrok version 2.2.8

authtokenを設定

$ ./ngrok authtoken (自分のauthtoken)

ngrokを起動

$ ngrok http 8080
ngrok by @inconshreveable                                  (Ctrl+C to quit)

Session Status                online
Account                       hogehoge (Plan: Free)
Version                       2.2.8
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://xxxxxxxx.ngrok.io -> localhost:8080
Forwarding                    https://xxxxxxxx.ngrok.io -> localhost:8080

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00

これで外部からアクセス可能になる。しかも、これだけでhpptsでアクセスできるので激しく便利。

LINEボットの設定

LINE Developersでチャネル(Messaging API)を作成する。WebhookのURLにngrokのURLを指定する。

貼り付けた画像_2018_09_16_13_45.png

接続確認でテストメッセージが飛ぶので、ngrokのコンソールに200 OKが表示されて、Google Homeが喋るとひとまず成功。LINEアプリでボットを追加して、メッセージを投稿すると、Google Homeが読み上げるはず。あとは、チャットグループを作成して、ボットを招待すれば完成。

自動起動

最後にラズパイを放置してても動作するように自動起動するように設定しておく。

play_with_googlehomeを自動起動させる

参考:https://qiita.com/mochifuture/items/ed863857affc80d0189f

npm install -g forever

foreverの場所を確認

$ which forever
/home/pi/.nvm/versions/node/v8.12.0/bin/forever

起動書式

$ sudo -u [ユーザ名] [nodeのパス] [forever のパス] start -a -d [動かしたいスクリプトのパス]

(例)

/etc/rc.local
# 追加
sudo -u pi /home/pi/.nvm/versions/node/v8.12.0/bin/node /home/pi/.nvm/versions/node/v8.12.0/bin/forever start -a -d /suhome/pi/play_with_googlehome/speak_message/server_for_line.js

ラズパイを再起動する

$ sudo reboot

正常にサービスが起動しているか確認

$ forever list
info:    Forever processes running
data:        uid  command                                      script                                           forever pid id logfile  uptime
data:    [0] pUOq /home/pi/.nvm/versions/node/v8.12.0/bin/node /home/pi/play_with_googlehome/speak_message/server_for_line.js 674     763    /home/pi/.forever/pUOq.log 0:0:4:12.405

ngrokを自動起動させる

参考: http://asukiaaa.blogspot.com/2016/06/ipmvnoraspberry-pingrokurlssh.html

ngrokのymlファイルにトンネル情報を定義

~/.ngrok2/ngrok.yml
authtoken: (自分のauthtoken)
tunnels:
  http-default:
    proto: http
    addr: 8080
/etc/rc.local
# 追加
/usr/local/bin/ngrok start --all --config=/home/pi/.ngrok2/ngrok.yml --log=stdout >> /dev/null &

exit 0

ラズパイを再起動して、起動しているか確認。

pi@raspberrypi0:~$ ps aux | grep ngr
root       318  1.9  2.7 798044 12228 ?        Sl   14:36   0:09 /usr/local/bin/ngrok start --all --config=/home/pi/.ngrok2/ngrok.yml --log=stdout
pi        1021  0.0  0.4   3844  1868 pts/0    S+   14:44   0:00 grep ngr

毎回起動するたびに、ngrokのURLが変わってしまうので、ngrokのダッシュボードで確認する。
image.png

httpsのURLをLINE Developersで再設定すればOK。少々面倒なので、有料プランの場合はURLを固定することができる。

無線LANの省電力機能をオフ

/etc/rc.localにコマンドを追加

/etc/rc.local
iwconfig wlan0 power off

ラズパイを再起動して、状態を確認。

$ iw dev wlan0 get power_save
Power save: off

Power save: offと表示されたらOK。

さいごに

LINEのメッセージを音声で知らせることができるのは、思ったより実用性があります。
課題としては、ラズパイを再起動するとngrokの外部URLが変わってしまうので、その度に、LINEボットのwebhookのURLを書き換える必要があります。お金で解決する(ngrokに課金)するのが手っ取り早いですが、他にいい方法がないか模索中です。

参考にしたサイト

6
9
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
6
9