スマートスピーカー

GoogleHome+Raspberry Pi+イプシムで外部から喋らせる【初心者向けに解説】

GoogleHome+Raspberry Pi+イプシムで外部から喋らせる【初心者向けに解説】

 

GoogleHomeって基本受け身ですよね。ユーザーから話しかけられるのをずっと待っているという。

そんなGoogleHomeを自発的に喋らせることができたら使い道が広がるのでは?

なんてことを考えて実現方法をググっていると、どうやらRaspberry Pi(以降、ラズパイ)をサーバにして、google-home-notifierというものを使えばプッシュ発話することができるらしいので、試してみました。

 

参考にさせていただいたのは以下の3つの記事です。

Google Homeにプッシュ発話をさせる、Raspberry Pi 3へのgoogle-home-notifierの最新導入手順

GoogleHomeスピーカーに外部からプッシュして自発的に話してもらいます

Raspberry Pi 3 Model B+の初回セットアップ(購入から起動まで)

 

先人たちの知恵と経験が詰まった上記の記事を見ながらやればできるんですが、ラズパイ初心者の私にはお作法というか、どうすればいいかわからず詰まった点がいくつかあったので、私と同じくラズパイ初心者(+node.jsに慣れてない人)に向けて、苦戦した点とどうやって解決したかを含めて一から書いていきたいと思います。

 

まる太
まる太
ラズパイ自体触ったことがないよ!という方の手助けになるよう書いていきますので、この手順通りにやれば作れるようになる!・・・はずです。

 

最終目標物は、このような感じです。(クリックで拡大します)

googlehomeにプッシュ発話できるようにする

 

ざっくり以下のような流れで進めていきます。

  1. ラズパイを用意する
  2. ラズパイを起動してgoogle-home-notifierとか色々準備する
  3. 喋らせたい内容をhttpでリクエストできるようにする
  4. 外部からアクセスできるようポート開放する

 

Step1:Raspberry Pi(ラズパイ)を準備する

まずはラズパイが必要です。

私は先人の記事の通りRaspberry Pi3 model Bを準備しましたが、これと同じかこれより新しいモデルがよいと思います。

Raspberry Piは最新版のRaspberry Pi3 model B+、OSはRaspbianを利用します。ラズパイ3は本体にWi-Fiモジュールが内蔵していて、別途USBのWi-Fiドングルなどを刺さなくてよいのが嬉しいです。

引用元:Google Homeにプッシュ発話をさせる、Raspberry Pi 3へのgoogle-home-notifierの最新導入手順

 

そして、ラズパイだけではなくマイクロSDカードや電源ケーブル、マウス、キーボード、HDMI接続に対応したモニターも必要です。

まる太
まる太
ラズパイってOS(Raspbian)はSDカードに入れるんだそうです。

そしてこのOSのインストールが地味に面倒なので、以下のようなセット商品を買うと、最初からSDカードにOSがプリインストールされているので手間いらずでオススメです。

まる太
まる太
私はこのようなセット品の存在を知らず、すべて単体で買ったので、ちょっと面倒でした。

ラズパイを動かすのに必要なものは全部で以下です。

  • ラズパイ本体
  • 電源ケーブル
  • HDMIケーブル
  • HDMI対応モニター(無い人はテレビで代用可)
  • MicroSDHCカード(16GB以上推奨)
  • MicroSDHCカードリーダー
  • USBマウス、キーボード
  • LANケーブル(※Wifi使うなら不要)
  • ラズパイ本体を入れるケース(※これは任意)

こんな感じで接続します。

ラズパイ構成

ラズパイには電源スイッチが無いので、電源ケーブルを差せば自動で電源が入ります。

しかし、OSが無いと画面が表示されないので、まずやることは、SDカードへのOS(Raspbian)のインストールです。

まる太
まる太
私は最初にここでつまづきました。とりあえず電源の赤ランプが点灯しているので、何かしらの画面が付くだろうと思っていたのですが、付かなかったため少々テンパって色々ケーブルを差し直したりして時間をロスしてしまいました。

 

SDカードが空っぽだと、電源を入れても画面に何も表示されないのは仕様なので、心配することはなかったのです。冷静に次の手順を進めていきましょう。

MicroSDHCが読み書きできるカードリーダを使って、パソコン経由でOS(Raspbian)をSDカードにインストールします。

ここで先人の知恵を利用させていただきます。以下の記事にとても詳しくやり方が書かれていますので、この通りやればOKですよ。

Raspberry Pi 3 Model B+の初回セットアップ(購入から起動まで)

まる太
まる太
なお、上で紹介したOSがプリインストールされているセット品を購入された場合は本手順は不要です。

 

ラズパイの起動ができたら、次はnode.js/npm/google-home-notifierとかの設定をしていきます。

 

Step2:google-home-notifierの動作に必要な設定をしていく

ラズパイの中身の設定はここも先人の知恵の通り進めればOKです。以下記事の中ほどにある「パッケージマネージャーの最新化」から順にやっていきましょう。記事内の手順と全く同じでOKです。

Google Homeにプッシュ発話をさせる、Raspberry Pi 3へのgoogle-home-notifierの最新導入手順

パッケージマネージャーの最新化からずーーーーっと進めていって、最後のサンプルプッシュ発話実行までできましたでしょうか。ここのステップでは特に詰まる点は無かったと思います。


次は、ラズパイの外からhttpリクエストで任意のテキストをプッシュ発話できるようにします。

 

Step3:GoogleHomeに喋らせたい内容をhttpでリクエストできるようにする

ここからは、別の先人の記事を参考に進めていきます。

以下の記事の中ほどの「google-home-notifierの設定」から順にやっていきましょう。

GoogleHomeスピーカーに外部からプッシュして自発的に話してもらいます

なお、記事の通りにexample.jsをソース変更していくのですが、変更する前にまずオリジナルのexample.jsはバックアップ取っておきましょう。ファイルをコピーしてexample_old.jsなどに変名しておけばOKです。

バックアップが終わったら、ソースは基本的に全部コピペでOKですが、2点だけ補足します。

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 = ‘ribihome’;
var ip = ‘192.168.1.10’; // default IP //ここにIPを記載

引用元:GoogleHomeスピーカーに外部からプッシュして自発的に話してもらいます

 

ポートが8091になっているので、都合が悪い人は任意の値に変えておきましょう。あまりポートに詳しくない人は8091のままで大丈夫です。

そして、GoogleHomeのIPアドレスを記載する必要がありますので、調べて記載しましょう。調べ方は、GoogleHomeのアプリから調べることができます。

参考:Google Home IPアドレスの確認

こんな感じで表示されています。

IPアドレス

IPアドレスが変動したら動かなくなってしまうので、ルーターの設定でIPアドレスの固定化をしておきましょう。あとでまとめて解説します。

私の場合は192.168.179.8なので、以下のようなコードになります。

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.179.8'; // default IP      //ここにIPを記載

 

まる太
まる太
これ以降のコードは上の記事にある通りそのままです。

 

コードを編集し終えましたら、ターミナルから実行してみましょう!

node example.js

 

ちょっと見づらいですが、以下のような待ち受け状態になったと思います。(スクショの撮り方が分からなかったのでカメラで撮ってます。あとで調べます、すみません。)

example.js

あとは別のPCやスマホからhttpリクエストをこのラズパイに投げればOKです。

 

まる太
まる太
ではその手順に移ります。

 

まずラズパイにhttpリクエストを投げるには、ラズパイのIPアドレスを知る必要があります。

ターミナルで「ip a」と打つと、ラズパイのIPアドレスが分かります。

ip a

これを見ると、192.168.179.4だということが分かりますね。なおこれも、ルーターの設定でIPアドレスの固定化をしておきましょう。あとでまとめて解説しますね。

では同一ネットワークの(同じWifiを使用している)パソコンやスマホから、Chromeなどのブラウザを起動してアドレスバーに以下を入力してみてください。

http://<IPアドレス>:<port番号>/google-home-notifier?text="<メッセージ>"


例)http://192.168.179.4:8091/google-home-notifier?text="こんにちは"

 

入力したらGoogleHomeが”こんにちは”と喋ってくれれば成功です!

ブラウザはこんな画面になると思います。

ブラウザ画面
まる太
まる太
上手く行きましたでしょうか?

 

もしここまでやったのにGoogleHomeが喋ってくれないという方は、

  • ソースコードの改変が手順通りか?
  • ソースコードに記載したポート・IPアドレスと、”http://<IPアドレス>:<port番号>”のポート・IPアドレスが一致しているか?
  • http://~のリクエストを実行するパソコン・スマホと、ラズパイ、GoogleHomeが同じネットワーク上にあるか?

の3点を確認してみてください!

 

では、この状態では同一のネットワークでしか動作しないので、最後にこれを外部のネットワークから(外出先から)でも利用できるようにしてみます。

まる太
まる太
外部からはアクセスできなくてもいいよーという方はここで終了です。お疲れさまでした!

 

Step4:ラズパイを外部からアクセスできるようポート開放する

先ほどの、

「http://192.168.179.4:8091/google-home-notifier?text=”こんにちは”」

この192.168.179.4というのは、ローカルIPアドレスなので、同じネットワークにいるパソコンやスマホからじゃないとアクセスできません。

今の状態は図にするとこのような感じです。

ローカルIP

これを外部からでもアクセスできるようにグローバルIPで指定できるようにします

図にすると、冒頭の図のようなイメージです。

外部のネットワークから

これを実現するためには、

  • グローバルIPアドレスを持っていること
  • ポート開放(ポートマッピング)すること

の2つが必要になります。

グローバルIPアドレスを持っているか確認

まずラズパイに接続しているネットワークがグローバルIPアドレスを持っていることが最初の条件です。

まる太
まる太
グローバルIPアドレスが無いと外部からラズパイにアクセスすることは難しいです。

 

基本的に、フレッツ光とかのファミリータイプで回線を引いている家であればグローバルIPが払い出されているのですが、アパートやマンションにお住まいだと共同回線を使用するマンションタイプになっている場合が多いので、プライベートIPが払い出されている可能性があります。

あとは、固定回線を引いていないソフトバンクAirなどの固定回線無しのサービスを使用している場合もグローバルIPではなくプライベートIPの可能性が高いです。

まずはご自分の家のネットワークがグローバルIPなのかどうかを確認してみてください。

確認方法は、「回線名+グローバルIP」とかでググると出てくると思います。

※もし分からなければ、次の手順にそのまま進んでみてください。もし次の手順が設定できない、または設定したのに動かないという場合はプライベートIPである可能性が高いです。

 

もし家のネットワークがプライベートIPだった場合は、グローバルIPが払い出される格安SIMを使うという手もあります。OCNモバイルoneやイプシムはグローバルIPが払い出されるSIMなので、これを使ってスマホからテザリングするという方法ですね。

android
スマホのテザリングでポート開放(ポートマッピング)する方法【port forwarder】Androidスマホのテザリングでポート開放(ポートマッピング)する方法について記載しています。port forwarderというアプリを使えばすぐできますので試してみてください。...
まる太
まる太
私はイプシムを契約していますので、イプシムのSIMを使うことにしました。
イプシムの固定IPが使えるSIMを使ってみた【速度レビュー】
イプシムの固定IPが使えるSIMを使ってみた【速度レビュー】イプシムの固定IPが使えるSIMを使ってみたので、その価格や速度などを紹介します。固定IPの選択肢としてイプシムはとてもオススメできますので是非ご覧ください。...

 

ポート開放(ポートマッピング)する

外部からラズパイにアクセスするためにはルーターのポート開放が必要です。

ポート開放って何?という方は以下のページが参考になります。

ポート開放とは? 基本的なやり方と確認方法 | UX MILK

ポート開放の手順は以下のページが参考になります。

ポート開放の方法と具体例:いおりのブロマガ – ブロマガ

ルーターやパソコン(OS)が外部からの通信をブロックしてしまうので、ブロックしないようにルーターやOSの設定をしていきましょう。

ただし今回は、使用するポートをデフォルトの8091に指定された方は、ラズパイ側の設定を何も変更しなくてもルーターの設定だけでOKのはずです。

ルーターのポート開放の方法は各種ルーターのマニュアルを見て各自行っていただくことになりますので、まずは「ルーター名+ポート開放」や「ルーター名+マニュアル」などでググってみてください。

 

今回は、私が使用している「Aterm MR05NL」のルーターの設定例を記載していきます。基本的にはどのルーターでも画面が違うだけで手順は似たようなものになると思います。

まるはルーターの管理画面にログインします。Atermの場合はブラウザでhttp://aterm.me/または”192.168.179.1″と入力すると、ログイン画面が表示されてログインできます。

Atermログイン画面

次に、ポート開放の設定を開いて設定します。

Atermポート開放設定画面

そして、ラズパイとGoogleHomeのIPアドレスが変更されないように、IPアドレスの固定化を行います。

Aterm設定画面2

Macアドレスの確認方法ですが、GoogleHomeのMacアドレスはGoogleHomeアプリで確認します。GoogleHomeアプリからGoogleHomeのIPアドレスを調べた際に、同じ場所にMacアドレスも表示されていましたね。

そしてラズパイのMacアドレスは「ip a」コマンドで確認します。ラズパイのIPアドレスを調べた時と同じように、Macアドレスも「ip a」コマンドで表示されています。

 

以上でポート開放の手順は完了です。

最後に、グローバルIPアドレスを確認します。以下のページにアクセスすると確認できます。

アクセス情報【使用中のIPアドレス確認】

赤で囲った部分にグローバルIPアドレスが表示されていますので、メモっておきましょう。

グローバルIPアドレス

 

まる太
まる太
以上ですべての準備が完了しました。お疲れさまでした。

 

さて、それでは実際にやってみましょう。

ラズパイとは別のネットワークのパソコンやスマホのブラウザから

「http://<グローバルIPアドレス>:8091/google-home-notifier?text=”こんにちは”」

を打ってみましょう。

グローバルIPアドレスには今調べたアドレスをそのまま入力します。

まる太
まる太
別のネットワークが必要なので、スマホの4Gの環境からやってみるのが手軽かもしれませんね。

 

ブラウザ画外部アクセス

できましたでしょうか!?

もしできない場合は、

  • ルーターのポート開放設定が正しくない
  • そもそもグローバルIPアドレスではない

可能性がありますので、「ルーター名+ポート開放+できない」とかで調べたり、お使いの回線がグローバルIPアドレスなのかどうかもう一度調べたりしてみてください。

 

まとめ

以上の手順で、目的の「GoogleHomeを自発的に喋らせる」ことができました。そしてポート開放することで外部ネットワークからでも喋らせることに成功しました。

まる太
まる太
ここまで長い道のりでしたが、GoogleHomeの使い道が広がりそうです。

 

私は、Widnowsのタスクスケジューラにhttpリクエストをタスク登録しておいて、ある時間になったらお知らせを自動で喋らせる運用をしています。

みなさんもぜひ、ラズパイを使ってプッシュ発話を実現して色々遊んでみてくださいね。

RELATED POST