LINEメッセージをGoogle Homeに喋らせる方法【Raspberry Pi3使用】

シェアする

表題の通り、例えば外にいる人がLINEで「これから帰ります」と打つと、家のGoogle Homeが読み上げてくれて、LINEに気づかなくても分かるようになるという生活ハックです。

逆の、Google HomeからLINEへの書き込みはIFTTTなどを使うと簡単にできるので以下を参照ください。

https://qiita.com/jyoshida/items/f74afe3e421795cdd63c

2019/7/5追記:ngrokのURLが一定時間で無効となってしまうやり方でした。認証トークンを指定する方法へ追記しています。

基本的な方針

以下の記事で紹介されている事がベースなのですが、ここで使っている「google-home-notifier」というライブラリが最近更新されておらずいくつか修正しなければなりませんでした。それらを都度やるのも面倒なので私のほうでこのリポジトリをforkし、「LINEからのメッセージを受信」「Raspberry Pi 3で動かす」向けに編集して、なるべく作業量が少なくなるようにしています。

参考URL:

動作要件

  • Raspberry Pi 3
    • 常に電源が入りっぱなしの常時稼働ができること
    • Gitが入っていること(なければ入れてください)
  • Google Home

ngrokの準備

LINEという外部のサービスから自宅のGoogle Homeへ通信するためには外部へ公開するURLを用意しなければなりません。そのサービスがngrokです。アカウント登録して認証トークンを取得します。

まず、以下のURLにアクセスするとログイン画面がでますので、アカウント登録をしてください。メールアドレスでの登録か、GithubやGoogleアカウントがあればその情報で楽に登録ができます。

続いて、ログインした状態で上記URLにアクセスすると以下の画面が出るので、そこから認証トークンをコピーしておいてください。

Google Home の準備

理想を言えば、自動でGoogleHomeのIPを見つけ出せればよいのですがそこまで対応できていないため、まずご自身でGoogle HomeのIPを事前に調べておいてください。後ほど指定します。

また、ルータの再起動などによってIPアドレスが変わると設定変更などをしなければならなくなってしまうので、ご自宅のルータの設定によって、GoogleHomeに”固定IP”を割り当てておくことをお勧めします。


例)ルータのIPアドレス情報

Raspberry Pi 3の準備

google-home-notifier の準備

まず「google-home-notifier」をダウンロードします。ここで指定しているのは本家版ではなく、私がフォークして修正したものです。以下のコマンドをRaspberry Piのターミナル上で実行してください。

git clone https://github.com/nisioka/google-home-notifier.git

そして、そのディレクトリに以下の設定ファイルがあるので、先に調べた以下の情報に書き換えてください。

  • “ngrok_auth_token”: ngrokの認証トークン
  • “googlehome_ip”: Google HomeのIPアドレス

google-home-notifier/config/default.json

node.jsのアップデート

ここからは少々ハマった部分です。。 Raspberry Piに元から入っているnode.jsが古く更新をしたいのですが、普通に”apt-get”コマンドなどでの更新だとこの後の手順が上手くいかなかったり特定のバージョンに対する依存関係があるようなので、少し面倒な手順をいくつか踏んでいます。

// 古いnode.jsを削除
sudo apt-get autoremove nodejs

// インストール場所の「/.nvm」ディレクトリを作成する。
mkdir .nvm
// nvmをダウンロード
git clone https://github.com/creationix/nvm.git .nvm/
// nvmを使えるようにする。
source .nvm/nvm.sh

// node.jsをnvmを用いてインストールする。
// もう少し新しいバージョンもありますが、バージョン8系でないと上手くいかないようです。
nvm install v8.16.0

// インストール前にnpmの初期設定をします。以下コマンドを打つとこちらの入力を求められますが、デフォルトのままで良いので、Enterを繰り返し押します。
npm init
// 新たにインストールしたnode.jsでgoogle-home-notifierをインストールします。
npm install google-home-notifier --no-audit

// LINEメッセージ受信サーバを起動します。
node google-home-notifier/server_for_line.js

上記コマンドを実行し、以下のようになれば成功です。「Endpoints:」の後にかかれているURLがLINEのメッセージを受領するWebHookというものになるのでこれを控えておきます。
Raspberry Pi側の作業はこれで終了で、この状態のまま放置することになります。(ディスプレイやキーボード、マウスなどは外してOKです。)

以下を参考にしました:

LINE developersの設定

LINE developersにご自身のLINEアカウントでログインし、「Messaging API(ボット)をはじめる」で、新規Channelを作成してください。

以下のように設定してください。名前などは任意で良いです。

  • Webhook送信:利用する
  • Webhook URL:上記Raspberry Piの最後で表示されたEndpointsのURL
    必ず「接続確認」を行い、「成功しました」となることを確認してください。上手くいけば「Hello World」と喋るはずです。
  • Botのグループトーク参加:利用する
  • 自動応答メッセージ:利用しない
  • 友だち追加時あいさつ:利用しない

ちなみに、「自動応答メッセージ」と「友だち追加時あいさつ」で利用するを選ぶと、以下のように通知がくるので、不要と判断しています。

LINEの設定

最後に、GoogleHomeに喋らせる専用のLINEグループを作成しましょう。
上記で作成したチャネルを含んだグループを作成してください。このグループに書き込んだメッセージをGoogleHomeが喋ってくれます。

以上で設定完了です。

Google Home グーグルホーム スマートスピーカーposted with カエレバ楽天市場Amazon

『LINEメッセージをGoogle Homeに喋らせる方法【Raspberry Pi3使用】』へのコメント

  1. 名前:yknchsk 投稿日:2019/10/06(日) 01:16:22 ID:5d5342733 返信

    初めまして。ラズパイ触り始めて1か月の初心者です。
    私もLineのグループトークへ投稿しても反応しません。
    状況を説明させていただきますと、
    ・私もぴょみゅさんと同様、EndpointがUndefinedで返ってきます。
    ・ただ、ngrok http 8091 コマンドにてURL自体は確認できたので
     その後のLine developperアカウント上のWebhookURLで登録し、
     接続自体は確認できました。(HelloWorldの発声も確認しています)
    ・サーバ上でも200で返しているので問題なさそうに見えますが、
     このBotを追加したグループトークにLineを送っても反応しません。

    もしよろしければ考えられるミスなどご指摘いただけますと幸いです。
    お忙しいところ恐れ入りますがよろしくお願いいたします。

    • 名前:nisioka 投稿日:2019/10/31(木) 08:46:52 ID:72f82df66 返信

      ご返信遅くなってしまいましたが、もしまだお困りでしたら、下記ご確認いただければと思います。

      >EndpointがUndefined
      まずこちらが出てしまう原因はngrok起動に失敗しているためです。
      実行した前後関係は分かりかねますが、「ngrok http 8091」を先に実行してしまうと”8091″ポートを専有されてしまうので、後から「node google-home-notifier/server_for_line.js」を実行しても”8091″ポートが既に使われているために失敗となってしまいます。対応として、「ngrok http 8091」の実行をやめるなどして”8091″ポートが使われないようにしてください(8091ポートが使われているかは「sudo lsof -i:8091」コマンドでも調べられます)。もしくは、default.jsonの”server_port”を”8091″以外の何か別の番号に変えてください。

      後は、ご確認済みとは思われるのですが、設定ファイル(default.json)の不備が考えられます。ngrokのサイトで表示されるtokenは長くて見切れていたりするのでそれが漏れていないか。また、細かいところですが、各文字列の前後を正しく「”」で囲まれていることや、各行が「,」で区切られていることを確認いただけますでしょうか(誤って消してしまうということはよくあります)。

  2. 名前:ぴょみゅ 投稿日:2019/08/09(金) 03:10:04 ID:9f5aa48f9 返信

    ググってたどり着いた初心者です。

    上記記載通り実行したところ、最後で
    Endpoints:
    undefined
    となってしまいました。
    もしお時間ありましたら原因と対策をご教示頂けますと幸いです。

    • 名前:nisioka 投稿日:2019/08/09(金) 07:55:36 ID:350b0459d 返信

      まず、考えられることとしましては、
      default.jsonのngrok_auth_tokenの項目に記載漏れや入力誤りなどがないでしょうか?
      ご確認をお願いします。

%d人のブロガーが「いいね」をつけました。