はじめに
Google Homeは、音声アシスタント機能を搭載したスマートスピーカーです。天気やニュースの確認、音楽の再生、スマート家電の操作など、さまざまなことができます。
今回は、Google Homeで帰宅を検知して喋らせる方法をご紹介します。ラズパイとIFTTTを使えば、簡単に実現できます。
必要なもの
- ラズパイ
- マイクロSDカード
- USBケーブル
- 電源アダプタ
- Google Home(IPアドレスが固定されていること)
- MyDNSのアカウント
- IFTTTのアカウント
設定方法
- ラズパイにOSをインストールする
- GoogleHomeNotifireをインストールする
- Google Homeを接続する
- Google Homeに喋らせるサービスをラズパイに立てる
- 立てたサービスを外部から呼び出せるようにMyDNSに登録を行いグローバルIPを取得する
- ルータのポート設定を行い外部から立てたサービスを呼び出せるようにする
- IFTTTの位置情報を使い自宅付近に入ったらPOSTを行うよう設定する
1.ラズパイにOSをインストールする
ラズパイにOSをインストールするには、以下の手順が必要です。
- Raspberry Pi Imagerをダウンロードしてインストールする。
- microSDカードをSDカードリーダーに挿入し、Raspberry Pi Imagerを起動する。
- OSイメージを選択する。
- microSDカードを選択する。
- 書き込みボタンをクリックする。
- microSDカードをラズパイに挿入する。
- ラズパイを電源に接続する。
Raspberry Pi Imagerは、ラズパイのOSイメージをダウンロードして、microSDカードに書き込むためのソフトウェアです。Raspberry Pi Imagerをダウンロードしてインストールしたら、microSDカードをSDカードリーダーに挿入し、Raspberry Pi Imagerを起動します。
Raspberry Pi Imagerを起動したら、OSイメージを選択します。Raspberry Pi OSの最新バージョンがデフォルトで選択されています。
OSイメージを選択したら、microSDカードを選択します。ラズパイにインストールするOSイメージを書き込むmicroSDカードを選択します。
microSDカードを選択したら、書き込みボタンをクリックします。microSDカードにOSイメージが書き込まれます。
書き込みが完了したら、microSDカードをラズパイに挿入します。ラズパイの電源コネクタを挿入し、電源をオンにします。
ラズパイが起動したら、画面の指示に従って初期設定を行います。初期設定が完了すると、ラズパイが使えるようになります。
2.GoogleHomeNotifireをインストールする
GoogleHomeNotifierは、Node.jsで動作するソフトウェアで、Google Homeに喋らせることができます。ラズパイでNode.jsとnpmが動作する環境が構築された前提で、インストール方法と使い方を説明します。
インストール方法(リポジトリからインストール)
GitHubを参考にダウンロードします。以下のコマンドを実行して、リポジトリからインストールします。
git clone https://github.com/TomPenguin/google-home-notifier.git
cd google-home-notifier
git checkout origin/feature/support-new-google-tts-api
必要なライブラリのインストール
以下のコマンドを実行して、必要なライブラリをダウンロードします。
npm install
browser.jsの修正
node_modules/mdns/lib/browser.jsの該当箇所をエディタ等で以下のように修正します。
Browser.defaultResolverSequence = [
rst.DNSServiceResolve(), 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo({families:[4]})
, rst.makeAddressesUnique()
];
package.jsonの変更
google-tts-apiのバージョン指定を「0.0.6」にエディタ等で変更します。
"google-tts-api": "0.0.6",
3.GoogleHomeを接続する
自宅のLANにGoogleHomeを接続します。設定は説明書に従って下さい。
4.Google Homeに喋らせるサービスをラズパイに立てる
GoogleHomeNotifireをサービス化しラズパイが起動時に立ち上がるようにします。
参考
まず、サービスファイルを作成します。以下のコマンドを実行して、/etc/systemd/system/google-home-notifier.serviceというファイルを作成します。
sudo vi /etc/systemd/system/googlehomenotifier.service
[Unit]
Description=google-home-notifier Server
After=syslog.target network-online.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/node example.js # nodeコマンドの絶対パスを指定すること
Restart=on-failure
RestartSec=10
KillMode=process
WorkingDirectory=/home/pi/google-home-notifier #google-home-notifierをクローンしたディレクトリパス
[Install]
WantedBy=multi-user.target
作成したサービスファイルを登録します。以下のコマンドを実行します。
sudo systemctl daemon-reload
サービスを有効化します。以下のコマンドを実行します。
sudo systemctl enable google-home-notifier
サービスを起動します。以下のコマンドを実行します。
sudo systemctl start google-home-notifier
これで、GoogleHomeNotifierがサービスとして登録され、ラズパイが起動時に立ち上がるようになりました。
5.立てたサービスを外部から呼び出せるようにMyDNSに登録を行いグローバルIPを取得する
MyDNSに登録します。以下のURLにアクセスして、アカウントを作成します。
MyDNSの設定は以下を参考にしました。
アカウントを作成したら、ログインして、以下の手順でドメインを登録します。
- トップページの「ドメイン登録」をクリックします。
- ドメイン名を入力します。
- ドメインの種類を選択します。
- ドメインの登録期間を選択します。
- ドメインの管理画面のパスワードを設定します。
- 「ドメインを登録する」をクリックします。
MyDNSを利用するためにはIPアドレスが変わった際に更新されるように定期的に通知する必要があります。cronを使って、定期的にIPアドレスを更新します。
cronで定期的にコマンドを実行するには、crontabファイルを編集します。以下のコマンドを実行して、crontabファイルを編集します。
crontab -e
*/5 * * * * curl -X POST -d '{"ip": "192.168.1.100"}' https://mydns.jp/api/update/[ドメイン名]
以下の設定を行っています。
- */5 * * * * : 5分ごとに実行
- curl -X POST -d ‘{“ip”: “192.168.1.100”}’ https://mydns.jp/api/update/[ドメイン名] : IPアドレスを更新するコマンド
crontabファイルを保存します。以下のコマンドを実行します。
:wq
6.ルータのポート設定を行い外部から立てたサービスを呼び出せるようにする
ポートフォワーディングの設定を行い、外部からの呼び出しで自宅内LANのサービスを呼び出します。
ルータのポートフォワーディング機能を使用して、外部からの呼び出しを自宅内LANのサービスに転送します。
具体的な設定方法は、ルータのメーカーや機種によって異なります。以下に、一般的な設定手順をご紹介します。
- ルータの設定画面にアクセスします。
- ポートフォワーディングの設定画面を開きます。
- 転送先のIPアドレスとポート番号を設定します。
- 転送元のポート番号を設定します。
- 転送の有効化を設定します。
転送先のIPアドレスとポート番号
転送先のIPアドレスは、自宅内LANでサービスを実行しているコンピュータのIPアドレスです。ポート番号は、そのコンピュータで実行しているサービスのポート番号です。
転送元のポート番号
転送元のポート番号は、外部からの呼び出しに使用するポート番号です。任意のポート番号を設定できます。
転送の有効化
転送の有効化を設定することで、ポートフォワーディングが有効になります。
7.IFTTTの位置情報を使い自宅付近に入ったらPOSTを行うよう設定する
以下のようにIFTTTの位置情報を使い、自宅付近に入ったらPOSTを行うよう設定します。
IFTTTの設定
- IFTTTにログインします。
- 「My Applets」をクリックします。
- 「Create」をクリックします。
- 「If this」をクリックします。
- 「Location」を選択します。
- 「Enter a location」をクリックします。
- 自宅の位置を入力します。
- 「Create」をクリックします。
- 「Then that」をクリックします。
- 「Make a web request」を選択します。
- 「URL」にMyDNSで取得したURLを入力します。
- 「Method」に「POST」を選択します。
- 「ContentType」に「application/x-www-form-urlencoded」を選択します。
- 「Additional Headers」を指定しない場合は、空白のままにします。
- 「Body」に「text」パラメータに喋らせたい文言を指定します。
- 「Create」をクリックします。
動作確認
以下のコマンドで自宅のGoogleHomeが喋るか確認ができます。
curl -X POST -d "text=テスト" http://localhost:8091/google-home-notifier
以下のように実際に外出して、IFTTTで設定した位置情報の外に出ます。
外出
- 自宅から出発します。
- IFTTTで設定した位置情報の外に出ます。
動作確認
IFTTTで設定した位置情報の外に出たら、Google Homeが喋らないことを確認します。
帰宅
- 自宅に帰宅します。
- IFTTTで設定した位置情報の中に入ります。
動作確認
IFTTTで設定した位置情報の中に入ったら、Google Homeが喋ることを確認します。
まとめ
ラズパイとIFTTTを使えば、さまざまなことができます。
今回は、位置情報を取得して通知する方法を紹介しましたが、ほかにもさまざまなことができます。
たとえば、以下のようなものが考えられます。
- 特定の場所に行ったときに通知する
- 特定の時間になったときに通知する
- 特定の条件を満たしたときに通知する
ぜひ、自分だけの通知を設定してみてください。
以下に、いくつかのアイデアをご紹介します。
- 自宅に帰宅したら、ニュースを流す
- 仕事場に到着したら、スケジュールを確認する
- 寝室に入ったら、照明を暗くする
- 玄関に入ったら、ドアベルを鳴らす
自分だけの通知を設定することで、生活をより便利で快適なものにすることができます。