簡単!IFTTT連携でNefry BTのスイッチを押すとGoogle Homeが喋る仕組みを作る

NefryのボタンからGoogle Homeに話させる

こんばんは、ゆきです!

グーグルホームは今のところ、「OK、Google」以外の外部のトリガーをキーとして喋らせるには、一工夫必要です。

今回は割と簡単に実現できる、Nefry BT+IFTTT+Raspberry Pi(Node.js)+Google Homeという組み合わせで、トリガーをもとにGoogle Homeを喋らせる仕組みを紹介します。これを利用すると、室温をGoogle Homeが定期的に話す仕組み何かも簡単に実現できます。

今回実現する仕組み

今回は次のような感じで実装していきます。

NefryからGoogle Homeまでの経路
動作フロー
  1. Nefry BTでボタンを押すと、IFTTTのWebhookでトリガーを起動
  2. IFTTTのWebhookでRaspberry PiのGoogle Home Notifierをキック
  3. Google Home NotifierがGoogle Homeにコマンドを投げる
  4. Google Homeが喋る

必要なもの

今回必要なものは次の通り。

Google Home1個
Raspberry Pi 3 B1個
Nefry BT1個

Raspberry Piの設定が一番ややこしいですね。あとはとても簡単です。

Raspberry Piの準備

一番面倒なのが、このラズベリーパイの準備。でも安心してください。先人たちの判りやすい解説が沢山あります!

ここでは、OSのインストールから先に必要な設定について纏めています。OSのインストールについては「Raspberry Pi3のOS(Raspbian-NOOBS v2.4.0 )インストール方法」を参照ください。

Node.js・npm・Google Home Notifierの設定

いくつかサイトを回ってみたのですが、古い記事だとハマりポイントがあります。しかし、以下の記事通りに設定すれば問題なく進められると思います。

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

もし、「dns_sd.h: そのようなファイルやディレクトリはありません 」といったエラーにより、インストールに躓いたら、次の記事が参考になります。

Raspberry Pi に google-home-notifier を入れた時に躓いたメモ

Warningは無視しても大丈夫です。

IFTTT設定用の項目をメモしよう

無事にGoogle Home Notifierをインストールし、example.jsのサービスを起動すると、ngrok(インターネット上からローカルホストにアクセスする仕組み)のアドレスが付与されます(下記画像のオレンジ線部)。

IFTTTの設定で使用するため、メモしておきましょう。

IFTTTの設定に必要な項目
このURLはすでに無効になっています!

このNgrokのURLですが、サービスを起動するたびに変わるため、それに応じてIFTTT側の設定を修正する必要があります。ラズパイを起動しっ放しにしないといけない点だけ注意が必要です。

ちなみにngrokの有料サービス(60$/年)に加入すればアドレスを固定することができます。

IFTTTのアップレット(イベント)の作成

IFTTTの設定は次の通りとします。IFTTTの初期設定や基本的な使い方は次の記事を参照ください。

(1)IFTTTの「New Applet」を選択します。IFのサービスの選択では、「Webhooks」を選択。

IFFFTのIFをWebhooksにする

(2)「Receive a web request」を選択します。ここでは設定は特にないため、次にTHATのアクションを指定します。

IfのWebhooksサービスを選択する

(3)THATのアクションは同様にWebhooksを選択し、「Make a web request」を選択します。

ThatのWebhooksの設定

(4)設定項目は次の通り設定します。

Make a web requestの設定項目
URLhttps://xxxxxxxx.ngrok.io/google-home-notifier
※xxxxxxxxの所はご自身の環境に合わせて変更ください
MethodPOST
Content Typeapplication/x-www-form-urlencoded
Bodytext="{{Value1}}"ボタンを押しました
※Bodyで使用できるのはEvent Name, Value1~3, OccurredAtの3種類。
Value1~3がNefry BTから指定できる任意の値です。

以上で、IFTTTの設定は終わり。次にNefry BTのプログラムを作ります。

Nefry BT(Arduino IDE)のプログラム

今回ベースとするNefry BTのプログラムは「Nefry BTとIFTTTでスイッチを押したらLINEを送る仕組みを作ってみよう(Dotstudio)」で紹介されているもの。殆どそのままだけど!

#include 
#include 
String Event, SecretKey;

void setup() {
  //Webhookキーを取得
  Nefry.setConfHtmlStr("SecretKey",1); //Nefry DataStoreのタイトルを指定
  Nefry.setConfHtmlStr("Event",2);     //Nefry DataStoreのタイトルを指定
  SecretKey = Nefry.getStoreStr(1);   //Nefry DataStoreからデータを取得
  Event = Nefry.getStoreStr(2);       //Nefry DataStoreからデータを取得
  Nefry.enableSW();
}

void loop() {

  if (Nefry.readSW()) {               //SWを押した時
    bool sendData = IFTTT.send(Event, SecretKey,"今夜が山田");
    if (!sendData) {//IFTTTにデータを送信が成功したか失敗したかの判定
      Nefry.setLed(255, 0, 0);        //Errの時、赤色点灯
    }
    Nefry.ndelay(1000);               //送信後1秒間待つ
  }
}

下記の部分でIFTTTに値を送信しています。

bool sendData = IFTTT.send(Event, SecretKey,"今夜が山田");

Value2,3も使用したい場合は、"今夜が山田"の後に,Value2,Value3と付ければOK。Nefry BTでのIFTTT連携については次の記事の中でも行っています。

実際の動作とまとめ

これを実際に動作させたのが次の動画です。ラズパイのサーバーが必要ではありますが、これを応用すれば初心者でも簡単にセンサーの値をGoogle Homeで読み上げて貰ったりすることができます。

ラズパイ置いてあるんだからラズパイでセンサー値読めばいいのではと思うかもしれませんが、小型・USB給電で色々な部屋に設置しやすいのがNefry BTのメリット。

これでNefryで作った水やり機の動作報告もグーグルホームにしゃべらすことが出来る…!

以上!