Google Homeで帰宅を検知して喋らせる!ラズパイとIFTTTで実現する方法

Google Homeで帰宅を検知して喋らせる!ラズパイとIFTTTで実現する方法

2023年10月18日

はじめに

Google Homeは、音声アシスタント機能を搭載したスマートスピーカーです。天気やニュースの確認、音楽の再生、スマート家電の操作など、さまざまなことができます。

今回は、Google Homeで帰宅を検知して喋らせる方法をご紹介します。ラズパイとIFTTTを使えば、簡単に実現できます。

必要なもの

  • ラズパイ
  • マイクロSDカード
  • USBケーブル
  • 電源アダプタ
  • Google Home(IPアドレスが固定されていること)
  • MyDNSのアカウント
  • IFTTTのアカウント

設定方法

  1. ラズパイにOSをインストールする
  2. GoogleHomeNotifireをインストールする
  3. Google Homeを接続する
  4. Google Homeに喋らせるサービスをラズパイに立てる
  5. 立てたサービスを外部から呼び出せるようにMyDNSに登録を行いグローバルIPを取得する
  6. ルータのポート設定を行い外部から立てたサービスを呼び出せるようにする
  7. IFTTTの位置情報を使い自宅付近に入ったらPOSTを行うよう設定する

1.ラズパイにOSをインストールする

ラズパイにOSをインストールするには、以下の手順が必要です。

  1. Raspberry Pi Imagerをダウンロードしてインストールする。
  2. microSDカードをSDカードリーダーに挿入し、Raspberry Pi Imagerを起動する。
  3. OSイメージを選択する。
  4. microSDカードを選択する。
  5. 書き込みボタンをクリックする。
  6. microSDカードをラズパイに挿入する。
  7. ラズパイを電源に接続する。

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を参考にダウンロードします。以下のコマンドを実行して、リポジトリからインストールします。

Bash
git clone https://github.com/TomPenguin/google-home-notifier.git
cd google-home-notifier
git checkout origin/feature/support-new-google-tts-api

必要なライブラリのインストール

以下のコマンドを実行して、必要なライブラリをダウンロードします。

Bash
npm install

browser.jsの修正

node_modules/mdns/lib/browser.jsの該当箇所をエディタ等で以下のように修正します。

JavaScript
Browser.defaultResolverSequence = [
  rst.DNSServiceResolve(), 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo({families:[4]})
, rst.makeAddressesUnique()
];

package.jsonの変更

google-tts-apiのバージョン指定を「0.0.6」にエディタ等で変更します。

JSON
"google-tts-api": "0.0.6",

3.GoogleHomeを接続する

自宅のLANにGoogleHomeを接続します。設定は説明書に従って下さい。

4.Google Homeに喋らせるサービスをラズパイに立てる

GoogleHomeNotifireをサービス化しラズパイが起動時に立ち上がるようにします。

参考

Google Homeで時報を知らせる #Node.js – Qiita
Google Home を購入したので、何か遊べないかと思い時報を作ってみことにしました。Raspberry Piで1時間ごとににGoogle Homeへリクエストを送ることで実現します。必要な…
qiita.com

まず、サービスファイルを作成します。以下のコマンドを実行して、/etc/systemd/system/google-home-notifier.serviceというファイルを作成します。

Bash
sudo vi /etc/systemd/system/googlehomenotifier.service
ShellScript
[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

作成したサービスファイルを登録します。以下のコマンドを実行します。

Bash
sudo systemctl daemon-reload

サービスを有効化します。以下のコマンドを実行します。

Bash
sudo systemctl enable google-home-notifier

サービスを起動します。以下のコマンドを実行します。

Bash
sudo systemctl start google-home-notifier

これで、GoogleHomeNotifierがサービスとして登録され、ラズパイが起動時に立ち上がるようになりました。

5.立てたサービスを外部から呼び出せるようにMyDNSに登録を行いグローバルIPを取得する

MyDNSに登録します。以下のURLにアクセスして、アカウントを作成します。

Dynamic DNS (DDNS) for Home Server and VPS etc, Free!
Free Dynamic DNS (DDNS) by POP3,IMAP4,FTP,HTTP-BASIC for Home Server, Webcam, VPS. You can use many free sub domain, .jp, .net, .asia, etc.. DynDNS is not free
www.mydns.jp

MyDNSの設定は以下を参考にしました。

MyDNSの使い方とIPアドレスの自動通知方法【DDNS】 | Cooeil
DDNS(ダイナミックDNS)は変動するホスト側のIPアドレスとドメイン名を動的に結びつける機能です。DDNSを使えば動的IPアドレスで公開サーバーが構築できます。MyDNSの使い方とLinuxでのIPアドレス自動通知方法を解説します。
cooeil.com

アカウントを作成したら、ログインして、以下の手順でドメインを登録します。

  1. トップページの「ドメイン登録」をクリックします。
  2. ドメイン名を入力します。
  3. ドメインの種類を選択します。
  4. ドメインの登録期間を選択します。
  5. ドメインの管理画面のパスワードを設定します。
  6. 「ドメインを登録する」をクリックします。

MyDNSを利用するためにはIPアドレスが変わった際に更新されるように定期的に通知する必要があります。cronを使って、定期的にIPアドレスを更新します。

Raspberry PiでMyDNSへIPアドレスを自動通知する │ NEL Laboratory
nellab.net

cronで定期的にコマンドを実行するには、crontabファイルを編集します。以下のコマンドを実行して、crontabファイルを編集します。

Bash
crontab -e
ShellScript
*/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ファイルを保存します。以下のコマンドを実行します。

ShellScript
:wq

6.ルータのポート設定を行い外部から立てたサービスを呼び出せるようにする

ポートフォワーディングの設定を行い、外部からの呼び出しで自宅内LANのサービスを呼び出します。

ルータのポートフォワーディング機能を使用して、外部からの呼び出しを自宅内LANのサービスに転送します。

具体的な設定方法は、ルータのメーカーや機種によって異なります。以下に、一般的な設定手順をご紹介します。

  1. ルータの設定画面にアクセスします。
  2. ポートフォワーディングの設定画面を開きます。
  3. 転送先のIPアドレスとポート番号を設定します。
  4. 転送元のポート番号を設定します。
  5. 転送の有効化を設定します。

転送先のIPアドレスとポート番号

転送先のIPアドレスは、自宅内LANでサービスを実行しているコンピュータのIPアドレスです。ポート番号は、そのコンピュータで実行しているサービスのポート番号です。

転送元のポート番号

転送元のポート番号は、外部からの呼び出しに使用するポート番号です。任意のポート番号を設定できます。

転送の有効化

転送の有効化を設定することで、ポートフォワーディングが有効になります。

7.IFTTTの位置情報を使い自宅付近に入ったらPOSTを行うよう設定する

以下のようにIFTTTの位置情報を使い、自宅付近に入ったらPOSTを行うよう設定します。

IFTTTの設定

  1. IFTTTにログインします。
  2. 「My Applets」をクリックします。
  3. 「Create」をクリックします。
  4. 「If this」をクリックします。
  5. 「Location」を選択します。
  6. 「Enter a location」をクリックします。
  7. 自宅の位置を入力します。
  8. 「Create」をクリックします。
  9. 「Then that」をクリックします。
  10. 「Make a web request」を選択します。
  11. 「URL」にMyDNSで取得したURLを入力します。
  12. 「Method」に「POST」を選択します。
  13. 「ContentType」に「application/x-www-form-urlencoded」を選択します。
  14. 「Additional Headers」を指定しない場合は、空白のままにします。
  15. 「Body」に「text」パラメータに喋らせたい文言を指定します。
  16. 「Create」をクリックします。

動作確認

以下のコマンドで自宅のGoogleHomeが喋るか確認ができます。

Bash
curl -X POST -d "text=テスト" http://localhost:8091/google-home-notifier

以下のように実際に外出して、IFTTTで設定した位置情報の外に出ます。

外出

  1. 自宅から出発します。
  2. IFTTTで設定した位置情報の外に出ます。

動作確認

IFTTTで設定した位置情報の外に出たら、Google Homeが喋らないことを確認します。

帰宅

  1. 自宅に帰宅します。
  2. IFTTTで設定した位置情報の中に入ります。

動作確認

IFTTTで設定した位置情報の中に入ったら、Google Homeが喋ることを確認します。

まとめ

ラズパイとIFTTTを使えば、さまざまなことができます。

今回は、位置情報を取得して通知する方法を紹介しましたが、ほかにもさまざまなことができます。

たとえば、以下のようなものが考えられます。

  • 特定の場所に行ったときに通知する
  • 特定の時間になったときに通知する
  • 特定の条件を満たしたときに通知する

ぜひ、自分だけの通知を設定してみてください。

以下に、いくつかのアイデアをご紹介します。

  • 自宅に帰宅したら、ニュースを流す
  • 仕事場に到着したら、スケジュールを確認する
  • 寝室に入ったら、照明を暗くする
  • 玄関に入ったら、ドアベルを鳴らす

自分だけの通知を設定することで、生活をより便利で快適なものにすることができます。

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker. This site generates revenue through affiliate
Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock