簡単!IFTTT連携でNefry BTのスイッチを押すとGoogle Homeが喋る仕組みを作る
こんばんは、ゆきです!
グーグルホームは今のところ、「OK、Google」以外の外部のトリガーをキーとして喋らせるには、一工夫必要です。
今回は割と簡単に実現できる、Nefry BT+IFTTT+Raspberry Pi(Node.js)+Google Homeという組み合わせで、トリガーをもとにGoogle Homeを喋らせる仕組みを紹介します。これを利用すると、室温をGoogle Homeが定期的に話す仕組み何かも簡単に実現できます。
目次
今回実現する仕組み
今回は次のような感じで実装していきます。
動作フロー
- Nefry BTでボタンを押すと、IFTTTのWebhookでトリガーを起動
- IFTTTのWebhookでRaspberry PiのGoogle Home Notifierをキック
- Google Home NotifierがGoogle Homeにコマンドを投げる
- Google Homeが喋る
必要なもの
今回必要なものは次の通り。
Google Home | 1個 |
Raspberry Pi 3 B | 1個 |
Nefry BT | 1個 |
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の設定で使用するため、メモしておきましょう。
このNgrokのURLですが、サービスを起動するたびに変わるため、それに応じてIFTTT側の設定を修正する必要があります。ラズパイを起動しっ放しにしないといけない点だけ注意が必要です。
ちなみにngrokの有料サービス(60$/年)に加入すればアドレスを固定することができます。
IFTTTのアップレット(イベント)の作成
IFTTTの設定は次の通りとします。IFTTTの初期設定や基本的な使い方は次の記事を参照ください。
(1)IFTTTの「New Applet」を選択します。IFのサービスの選択では、「Webhooks」を選択。
(2)「Receive a web request」を選択します。ここでは設定は特にないため、次にTHATのアクションを指定します。
(3)THATのアクションは同様にWebhooksを選択し、「Make a web request」を選択します。
(4)設定項目は次の通り設定します。
URL | https://xxxxxxxx.ngrok.io/google-home-notifier ※xxxxxxxxの所はご自身の環境に合わせて変更ください |
Method | POST |
Content Type | application/x-www-form-urlencoded |
Body | text="{{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で作った水やり機の動作報告もグーグルホームにしゃべらすことが出来る…!
以上!
ディスカッション
コメント一覧
まだ、コメントがありません